aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-04-19 21:48:58 +0000
committerDan Gohman <gohman@apple.com>2010-04-19 21:48:58 +0000
commitc056454ecfe66f7c646fedef594f4ed48a9f3bf0 (patch)
tree28e6d0cdf9d74993b1ee12acf2f1a032d0b8eb17 /include/llvm
parent22e401f5d4d863e753bc8e5655bac481602d22e6 (diff)
downloadexternal_llvm-c056454ecfe66f7c646fedef594f4ed48a9f3bf0.zip
external_llvm-c056454ecfe66f7c646fedef594f4ed48a9f3bf0.tar.gz
external_llvm-c056454ecfe66f7c646fedef594f4ed48a9f3bf0.tar.bz2
Remove the Expr member from IVUsers. Instead of remembering the expression,
just ask ScalarEvolution for it on demand. This helps IVUsers be more robust in the case of expressions changing underneath it. This fixes PR6862. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101819 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r--include/llvm/Analysis/IVUsers.h32
1 files changed, 9 insertions, 23 deletions
diff --git a/include/llvm/Analysis/IVUsers.h b/include/llvm/Analysis/IVUsers.h
index a887c83..578e6ab 100644
--- a/include/llvm/Analysis/IVUsers.h
+++ b/include/llvm/Analysis/IVUsers.h
@@ -36,9 +36,8 @@ class IVUsers;
class IVStrideUse : public CallbackVH, public ilist_node<IVStrideUse> {
friend class IVUsers;
public:
- IVStrideUse(IVUsers *P, const SCEV *E,
- Instruction* U, Value *O)
- : CallbackVH(U), Parent(P), Expr(E), OperandValToReplace(O) {
+ IVStrideUse(IVUsers *P, Instruction* U, Value *O)
+ : CallbackVH(U), Parent(P), OperandValToReplace(O) {
}
/// getUser - Return the user instruction for this use.
@@ -51,20 +50,6 @@ public:
setValPtr(NewUser);
}
- /// getParent - Return a pointer to the IVUsers that owns
- /// this IVStrideUse.
- IVUsers *getParent() const { return Parent; }
-
- /// getExpr - Return the expression for the use.
- const SCEV *getExpr() const { return Expr; }
-
- /// setExpr - Assign a new expression to this use.
- void setExpr(const SCEV *Val) {
- Expr = Val;
- }
-
- const SCEV *getStride(const Loop *L) const;
-
/// getOperandValToReplace - Return the Value of the operand in the user
/// instruction that this IVStrideUse is representing.
Value *getOperandValToReplace() const {
@@ -91,9 +76,6 @@ private:
/// Parent - a pointer to the IVUsers that owns this IVStrideUse.
IVUsers *Parent;
- /// Expr - The expression for this use.
- const SCEV *Expr;
-
/// OperandValToReplace - The Value of the operand in the user instruction
/// that this IVStrideUse is representing.
WeakVH OperandValToReplace;
@@ -161,12 +143,16 @@ public:
/// return true. Otherwise, return false.
bool AddUsersIfInteresting(Instruction *I);
- IVStrideUse &AddUser(const SCEV *Expr,
- Instruction *User, Value *Operand);
+ IVStrideUse &AddUser(Instruction *User, Value *Operand);
/// getReplacementExpr - Return a SCEV expression which computes the
/// value of the OperandValToReplace of the given IVStrideUse.
- const SCEV *getReplacementExpr(const IVStrideUse &U) const;
+ const SCEV *getReplacementExpr(const IVStrideUse &IU) const;
+
+ /// getExpr - Return the expression for the use.
+ const SCEV *getExpr(const IVStrideUse &IU) const;
+
+ const SCEV *getStride(const IVStrideUse &IU, const Loop *L) const;
typedef ilist<IVStrideUse>::iterator iterator;
typedef ilist<IVStrideUse>::const_iterator const_iterator;