|
23 | 23 | ; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+ztso -verify-machineinstrs < %s \
|
24 | 24 | ; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-TSO-TRAILING-FENCE %s
|
25 | 25 |
|
| 26 | +; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a,+experimental-zalasr -verify-machineinstrs < %s \ |
| 27 | +; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-ZALASR,RV32IA-ZALASR-WMO %s |
| 28 | +; RUN: llc -mtriple=riscv32 -global-isel -mattr=+d,+a,+experimental-zalasr,+ztso -verify-machineinstrs < %s \ |
| 29 | +; RUN: | FileCheck -check-prefixes=RV32IA,RV32IA-ZALASR,RV32IA-ZALASR-TSO %s |
| 30 | + |
| 31 | +; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+experimental-zalasr -verify-machineinstrs < %s \ |
| 32 | +; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZALASR,RV64IA-ZALASR-WMO %s |
| 33 | +; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d,+a,+experimental-zalasr,+ztso -verify-machineinstrs < %s \ |
| 34 | +; RUN: | FileCheck -check-prefixes=RV64IA,RV64IA-ZALASR,RV64IA-ZALASR-TSO %s |
| 35 | + |
26 | 36 |
|
27 | 37 | define float @atomic_load_f32_unordered(ptr %a) nounwind {
|
28 | 38 | ; RV32I-LABEL: atomic_load_f32_unordered:
|
@@ -171,6 +181,30 @@ define float @atomic_load_f32_acquire(ptr %a) nounwind {
|
171 | 181 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0)
|
172 | 182 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fmv.w.x fa0, a0
|
173 | 183 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 184 | +; |
| 185 | +; RV32IA-ZALASR-WMO-LABEL: atomic_load_f32_acquire: |
| 186 | +; RV32IA-ZALASR-WMO: # %bb.0: |
| 187 | +; RV32IA-ZALASR-WMO-NEXT: lw.aq a0, (a0) |
| 188 | +; RV32IA-ZALASR-WMO-NEXT: fmv.w.x fa0, a0 |
| 189 | +; RV32IA-ZALASR-WMO-NEXT: ret |
| 190 | +; |
| 191 | +; RV32IA-ZALASR-TSO-LABEL: atomic_load_f32_acquire: |
| 192 | +; RV32IA-ZALASR-TSO: # %bb.0: |
| 193 | +; RV32IA-ZALASR-TSO-NEXT: lw a0, 0(a0) |
| 194 | +; RV32IA-ZALASR-TSO-NEXT: fmv.w.x fa0, a0 |
| 195 | +; RV32IA-ZALASR-TSO-NEXT: ret |
| 196 | +; |
| 197 | +; RV64IA-ZALASR-WMO-LABEL: atomic_load_f32_acquire: |
| 198 | +; RV64IA-ZALASR-WMO: # %bb.0: |
| 199 | +; RV64IA-ZALASR-WMO-NEXT: lw.aq a0, (a0) |
| 200 | +; RV64IA-ZALASR-WMO-NEXT: fmv.w.x fa0, a0 |
| 201 | +; RV64IA-ZALASR-WMO-NEXT: ret |
| 202 | +; |
| 203 | +; RV64IA-ZALASR-TSO-LABEL: atomic_load_f32_acquire: |
| 204 | +; RV64IA-ZALASR-TSO: # %bb.0: |
| 205 | +; RV64IA-ZALASR-TSO-NEXT: lw a0, 0(a0) |
| 206 | +; RV64IA-ZALASR-TSO-NEXT: fmv.w.x fa0, a0 |
| 207 | +; RV64IA-ZALASR-TSO-NEXT: ret |
174 | 208 | %1 = load atomic float, ptr %a acquire, align 4
|
175 | 209 | ret float %1
|
176 | 210 | }
|
@@ -256,6 +290,18 @@ define float @atomic_load_f32_seq_cst(ptr %a) nounwind {
|
256 | 290 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: lw a0, 0(a0)
|
257 | 291 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fmv.w.x fa0, a0
|
258 | 292 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 293 | +; |
| 294 | +; RV32IA-ZALASR-LABEL: atomic_load_f32_seq_cst: |
| 295 | +; RV32IA-ZALASR: # %bb.0: |
| 296 | +; RV32IA-ZALASR-NEXT: lw.aq a0, (a0) |
| 297 | +; RV32IA-ZALASR-NEXT: fmv.w.x fa0, a0 |
| 298 | +; RV32IA-ZALASR-NEXT: ret |
| 299 | +; |
| 300 | +; RV64IA-ZALASR-LABEL: atomic_load_f32_seq_cst: |
| 301 | +; RV64IA-ZALASR: # %bb.0: |
| 302 | +; RV64IA-ZALASR-NEXT: lw.aq a0, (a0) |
| 303 | +; RV64IA-ZALASR-NEXT: fmv.w.x fa0, a0 |
| 304 | +; RV64IA-ZALASR-NEXT: ret |
259 | 305 | %1 = load atomic float, ptr %a seq_cst, align 4
|
260 | 306 | ret float %1
|
261 | 307 | }
|
@@ -414,6 +460,18 @@ define double @atomic_load_f64_acquire(ptr %a) nounwind {
|
414 | 460 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ld a0, 0(a0)
|
415 | 461 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fmv.d.x fa0, a0
|
416 | 462 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 463 | +; |
| 464 | +; RV64IA-ZALASR-WMO-LABEL: atomic_load_f64_acquire: |
| 465 | +; RV64IA-ZALASR-WMO: # %bb.0: |
| 466 | +; RV64IA-ZALASR-WMO-NEXT: ld.aq a0, (a0) |
| 467 | +; RV64IA-ZALASR-WMO-NEXT: fmv.d.x fa0, a0 |
| 468 | +; RV64IA-ZALASR-WMO-NEXT: ret |
| 469 | +; |
| 470 | +; RV64IA-ZALASR-TSO-LABEL: atomic_load_f64_acquire: |
| 471 | +; RV64IA-ZALASR-TSO: # %bb.0: |
| 472 | +; RV64IA-ZALASR-TSO-NEXT: ld a0, 0(a0) |
| 473 | +; RV64IA-ZALASR-TSO-NEXT: fmv.d.x fa0, a0 |
| 474 | +; RV64IA-ZALASR-TSO-NEXT: ret |
417 | 475 | %1 = load atomic double, ptr %a acquire, align 8
|
418 | 476 | ret double %1
|
419 | 477 | }
|
@@ -484,6 +542,12 @@ define double @atomic_load_f64_seq_cst(ptr %a) nounwind {
|
484 | 542 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ld a0, 0(a0)
|
485 | 543 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fmv.d.x fa0, a0
|
486 | 544 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 545 | +; |
| 546 | +; RV64IA-ZALASR-LABEL: atomic_load_f64_seq_cst: |
| 547 | +; RV64IA-ZALASR: # %bb.0: |
| 548 | +; RV64IA-ZALASR-NEXT: ld.aq a0, (a0) |
| 549 | +; RV64IA-ZALASR-NEXT: fmv.d.x fa0, a0 |
| 550 | +; RV64IA-ZALASR-NEXT: ret |
487 | 551 | %1 = load atomic double, ptr %a seq_cst, align 8
|
488 | 552 | ret double %1
|
489 | 553 | }
|
@@ -635,6 +699,30 @@ define void @atomic_store_f32_release(ptr %a, float %b) nounwind {
|
635 | 699 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fmv.x.w a1, fa0
|
636 | 700 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: sw a1, 0(a0)
|
637 | 701 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 702 | +; |
| 703 | +; RV32IA-ZALASR-WMO-LABEL: atomic_store_f32_release: |
| 704 | +; RV32IA-ZALASR-WMO: # %bb.0: |
| 705 | +; RV32IA-ZALASR-WMO-NEXT: fmv.x.w a1, fa0 |
| 706 | +; RV32IA-ZALASR-WMO-NEXT: sw.rl a1, (a0) |
| 707 | +; RV32IA-ZALASR-WMO-NEXT: ret |
| 708 | +; |
| 709 | +; RV32IA-ZALASR-TSO-LABEL: atomic_store_f32_release: |
| 710 | +; RV32IA-ZALASR-TSO: # %bb.0: |
| 711 | +; RV32IA-ZALASR-TSO-NEXT: fmv.x.w a1, fa0 |
| 712 | +; RV32IA-ZALASR-TSO-NEXT: sw a1, 0(a0) |
| 713 | +; RV32IA-ZALASR-TSO-NEXT: ret |
| 714 | +; |
| 715 | +; RV64IA-ZALASR-WMO-LABEL: atomic_store_f32_release: |
| 716 | +; RV64IA-ZALASR-WMO: # %bb.0: |
| 717 | +; RV64IA-ZALASR-WMO-NEXT: fmv.x.w a1, fa0 |
| 718 | +; RV64IA-ZALASR-WMO-NEXT: sw.rl a1, (a0) |
| 719 | +; RV64IA-ZALASR-WMO-NEXT: ret |
| 720 | +; |
| 721 | +; RV64IA-ZALASR-TSO-LABEL: atomic_store_f32_release: |
| 722 | +; RV64IA-ZALASR-TSO: # %bb.0: |
| 723 | +; RV64IA-ZALASR-TSO-NEXT: fmv.x.w a1, fa0 |
| 724 | +; RV64IA-ZALASR-TSO-NEXT: sw a1, 0(a0) |
| 725 | +; RV64IA-ZALASR-TSO-NEXT: ret |
638 | 726 | store atomic float %b, ptr %a release, align 4
|
639 | 727 | ret void
|
640 | 728 | }
|
@@ -718,6 +806,18 @@ define void @atomic_store_f32_seq_cst(ptr %a, float %b) nounwind {
|
718 | 806 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: sw a1, 0(a0)
|
719 | 807 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw
|
720 | 808 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 809 | +; |
| 810 | +; RV32IA-ZALASR-LABEL: atomic_store_f32_seq_cst: |
| 811 | +; RV32IA-ZALASR: # %bb.0: |
| 812 | +; RV32IA-ZALASR-NEXT: fmv.x.w a1, fa0 |
| 813 | +; RV32IA-ZALASR-NEXT: sw.rl a1, (a0) |
| 814 | +; RV32IA-ZALASR-NEXT: ret |
| 815 | +; |
| 816 | +; RV64IA-ZALASR-LABEL: atomic_store_f32_seq_cst: |
| 817 | +; RV64IA-ZALASR: # %bb.0: |
| 818 | +; RV64IA-ZALASR-NEXT: fmv.x.w a1, fa0 |
| 819 | +; RV64IA-ZALASR-NEXT: sw.rl a1, (a0) |
| 820 | +; RV64IA-ZALASR-NEXT: ret |
721 | 821 | store atomic float %b, ptr %a seq_cst, align 4
|
722 | 822 | ret void
|
723 | 823 | }
|
@@ -876,6 +976,18 @@ define void @atomic_store_f64_release(ptr %a, double %b) nounwind {
|
876 | 976 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fmv.x.d a1, fa0
|
877 | 977 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: sd a1, 0(a0)
|
878 | 978 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 979 | +; |
| 980 | +; RV64IA-ZALASR-WMO-LABEL: atomic_store_f64_release: |
| 981 | +; RV64IA-ZALASR-WMO: # %bb.0: |
| 982 | +; RV64IA-ZALASR-WMO-NEXT: fmv.x.d a1, fa0 |
| 983 | +; RV64IA-ZALASR-WMO-NEXT: sd.rl a1, (a0) |
| 984 | +; RV64IA-ZALASR-WMO-NEXT: ret |
| 985 | +; |
| 986 | +; RV64IA-ZALASR-TSO-LABEL: atomic_store_f64_release: |
| 987 | +; RV64IA-ZALASR-TSO: # %bb.0: |
| 988 | +; RV64IA-ZALASR-TSO-NEXT: fmv.x.d a1, fa0 |
| 989 | +; RV64IA-ZALASR-TSO-NEXT: sd a1, 0(a0) |
| 990 | +; RV64IA-ZALASR-TSO-NEXT: ret |
879 | 991 | store atomic double %b, ptr %a release, align 8
|
880 | 992 | ret void
|
881 | 993 | }
|
@@ -945,6 +1057,12 @@ define void @atomic_store_f64_seq_cst(ptr %a, double %b) nounwind {
|
945 | 1057 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: sd a1, 0(a0)
|
946 | 1058 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: fence rw, rw
|
947 | 1059 | ; RV64IA-TSO-TRAILING-FENCE-NEXT: ret
|
| 1060 | +; |
| 1061 | +; RV64IA-ZALASR-LABEL: atomic_store_f64_seq_cst: |
| 1062 | +; RV64IA-ZALASR: # %bb.0: |
| 1063 | +; RV64IA-ZALASR-NEXT: fmv.x.d a1, fa0 |
| 1064 | +; RV64IA-ZALASR-NEXT: sd.rl a1, (a0) |
| 1065 | +; RV64IA-ZALASR-NEXT: ret |
948 | 1066 | store atomic double %b, ptr %a seq_cst, align 8
|
949 | 1067 | ret void
|
950 | 1068 | }
|
0 commit comments