xref: /llvm-project/llvm/test/Transforms/SimpleLoopUnswitch/pipeline.ll (revision 5f5cf6029852d703e850c5c16b386284d048dd91)
1; RUN: opt < %s -S -passes="default<O1>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
2; RUN: opt < %s -S -passes="default<O2>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
3; RUN: opt < %s -S -passes="default<O3>" | FileCheck %s -check-prefixes=NONTRIVIAL,CHECK
4; RUN: opt < %s -S -passes="default<Os>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
5; RUN: opt < %s -S -passes="default<Oz>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
6
7declare i32 @a()
8declare i32 @b()
9declare i32 @c()
10
11; TRIVIAL-NOT: loop_begin.us:
12; NONTRIVIAL: loop_begin.us:
13
14define i32 @test1(ptr %ptr, i1 %cond1, i1 %cond2) {
15entry:
16  br label %loop_begin
17
18loop_begin:
19  br i1 %cond1, label %loop_a, label %loop_b
20
21loop_a:
22  call i32 @a()
23  br label %latch
24
25loop_b:
26  br i1 %cond2, label %loop_b_a, label %loop_b_b
27
28loop_b_a:
29  call i32 @b()
30  br label %latch
31
32loop_b_b:
33  call i32 @c()
34  br label %latch
35
36latch:
37  %v = load i1, ptr %ptr
38  br i1 %v, label %loop_begin, label %loop_exit
39
40loop_exit:
41  ret i32 0
42}
43
44; CHECK-NOT: loop2_begin.us:
45define i32 @test2(ptr %ptr, i1 %cond1, i1 %cond2) optsize {
46entry:
47  br label %loop2_begin
48
49loop2_begin:
50  br i1 %cond1, label %loop2_a, label %loop2_b
51
52loop2_a:
53  call i32 @a()
54  br label %latch2
55
56loop2_b:
57  br i1 %cond2, label %loop2_b_a, label %loop2_b_b
58
59loop2_b_a:
60  call i32 @b()
61  br label %latch2
62
63loop2_b_b:
64  call i32 @c()
65  br label %latch2
66
67latch2:
68  %v = load i1, ptr %ptr
69  br i1 %v, label %loop2_begin, label %loop2_exit
70
71loop2_exit:
72  ret i32 0
73}
74