@@ -72,6 +72,22 @@ define i64 @load_acquire_i64(ptr %ptr) {
7272 ret i64 %val
7373}
7474
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+
7591define i8 @load_unordered_i8 (ptr %ptr ) {
7692; LA32-LABEL: load_unordered_i8:
7793; LA32: # %bb.0:
@@ -135,6 +151,20 @@ define i64 @load_unordered_i64(ptr %ptr) {
135151 ret i64 %val
136152}
137153
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+
138168define i8 @load_monotonic_i8 (ptr %ptr ) {
139169; LA32-LABEL: load_monotonic_i8:
140170; LA32: # %bb.0:
@@ -198,6 +228,20 @@ define i64 @load_monotonic_i64(ptr %ptr) {
198228 ret i64 %val
199229}
200230
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+
201245define i8 @load_seq_cst_i8 (ptr %ptr ) {
202246; LA32-LABEL: load_seq_cst_i8:
203247; LA32: # %bb.0:
@@ -268,6 +312,22 @@ define i64 @load_seq_cst_i64(ptr %ptr) {
268312 ret i64 %val
269313}
270314
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+
271331define void @store_release_i8 (ptr %ptr , i8 signext %v ) {
272332; LA32-LABEL: store_release_i8:
273333; LA32: # %bb.0:
@@ -336,6 +396,21 @@ define void @store_release_i64(ptr %ptr, i64 %v) {
336396 ret void
337397}
338398
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+
339414define void @store_unordered_i8 (ptr %ptr , i8 signext %v ) {
340415; LA32-LABEL: store_unordered_i8:
341416; LA32: # %bb.0:
@@ -399,6 +474,20 @@ define void @store_unordered_i64(ptr %ptr, i64 %v) {
399474 ret void
400475}
401476
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+
402491define void @store_monotonic_i8 (ptr %ptr , i8 signext %v ) {
403492; LA32-LABEL: store_monotonic_i8:
404493; LA32: # %bb.0:
@@ -462,6 +551,20 @@ define void @store_monotonic_i64(ptr %ptr, i64 %v) {
462551 ret void
463552}
464553
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+
465568define void @store_seq_cst_i8 (ptr %ptr , i8 signext %v ) {
466569; LA32-LABEL: store_seq_cst_i8:
467570; LA32: # %bb.0:
@@ -534,3 +637,19 @@ define void @store_seq_cst_i64(ptr %ptr, i64 %v) {
534637 store atomic i64 %v , ptr %ptr seq_cst , align 8
535638 ret void
536639}
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