diff options
author | Florian Hahn <flo@fhahn.com> | 2021-09-21 16:54:47 +0100 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2021-09-21 16:54:47 +0100 |
commit | 5131037ea96f9e2bc863557ba6d6dc63f46a94ab (patch) | |
tree | 096bc75a71e16597c83a180fe92fecca7633b3d2 /llvm/lib/Analysis/ValueTracking.cpp | |
parent | 5fb3ae525ffa7fc9e09e0c10de02ecc003c3adae (diff) | |
download | llvm-5131037ea96f9e2bc863557ba6d6dc63f46a94ab.zip llvm-5131037ea96f9e2bc863557ba6d6dc63f46a94ab.tar.gz llvm-5131037ea96f9e2bc863557ba6d6dc63f46a94ab.tar.bz2 |
[ValueTracking,VectorCombine] Allow passing DT to computeConstantRange.
isValidAssumeForContext can provide better results with access to the
dominator tree in some cases. This patch adjusts computeConstantRange to
allow passing through a dominator tree.
The use VectorCombine is updated to pass through the DT to enable
additional scalarization.
Note that similar APIs like computeKnownBits already accept optional dominator
tree arguments.
Reviewed By: lebedev.ri
Differential Revision: https://reviews.llvm.org/D110175
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 57869e3..d381ee2 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -7031,6 +7031,7 @@ static void setLimitsForSelectPattern(const SelectInst &SI, APInt &Lower, ConstantRange llvm::computeConstantRange(const Value *V, bool UseInstrInfo, AssumptionCache *AC, const Instruction *CtxI, + const DominatorTree *DT, unsigned Depth) { assert(V->getType()->isIntOrIntVectorTy() && "Expected integer instruction"); @@ -7069,7 +7070,7 @@ ConstantRange llvm::computeConstantRange(const Value *V, bool UseInstrInfo, assert(I->getCalledFunction()->getIntrinsicID() == Intrinsic::assume && "must be an assume intrinsic"); - if (!isValidAssumeForContext(I, CtxI, nullptr)) + if (!isValidAssumeForContext(I, CtxI, DT)) continue; Value *Arg = I->getArgOperand(0); ICmpInst *Cmp = dyn_cast<ICmpInst>(Arg); @@ -7077,7 +7078,7 @@ ConstantRange llvm::computeConstantRange(const Value *V, bool UseInstrInfo, if (!Cmp || Cmp->getOperand(0) != V) continue; ConstantRange RHS = computeConstantRange(Cmp->getOperand(1), UseInstrInfo, - AC, I, Depth + 1); + AC, I, DT, Depth + 1); CR = CR.intersectWith( ConstantRange::makeAllowedICmpRegion(Cmp->getPredicate(), RHS)); } |