diff options
author | Florian Hahn <flo@fhahn.com> | 2019-09-12 20:03:32 +0000 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2019-09-12 20:03:32 +0000 |
commit | a31ee3762485d0b5382c456b2320105bbb8eb1e2 (patch) | |
tree | 37bcb061a667fdaab107cadce3c56c5b14c745a8 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 00223827a952f66e7426c9881a2a4229e59bb019 (diff) | |
download | bcm5719-llvm-a31ee3762485d0b5382c456b2320105bbb8eb1e2.tar.gz bcm5719-llvm-a31ee3762485d0b5382c456b2320105bbb8eb1e2.zip |
[SCEV] Support SCEVUMinExpr in getRangeRef.
This patch adds support for SCEVUMinExpr to getRangeRef,
similar to the support for SCEVUMaxExpr.
Reviewers: sanjoy.google, efriedma, reames, nikic
Reviewed By: sanjoy.google
Differential Revision: https://reviews.llvm.org/D67177
llvm-svn: 371768
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 04d4105cb2e..3817b1142d3 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -5596,6 +5596,14 @@ ScalarEvolution::getRangeRef(const SCEV *S, ConservativeResult.intersectWith(X, RangeType)); } + if (const SCEVUMinExpr *UMin = dyn_cast<SCEVUMinExpr>(S)) { + ConstantRange X = getRangeRef(UMin->getOperand(0), SignHint); + for (unsigned i = 1, e = UMin->getNumOperands(); i != e; ++i) + X = X.umin(getRangeRef(UMin->getOperand(i), SignHint)); + return setRange(UMin, SignHint, + ConservativeResult.intersectWith(X, RangeType)); + } + if (const SCEVUDivExpr *UDiv = dyn_cast<SCEVUDivExpr>(S)) { ConstantRange X = getRangeRef(UDiv->getLHS(), SignHint); ConstantRange Y = getRangeRef(UDiv->getRHS(), SignHint); |