[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / SimpleLoopUnswitch / pipeline.ll
blob7fd3b1d28d6da872f13d4c2375edb82efa1cda93
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<O3>" -enable-npm-O3-nontrivial-unswitch=0 | FileCheck %s -check-prefixes=TRIVIAL,CHECK
5 ; RUN: opt < %s -S -passes="default<Os>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
6 ; RUN: opt < %s -S -passes="default<Oz>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK
8 declare i32 @a()
9 declare i32 @b()
10 declare i32 @c()
12 ; TRIVIAL-NOT: loop_begin.us:
13 ; NONTRIVIAL: loop_begin.us:
15 define i32 @test1(i1* %ptr, i1 %cond1, i1 %cond2) {
16 entry:
17   br label %loop_begin
19 loop_begin:
20   br i1 %cond1, label %loop_a, label %loop_b
22 loop_a:
23   call i32 @a()
24   br label %latch
26 loop_b:
27   br i1 %cond2, label %loop_b_a, label %loop_b_b
29 loop_b_a:
30   call i32 @b()
31   br label %latch
33 loop_b_b:
34   call i32 @c()
35   br label %latch
37 latch:
38   %v = load i1, i1* %ptr
39   br i1 %v, label %loop_begin, label %loop_exit
41 loop_exit:
42   ret i32 0
45 ; CHECK-NOT: loop2_begin.us:
46 define i32 @test2(i1* %ptr, i1 %cond1, i1 %cond2) optsize {
47 entry:
48   br label %loop2_begin
50 loop2_begin:
51   br i1 %cond1, label %loop2_a, label %loop2_b
53 loop2_a:
54   call i32 @a()
55   br label %latch2
57 loop2_b:
58   br i1 %cond2, label %loop2_b_a, label %loop2_b_b
60 loop2_b_a:
61   call i32 @b()
62   br label %latch2
64 loop2_b_b:
65   call i32 @c()
66   br label %latch2
68 latch2:
69   %v = load i1, i1* %ptr
70   br i1 %v, label %loop2_begin, label %loop2_exit
72 loop2_exit:
73   ret i32 0