1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc --mtriple=loongarch64 -mattr=+d,-scq < %s | FileCheck %s --check-prefix=LA64
3
- ; RUN: llc --mtriple=loongarch64 -mattr=+d,+scq < %s | FileCheck %s --check-prefix=LA64-SCQ
2
+ ; RUN: llc --mtriple=loongarch64 -mattr=+d,-scq,-ld-seq-sa < %s | FileCheck %s --check-prefix=LA64
3
+ ; RUN: llc --mtriple=loongarch64 -mattr=+d,+scq,-ld-seq-sa < %s | FileCheck %s --check-prefixes=LA64-SCQ,NO-LD-SEQ-SA
4
+ ; RUN: llc --mtriple=loongarch64 -mattr=+d,+scq,+ld-seq-sa < %s | FileCheck %s --check-prefixes=LA64-SCQ,LD-SEQ-SA
4
5
5
6
define void @cmpxchg_i128_acquire_acquire (ptr %ptr , i128 %cmp , i128 %val ) nounwind {
6
7
; LA64-LABEL: cmpxchg_i128_acquire_acquire:
@@ -182,22 +183,38 @@ define void @cmpxchg_i128_monotonic_monotonic(ptr %ptr, i128 %cmp, i128 %val) no
182
183
; LA64-NEXT: addi.d $sp, $sp, 32
183
184
; LA64-NEXT: ret
184
185
;
185
- ; LA64-SCQ-LABEL: cmpxchg_i128_monotonic_monotonic:
186
- ; LA64-SCQ: # %bb.0:
187
- ; LA64-SCQ-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1
188
- ; LA64-SCQ-NEXT: ll.d $a5, $a0, 0
189
- ; LA64-SCQ-NEXT: ld.d $a6, $a0, 8
190
- ; LA64-SCQ-NEXT: bne $a5, $a1, .LBB4_3
191
- ; LA64-SCQ-NEXT: bne $a6, $a2, .LBB4_3
192
- ; LA64-SCQ-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1
193
- ; LA64-SCQ-NEXT: move $a7, $a3
194
- ; LA64-SCQ-NEXT: sc.q $a7, $a4, $a0
195
- ; LA64-SCQ-NEXT: beqz $a7, .LBB4_1
196
- ; LA64-SCQ-NEXT: b .LBB4_4
197
- ; LA64-SCQ-NEXT: .LBB4_3:
198
- ; LA64-SCQ-NEXT: dbar 1792
199
- ; LA64-SCQ-NEXT: .LBB4_4:
200
- ; LA64-SCQ-NEXT: ret
186
+ ; NO-LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic:
187
+ ; NO-LD-SEQ-SA: # %bb.0:
188
+ ; NO-LD-SEQ-SA-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1
189
+ ; NO-LD-SEQ-SA-NEXT: ll.d $a5, $a0, 0
190
+ ; NO-LD-SEQ-SA-NEXT: ld.d $a6, $a0, 8
191
+ ; NO-LD-SEQ-SA-NEXT: bne $a5, $a1, .LBB4_3
192
+ ; NO-LD-SEQ-SA-NEXT: bne $a6, $a2, .LBB4_3
193
+ ; NO-LD-SEQ-SA-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1
194
+ ; NO-LD-SEQ-SA-NEXT: move $a7, $a3
195
+ ; NO-LD-SEQ-SA-NEXT: sc.q $a7, $a4, $a0
196
+ ; NO-LD-SEQ-SA-NEXT: beqz $a7, .LBB4_1
197
+ ; NO-LD-SEQ-SA-NEXT: b .LBB4_4
198
+ ; NO-LD-SEQ-SA-NEXT: .LBB4_3:
199
+ ; NO-LD-SEQ-SA-NEXT: dbar 1792
200
+ ; NO-LD-SEQ-SA-NEXT: .LBB4_4:
201
+ ; NO-LD-SEQ-SA-NEXT: ret
202
+ ;
203
+ ; LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic:
204
+ ; LD-SEQ-SA: # %bb.0:
205
+ ; LD-SEQ-SA-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1
206
+ ; LD-SEQ-SA-NEXT: ll.d $a5, $a0, 0
207
+ ; LD-SEQ-SA-NEXT: ld.d $a6, $a0, 8
208
+ ; LD-SEQ-SA-NEXT: bne $a5, $a1, .LBB4_3
209
+ ; LD-SEQ-SA-NEXT: bne $a6, $a2, .LBB4_3
210
+ ; LD-SEQ-SA-NEXT: # %bb.2: # in Loop: Header=BB4_1 Depth=1
211
+ ; LD-SEQ-SA-NEXT: move $a7, $a3
212
+ ; LD-SEQ-SA-NEXT: sc.q $a7, $a4, $a0
213
+ ; LD-SEQ-SA-NEXT: beqz $a7, .LBB4_1
214
+ ; LD-SEQ-SA-NEXT: b .LBB4_4
215
+ ; LD-SEQ-SA-NEXT: .LBB4_3:
216
+ ; LD-SEQ-SA-NEXT: .LBB4_4:
217
+ ; LD-SEQ-SA-NEXT: ret
201
218
%res = cmpxchg ptr %ptr , i128 %cmp , i128 %val monotonic monotonic
202
219
ret void
203
220
}
@@ -221,24 +238,42 @@ define i128 @cmpxchg_i128_monotonic_monotonic_reti128(ptr %ptr, i128 %cmp, i128
221
238
; LA64-NEXT: addi.d $sp, $sp, 32
222
239
; LA64-NEXT: ret
223
240
;
224
- ; LA64-SCQ-LABEL: cmpxchg_i128_monotonic_monotonic_reti128:
225
- ; LA64-SCQ: # %bb.0:
226
- ; LA64-SCQ-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=1
227
- ; LA64-SCQ-NEXT: ll.d $a5, $a0, 0
228
- ; LA64-SCQ-NEXT: ld.d $a6, $a0, 8
229
- ; LA64-SCQ-NEXT: bne $a5, $a1, .LBB5_3
230
- ; LA64-SCQ-NEXT: bne $a6, $a2, .LBB5_3
231
- ; LA64-SCQ-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=1
232
- ; LA64-SCQ-NEXT: move $a7, $a3
233
- ; LA64-SCQ-NEXT: sc.q $a7, $a4, $a0
234
- ; LA64-SCQ-NEXT: beqz $a7, .LBB5_1
235
- ; LA64-SCQ-NEXT: b .LBB5_4
236
- ; LA64-SCQ-NEXT: .LBB5_3:
237
- ; LA64-SCQ-NEXT: dbar 1792
238
- ; LA64-SCQ-NEXT: .LBB5_4:
239
- ; LA64-SCQ-NEXT: move $a0, $a5
240
- ; LA64-SCQ-NEXT: move $a1, $a6
241
- ; LA64-SCQ-NEXT: ret
241
+ ; NO-LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti128:
242
+ ; NO-LD-SEQ-SA: # %bb.0:
243
+ ; NO-LD-SEQ-SA-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=1
244
+ ; NO-LD-SEQ-SA-NEXT: ll.d $a5, $a0, 0
245
+ ; NO-LD-SEQ-SA-NEXT: ld.d $a6, $a0, 8
246
+ ; NO-LD-SEQ-SA-NEXT: bne $a5, $a1, .LBB5_3
247
+ ; NO-LD-SEQ-SA-NEXT: bne $a6, $a2, .LBB5_3
248
+ ; NO-LD-SEQ-SA-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=1
249
+ ; NO-LD-SEQ-SA-NEXT: move $a7, $a3
250
+ ; NO-LD-SEQ-SA-NEXT: sc.q $a7, $a4, $a0
251
+ ; NO-LD-SEQ-SA-NEXT: beqz $a7, .LBB5_1
252
+ ; NO-LD-SEQ-SA-NEXT: b .LBB5_4
253
+ ; NO-LD-SEQ-SA-NEXT: .LBB5_3:
254
+ ; NO-LD-SEQ-SA-NEXT: dbar 1792
255
+ ; NO-LD-SEQ-SA-NEXT: .LBB5_4:
256
+ ; NO-LD-SEQ-SA-NEXT: move $a0, $a5
257
+ ; NO-LD-SEQ-SA-NEXT: move $a1, $a6
258
+ ; NO-LD-SEQ-SA-NEXT: ret
259
+ ;
260
+ ; LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti128:
261
+ ; LD-SEQ-SA: # %bb.0:
262
+ ; LD-SEQ-SA-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=1
263
+ ; LD-SEQ-SA-NEXT: ll.d $a5, $a0, 0
264
+ ; LD-SEQ-SA-NEXT: ld.d $a6, $a0, 8
265
+ ; LD-SEQ-SA-NEXT: bne $a5, $a1, .LBB5_3
266
+ ; LD-SEQ-SA-NEXT: bne $a6, $a2, .LBB5_3
267
+ ; LD-SEQ-SA-NEXT: # %bb.2: # in Loop: Header=BB5_1 Depth=1
268
+ ; LD-SEQ-SA-NEXT: move $a7, $a3
269
+ ; LD-SEQ-SA-NEXT: sc.q $a7, $a4, $a0
270
+ ; LD-SEQ-SA-NEXT: beqz $a7, .LBB5_1
271
+ ; LD-SEQ-SA-NEXT: b .LBB5_4
272
+ ; LD-SEQ-SA-NEXT: .LBB5_3:
273
+ ; LD-SEQ-SA-NEXT: .LBB5_4:
274
+ ; LD-SEQ-SA-NEXT: move $a0, $a5
275
+ ; LD-SEQ-SA-NEXT: move $a1, $a6
276
+ ; LD-SEQ-SA-NEXT: ret
242
277
%tmp = cmpxchg ptr %ptr , i128 %cmp , i128 %val monotonic monotonic
243
278
%res = extractvalue { i128 , i1 } %tmp , 0
244
279
ret i128 %res
@@ -261,26 +296,46 @@ define i1 @cmpxchg_i128_monotonic_monotonic_reti1(ptr %ptr, i128 %cmp, i128 %val
261
296
; LA64-NEXT: addi.d $sp, $sp, 32
262
297
; LA64-NEXT: ret
263
298
;
264
- ; LA64-SCQ-LABEL: cmpxchg_i128_monotonic_monotonic_reti1:
265
- ; LA64-SCQ: # %bb.0:
266
- ; LA64-SCQ-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=1
267
- ; LA64-SCQ-NEXT: ll.d $a5, $a0, 0
268
- ; LA64-SCQ-NEXT: ld.d $a6, $a0, 8
269
- ; LA64-SCQ-NEXT: bne $a5, $a1, .LBB6_3
270
- ; LA64-SCQ-NEXT: bne $a6, $a2, .LBB6_3
271
- ; LA64-SCQ-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=1
272
- ; LA64-SCQ-NEXT: move $a7, $a3
273
- ; LA64-SCQ-NEXT: sc.q $a7, $a4, $a0
274
- ; LA64-SCQ-NEXT: beqz $a7, .LBB6_1
275
- ; LA64-SCQ-NEXT: b .LBB6_4
276
- ; LA64-SCQ-NEXT: .LBB6_3:
277
- ; LA64-SCQ-NEXT: dbar 1792
278
- ; LA64-SCQ-NEXT: .LBB6_4:
279
- ; LA64-SCQ-NEXT: xor $a0, $a6, $a2
280
- ; LA64-SCQ-NEXT: xor $a1, $a5, $a1
281
- ; LA64-SCQ-NEXT: or $a0, $a1, $a0
282
- ; LA64-SCQ-NEXT: sltui $a0, $a0, 1
283
- ; LA64-SCQ-NEXT: ret
299
+ ; NO-LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti1:
300
+ ; NO-LD-SEQ-SA: # %bb.0:
301
+ ; NO-LD-SEQ-SA-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=1
302
+ ; NO-LD-SEQ-SA-NEXT: ll.d $a5, $a0, 0
303
+ ; NO-LD-SEQ-SA-NEXT: ld.d $a6, $a0, 8
304
+ ; NO-LD-SEQ-SA-NEXT: bne $a5, $a1, .LBB6_3
305
+ ; NO-LD-SEQ-SA-NEXT: bne $a6, $a2, .LBB6_3
306
+ ; NO-LD-SEQ-SA-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=1
307
+ ; NO-LD-SEQ-SA-NEXT: move $a7, $a3
308
+ ; NO-LD-SEQ-SA-NEXT: sc.q $a7, $a4, $a0
309
+ ; NO-LD-SEQ-SA-NEXT: beqz $a7, .LBB6_1
310
+ ; NO-LD-SEQ-SA-NEXT: b .LBB6_4
311
+ ; NO-LD-SEQ-SA-NEXT: .LBB6_3:
312
+ ; NO-LD-SEQ-SA-NEXT: dbar 1792
313
+ ; NO-LD-SEQ-SA-NEXT: .LBB6_4:
314
+ ; NO-LD-SEQ-SA-NEXT: xor $a0, $a6, $a2
315
+ ; NO-LD-SEQ-SA-NEXT: xor $a1, $a5, $a1
316
+ ; NO-LD-SEQ-SA-NEXT: or $a0, $a1, $a0
317
+ ; NO-LD-SEQ-SA-NEXT: sltui $a0, $a0, 1
318
+ ; NO-LD-SEQ-SA-NEXT: ret
319
+ ;
320
+ ; LD-SEQ-SA-LABEL: cmpxchg_i128_monotonic_monotonic_reti1:
321
+ ; LD-SEQ-SA: # %bb.0:
322
+ ; LD-SEQ-SA-NEXT: .LBB6_1: # =>This Inner Loop Header: Depth=1
323
+ ; LD-SEQ-SA-NEXT: ll.d $a5, $a0, 0
324
+ ; LD-SEQ-SA-NEXT: ld.d $a6, $a0, 8
325
+ ; LD-SEQ-SA-NEXT: bne $a5, $a1, .LBB6_3
326
+ ; LD-SEQ-SA-NEXT: bne $a6, $a2, .LBB6_3
327
+ ; LD-SEQ-SA-NEXT: # %bb.2: # in Loop: Header=BB6_1 Depth=1
328
+ ; LD-SEQ-SA-NEXT: move $a7, $a3
329
+ ; LD-SEQ-SA-NEXT: sc.q $a7, $a4, $a0
330
+ ; LD-SEQ-SA-NEXT: beqz $a7, .LBB6_1
331
+ ; LD-SEQ-SA-NEXT: b .LBB6_4
332
+ ; LD-SEQ-SA-NEXT: .LBB6_3:
333
+ ; LD-SEQ-SA-NEXT: .LBB6_4:
334
+ ; LD-SEQ-SA-NEXT: xor $a0, $a6, $a2
335
+ ; LD-SEQ-SA-NEXT: xor $a1, $a5, $a1
336
+ ; LD-SEQ-SA-NEXT: or $a0, $a1, $a0
337
+ ; LD-SEQ-SA-NEXT: sltui $a0, $a0, 1
338
+ ; LD-SEQ-SA-NEXT: ret
284
339
%tmp = cmpxchg ptr %ptr , i128 %cmp , i128 %val monotonic monotonic
285
340
%res = extractvalue { i128 , i1 } %tmp , 1
286
341
ret i1 %res
0 commit comments