summaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm14/lib/Analysis/OverflowInstAnalysis.cpp
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-03-05 13:38:11 +0300
committerrobot-piglet <[email protected]>2025-03-05 13:49:53 +0300
commit9eed360f02de773a5ed2de5d2a3e81fc7f06acfa (patch)
tree744a4054e64eb443073c7c6ad36b29cedcf9c2e6 /contrib/libs/llvm14/lib/Analysis/OverflowInstAnalysis.cpp
parentc141a5c40bda2eed1a68b0626ffdae5fd19359a6 (diff)
Intermediate changes
commit_hash:2ec2671384dd8e604d41bc5c52c2f7858e4afea6
Diffstat (limited to 'contrib/libs/llvm14/lib/Analysis/OverflowInstAnalysis.cpp')
-rw-r--r--contrib/libs/llvm14/lib/Analysis/OverflowInstAnalysis.cpp72
1 files changed, 0 insertions, 72 deletions
diff --git a/contrib/libs/llvm14/lib/Analysis/OverflowInstAnalysis.cpp b/contrib/libs/llvm14/lib/Analysis/OverflowInstAnalysis.cpp
deleted file mode 100644
index 87a85e6a736..00000000000
--- a/contrib/libs/llvm14/lib/Analysis/OverflowInstAnalysis.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-//==-- OverflowInstAnalysis.cpp - Utils to fold overflow insts ----*- C++ -*-=//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file holds routines to help analyse overflow instructions
-// and fold them into constants or other overflow instructions
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Analysis/OverflowInstAnalysis.h"
-#include "llvm/IR/Constants.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/PatternMatch.h"
-
-using namespace llvm;
-using namespace llvm::PatternMatch;
-
-bool llvm::isCheckForZeroAndMulWithOverflow(Value *Op0, Value *Op1, bool IsAnd,
- Use *&Y) {
- ICmpInst::Predicate Pred;
- Value *X, *NotOp1;
- int XIdx;
- IntrinsicInst *II;
-
- if (!match(Op0, m_ICmp(Pred, m_Value(X), m_Zero())))
- return false;
-
- /// %Agg = call { i4, i1 } @llvm.[us]mul.with.overflow.i4(i4 %X, i4 %???)
- /// %V = extractvalue { i4, i1 } %Agg, 1
- auto matchMulOverflowCheck = [X, &II, &XIdx](Value *V) {
- auto *Extract = dyn_cast<ExtractValueInst>(V);
- // We should only be extracting the overflow bit.
- if (!Extract || !Extract->getIndices().equals(1))
- return false;
-
- II = dyn_cast<IntrinsicInst>(Extract->getAggregateOperand());
- if (!II ||
- !match(II, m_CombineOr(m_Intrinsic<Intrinsic::umul_with_overflow>(),
- m_Intrinsic<Intrinsic::smul_with_overflow>())))
- return false;
-
- if (II->getArgOperand(0) == X)
- XIdx = 0;
- else if (II->getArgOperand(1) == X)
- XIdx = 1;
- else
- return false;
- return true;
- };
-
- bool Matched =
- (IsAnd && Pred == ICmpInst::Predicate::ICMP_NE &&
- matchMulOverflowCheck(Op1)) ||
- (!IsAnd && Pred == ICmpInst::Predicate::ICMP_EQ &&
- match(Op1, m_Not(m_Value(NotOp1))) && matchMulOverflowCheck(NotOp1));
-
- if (!Matched)
- return false;
-
- Y = &II->getArgOperandUse(!XIdx);
- return true;
-}
-
-bool llvm::isCheckForZeroAndMulWithOverflow(Value *Op0, Value *Op1,
- bool IsAnd) {
- Use *Y;
- return isCheckForZeroAndMulWithOverflow(Op0, Op1, IsAnd, Y);
-}