diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-11-12 07:35:05 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-11-12 07:35:05 +0000 |
commit | 85a9f430e9e8c39457ca5970807e59e40b865894 (patch) | |
tree | 836e0e0e0e98e12d60cae52be24f940e21114cc7 /llvm/lib/Analysis/IVUsers.cpp | |
parent | 4c0e8274e99255598d561a85ba406a0638ba33ee (diff) | |
download | bcm5719-llvm-85a9f430e9e8c39457ca5970807e59e40b865894.tar.gz bcm5719-llvm-85a9f430e9e8c39457ca5970807e59e40b865894.zip |
- Teach LSR to avoid changing cmp iv stride if it will create an immediate that
cannot be folded into target cmp instruction.
- Avoid a phase ordering issue where early cmp optimization would prevent the
later count-to-zero optimization.
- Add missing checks which could cause LSR to reuse stride that does not have
users.
- Fix a bug in count-to-zero optimization code which failed to find the pre-inc
iv's phi node.
- Remove, tighten, loosen some incorrect checks disable valid transformations.
- Quite a bit of code clean up.
llvm-svn: 86969
Diffstat (limited to 'llvm/lib/Analysis/IVUsers.cpp')
-rw-r--r-- | llvm/lib/Analysis/IVUsers.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/IVUsers.cpp b/llvm/lib/Analysis/IVUsers.cpp index 20b69f2a7ca..cf52320d1f2 100644 --- a/llvm/lib/Analysis/IVUsers.cpp +++ b/llvm/lib/Analysis/IVUsers.cpp @@ -267,6 +267,18 @@ bool IVUsers::AddUsersIfInteresting(Instruction *I) { return true; } +void IVUsers::AddUser(const SCEV *Stride, const SCEV *Offset, + Instruction *User, Value *Operand) { + IVUsersOfOneStride *StrideUses = IVUsesByStride[Stride]; + if (!StrideUses) { // First occurrence of this stride? + StrideOrder.push_back(Stride); + StrideUses = new IVUsersOfOneStride(Stride); + IVUses.push_back(StrideUses); + IVUsesByStride[Stride] = StrideUses; + } + IVUsesByStride[Stride]->addUser(Offset, User, Operand); +} + IVUsers::IVUsers() : LoopPass(&ID) { } |