Home | History | Annotate | Download | only in X86
      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