[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / code_placement_loop_rotation.ll
blob96fbc81389999ae6ab94c18f3f5fb6077d27a2e0
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
4 define void @foo() {
5 ; Test that not all edges in the loop chain are fall through without profile
6 ; data.
8 ; CHECK-LABEL: foo:
9 ; CHECK: callq e
10 ; CHECK: callq f
11 ; CHECK: callq g
12 ; CHECK: callq h
14 entry:
15   br label %header
17 header:
18   call void @e()
19   %call = call zeroext i1 @a()
20   br i1 %call, label %if.then, label %if.else, !prof !2
22 if.then:
23   call void @f()
24   br label %if.end
26 if.else:
27   call void @g()
28   br label %if.end
30 if.end:
31   call void @h()
32   %call2 = call zeroext i1 @a()
33   br i1 %call2, label %header, label %end
35 end:
36   ret void
39 define void @bar() !prof !1 {
40 ; Test that all edges in the loop chain are fall through with profile data.
42 ; CHECK-PROFILE-LABEL: bar:
43 ; CHECK-PROFILE: callq g
44 ; CHECK-PROFILE: callq h
45 ; CHECK-PROFILE: callq e
46 ; CHECK-PROFILE: callq f
48 entry:
49   br label %header
51 header:
52   call void @e()
53   %call = call zeroext i1 @a()
54   br i1 %call, label %if.then, label %if.else, !prof !2
56 if.then:
57   call void @f()
58   br label %if.end
60 if.else:
61   call void @g()
62   br label %if.end
64 if.end:
65   call void @h()
66   %call2 = call zeroext i1 @a()
67   br i1 %call2, label %header, label %end
69 end:
70   ret void
73 declare zeroext i1 @a()
74 declare void @e()
75 declare void @f()
76 declare void @g()
77 declare void @h()
79 !1 = !{!"function_entry_count", i64 1}
80 !2 = !{!"branch_weights", i32 16, i32 16}