xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-ldxr-stxr.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=arm64-linux-gnu | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker%0 = type { i64, i64 }
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine i128 @f0(i8* %p) nounwind readonly {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f0:
7*9880d681SAndroid Build Coastguard Worker; CHECK: ldxp {{x[0-9]+}}, {{x[0-9]+}}, [x0]
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker  %ldrexd = tail call %0 @llvm.aarch64.ldxp(i8* %p)
10*9880d681SAndroid Build Coastguard Worker  %0 = extractvalue %0 %ldrexd, 1
11*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue %0 %ldrexd, 0
12*9880d681SAndroid Build Coastguard Worker  %2 = zext i64 %0 to i128
13*9880d681SAndroid Build Coastguard Worker  %3 = zext i64 %1 to i128
14*9880d681SAndroid Build Coastguard Worker  %shl = shl nuw i128 %2, 64
15*9880d681SAndroid Build Coastguard Worker  %4 = or i128 %shl, %3
16*9880d681SAndroid Build Coastguard Worker  ret i128 %4
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine i32 @f1(i8* %ptr, i128 %val) nounwind {
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
21*9880d681SAndroid Build Coastguard Worker; CHECK: stxp {{w[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, [x0]
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker  %tmp4 = trunc i128 %val to i64
24*9880d681SAndroid Build Coastguard Worker  %tmp6 = lshr i128 %val, 64
25*9880d681SAndroid Build Coastguard Worker  %tmp7 = trunc i128 %tmp6 to i64
26*9880d681SAndroid Build Coastguard Worker  %strexd = tail call i32 @llvm.aarch64.stxp(i64 %tmp4, i64 %tmp7, i8* %ptr)
27*9880d681SAndroid Build Coastguard Worker  ret i32 %strexd
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdeclare %0 @llvm.aarch64.ldxp(i8*) nounwind
31*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stxp(i64, i64, i8*) nounwind
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker@var = global i64 0, align 8
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine void @test_load_i8(i8* %addr) {
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_i8:
37*9880d681SAndroid Build Coastguard Worker; CHECK: ldxrb w[[LOADVAL:[0-9]+]], [x0]
38*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtb
39*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
40*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldxr.p0i8(i8* %addr)
43*9880d681SAndroid Build Coastguard Worker  %shortval = trunc i64 %val to i8
44*9880d681SAndroid Build Coastguard Worker  %extval = zext i8 %shortval to i64
45*9880d681SAndroid Build Coastguard Worker  store i64 %extval, i64* @var, align 8
46*9880d681SAndroid Build Coastguard Worker  ret void
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerdefine void @test_load_i16(i16* %addr) {
50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_i16:
51*9880d681SAndroid Build Coastguard Worker; CHECK: ldxrh w[[LOADVAL:[0-9]+]], [x0]
52*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxth
53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
54*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldxr.p0i16(i16* %addr)
57*9880d681SAndroid Build Coastguard Worker  %shortval = trunc i64 %val to i16
58*9880d681SAndroid Build Coastguard Worker  %extval = zext i16 %shortval to i64
59*9880d681SAndroid Build Coastguard Worker  store i64 %extval, i64* @var, align 8
60*9880d681SAndroid Build Coastguard Worker  ret void
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine void @test_load_i32(i32* %addr) {
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_i32:
65*9880d681SAndroid Build Coastguard Worker; CHECK: ldxr w[[LOADVAL:[0-9]+]], [x0]
66*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtw
67*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
68*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldxr.p0i32(i32* %addr)
71*9880d681SAndroid Build Coastguard Worker  %shortval = trunc i64 %val to i32
72*9880d681SAndroid Build Coastguard Worker  %extval = zext i32 %shortval to i64
73*9880d681SAndroid Build Coastguard Worker  store i64 %extval, i64* @var, align 8
74*9880d681SAndroid Build Coastguard Worker  ret void
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine void @test_load_i64(i64* %addr) {
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_i64:
79*9880d681SAndroid Build Coastguard Worker; CHECK: ldxr x[[LOADVAL:[0-9]+]], [x0]
80*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldxr.p0i64(i64* %addr)
83*9880d681SAndroid Build Coastguard Worker  store i64 %val, i64* @var, align 8
84*9880d681SAndroid Build Coastguard Worker  ret void
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldxr.p0i8(i8*) nounwind
89*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldxr.p0i16(i16*) nounwind
90*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldxr.p0i32(i32*) nounwind
91*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldxr.p0i64(i64*) nounwind
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_i8(i32, i8 %val, i8* %addr) {
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_i8:
95*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtb
96*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
97*9880d681SAndroid Build Coastguard Worker; CHECK: stxrb w0, w1, [x2]
98*9880d681SAndroid Build Coastguard Worker  %extval = zext i8 %val to i64
99*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stxr.p0i8(i64 %extval, i8* %addr)
100*9880d681SAndroid Build Coastguard Worker  ret i32 %res
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_i16(i32, i16 %val, i16* %addr) {
104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_i16:
105*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxth
106*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
107*9880d681SAndroid Build Coastguard Worker; CHECK: stxrh w0, w1, [x2]
108*9880d681SAndroid Build Coastguard Worker  %extval = zext i16 %val to i64
109*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stxr.p0i16(i64 %extval, i16* %addr)
110*9880d681SAndroid Build Coastguard Worker  ret i32 %res
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_i32(i32, i32 %val, i32* %addr) {
114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_i32:
115*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtw
116*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
117*9880d681SAndroid Build Coastguard Worker; CHECK: stxr w0, w1, [x2]
118*9880d681SAndroid Build Coastguard Worker  %extval = zext i32 %val to i64
119*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stxr.p0i32(i64 %extval, i32* %addr)
120*9880d681SAndroid Build Coastguard Worker  ret i32 %res
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_i64(i32, i64 %val, i64* %addr) {
124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_i64:
125*9880d681SAndroid Build Coastguard Worker; CHECK: stxr w0, x1, [x2]
126*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stxr.p0i64(i64 %val, i64* %addr)
127*9880d681SAndroid Build Coastguard Worker  ret i32 %res
128*9880d681SAndroid Build Coastguard Worker}
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stxr.p0i8(i64, i8*) nounwind
131*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stxr.p0i16(i64, i16*) nounwind
132*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stxr.p0i32(i64, i32*) nounwind
133*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stxr.p0i64(i64, i64*) nounwind
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; CHECK: test_clear:
136*9880d681SAndroid Build Coastguard Worker; CHECK: clrex
137*9880d681SAndroid Build Coastguard Workerdefine void @test_clear() {
138*9880d681SAndroid Build Coastguard Worker  call void @llvm.aarch64.clrex()
139*9880d681SAndroid Build Coastguard Worker  ret void
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.aarch64.clrex() nounwind
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Workerdefine i128 @test_load_acquire_i128(i8* %p) nounwind readonly {
145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_acquire_i128:
146*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp {{x[0-9]+}}, {{x[0-9]+}}, [x0]
147*9880d681SAndroid Build Coastguard Workerentry:
148*9880d681SAndroid Build Coastguard Worker  %ldrexd = tail call %0 @llvm.aarch64.ldaxp(i8* %p)
149*9880d681SAndroid Build Coastguard Worker  %0 = extractvalue %0 %ldrexd, 1
150*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue %0 %ldrexd, 0
151*9880d681SAndroid Build Coastguard Worker  %2 = zext i64 %0 to i128
152*9880d681SAndroid Build Coastguard Worker  %3 = zext i64 %1 to i128
153*9880d681SAndroid Build Coastguard Worker  %shl = shl nuw i128 %2, 64
154*9880d681SAndroid Build Coastguard Worker  %4 = or i128 %shl, %3
155*9880d681SAndroid Build Coastguard Worker  ret i128 %4
156*9880d681SAndroid Build Coastguard Worker}
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_release_i128(i8* %ptr, i128 %val) nounwind {
159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_release_i128:
160*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp {{w[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, [x0]
161*9880d681SAndroid Build Coastguard Workerentry:
162*9880d681SAndroid Build Coastguard Worker  %tmp4 = trunc i128 %val to i64
163*9880d681SAndroid Build Coastguard Worker  %tmp6 = lshr i128 %val, 64
164*9880d681SAndroid Build Coastguard Worker  %tmp7 = trunc i128 %tmp6 to i64
165*9880d681SAndroid Build Coastguard Worker  %strexd = tail call i32 @llvm.aarch64.stlxp(i64 %tmp4, i64 %tmp7, i8* %ptr)
166*9880d681SAndroid Build Coastguard Worker  ret i32 %strexd
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Workerdeclare %0 @llvm.aarch64.ldaxp(i8*) nounwind
170*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stlxp(i64, i64, i8*) nounwind
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine void @test_load_acquire_i8(i8* %addr) {
173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_acquire_i8:
174*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxrb w[[LOADVAL:[0-9]+]], [x0]
175*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtb
176*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
177*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldaxr.p0i8(i8* %addr)
180*9880d681SAndroid Build Coastguard Worker  %shortval = trunc i64 %val to i8
181*9880d681SAndroid Build Coastguard Worker  %extval = zext i8 %shortval to i64
182*9880d681SAndroid Build Coastguard Worker  store i64 %extval, i64* @var, align 8
183*9880d681SAndroid Build Coastguard Worker  ret void
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdefine void @test_load_acquire_i16(i16* %addr) {
187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_acquire_i16:
188*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxrh w[[LOADVAL:[0-9]+]], [x0]
189*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxth
190*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
191*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldaxr.p0i16(i16* %addr)
194*9880d681SAndroid Build Coastguard Worker  %shortval = trunc i64 %val to i16
195*9880d681SAndroid Build Coastguard Worker  %extval = zext i16 %shortval to i64
196*9880d681SAndroid Build Coastguard Worker  store i64 %extval, i64* @var, align 8
197*9880d681SAndroid Build Coastguard Worker  ret void
198*9880d681SAndroid Build Coastguard Worker}
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Workerdefine void @test_load_acquire_i32(i32* %addr) {
201*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_acquire_i32:
202*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxr w[[LOADVAL:[0-9]+]], [x0]
203*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtw
204*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
205*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldaxr.p0i32(i32* %addr)
208*9880d681SAndroid Build Coastguard Worker  %shortval = trunc i64 %val to i32
209*9880d681SAndroid Build Coastguard Worker  %extval = zext i32 %shortval to i64
210*9880d681SAndroid Build Coastguard Worker  store i64 %extval, i64* @var, align 8
211*9880d681SAndroid Build Coastguard Worker  ret void
212*9880d681SAndroid Build Coastguard Worker}
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Workerdefine void @test_load_acquire_i64(i64* %addr) {
215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_load_acquire_i64:
216*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxr x[[LOADVAL:[0-9]+]], [x0]
217*9880d681SAndroid Build Coastguard Worker; CHECK: str x[[LOADVAL]], [{{x[0-9]+}}, :lo12:var]
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Worker  %val = call i64 @llvm.aarch64.ldaxr.p0i64(i64* %addr)
220*9880d681SAndroid Build Coastguard Worker  store i64 %val, i64* @var, align 8
221*9880d681SAndroid Build Coastguard Worker  ret void
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldaxr.p0i8(i8*) nounwind
226*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldaxr.p0i16(i16*) nounwind
227*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldaxr.p0i32(i32*) nounwind
228*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.ldaxr.p0i64(i64*) nounwind
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_release_i8(i32, i8 %val, i8* %addr) {
231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_release_i8:
232*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtb
233*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
234*9880d681SAndroid Build Coastguard Worker; CHECK: stlxrb w0, w1, [x2]
235*9880d681SAndroid Build Coastguard Worker  %extval = zext i8 %val to i64
236*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stlxr.p0i8(i64 %extval, i8* %addr)
237*9880d681SAndroid Build Coastguard Worker  ret i32 %res
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_release_i16(i32, i16 %val, i16* %addr) {
241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_release_i16:
242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxth
243*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
244*9880d681SAndroid Build Coastguard Worker; CHECK: stlxrh w0, w1, [x2]
245*9880d681SAndroid Build Coastguard Worker  %extval = zext i16 %val to i64
246*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stlxr.p0i16(i64 %extval, i16* %addr)
247*9880d681SAndroid Build Coastguard Worker  ret i32 %res
248*9880d681SAndroid Build Coastguard Worker}
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_release_i32(i32, i32 %val, i32* %addr) {
251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_release_i32:
252*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uxtw
253*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: and
254*9880d681SAndroid Build Coastguard Worker; CHECK: stlxr w0, w1, [x2]
255*9880d681SAndroid Build Coastguard Worker  %extval = zext i32 %val to i64
256*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stlxr.p0i32(i64 %extval, i32* %addr)
257*9880d681SAndroid Build Coastguard Worker  ret i32 %res
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdefine i32 @test_store_release_i64(i32, i64 %val, i64* %addr) {
261*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store_release_i64:
262*9880d681SAndroid Build Coastguard Worker; CHECK: stlxr w0, x1, [x2]
263*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.aarch64.stlxr.p0i64(i64 %val, i64* %addr)
264*9880d681SAndroid Build Coastguard Worker  ret i32 %res
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stlxr.p0i8(i64, i8*) nounwind
268*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stlxr.p0i16(i64, i16*) nounwind
269*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stlxr.p0i32(i64, i32*) nounwind
270*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.stlxr.p0i64(i64, i64*) nounwind
271