summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorFedor Sergeev <fedor.sergeev@oracle.com>2017-11-22 20:59:53 +0000
committerFedor Sergeev <fedor.sergeev@oracle.com>2017-11-22 20:59:53 +0000
commit61975b49fe9c999f5f6632817667217306116af4 (patch)
tree74523cc9688ca441a91874fe04746ffec2409e3a /llvm/lib/Analysis
parent942fa1631f7f3aea7de4e4aec22219f9b7faeeff (diff)
downloadbcm5719-llvm-61975b49fe9c999f5f6632817667217306116af4.tar.gz
bcm5719-llvm-61975b49fe9c999f5f6632817667217306116af4.zip
IR printing improvement for loop passes
Summary: Loop-pass printing is somewhat deficient since it does not provide the context around the loop (e.g. preheader). This context information becomes pretty essential when analyzing transformations that move stuff out of the loop. Extending printLoop to cover preheader and exit blocks (if any). Reviewers: sanjoy, silvas, weimingz Reviewed By: sanjoy Subscribers: apilipenko, skatkov, llvm-commits Differential Revision: https://reviews.llvm.org/D40246 llvm-svn: 318878
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/LoopInfo.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/LoopInfo.cpp b/llvm/lib/Analysis/LoopInfo.cpp
index c6019f267a3..9a223df9394 100644
--- a/llvm/lib/Analysis/LoopInfo.cpp
+++ b/llvm/lib/Analysis/LoopInfo.cpp
@@ -732,11 +732,30 @@ PreservedAnalyses LoopPrinterPass::run(Function &F,
void llvm::printLoop(Loop &L, raw_ostream &OS, const std::string &Banner) {
OS << Banner;
+
+ auto *PreHeader = L.getLoopPreheader();
+ if (PreHeader) {
+ OS << "\n; Preheader:";
+ PreHeader->print(OS);
+ OS << "\n; Loop:";
+ }
+
for (auto *Block : L.blocks())
if (Block)
Block->print(OS);
else
OS << "Printing <null> block";
+
+ SmallVector<BasicBlock *, 8> ExitBlocks;
+ L.getExitBlocks(ExitBlocks);
+ if (!ExitBlocks.empty()) {
+ OS << "\n; Exit blocks";
+ for (auto *Block : ExitBlocks)
+ if (Block)
+ Block->print(OS);
+ else
+ OS << "Printing <null> block";
+ }
}
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud