aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Analysis/IVUsers.h5
-rw-r--r--lib/Analysis/IVUsers.cpp23
2 files changed, 28 insertions, 0 deletions
diff --git a/include/llvm/Analysis/IVUsers.h b/include/llvm/Analysis/IVUsers.h
index 50f7d45e19..b69bda8b77 100644
--- a/include/llvm/Analysis/IVUsers.h
+++ b/include/llvm/Analysis/IVUsers.h
@@ -165,6 +165,11 @@ public:
void removeUser(IVStrideUse *User) {
Users.erase(User);
}
+
+ void print(raw_ostream &OS) const;
+
+ /// dump - This method is used for debugging.
+ void dump() const;
};
class IVUsers : public LoopPass {
diff --git a/lib/Analysis/IVUsers.cpp b/lib/Analysis/IVUsers.cpp
index 38611ccb62..9c472ae73b 100644
--- a/lib/Analysis/IVUsers.cpp
+++ b/lib/Analysis/IVUsers.cpp
@@ -386,3 +386,26 @@ void IVStrideUse::deleted() {
Parent->Users.erase(this);
// this now dangles!
}
+
+void IVUsersOfOneStride::print(raw_ostream &OS) const {
+ OS << "IV Users of one stride:\n";
+
+ if (Stride)
+ OS << " Stride: " << *Stride << '\n';
+
+ OS << " Users:\n";
+
+ unsigned Count = 1;
+
+ for (ilist<IVStrideUse>::const_iterator
+ I = Users.begin(), E = Users.end(); I != E; ++I) {
+ const IVStrideUse &SU = *I;
+ OS << " " << Count++ << '\n';
+ OS << " Offset: " << *SU.getOffset() << '\n';
+ OS << " Instr: " << *SU << '\n';
+ }
+}
+
+void IVUsersOfOneStride::dump() const {
+ print(dbgs());
+}