1 ; RUN: llc -mcpu=corei7 -mtriple=x86_64-linux < %s | FileCheck %s -check-prefix=CHECK 2 ; RUN: llc -mcpu=corei7 -mtriple=x86_64-linux -outline-optional-branches < %s | FileCheck %s -check-prefix=CHECK-OUTLINE 3 4 define void @foo(i32 %t1, i32 %t2, i32 %t3) { 5 ; Test that we lift the call to 'c' up to immediately follow the call to 'b' 6 ; when we disable the cfg conflict check. 7 ; 8 ; CHECK-LABEL: foo: 9 ; CHECK: callq a 10 ; CHECK: callq a 11 ; CHECK: callq a 12 ; CHECK: callq a 13 ; CHECK: callq b 14 ; CHECK: callq c 15 ; CHECK: callq d 16 ; CHECK: callq e 17 ; CHECK: callq f 18 ; 19 ; CHECK-OUTLINE-LABEL: foo: 20 ; CHECK-OUTLINE: callq b 21 ; CHECK-OUTLINE: callq c 22 ; CHECK-OUTLINE: callq d 23 ; CHECK-OUTLINE: callq e 24 ; CHECK-OUTLINE: callq f 25 ; CHECK-OUTLINE: callq a 26 ; CHECK-OUTLINE: callq a 27 ; CHECK-OUTLINE: callq a 28 ; CHECK-OUTLINE: callq a 29 30 entry: 31 %cmp = icmp eq i32 %t1, 0 32 br i1 %cmp, label %if.then, label %if.end 33 34 if.then: 35 call void @a() 36 call void @a() 37 call void @a() 38 call void @a() 39 br label %if.end 40 41 if.end: 42 call void @b() 43 br label %hotbranch 44 45 hotbranch: 46 %cmp2 = icmp eq i32 %t2, 0 47 br i1 %cmp2, label %if.then2, label %if.end2, !prof !1 48 49 if.then2: 50 call void @c() 51 br label %if.end2 52 53 if.end2: 54 call void @d() 55 br label %shortbranch 56 57 shortbranch: 58 %cmp3 = icmp eq i32 %t3, 0 59 br i1 %cmp3, label %if.then3, label %if.end3 60 61 if.then3: 62 call void @e() 63 br label %if.end3 64 65 if.end3: 66 call void @f() 67 ret void 68 } 69 70 declare void @a() 71 declare void @b() 72 declare void @c() 73 declare void @d() 74 declare void @e() 75 declare void @f() 76 77 !1 = !{!"branch_weights", i32 64, i32 4} 78