xref: /llvm-project/llvm/test/Other/loop-pass-printer.ll (revision 38386b4318e3ba54f450480ad49b237a9c357af4)
1; This test checks -print-after/before on loop passes
2; Besides of the loop itself it should be dumping loop pre-header and exits.
3;
4; RUN: opt < %s 2>&1 -disable-output \
5; RUN: 	   -passes='loop(loop-deletion)' -print-before=loop-deletion \
6; RUN:	   | FileCheck %s -check-prefix=DEL
7; RUN: opt < %s 2>&1 -disable-output \
8; RUN: 	   -passes='require<opt-remark-emit>,loop(loop-unroll-full)' -print-after=loop-unroll-full -filter-print-funcs=bar \
9; RUN:	   | FileCheck %s -check-prefix=BAR
10; RUN: opt < %s 2>&1 -disable-output \
11; RUN: 	   -passes='require<opt-remark-emit>,loop(loop-unroll-full)' -print-after=loop-unroll-full -filter-print-funcs=foo -print-module-scope \
12; RUN:	   | FileCheck %s -check-prefix=FOO-MODULE
13
14; DEL:	    IR Dump Before {{Delete dead loops|LoopDeletionPass}}
15; DEL: 	    ; Preheader:
16; DEL-NEXT:  %idx = alloca i32, align 4
17; DEL:      ; Loop:
18; DEL-NEXT:  loop:
19; DEL:	     cont:
20; DEL:	    ; Exit blocks
21; DEL:	     done:
22; DEL:	    IR Dump Before {{Delete dead loops|LoopDeletionPass}}
23; DEL: 	    ; Preheader:
24; DEL-NEXT:  br label %loop
25; DEL:      ; Loop:
26; DEL-NEXT:  loop:
27; DEL:	    ; Exit blocks
28; DEL:	     end:
29
30; BAR:	    IR Dump After {{Unroll|LoopFullUnrollPass}}
31; BAR: 	    ; Preheader:
32; BAR-NEXT:  br label %loop
33; BAR:      ; Loop:
34; BAR-NEXT:  loop:
35; BAR:	    ; Exit blocks
36; BAR:	     end:
37
38; FOO-MODULE: IR Dump After {{Unroll|LoopFullUnrollPass}} {{.*}}loop
39; FOO-MODULE-NEXT: ModuleID =
40; FOO-MODULE: define void @foo
41; FOO-MODULE: define void @bar
42
43define void @foo(){
44  %idx = alloca i32, align 4
45  store i32 0, ptr %idx, align 4
46  br label %loop
47
48loop:
49  %1 = load i32, ptr %idx, align 4
50  %2 = icmp slt i32 %1, 10
51  br i1 %2, label %cont, label %done
52
53cont:
54  %3 = load i32, ptr %idx, align 4
55  %4 = add nsw i32 %3, 1
56  store i32 %4, ptr %idx, align 4
57  br label %loop
58
59done:
60  ret void
61}
62
63define void @bar(){
64  br label %loop
65loop:
66  br i1 1, label %loop, label %end
67end:
68  ret void
69}
70