|
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