diff options
author | Dan Gohman <gohman@apple.com> | 2010-08-13 20:03:15 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-08-13 20:03:15 +0000 |
commit | ef0bedaba7c1466af4275e720a73f3421b9b5631 (patch) | |
tree | ee38c302e32d7a00c867f7c9e36a2be312f545d6 /include/llvm/Analysis/ScalarEvolutionExpressions.h | |
parent | 6daf2a254b89bc039f9d58c38e2158a1896d4695 (diff) |
Implement hasComputableLoopEvolution for Add, Mul, and Trunc operators,
since they can support trivial implementations. This avoids potentially
expensive traversals of the operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111031 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Analysis/ScalarEvolutionExpressions.h')
-rw-r--r-- | include/llvm/Analysis/ScalarEvolutionExpressions.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/include/llvm/Analysis/ScalarEvolutionExpressions.h b/include/llvm/Analysis/ScalarEvolutionExpressions.h index 3e846e1be8..dca6272732 100644 --- a/include/llvm/Analysis/ScalarEvolutionExpressions.h +++ b/include/llvm/Analysis/ScalarEvolutionExpressions.h @@ -126,6 +126,12 @@ namespace llvm { public: virtual void print(raw_ostream &OS) const; + virtual bool hasComputableLoopEvolution(const Loop *QL) const { + // Not computable. A truncate of an addrec is always folded into + // the addrec. + return false; + } + /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const SCEVTruncateExpr *S) { return true; } static inline bool classof(const SCEV *S) { @@ -294,6 +300,12 @@ namespace llvm { } public: + virtual bool hasComputableLoopEvolution(const Loop *QL) const { + // Not computable. An add of an addrec is always folded into the addrec + // if the other operands are loop-variant or loop-computable. + return false; + } + virtual const char *getOperationStr() const { return " + "; } virtual const Type *getType() const { @@ -322,6 +334,12 @@ namespace llvm { } public: + virtual bool hasComputableLoopEvolution(const Loop *QL) const { + // Not computable. A mul of an addrec is always folded into the addrec + // if the other operands are loop-variant or loop-computable. + return false; + } + virtual const char *getOperationStr() const { return " * "; } /// Methods for support type inquiry through isa, cast, and dyn_cast: |