@@ -72,6 +72,22 @@ define i64 @load_acquire_i64(ptr %ptr) {
72
72
ret i64 %val
73
73
}
74
74
75
+ define ptr @load_acquire_ptr (ptr %ptr ) {
76
+ ; LA32-LABEL: load_acquire_ptr:
77
+ ; LA32: # %bb.0:
78
+ ; LA32-NEXT: ld.w $a0, $a0, 0
79
+ ; LA32-NEXT: dbar 20
80
+ ; LA32-NEXT: ret
81
+ ;
82
+ ; LA64-LABEL: load_acquire_ptr:
83
+ ; LA64: # %bb.0:
84
+ ; LA64-NEXT: ld.d $a0, $a0, 0
85
+ ; LA64-NEXT: dbar 20
86
+ ; LA64-NEXT: ret
87
+ %val = load atomic ptr , ptr %ptr acquire , align 8
88
+ ret ptr %val
89
+ }
90
+
75
91
define i8 @load_unordered_i8 (ptr %ptr ) {
76
92
; LA32-LABEL: load_unordered_i8:
77
93
; LA32: # %bb.0:
@@ -135,6 +151,20 @@ define i64 @load_unordered_i64(ptr %ptr) {
135
151
ret i64 %val
136
152
}
137
153
154
+ define ptr @load_unordered_ptr (ptr %ptr ) {
155
+ ; LA32-LABEL: load_unordered_ptr:
156
+ ; LA32: # %bb.0:
157
+ ; LA32-NEXT: ld.w $a0, $a0, 0
158
+ ; LA32-NEXT: ret
159
+ ;
160
+ ; LA64-LABEL: load_unordered_ptr:
161
+ ; LA64: # %bb.0:
162
+ ; LA64-NEXT: ld.d $a0, $a0, 0
163
+ ; LA64-NEXT: ret
164
+ %val = load atomic ptr , ptr %ptr unordered , align 8
165
+ ret ptr %val
166
+ }
167
+
138
168
define i8 @load_monotonic_i8 (ptr %ptr ) {
139
169
; LA32-LABEL: load_monotonic_i8:
140
170
; LA32: # %bb.0:
@@ -198,6 +228,20 @@ define i64 @load_monotonic_i64(ptr %ptr) {
198
228
ret i64 %val
199
229
}
200
230
231
+ define ptr @load_monotonic_ptr (ptr %ptr ) {
232
+ ; LA32-LABEL: load_monotonic_ptr:
233
+ ; LA32: # %bb.0:
234
+ ; LA32-NEXT: ld.w $a0, $a0, 0
235
+ ; LA32-NEXT: ret
236
+ ;
237
+ ; LA64-LABEL: load_monotonic_ptr:
238
+ ; LA64: # %bb.0:
239
+ ; LA64-NEXT: ld.d $a0, $a0, 0
240
+ ; LA64-NEXT: ret
241
+ %val = load atomic ptr , ptr %ptr monotonic , align 8
242
+ ret ptr %val
243
+ }
244
+
201
245
define i8 @load_seq_cst_i8 (ptr %ptr ) {
202
246
; LA32-LABEL: load_seq_cst_i8:
203
247
; LA32: # %bb.0:
@@ -268,6 +312,22 @@ define i64 @load_seq_cst_i64(ptr %ptr) {
268
312
ret i64 %val
269
313
}
270
314
315
+ define ptr @load_seq_cst_ptr (ptr %ptr ) {
316
+ ; LA32-LABEL: load_seq_cst_ptr:
317
+ ; LA32: # %bb.0:
318
+ ; LA32-NEXT: ld.w $a0, $a0, 0
319
+ ; LA32-NEXT: dbar 16
320
+ ; LA32-NEXT: ret
321
+ ;
322
+ ; LA64-LABEL: load_seq_cst_ptr:
323
+ ; LA64: # %bb.0:
324
+ ; LA64-NEXT: ld.d $a0, $a0, 0
325
+ ; LA64-NEXT: dbar 16
326
+ ; LA64-NEXT: ret
327
+ %val = load atomic ptr , ptr %ptr seq_cst , align 8
328
+ ret ptr %val
329
+ }
330
+
271
331
define void @store_release_i8 (ptr %ptr , i8 signext %v ) {
272
332
; LA32-LABEL: store_release_i8:
273
333
; LA32: # %bb.0:
@@ -336,6 +396,21 @@ define void @store_release_i64(ptr %ptr, i64 %v) {
336
396
ret void
337
397
}
338
398
399
+ define void @store_release_ptr (ptr %ptr , ptr %v ) {
400
+ ; LA32-LABEL: store_release_ptr:
401
+ ; LA32: # %bb.0:
402
+ ; LA32-NEXT: dbar 18
403
+ ; LA32-NEXT: st.w $a1, $a0, 0
404
+ ; LA32-NEXT: ret
405
+ ;
406
+ ; LA64-LABEL: store_release_ptr:
407
+ ; LA64: # %bb.0:
408
+ ; LA64-NEXT: amswap_db.d $zero, $a1, $a0
409
+ ; LA64-NEXT: ret
410
+ store atomic ptr %v , ptr %ptr release , align 8
411
+ ret void
412
+ }
413
+
339
414
define void @store_unordered_i8 (ptr %ptr , i8 signext %v ) {
340
415
; LA32-LABEL: store_unordered_i8:
341
416
; LA32: # %bb.0:
@@ -399,6 +474,20 @@ define void @store_unordered_i64(ptr %ptr, i64 %v) {
399
474
ret void
400
475
}
401
476
477
+ define void @store_unordered_ptr (ptr %ptr , ptr %v ) {
478
+ ; LA32-LABEL: store_unordered_ptr:
479
+ ; LA32: # %bb.0:
480
+ ; LA32-NEXT: st.w $a1, $a0, 0
481
+ ; LA32-NEXT: ret
482
+ ;
483
+ ; LA64-LABEL: store_unordered_ptr:
484
+ ; LA64: # %bb.0:
485
+ ; LA64-NEXT: st.d $a1, $a0, 0
486
+ ; LA64-NEXT: ret
487
+ store atomic ptr %v , ptr %ptr unordered , align 8
488
+ ret void
489
+ }
490
+
402
491
define void @store_monotonic_i8 (ptr %ptr , i8 signext %v ) {
403
492
; LA32-LABEL: store_monotonic_i8:
404
493
; LA32: # %bb.0:
@@ -462,6 +551,20 @@ define void @store_monotonic_i64(ptr %ptr, i64 %v) {
462
551
ret void
463
552
}
464
553
554
+ define void @store_monotonic_ptr (ptr %ptr , ptr %v ) {
555
+ ; LA32-LABEL: store_monotonic_ptr:
556
+ ; LA32: # %bb.0:
557
+ ; LA32-NEXT: st.w $a1, $a0, 0
558
+ ; LA32-NEXT: ret
559
+ ;
560
+ ; LA64-LABEL: store_monotonic_ptr:
561
+ ; LA64: # %bb.0:
562
+ ; LA64-NEXT: st.d $a1, $a0, 0
563
+ ; LA64-NEXT: ret
564
+ store atomic ptr %v , ptr %ptr monotonic , align 8
565
+ ret void
566
+ }
567
+
465
568
define void @store_seq_cst_i8 (ptr %ptr , i8 signext %v ) {
466
569
; LA32-LABEL: store_seq_cst_i8:
467
570
; LA32: # %bb.0:
@@ -534,3 +637,19 @@ define void @store_seq_cst_i64(ptr %ptr, i64 %v) {
534
637
store atomic i64 %v , ptr %ptr seq_cst , align 8
535
638
ret void
536
639
}
640
+
641
+ define void @store_seq_cst_ptr (ptr %ptr , ptr %v ) {
642
+ ; LA32-LABEL: store_seq_cst_ptr:
643
+ ; LA32: # %bb.0:
644
+ ; LA32-NEXT: dbar 16
645
+ ; LA32-NEXT: st.w $a1, $a0, 0
646
+ ; LA32-NEXT: dbar 16
647
+ ; LA32-NEXT: ret
648
+ ;
649
+ ; LA64-LABEL: store_seq_cst_ptr:
650
+ ; LA64: # %bb.0:
651
+ ; LA64-NEXT: amswap_db.d $zero, $a1, $a0
652
+ ; LA64-NEXT: ret
653
+ store atomic ptr %v , ptr %ptr seq_cst , align 8
654
+ ret void
655
+ }
0 commit comments