diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-05-01 04:51:05 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-05-01 04:51:05 +0000 |
commit | f2f00fb11ac2d2708f727f11269c20a3cba75fe5 (patch) | |
tree | ac92dcb5ce5f9deb587a35478d2ce03a7d2aa8d1 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 8a367d404f195c51415b71d8f30a06a542b0e2b9 (diff) | |
download | llvm-f2f00fb11ac2d2708f727f11269c20a3cba75fe5.zip llvm-f2f00fb11ac2d2708f727f11269c20a3cba75fe5.tar.gz llvm-f2f00fb11ac2d2708f727f11269c20a3cba75fe5.tar.bz2 |
[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/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index cfb9f5e2..99c6500 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"; |