summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-08-13 20:03:15 +0000
committerDan Gohman <gohman@apple.com>2010-08-13 20:03:15 +0000
commitef0bedaba7c1466af4275e720a73f3421b9b5631 (patch)
treeee38c302e32d7a00c867f7c9e36a2be312f545d6 /include
parent6daf2a254b89bc039f9d58c38e2158a1896d4695 (diff)
downloadllvm-ef0bedaba7c1466af4275e720a73f3421b9b5631.tar.gz
llvm-ef0bedaba7c1466af4275e720a73f3421b9b5631.tar.bz2
llvm-ef0bedaba7c1466af4275e720a73f3421b9b5631.tar.xz
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')
-rw-r--r--include/llvm/Analysis/ScalarEvolutionExpressions.h18
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: