xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/ldst-unsignedimm.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs -o - %s -mtriple=aarch64-none-linux-gnu | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=-fp-armv8 | FileCheck --check-prefix=CHECK-NOFP %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@var_8bit = global i8 0
5*9880d681SAndroid Build Coastguard Worker@var_16bit = global i16 0
6*9880d681SAndroid Build Coastguard Worker@var_32bit = global i32 0
7*9880d681SAndroid Build Coastguard Worker@var_64bit = global i64 0
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker@var_float = global float 0.0
10*9880d681SAndroid Build Coastguard Worker@var_double = global double 0.0
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine void @ldst_8bit() {
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldst_8bit:
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; No architectural support for loads to 16-bit or 8-bit since we
16*9880d681SAndroid Build Coastguard Worker; promote i8 during lowering.
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; match a sign-extending load 8-bit -> 32-bit
19*9880d681SAndroid Build Coastguard Worker   %val8_sext32 = load volatile i8, i8* @var_8bit
20*9880d681SAndroid Build Coastguard Worker   %val32_signed = sext i8 %val8_sext32 to i32
21*9880d681SAndroid Build Coastguard Worker   store volatile i32 %val32_signed, i32* @var_32bit
22*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, var_8bit
23*9880d681SAndroid Build Coastguard Worker; CHECK: ldrsb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_8bit]
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; match a zero-extending load volatile 8-bit -> 32-bit
26*9880d681SAndroid Build Coastguard Worker  %val8_zext32 = load volatile i8, i8* @var_8bit
27*9880d681SAndroid Build Coastguard Worker  %val32_unsigned = zext i8 %val8_zext32 to i32
28*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val32_unsigned, i32* @var_32bit
29*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_8bit]
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; match an any-extending load volatile 8-bit -> 32-bit
32*9880d681SAndroid Build Coastguard Worker  %val8_anyext = load volatile i8, i8* @var_8bit
33*9880d681SAndroid Build Coastguard Worker  %newval8 = add i8 %val8_anyext, 1
34*9880d681SAndroid Build Coastguard Worker  store volatile i8 %newval8, i8* @var_8bit
35*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_8bit]
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; match a sign-extending load volatile 8-bit -> 64-bit
38*9880d681SAndroid Build Coastguard Worker  %val8_sext64 = load volatile i8, i8* @var_8bit
39*9880d681SAndroid Build Coastguard Worker  %val64_signed = sext i8 %val8_sext64 to i64
40*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val64_signed, i64* @var_64bit
41*9880d681SAndroid Build Coastguard Worker; CHECK: ldrsb {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_8bit]
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker; match a zero-extending load volatile 8-bit -> 64-bit.
44*9880d681SAndroid Build Coastguard Worker; This uses the fact that ldrb w0, [x0] will zero out the high 32-bits
45*9880d681SAndroid Build Coastguard Worker; of x0 so it's identical to load volatileing to 32-bits.
46*9880d681SAndroid Build Coastguard Worker  %val8_zext64 = load volatile i8, i8* @var_8bit
47*9880d681SAndroid Build Coastguard Worker  %val64_unsigned = zext i8 %val8_zext64 to i64
48*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val64_unsigned, i64* @var_64bit
49*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_8bit]
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; truncating store volatile 32-bits to 8-bits
52*9880d681SAndroid Build Coastguard Worker  %val32 = load volatile i32, i32* @var_32bit
53*9880d681SAndroid Build Coastguard Worker  %val8_trunc32 = trunc i32 %val32 to i8
54*9880d681SAndroid Build Coastguard Worker  store volatile i8 %val8_trunc32, i8* @var_8bit
55*9880d681SAndroid Build Coastguard Worker; CHECK: strb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_8bit]
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; truncating store volatile 64-bits to 8-bits
58*9880d681SAndroid Build Coastguard Worker  %val64 = load volatile i64, i64* @var_64bit
59*9880d681SAndroid Build Coastguard Worker  %val8_trunc64 = trunc i64 %val64 to i8
60*9880d681SAndroid Build Coastguard Worker  store volatile i8 %val8_trunc64, i8* @var_8bit
61*9880d681SAndroid Build Coastguard Worker; CHECK: strb {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_8bit]
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker   ret void
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine void @ldst_16bit() {
67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldst_16bit:
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; No architectural support for load volatiles to 16-bit promote i16 during
70*9880d681SAndroid Build Coastguard Worker; lowering.
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker; match a sign-extending load volatile 16-bit -> 32-bit
73*9880d681SAndroid Build Coastguard Worker  %val16_sext32 = load volatile i16, i16* @var_16bit
74*9880d681SAndroid Build Coastguard Worker  %val32_signed = sext i16 %val16_sext32 to i32
75*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val32_signed, i32* @var_32bit
76*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, var_16bit
77*9880d681SAndroid Build Coastguard Worker; CHECK: ldrsh {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_16bit]
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; match a zero-extending load volatile 16-bit -> 32-bit
80*9880d681SAndroid Build Coastguard Worker  %val16_zext32 = load volatile i16, i16* @var_16bit
81*9880d681SAndroid Build Coastguard Worker  %val32_unsigned = zext i16 %val16_zext32 to i32
82*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val32_unsigned, i32* @var_32bit
83*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_16bit]
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; match an any-extending load volatile 16-bit -> 32-bit
86*9880d681SAndroid Build Coastguard Worker  %val16_anyext = load volatile i16, i16* @var_16bit
87*9880d681SAndroid Build Coastguard Worker  %newval16 = add i16 %val16_anyext, 1
88*9880d681SAndroid Build Coastguard Worker  store volatile i16 %newval16, i16* @var_16bit
89*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_16bit]
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker; match a sign-extending load volatile 16-bit -> 64-bit
92*9880d681SAndroid Build Coastguard Worker  %val16_sext64 = load volatile i16, i16* @var_16bit
93*9880d681SAndroid Build Coastguard Worker  %val64_signed = sext i16 %val16_sext64 to i64
94*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val64_signed, i64* @var_64bit
95*9880d681SAndroid Build Coastguard Worker; CHECK: ldrsh {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_16bit]
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; match a zero-extending load volatile 16-bit -> 64-bit.
98*9880d681SAndroid Build Coastguard Worker; This uses the fact that ldrb w0, [x0] will zero out the high 32-bits
99*9880d681SAndroid Build Coastguard Worker; of x0 so it's identical to load volatileing to 32-bits.
100*9880d681SAndroid Build Coastguard Worker  %val16_zext64 = load volatile i16, i16* @var_16bit
101*9880d681SAndroid Build Coastguard Worker  %val64_unsigned = zext i16 %val16_zext64 to i64
102*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val64_unsigned, i64* @var_64bit
103*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_16bit]
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; truncating store volatile 32-bits to 16-bits
106*9880d681SAndroid Build Coastguard Worker  %val32 = load volatile i32, i32* @var_32bit
107*9880d681SAndroid Build Coastguard Worker  %val16_trunc32 = trunc i32 %val32 to i16
108*9880d681SAndroid Build Coastguard Worker  store volatile i16 %val16_trunc32, i16* @var_16bit
109*9880d681SAndroid Build Coastguard Worker; CHECK: strh {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_16bit]
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; truncating store volatile 64-bits to 16-bits
112*9880d681SAndroid Build Coastguard Worker  %val64 = load volatile i64, i64* @var_64bit
113*9880d681SAndroid Build Coastguard Worker  %val16_trunc64 = trunc i64 %val64 to i16
114*9880d681SAndroid Build Coastguard Worker  store volatile i16 %val16_trunc64, i16* @var_16bit
115*9880d681SAndroid Build Coastguard Worker; CHECK: strh {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_16bit]
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerdefine void @ldst_32bit() {
121*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldst_32bit:
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; Straight 32-bit load/store
124*9880d681SAndroid Build Coastguard Worker  %val32_noext = load volatile i32, i32* @var_32bit
125*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val32_noext, i32* @var_32bit
126*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, var_32bit
127*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_32bit]
128*9880d681SAndroid Build Coastguard Worker; CHECK: str {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_32bit]
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker; Zero-extension to 64-bits
131*9880d681SAndroid Build Coastguard Worker  %val32_zext = load volatile i32, i32* @var_32bit
132*9880d681SAndroid Build Coastguard Worker  %val64_unsigned = zext i32 %val32_zext to i64
133*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val64_unsigned, i64* @var_64bit
134*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_32bit]
135*9880d681SAndroid Build Coastguard Worker; CHECK: str {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_64bit]
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; Sign-extension to 64-bits
138*9880d681SAndroid Build Coastguard Worker  %val32_sext = load volatile i32, i32* @var_32bit
139*9880d681SAndroid Build Coastguard Worker  %val64_signed = sext i32 %val32_sext to i64
140*9880d681SAndroid Build Coastguard Worker  store volatile i64 %val64_signed, i64* @var_64bit
141*9880d681SAndroid Build Coastguard Worker; CHECK: ldrsw {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_32bit]
142*9880d681SAndroid Build Coastguard Worker; CHECK: str {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_64bit]
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker; Truncation from 64-bits
145*9880d681SAndroid Build Coastguard Worker  %val64_trunc = load volatile i64, i64* @var_64bit
146*9880d681SAndroid Build Coastguard Worker  %val32_trunc = trunc i64 %val64_trunc to i32
147*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val32_trunc, i32* @var_32bit
148*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_64bit]
149*9880d681SAndroid Build Coastguard Worker; CHECK: str {{w[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_32bit]
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker  ret void
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker@arr8 = global i8* null
155*9880d681SAndroid Build Coastguard Worker@arr16 = global i16* null
156*9880d681SAndroid Build Coastguard Worker@arr32 = global i32* null
157*9880d681SAndroid Build Coastguard Worker@arr64 = global i64* null
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker; Now check that our selection copes with accesses more complex than a
160*9880d681SAndroid Build Coastguard Worker; single symbol. Permitted offsets should be folded into the loads and
161*9880d681SAndroid Build Coastguard Worker; stores. Since all forms use the same Operand it's only necessary to
162*9880d681SAndroid Build Coastguard Worker; check the various access-sizes involved.
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdefine void @ldst_complex_offsets() {
165*9880d681SAndroid Build Coastguard Worker; CHECK: ldst_complex_offsets
166*9880d681SAndroid Build Coastguard Worker  %arr8_addr = load volatile i8*, i8** @arr8
167*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, arr8
168*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:arr8]
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker  %arr8_sub1_addr = getelementptr i8, i8* %arr8_addr, i64 1
171*9880d681SAndroid Build Coastguard Worker  %arr8_sub1 = load volatile i8, i8* %arr8_sub1_addr
172*9880d681SAndroid Build Coastguard Worker  store volatile i8 %arr8_sub1, i8* @var_8bit
173*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, #1]
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker  %arr8_sub4095_addr = getelementptr i8, i8* %arr8_addr, i64 4095
176*9880d681SAndroid Build Coastguard Worker  %arr8_sub4095 = load volatile i8, i8* %arr8_sub4095_addr
177*9880d681SAndroid Build Coastguard Worker  store volatile i8 %arr8_sub4095, i8* @var_8bit
178*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, #4095]
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Worker  %arr16_addr = load volatile i16*, i16** @arr16
182*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, arr16
183*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:arr16]
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker  %arr16_sub1_addr = getelementptr i16, i16* %arr16_addr, i64 1
186*9880d681SAndroid Build Coastguard Worker  %arr16_sub1 = load volatile i16, i16* %arr16_sub1_addr
187*9880d681SAndroid Build Coastguard Worker  store volatile i16 %arr16_sub1, i16* @var_16bit
188*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh {{w[0-9]+}}, [{{x[0-9]+}}, #2]
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker  %arr16_sub4095_addr = getelementptr i16, i16* %arr16_addr, i64 4095
191*9880d681SAndroid Build Coastguard Worker  %arr16_sub4095 = load volatile i16, i16* %arr16_sub4095_addr
192*9880d681SAndroid Build Coastguard Worker  store volatile i16 %arr16_sub4095, i16* @var_16bit
193*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh {{w[0-9]+}}, [{{x[0-9]+}}, #8190]
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker  %arr32_addr = load volatile i32*, i32** @arr32
197*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, arr32
198*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:arr32]
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker  %arr32_sub1_addr = getelementptr i32, i32* %arr32_addr, i64 1
201*9880d681SAndroid Build Coastguard Worker  %arr32_sub1 = load volatile i32, i32* %arr32_sub1_addr
202*9880d681SAndroid Build Coastguard Worker  store volatile i32 %arr32_sub1, i32* @var_32bit
203*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{w[0-9]+}}, [{{x[0-9]+}}, #4]
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker  %arr32_sub4095_addr = getelementptr i32, i32* %arr32_addr, i64 4095
206*9880d681SAndroid Build Coastguard Worker  %arr32_sub4095 = load volatile i32, i32* %arr32_sub4095_addr
207*9880d681SAndroid Build Coastguard Worker  store volatile i32 %arr32_sub4095, i32* @var_32bit
208*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{w[0-9]+}}, [{{x[0-9]+}}, #16380]
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker  %arr64_addr = load volatile i64*, i64** @arr64
212*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, arr64
213*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:arr64]
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker  %arr64_sub1_addr = getelementptr i64, i64* %arr64_addr, i64 1
216*9880d681SAndroid Build Coastguard Worker  %arr64_sub1 = load volatile i64, i64* %arr64_sub1_addr
217*9880d681SAndroid Build Coastguard Worker  store volatile i64 %arr64_sub1, i64* @var_64bit
218*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}, #8]
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker  %arr64_sub4095_addr = getelementptr i64, i64* %arr64_addr, i64 4095
221*9880d681SAndroid Build Coastguard Worker  %arr64_sub4095 = load volatile i64, i64* %arr64_sub4095_addr
222*9880d681SAndroid Build Coastguard Worker  store volatile i64 %arr64_sub4095, i64* @var_64bit
223*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}, #32760]
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker  ret void
226*9880d681SAndroid Build Coastguard Worker}
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine void @ldst_float() {
229*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldst_float:
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker   %valfp = load volatile float, float* @var_float
232*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, var_float
233*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{s[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_float]
234*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: ldr {{s[0-9]+}},
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Worker  store volatile float %valfp, float* @var_float
237*9880d681SAndroid Build Coastguard Worker; CHECK: str {{s[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_float]
238*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: str {{s[0-9]+}},
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker   ret void
241*9880d681SAndroid Build Coastguard Worker}
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerdefine void @ldst_double() {
244*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldst_double:
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Worker   %valfp = load volatile double, double* @var_double
247*9880d681SAndroid Build Coastguard Worker; CHECK: adrp {{x[0-9]+}}, var_double
248*9880d681SAndroid Build Coastguard Worker; CHECK: ldr {{d[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_double]
249*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: ldr {{d[0-9]+}},
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker  store volatile double %valfp, double* @var_double
252*9880d681SAndroid Build Coastguard Worker; CHECK: str {{d[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:var_double]
253*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-NOT: str {{d[0-9]+}},
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Worker   ret void
256*9880d681SAndroid Build Coastguard Worker}
257