Home | History | Annotate | Download | only in X86
      1 ; RUN: llc -mcpu=corei7 -mtriple=x86_64-linux < %s | FileCheck %s
      2 ; RUN: llc -mcpu=corei7 -mtriple=x86_64-linux -precise-rotation-cost < %s | FileCheck %s -check-prefix=CHECK-PROFILE
      3 
      4 define void @foo() {
      5 ; Test a nested loop case when profile data is not available.
      6 ;
      7 ; CHECK-LABEL: foo:
      8 ; CHECK: callq b
      9 ; CHECK: callq c
     10 ; CHECK: callq d
     11 ; CHECK: callq e
     12 ; CHECK: callq f
     13 ; CHECK: callq g
     14 ; CHECK: callq h
     15 
     16 entry:
     17   br label %header
     18 
     19 header:
     20   call void @b()
     21   %call = call zeroext i1 @a()
     22   br i1 %call, label %if.then, label %if.else, !prof !2
     23 
     24 if.then:
     25   br label %header2
     26 
     27 header2:
     28   call void @c()
     29   %call1 = call zeroext i1 @a()
     30   br i1 %call1, label %if.then2, label %if.else2, !prof !2
     31 
     32 if.then2:
     33   call void @d()
     34   br label %if.end2
     35 
     36 if.else2:
     37   call void @e()
     38   br label %if.end2
     39 
     40 if.end2:
     41   call void @f()
     42   %call2 = call zeroext i1 @a()
     43   br i1 %call2, label %header2, label %if.end
     44 
     45 if.else:
     46   call void @g()
     47   br label %if.end
     48 
     49 if.end:
     50   call void @h()
     51   %call3 = call zeroext i1 @a()
     52   br i1 %call3, label %header, label %end
     53 
     54 end:
     55   ret void
     56 }
     57 
     58 define void @bar() !prof !1 {
     59 ; Test a nested loop case when profile data is available.
     60 ;
     61 ; CHECK-PROFILE-LABEL: bar:
     62 ; CHECK-PROFILE: callq e
     63 ; CHECK-PROFILE: callq f
     64 ; CHECK-PROFILE: callq c
     65 ; CHECK-PROFILE: callq d
     66 ; CHECK-PROFILE: callq h
     67 ; CHECK-PROFILE: callq b
     68 ; CHECK-PROFILE: callq g
     69 
     70 entry:
     71   br label %header
     72 
     73 header:
     74   call void @b()
     75   %call = call zeroext i1 @a()
     76   br i1 %call, label %if.then, label %if.else, !prof !2
     77 
     78 if.then:
     79   br label %header2
     80 
     81 header2:
     82   call void @c()
     83   %call1 = call zeroext i1 @a()
     84   br i1 %call1, label %if.then2, label %if.else2, !prof !2
     85 
     86 if.then2:
     87   call void @d()
     88   br label %if.end2
     89 
     90 if.else2:
     91   call void @e()
     92   br label %if.end2
     93 
     94 if.end2:
     95   call void @f()
     96   %call2 = call zeroext i1 @a()
     97   br i1 %call2, label %header2, label %if.end
     98 
     99 if.else:
    100   call void @g()
    101   br label %if.end
    102 
    103 if.end:
    104   call void @h()
    105   %call3 = call zeroext i1 @a()
    106   br i1 %call3, label %header, label %end
    107 
    108 end:
    109   ret void
    110 }
    111 
    112 declare zeroext i1 @a()
    113 declare void @b()
    114 declare void @c()
    115 declare void @d()
    116 declare void @e()
    117 declare void @f()
    118 declare void @g()
    119 declare void @h()
    120 
    121 !1 = !{!"function_entry_count", i64 1}
    122 !2 = !{!"branch_weights", i32 16, i32 16}
    123