]> granicus.if.org Git - llvm/commitdiff
IR printing improvement for loop passes - handle -print-module-scope
authorFedor Sergeev <fedor.sergeev@azul.com>
Fri, 1 Dec 2017 18:33:58 +0000 (18:33 +0000)
committerFedor Sergeev <fedor.sergeev@azul.com>
Fri, 1 Dec 2017 18:33:58 +0000 (18:33 +0000)
Summary:
Adding support for -print-module-scope similar to how it is
being done for function passes. This option causes loop-pass printer
to emit a whole-module IR instead of just a loop itself.

Reviewers: sanjoy, silvas, weimingz

Reviewed By: sanjoy

Subscribers: apilipenko, skatkov, llvm-commits

Differential Revision: https://reviews.llvm.org/D40247

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319566 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/LoopInfo.cpp
test/Other/loop-pass-printer.ll

index dce66fd3d9604f8193dab5b1e630be22b102d73a..9e54d60779a0081cee64a50a607c0642634b2803 100644 (file)
@@ -731,6 +731,18 @@ PreservedAnalyses LoopPrinterPass::run(Function &F,
 }
 
 void llvm::printLoop(Loop &L, raw_ostream &OS, const std::string &Banner) {
+
+  if (forcePrintModuleIR()) {
+    // handling -print-module-scope
+    OS << Banner << " (loop: ";
+    L.getHeader()->printAsOperand(OS, false);
+    OS << ")\n";
+
+    // printing whole module
+    OS << *L.getHeader()->getModule();
+    return;
+  }
+
   OS << Banner;
 
   auto *PreHeader = L.getLoopPreheader();
index e5ad8bdb1f94127aa3db34d0137882f58e76786b..bedcf164acea283fe01827f9f9b6798769c25a4f 100644 (file)
@@ -7,7 +7,9 @@
 ; RUN: opt < %s 2>&1 -disable-output \
 ; RUN:            -loop-unroll -print-after=loop-unroll -filter-print-funcs=bar \
 ; RUN:    | FileCheck %s -check-prefix=BAR
-;
+; RUN: opt < %s 2>&1 -disable-output \
+; RUN:            -loop-unroll -print-after=loop-unroll -filter-print-funcs=foo -print-module-scope \
+; RUN:    | FileCheck %s -check-prefix=FOO-MODULE
 
 ; DEL:     IR Dump Before
 ; DEL-SAME: dead loops
 ; BAR-NEXT:  loop:
 ; BAR:     ; Exit blocks
 ; BAR:      end:
-; BAR-NOT: IR Dump Before
+; BAR-NOT: IR Dump
 ; BAR-NOT:  ; Loop
 
+; FOO-MODULE: IR Dump After
+; FOO-MODULE-SAME: Unroll
+; FOO-MODULE-SAME: loop: %loop
+; FOO-MODULE-NEXT: ModuleID =
+; FOO-MODULE: define void @foo
+; FOO-MODULE: define void @bar
+; FOO-MODULE-NOT: IR Dump
+
 define void @foo(){
   %idx = alloca i32, align 4
   store i32 0, i32* %idx, align 4