summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-05-01 04:51:05 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-05-01 04:51:05 +0000
commitf2f00fb11ac2d2708f727f11269c20a3cba75fe5 (patch)
treeac92dcb5ce5f9deb587a35478d2ce03a7d2aa8d1 /llvm/lib/Analysis
parent8a367d404f195c51415b71d8f30a06a542b0e2b9 (diff)
downloadbcm5719-llvm-f2f00fb11ac2d2708f727f11269c20a3cba75fe5.tar.gz
bcm5719-llvm-f2f00fb11ac2d2708f727f11269c20a3cba75fe5.zip
[SCEV] When printing via -analysis, dump loop disposition
There are currently some bugs in tree around SCEV caching an incorrect loop disposition. Printing out loop dispositions will let us write whitebox tests as those are fixed. The dispositions are printed as a list in "inside out" order, i.e. innermost loop first. llvm-svn: 268177
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index cfb9f5e24b2..99c6500e5fc 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -9565,6 +9565,17 @@ static void PrintLoopInfo(raw_ostream &OS, ScalarEvolution *SE,
OS << "\n";
}
+static StringRef loopDispositionToStr(ScalarEvolution::LoopDisposition LD) {
+ switch (LD) {
+ case ScalarEvolution::LoopVariant:
+ return "Variant";
+ case ScalarEvolution::LoopInvariant:
+ return "Invariant";
+ case ScalarEvolution::LoopComputable:
+ return "Computable";
+ }
+}
+
void ScalarEvolution::print(raw_ostream &OS) const {
// ScalarEvolution's implementation of the print method is to print
// out SCEV values of all instructions that are interesting. Doing
@@ -9612,6 +9623,20 @@ void ScalarEvolution::print(raw_ostream &OS) const {
} else {
OS << *ExitValue;
}
+
+ bool First = true;
+ for (auto *Iter = L; Iter; Iter = Iter->getParentLoop()) {
+ if (First) {
+ OS << "\t\t" "LoopDispositions: [ ";
+ First = false;
+ } else {
+ OS << ", ";
+ }
+
+ OS << loopDispositionToStr(SE.getLoopDisposition(SV, Iter));
+ }
+
+ OS << " ]";
}
OS << "\n";
OpenPOWER on IntegriCloud