| ; 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 | 
 | } |