summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/IVUsers.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2012-01-06 21:41:55 +0000
committerAndrew Trick <atrick@apple.com>2012-01-06 21:41:55 +0000
commit9a5b242d3ca460a755599f867eb1d8903e8ee782 (patch)
treec8237d8792bc26c027a8d15b26f520dfad0c4116 /llvm/lib/Analysis/IVUsers.cpp
parent690511137cc5b809c39bd00823326e7802868002 (diff)
downloadbcm5719-llvm-9a5b242d3ca460a755599f867eb1d8903e8ee782.tar.gz
bcm5719-llvm-9a5b242d3ca460a755599f867eb1d8903e8ee782.zip
Put all IVUsers in the processed set. Allow querying IVUsers with isIVUserOrOperand.
llvm-svn: 147686
Diffstat (limited to 'llvm/lib/Analysis/IVUsers.cpp')
-rw-r--r--llvm/lib/Analysis/IVUsers.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/IVUsers.cpp b/llvm/lib/Analysis/IVUsers.cpp
index d0ca8920ab9..cad22f8f1a6 100644
--- a/llvm/lib/Analysis/IVUsers.cpp
+++ b/llvm/lib/Analysis/IVUsers.cpp
@@ -83,6 +83,11 @@ static bool isInteresting(const SCEV *S, const Instruction *I, const Loop *L,
/// reducible SCEV, recursively add its users to the IVUsesByStride set and
/// return true. Otherwise, return false.
bool IVUsers::AddUsersIfInteresting(Instruction *I) {
+ // Add this IV user to the Processed set before returning false to ensure that
+ // all IV users are members of the set. See IVUsers::isIVUserOrOperand.
+ if (!Processed.insert(I))
+ return true; // Instruction already handled.
+
if (!SE->isSCEVable(I->getType()))
return false; // Void and FP expressions cannot be reduced.
@@ -93,9 +98,6 @@ bool IVUsers::AddUsersIfInteresting(Instruction *I) {
if (Width > 64 || (TD && !TD->isLegalInteger(Width)))
return false;
- if (!Processed.insert(I))
- return true; // Instruction already handled.
-
// Get the symbolic expression for this instruction.
const SCEV *ISE = SE->getSCEV(I);
@@ -268,6 +270,7 @@ void IVStrideUse::transformToPostInc(const Loop *L) {
void IVStrideUse::deleted() {
// Remove this user from the list.
+ Parent->Processed.erase(this->getUser());
Parent->IVUses.erase(this);
// this now dangles!
}
OpenPOWER on IntegriCloud