15
15
define i32* @test_global_addr () {
16
16
; CHECK-LABEL: test_global_addr:
17
17
; CHECK: adrp [[PAGE:x[0-9]+]], _var32@PAGE
18
- ; CHECK: add x0, [[PAGE]], _var32@PAGEOFF
18
+ ; CHECK-OPT: add x0, [[PAGE]], _var32@PAGEOFF
19
+ ; CHECK-FAST: add [[TMP:x[0-9]+]], [[PAGE]], _var32@PAGEOFF
20
+ ; CHECK-FAST: and x0, [[TMP]], #0xffffffff
19
21
ret i32* @var32
20
22
}
21
23
@@ -156,7 +158,9 @@ define i32 @test_unsafe_negative_unscaled_add() {
156
158
define i8* @test_got_addr () {
157
159
; CHECK-LABEL: test_got_addr:
158
160
; CHECK: adrp x[[PAGE:[0-9]+]], _var_got@GOTPAGE
159
- ; CHECK: ldr w0, [x[[PAGE]], _var_got@GOTPAGEOFF]
161
+ ; CHECK-OPT: ldr w0, [x[[PAGE]], _var_got@GOTPAGEOFF]
162
+ ; CHECK-FAST: ldr w[[TMP:[0-9]+]], [x[[PAGE]], _var_got@GOTPAGEOFF]
163
+ ; CHECK-FAST: and x0, x[[TMP]], #0xffffffff
160
164
ret i8* @var_got
161
165
}
162
166
@@ -229,7 +233,9 @@ declare i8* @llvm.frameaddress(i32)
229
233
230
234
define i8* @test_frameaddr () {
231
235
; CHECK-LABEL: test_frameaddr:
232
- ; CHECK: ldr {{w0|x0}}, [x29]
236
+ ; CHECK-OPT: ldr x0, [x29]
237
+ ; CHECK-FAST: ldr [[TMP:x[0-9]+]], [x29]
238
+ ; CHECK-FAST: and x0, [[TMP]], #0xffffffff
233
239
%val = call i8* @llvm.frameaddress (i32 1 )
234
240
ret i8* %val
235
241
}
@@ -238,15 +244,18 @@ declare i8* @llvm.returnaddress(i32)
238
244
239
245
define i8* @test_toplevel_returnaddr () {
240
246
; CHECK-LABEL: test_toplevel_returnaddr:
241
- ; CHECK: mov x0, x30
247
+ ; CHECK-OPT: mov x0, x30
248
+ ; CHECK-FAST: and x0, x30, #0xffffffff
242
249
%val = call i8* @llvm.returnaddress (i32 0 )
243
250
ret i8* %val
244
251
}
245
252
246
253
define i8* @test_deep_returnaddr () {
247
254
; CHECK-LABEL: test_deep_returnaddr:
248
255
; CHECK: ldr x[[FRAME_REC:[0-9]+]], [x29]
249
- ; CHECK: ldr x0, [x[[FRAME_REC]], #8]
256
+ ; CHECK-OPT: ldr x0, [x[[FRAME_REC]], #8]
257
+ ; CHECK-FAST: ldr [[TMP:x[0-9]+]], [x[[FRAME_REC]], #8]
258
+ ; CHECK-FAST: and x0, [[TMP]], #0xffffffff
250
259
%val = call i8* @llvm.returnaddress (i32 1 )
251
260
ret i8* %val
252
261
}
@@ -651,6 +660,7 @@ define void @test_struct_hi(i32 %hi) nounwind {
651
660
; CHECK-LABEL: test_struct_hi:
652
661
; CHECK: mov w[[IN:[0-9]+]], w0
653
662
; CHECK: bl _get_int
663
+ ; CHECK-FAST-NEXT: mov w0, w0
654
664
; CHECK-NEXT: bfi x0, x[[IN]], #32, #32
655
665
; CHECK-NEXT: bl _take_pair
656
666
%val.64 = call i64 @get_int ()
@@ -691,9 +701,14 @@ false:
691
701
692
702
define { [18 x i8 ] }* @test_gep_nonpow2 ({ [18 x i8 ] }* %a0 , i32 %a1 ) {
693
703
; CHECK-LABEL: test_gep_nonpow2:
694
- ; CHECK: mov w[[SIZE:[0-9]+]], #18
695
- ; CHECK-NEXT: smaddl x0, w1, w[[SIZE]], x0
696
- ; CHECK-NEXT: ret
704
+ ; CHECK-OPT: mov w[[SIZE:[0-9]+]], #18
705
+ ; CHECK-OPT-NEXT: smaddl x0, w1, w[[SIZE]], x0
706
+ ; CHECK-OPT-NEXT: ret
707
+
708
+ ; CHECK-FAST: mov w[[SIZE:[0-9]+]], #18
709
+ ; CHECK-FAST-NEXT: smaddl [[TMP:x[0-9]+]], w1, w[[SIZE]], x0
710
+ ; CHECK-FAST-NEXT: and x0, [[TMP]], #0xffffffff
711
+ ; CHECK-FAST-NEXT: ret
697
712
%tmp0 = getelementptr inbounds { [18 x i8 ] }, { [18 x i8 ] }* %a0 , i32 %a1
698
713
ret { [18 x i8 ] }* %tmp0
699
714
}
0 commit comments