[llvm] af12a3f - [ValueTracking] Remove ComputeMultiple() function
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 17 01:28:37 PST 2022
Author: Nikita Popov
Date: 2022-01-17T10:28:31+01:00
New Revision: af12a3f4a95889bd1c1af054eda4e1d270f16ad8
URL: https://github.com/llvm/llvm-project/commit/af12a3f4a95889bd1c1af054eda4e1d270f16ad8
DIFF: https://github.com/llvm/llvm-project/commit/af12a3f4a95889bd1c1af054eda4e1d270f16ad8.diff
LOG: [ValueTracking] Remove ComputeMultiple() function
This function is no longer used since
499f1ca79f232faae09b1793a994d1a22ba403cd.
Added:
Modified:
llvm/include/llvm/Analysis/ValueTracking.h
llvm/lib/Analysis/ValueTracking.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/ValueTracking.h b/llvm/include/llvm/Analysis/ValueTracking.h
index f2988b4e94144..5b39b02443399 100644
--- a/llvm/include/llvm/Analysis/ValueTracking.h
+++ b/llvm/include/llvm/Analysis/ValueTracking.h
@@ -211,15 +211,6 @@ constexpr unsigned MaxAnalysisRecursionDepth = 6;
const Instruction *CxtI = nullptr,
const DominatorTree *DT = nullptr);
- /// This function computes the integer multiple of Base that equals V. If
- /// successful, it returns true and returns the multiple in Multiple. If
- /// unsuccessful, it returns false. Also, if V can be simplified to an
- /// integer, then the simplified V is returned in Val. Look through sext only
- /// if LookThroughSExt=true.
- bool ComputeMultiple(Value *V, unsigned Base, Value *&Multiple,
- bool LookThroughSExt = false,
- unsigned Depth = 0);
-
/// Map a call instruction to an intrinsic ID. Libcalls which have equivalent
/// intrinsics are treated as-if they were intrinsics.
Intrinsic::ID getIntrinsicForCallSite(const CallBase &CB,
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 758980187180b..942dbe043ab3f 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -3248,125 +3248,6 @@ static unsigned ComputeNumSignBitsImpl(const Value *V,
return std::max(FirstAnswer, Known.countMinSignBits());
}
-/// This function computes the integer multiple of Base that equals V.
-/// If successful, it returns true and returns the multiple in
-/// Multiple. If unsuccessful, it returns false. It looks
-/// through SExt instructions only if LookThroughSExt is true.
-bool llvm::ComputeMultiple(Value *V, unsigned Base, Value *&Multiple,
- bool LookThroughSExt, unsigned Depth) {
- assert(V && "No Value?");
- assert(Depth <= MaxAnalysisRecursionDepth && "Limit Search Depth");
- assert(V->getType()->isIntegerTy() && "Not integer or pointer type!");
-
- Type *T = V->getType();
-
- ConstantInt *CI = dyn_cast<ConstantInt>(V);
-
- if (Base == 0)
- return false;
-
- if (Base == 1) {
- Multiple = V;
- return true;
- }
-
- ConstantExpr *CO = dyn_cast<ConstantExpr>(V);
- Constant *BaseVal = ConstantInt::get(T, Base);
- if (CO && CO == BaseVal) {
- // Multiple is 1.
- Multiple = ConstantInt::get(T, 1);
- return true;
- }
-
- if (CI && CI->getZExtValue() % Base == 0) {
- Multiple = ConstantInt::get(T, CI->getZExtValue() / Base);
- return true;
- }
-
- if (Depth == MaxAnalysisRecursionDepth) return false;
-
- Operator *I = dyn_cast<Operator>(V);
- if (!I) return false;
-
- switch (I->getOpcode()) {
- default: break;
- case Instruction::SExt:
- if (!LookThroughSExt) return false;
- // otherwise fall through to ZExt
- LLVM_FALLTHROUGH;
- case Instruction::ZExt:
- return ComputeMultiple(I->getOperand(0), Base, Multiple,
- LookThroughSExt, Depth+1);
- case Instruction::Shl:
- case Instruction::Mul: {
- Value *Op0 = I->getOperand(0);
- Value *Op1 = I->getOperand(1);
-
- if (I->getOpcode() == Instruction::Shl) {
- ConstantInt *Op1CI = dyn_cast<ConstantInt>(Op1);
- if (!Op1CI) return false;
- // Turn Op0 << Op1 into Op0 * 2^Op1
- APInt Op1Int = Op1CI->getValue();
- uint64_t BitToSet = Op1Int.getLimitedValue(Op1Int.getBitWidth() - 1);
- APInt API(Op1Int.getBitWidth(), 0);
- API.setBit(BitToSet);
- Op1 = ConstantInt::get(V->getContext(), API);
- }
-
- Value *Mul0 = nullptr;
- if (ComputeMultiple(Op0, Base, Mul0, LookThroughSExt, Depth+1)) {
- if (Constant *Op1C = dyn_cast<Constant>(Op1))
- if (Constant *MulC = dyn_cast<Constant>(Mul0)) {
- if (Op1C->getType()->getPrimitiveSizeInBits().getFixedSize() <
- MulC->getType()->getPrimitiveSizeInBits().getFixedSize())
- Op1C = ConstantExpr::getZExt(Op1C, MulC->getType());
- if (Op1C->getType()->getPrimitiveSizeInBits().getFixedSize() >
- MulC->getType()->getPrimitiveSizeInBits().getFixedSize())
- MulC = ConstantExpr::getZExt(MulC, Op1C->getType());
-
- // V == Base * (Mul0 * Op1), so return (Mul0 * Op1)
- Multiple = ConstantExpr::getMul(MulC, Op1C);
- return true;
- }
-
- if (ConstantInt *Mul0CI = dyn_cast<ConstantInt>(Mul0))
- if (Mul0CI->getValue() == 1) {
- // V == Base * Op1, so return Op1
- Multiple = Op1;
- return true;
- }
- }
-
- Value *Mul1 = nullptr;
- if (ComputeMultiple(Op1, Base, Mul1, LookThroughSExt, Depth+1)) {
- if (Constant *Op0C = dyn_cast<Constant>(Op0))
- if (Constant *MulC = dyn_cast<Constant>(Mul1)) {
- if (Op0C->getType()->getPrimitiveSizeInBits().getFixedSize() <
- MulC->getType()->getPrimitiveSizeInBits().getFixedSize())
- Op0C = ConstantExpr::getZExt(Op0C, MulC->getType());
- if (Op0C->getType()->getPrimitiveSizeInBits().getFixedSize() >
- MulC->getType()->getPrimitiveSizeInBits().getFixedSize())
- MulC = ConstantExpr::getZExt(MulC, Op0C->getType());
-
- // V == Base * (Mul1 * Op0), so return (Mul1 * Op0)
- Multiple = ConstantExpr::getMul(MulC, Op0C);
- return true;
- }
-
- if (ConstantInt *Mul1CI = dyn_cast<ConstantInt>(Mul1))
- if (Mul1CI->getValue() == 1) {
- // V == Base * Op0, so return Op0
- Multiple = Op0;
- return true;
- }
- }
- }
- }
-
- // We could not determine if V is a multiple of Base.
- return false;
-}
-
Intrinsic::ID llvm::getIntrinsicForCallSite(const CallBase &CB,
const TargetLibraryInfo *TLI) {
const Function *F = CB.getCalledFunction();
More information about the llvm-commits
mailing list