From: Dan Gohman Date: Mon, 18 May 2009 15:22:39 +0000 (+0000) Subject: Add an isOne() utility function to ScalarEvolution, similar to isZero() X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=70a1fe704831f9b842be0b2a2af5f7082b0e540c;p=oota-llvm.git Add an isOne() utility function to ScalarEvolution, similar to isZero() and similar to ConstantInt's isOne(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72003 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/ScalarEvolution.h b/include/llvm/Analysis/ScalarEvolution.h index 76e23b1169b..a5534e89c4e 100644 --- a/include/llvm/Analysis/ScalarEvolution.h +++ b/include/llvm/Analysis/ScalarEvolution.h @@ -77,6 +77,10 @@ namespace llvm { /// bool isZero() const; + /// isOne - Return true if the expression is a constant one. + /// + bool isOne() const; + /// replaceSymbolicValuesWithConcrete - If this SCEV internally references /// the symbolic value "Sym", construct and return a new SCEV that produces /// the same value, but which uses the concrete value Conc instead of the diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 77a80706314..4b99a869ff5 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -127,6 +127,11 @@ bool SCEV::isZero() const { return false; } +bool SCEV::isOne() const { + if (const SCEVConstant *SC = dyn_cast(this)) + return SC->getValue()->isOne(); + return false; +} SCEVCouldNotCompute::SCEVCouldNotCompute() : SCEV(scCouldNotCompute) {} SCEVCouldNotCompute::~SCEVCouldNotCompute() {} @@ -3392,7 +3397,7 @@ HowManyLessThans(const SCEV *LHS, const SCEV *RHS, const SCEVConstant *CStep = dyn_cast(Step); if (!CStep || CStep->isZero()) return UnknownValue; - if (CStep->getValue()->getValue() == 1) { + if (CStep->isOne()) { // With unit stride, the iteration never steps past the limit value. } else if (CStep->getValue()->getValue().isStrictlyPositive()) { if (const SCEVConstant *CLimit = dyn_cast(RHS)) {