| ; RUN: opt < %s -S -passes="default<O1>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK |
| ; RUN: opt < %s -S -passes="default<O2>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK |
| ; RUN: opt < %s -S -passes="default<O3>" | FileCheck %s -check-prefixes=NONTRIVIAL,CHECK |
| ; RUN: opt < %s -S -passes="default<O3>" -enable-npm-O3-nontrivial-unswitch=0 | FileCheck %s -check-prefixes=TRIVIAL,CHECK |
| ; RUN: opt < %s -S -passes="default<Os>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK |
| ; RUN: opt < %s -S -passes="default<Oz>" | FileCheck %s -check-prefixes=TRIVIAL,CHECK |
| |
| declare i32 @a() |
| declare i32 @b() |
| declare i32 @c() |
| |
| ; TRIVIAL-NOT: loop_begin.us: |
| ; NONTRIVIAL: loop_begin.us: |
| |
| define i32 @test1(i1* %ptr, i1 %cond1, i1 %cond2) { |
| entry: |
| br label %loop_begin |
| |
| loop_begin: |
| br i1 %cond1, label %loop_a, label %loop_b |
| |
| loop_a: |
| call i32 @a() |
| br label %latch |
| |
| loop_b: |
| br i1 %cond2, label %loop_b_a, label %loop_b_b |
| |
| loop_b_a: |
| call i32 @b() |
| br label %latch |
| |
| loop_b_b: |
| call i32 @c() |
| br label %latch |
| |
| latch: |
| %v = load i1, i1* %ptr |
| br i1 %v, label %loop_begin, label %loop_exit |
| |
| loop_exit: |
| ret i32 0 |
| } |
| |
| ; CHECK-NOT: loop2_begin.us: |
| define i32 @test2(i1* %ptr, i1 %cond1, i1 %cond2) optsize { |
| entry: |
| br label %loop2_begin |
| |
| loop2_begin: |
| br i1 %cond1, label %loop2_a, label %loop2_b |
| |
| loop2_a: |
| call i32 @a() |
| br label %latch2 |
| |
| loop2_b: |
| br i1 %cond2, label %loop2_b_a, label %loop2_b_b |
| |
| loop2_b_a: |
| call i32 @b() |
| br label %latch2 |
| |
| loop2_b_b: |
| call i32 @c() |
| br label %latch2 |
| |
| latch2: |
| %v = load i1, i1* %ptr |
| br i1 %v, label %loop2_begin, label %loop2_exit |
| |
| loop2_exit: |
| ret i32 0 |
| } |