1111 ret i32 0
1212 }
1313
14- define void @bar(i32 %a) # 0 {
15- ret void
16- }
17-
1814 attributes # 0 = { noinline noredzone }
1915...
2016---
21- # This test ensures that we do not outline ADRP / ADD pair when it's referencing
22- # a GOT entry.
17+ # Check that main function body doesn't split ADRP pair
2318#
2419# CHECK-LABEL: name: adrp_add
2520# CHECK-DAG: bb.0:
26- # CHECK: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
27- # CHECK: $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0
28-
29- # CHECK-DAG: bb.1
30- # CHECK: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
31- # CHECK: $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0
32-
33- # CHECK-DAG: bb.2
34- # CHECK: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
35- # CHECK: $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0
21+ # CHECK: BL @OUTLINED_FUNCTION_[[F0:[0-9]+]]
22+ # CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F2:[0-9]+]]
23+ # CHECK-NEXT: $lr = ORRXri $xzr, 1
3624name : adrp_add
3725tracksRegLiveness : true
3826body : |
@@ -74,21 +62,13 @@ body: |
7462 RET undef $lr
7563 ...
7664---
77- # This test ensures that we do not outline ADRP / LDR pair when it's referencing
78- # a GOT entry.
65+ # Check that main function body doesn't split ADRP pair
7966#
8067# CHECK-LABEL: name: adrp_ldr
8168# CHECK-DAG: bb.0:
82- # CHECK: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
83- # CHECK: $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x
84-
85- # CHECK-DAG: bb.1
86- # CHECK: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
87- # CHECK: $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x
88-
89- # CHECK-DAG: bb.2
90- # CHECK: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
91- # CHECK: $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x
69+ # CHECK: BL @OUTLINED_FUNCTION_[[F0]]
70+ # CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F1:[0-9]+]]
71+ # CHECK-NEXT: $lr = ORRXri $xzr, 1
9272name : adrp_ldr
9373tracksRegLiveness : true
9474body : |
@@ -127,4 +107,27 @@ body: |
127107 $lr = ORRXri $xzr, 1
128108 bb.3:
129109 liveins: $lr
130- RET undef $lr
110+ RET undef $lr
111+
112+ # Check that no outlined function split the ADRP pair apart
113+ #
114+ # CHECK: OUTLINED_FUNCTION_[[F0]]
115+ # CHECK-DAG: bb.0
116+ # CHECK: $w12 = ORRWri $wzr, 1
117+ # CHECK-NEXT: $w12 = ORRWri $wzr, 1
118+ # CHECK-NEXT: $w12 = ORRWri $wzr, 1
119+ # CHECK-NEXT: $w12 = ORRWri $wzr, 1
120+ # CHECK-NEXT: $w12 = ORRWri $wzr, 1
121+ # CHECK-NEXT: RET $lr
122+
123+ # CHECK: OUTLINED_FUNCTION_[[F1]]
124+ # CHECK-DAG: bb.0
125+ # CHECK: $w12 = ORRWri $wzr, 1
126+ # CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
127+ # CHECK-NEXT: $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x
128+
129+ # CHECK: name: OUTLINED_FUNCTION_[[F2]]
130+ # CHECK-DAG: bb.0
131+ # CHECK: $w12 = ORRWri $wzr, 1
132+ # CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x
133+ # CHECK-NEXT: $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0
0 commit comments