| ; This test documents how the IR dumped for loop passes differs with -print-loop-func-scope |
| ; and -print-module-scope |
| ; - Without -print-loop-func-scope, dumps only the loop, with 3 sections- preheader, |
| ; loop, and exit blocks |
| ; - With -print-loop-func-scope, dumps only the function which contains the loop |
| ; - With -print-module-scope, dumps the entire module containing the loop, and disregards |
| ; the -print-loop-func-scope flag. |
| |
| ; RUN: opt < %s 2>&1 -disable-output \ |
| ; RUN: -passes=licm -print-after=licm \ |
| ; RUN: | FileCheck %s -check-prefix=VANILLA |
| ; RUN: opt < %s 2>&1 -disable-output \ |
| ; RUN: -passes=licm -print-after=licm -print-loop-func-scope \ |
| ; RUN: | FileCheck %s -check-prefix=LOOPFUNC |
| ; RUN: opt < %s 2>&1 -disable-output \ |
| ; RUN: -passes=licm -print-after=licm -print-module-scope \ |
| ; RUN: | FileCheck %s -check-prefix=MODULE |
| ; RUN: opt < %s 2>&1 -disable-output \ |
| ; RUN: -passes=licm -print-after=licm -print-module-scope -print-loop-func-scope\ |
| ; RUN: | FileCheck %s -check-prefix=MODULEWITHLOOP |
| |
| ; VANILLA: IR Dump After LICMPass |
| ; VANILLA-NOT: define void @foo |
| ; VANILLA: Preheader: |
| ; VANILLA: Loop: |
| ; VANILLA: Exit blocks |
| |
| ; LOOPFUNC: IR Dump After LICMPass |
| ; LOOPFUNC: (loop: |
| ; LOOPFUNC: define void @foo |
| ; LOOPFUNC-NOT: Preheader: |
| ; LOOPFUNC-NOT: Loop: |
| ; LOOPFUNC-NOT: Exit blocks |
| |
| ; MODULE: IR Dump After LICMPass |
| ; MODULE: ModuleID = |
| ; MODULE: define void @foo |
| ; MODULE-NOT: Preheader: |
| ; MODULE-NOT: Loop: |
| ; MODULE-NOT: Exit blocks |
| ; MODULE: define void @bar |
| ; MODULE: declare void @baz(i32) |
| |
| ; MODULEWITHLOOP: IR Dump After LICMPass |
| ; MODULEWITHLOOP: ModuleID = |
| ; MODULEWITHLOOP: define void @foo |
| ; MODULEWITHLOOP-NOT: Preheader: |
| ; MODULEWITHLOOP-NOT: Loop: |
| ; MODULEWITHLOOP-NOT: Exit blocks |
| ; MODULEWITHLOOP: define void @bar |
| ; MODULEWITHLOOP: declare void @baz(i32) |
| |
| define void @foo(i32 %n) { |
| entry: |
| br label %loop_cond |
| |
| loop_cond: |
| %i = phi i32 [ 0, %entry ], [ %i_next, %loop_body ] |
| %cmp = icmp slt i32 %i, %n |
| br i1 %cmp, label %loop_body, label %loop_end |
| |
| loop_body: |
| call void @baz(i32 %i) |
| %i_next = add i32 %i, 1 |
| br label %loop_cond |
| |
| loop_end: |
| ret void |
| } |
| |
| define void @bar() { |
| ret void |
| } |
| |
| declare void @baz(i32) |