|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
2 | | -; RUN: llc --mtriple=loongarch64 -mattr=+d,-lamcas,-ld-seq-sa < %s | FileCheck %s --check-prefixes=LA64,NO-LD-SEQ-SA |
| 2 | +; RUN: llc --mtriple=loongarch64 -mattr=+d,-ld-seq-sa < %s | FileCheck %s --check-prefixes=LA64,NO-LD-SEQ-SA |
3 | 3 | ; RUN: llc --mtriple=loongarch64 -mattr=+d,+ld-seq-sa < %s | FileCheck %s --check-prefixes=LA64,LD-SEQ-SA |
4 | 4 | ; RUN: llc --mtriple=loongarch64 -mattr=+d,+lamcas < %s | FileCheck %s --check-prefix=LA64-LAMCAS |
5 | 5 |
|
@@ -170,6 +170,11 @@ define void @cmpxchg_i8_acquire_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind { |
170 | 170 | ; LD-SEQ-SA-NEXT: .LBB4_3: |
171 | 171 | ; LD-SEQ-SA-NEXT: .LBB4_4: |
172 | 172 | ; LD-SEQ-SA-NEXT: ret |
| 173 | +; |
| 174 | +; LA64-LAMCAS-LABEL: cmpxchg_i8_acquire_monotonic: |
| 175 | +; LA64-LAMCAS: # %bb.0: |
| 176 | +; LA64-LAMCAS-NEXT: amcas_db.b $a1, $a2, $a0 |
| 177 | +; LA64-LAMCAS-NEXT: ret |
173 | 178 | %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire monotonic |
174 | 179 | ret void |
175 | 180 | } |
@@ -225,6 +230,11 @@ define void @cmpxchg_i16_acquire_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounwin |
225 | 230 | ; LD-SEQ-SA-NEXT: .LBB5_3: |
226 | 231 | ; LD-SEQ-SA-NEXT: .LBB5_4: |
227 | 232 | ; LD-SEQ-SA-NEXT: ret |
| 233 | +; |
| 234 | +; LA64-LAMCAS-LABEL: cmpxchg_i16_acquire_monotonic: |
| 235 | +; LA64-LAMCAS: # %bb.0: |
| 236 | +; LA64-LAMCAS-NEXT: amcas_db.h $a1, $a2, $a0 |
| 237 | +; LA64-LAMCAS-NEXT: ret |
228 | 238 | %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire monotonic |
229 | 239 | ret void |
230 | 240 | } |
@@ -260,6 +270,11 @@ define void @cmpxchg_i32_acquire_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounwin |
260 | 270 | ; LD-SEQ-SA-NEXT: .LBB6_3: |
261 | 271 | ; LD-SEQ-SA-NEXT: .LBB6_4: |
262 | 272 | ; LD-SEQ-SA-NEXT: ret |
| 273 | +; |
| 274 | +; LA64-LAMCAS-LABEL: cmpxchg_i32_acquire_monotonic: |
| 275 | +; LA64-LAMCAS: # %bb.0: |
| 276 | +; LA64-LAMCAS-NEXT: amcas_db.w $a1, $a2, $a0 |
| 277 | +; LA64-LAMCAS-NEXT: ret |
263 | 278 | %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire monotonic |
264 | 279 | ret void |
265 | 280 | } |
@@ -293,6 +308,11 @@ define void @cmpxchg_i64_acquire_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounwin |
293 | 308 | ; LD-SEQ-SA-NEXT: .LBB7_3: |
294 | 309 | ; LD-SEQ-SA-NEXT: .LBB7_4: |
295 | 310 | ; LD-SEQ-SA-NEXT: ret |
| 311 | +; |
| 312 | +; LA64-LAMCAS-LABEL: cmpxchg_i64_acquire_monotonic: |
| 313 | +; LA64-LAMCAS: # %bb.0: |
| 314 | +; LA64-LAMCAS-NEXT: amcas_db.d $a1, $a2, $a0 |
| 315 | +; LA64-LAMCAS-NEXT: ret |
296 | 316 | %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire monotonic |
297 | 317 | ret void |
298 | 318 | } |
@@ -620,6 +640,11 @@ define void @cmpxchg_i8_monotonic_monotonic(ptr %ptr, i8 %cmp, i8 %val) nounwind |
620 | 640 | ; LD-SEQ-SA-NEXT: .LBB16_3: |
621 | 641 | ; LD-SEQ-SA-NEXT: .LBB16_4: |
622 | 642 | ; LD-SEQ-SA-NEXT: ret |
| 643 | +; |
| 644 | +; LA64-LAMCAS-LABEL: cmpxchg_i8_monotonic_monotonic: |
| 645 | +; LA64-LAMCAS: # %bb.0: |
| 646 | +; LA64-LAMCAS-NEXT: amcas.b $a1, $a2, $a0 |
| 647 | +; LA64-LAMCAS-NEXT: ret |
623 | 648 | %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic |
624 | 649 | ret void |
625 | 650 | } |
@@ -675,6 +700,11 @@ define void @cmpxchg_i16_monotonic_monotonic(ptr %ptr, i16 %cmp, i16 %val) nounw |
675 | 700 | ; LD-SEQ-SA-NEXT: .LBB17_3: |
676 | 701 | ; LD-SEQ-SA-NEXT: .LBB17_4: |
677 | 702 | ; LD-SEQ-SA-NEXT: ret |
| 703 | +; |
| 704 | +; LA64-LAMCAS-LABEL: cmpxchg_i16_monotonic_monotonic: |
| 705 | +; LA64-LAMCAS: # %bb.0: |
| 706 | +; LA64-LAMCAS-NEXT: amcas.h $a1, $a2, $a0 |
| 707 | +; LA64-LAMCAS-NEXT: ret |
678 | 708 | %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic |
679 | 709 | ret void |
680 | 710 | } |
@@ -710,6 +740,11 @@ define void @cmpxchg_i32_monotonic_monotonic(ptr %ptr, i32 %cmp, i32 %val) nounw |
710 | 740 | ; LD-SEQ-SA-NEXT: .LBB18_3: |
711 | 741 | ; LD-SEQ-SA-NEXT: .LBB18_4: |
712 | 742 | ; LD-SEQ-SA-NEXT: ret |
| 743 | +; |
| 744 | +; LA64-LAMCAS-LABEL: cmpxchg_i32_monotonic_monotonic: |
| 745 | +; LA64-LAMCAS: # %bb.0: |
| 746 | +; LA64-LAMCAS-NEXT: amcas.w $a1, $a2, $a0 |
| 747 | +; LA64-LAMCAS-NEXT: ret |
713 | 748 | %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic |
714 | 749 | ret void |
715 | 750 | } |
@@ -743,6 +778,11 @@ define void @cmpxchg_i64_monotonic_monotonic(ptr %ptr, i64 %cmp, i64 %val) nounw |
743 | 778 | ; LD-SEQ-SA-NEXT: .LBB19_3: |
744 | 779 | ; LD-SEQ-SA-NEXT: .LBB19_4: |
745 | 780 | ; LD-SEQ-SA-NEXT: ret |
| 781 | +; |
| 782 | +; LA64-LAMCAS-LABEL: cmpxchg_i64_monotonic_monotonic: |
| 783 | +; LA64-LAMCAS: # %bb.0: |
| 784 | +; LA64-LAMCAS-NEXT: amcas.d $a1, $a2, $a0 |
| 785 | +; LA64-LAMCAS-NEXT: ret |
746 | 786 | %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic |
747 | 787 | ret void |
748 | 788 | } |
@@ -798,6 +838,12 @@ define i8 @cmpxchg_i8_monotonic_monotonic_reti8(ptr %ptr, i8 %cmp, i8 %val) noun |
798 | 838 | ; LD-SEQ-SA-NEXT: .LBB20_4: |
799 | 839 | ; LD-SEQ-SA-NEXT: srl.w $a0, $a5, $a3 |
800 | 840 | ; LD-SEQ-SA-NEXT: ret |
| 841 | +; |
| 842 | +; LA64-LAMCAS-LABEL: cmpxchg_i8_monotonic_monotonic_reti8: |
| 843 | +; LA64-LAMCAS: # %bb.0: |
| 844 | +; LA64-LAMCAS-NEXT: amcas.b $a1, $a2, $a0 |
| 845 | +; LA64-LAMCAS-NEXT: move $a0, $a1 |
| 846 | +; LA64-LAMCAS-NEXT: ret |
801 | 847 | %tmp = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic |
802 | 848 | %res = extractvalue { i8, i1 } %tmp, 0 |
803 | 849 | ret i8 %res |
@@ -856,6 +902,12 @@ define i16 @cmpxchg_i16_monotonic_monotonic_reti16(ptr %ptr, i16 %cmp, i16 %val) |
856 | 902 | ; LD-SEQ-SA-NEXT: .LBB21_4: |
857 | 903 | ; LD-SEQ-SA-NEXT: srl.w $a0, $a5, $a3 |
858 | 904 | ; LD-SEQ-SA-NEXT: ret |
| 905 | +; |
| 906 | +; LA64-LAMCAS-LABEL: cmpxchg_i16_monotonic_monotonic_reti16: |
| 907 | +; LA64-LAMCAS: # %bb.0: |
| 908 | +; LA64-LAMCAS-NEXT: amcas.h $a1, $a2, $a0 |
| 909 | +; LA64-LAMCAS-NEXT: move $a0, $a1 |
| 910 | +; LA64-LAMCAS-NEXT: ret |
859 | 911 | %tmp = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic |
860 | 912 | %res = extractvalue { i16, i1 } %tmp, 0 |
861 | 913 | ret i16 %res |
@@ -894,6 +946,12 @@ define i32 @cmpxchg_i32_monotonic_monotonic_reti32(ptr %ptr, i32 %cmp, i32 %val) |
894 | 946 | ; LD-SEQ-SA-NEXT: .LBB22_4: |
895 | 947 | ; LD-SEQ-SA-NEXT: move $a0, $a1 |
896 | 948 | ; LD-SEQ-SA-NEXT: ret |
| 949 | +; |
| 950 | +; LA64-LAMCAS-LABEL: cmpxchg_i32_monotonic_monotonic_reti32: |
| 951 | +; LA64-LAMCAS: # %bb.0: |
| 952 | +; LA64-LAMCAS-NEXT: amcas.w $a1, $a2, $a0 |
| 953 | +; LA64-LAMCAS-NEXT: move $a0, $a1 |
| 954 | +; LA64-LAMCAS-NEXT: ret |
897 | 955 | %tmp = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic |
898 | 956 | %res = extractvalue { i32, i1 } %tmp, 0 |
899 | 957 | ret i32 %res |
@@ -930,6 +988,12 @@ define i64 @cmpxchg_i64_monotonic_monotonic_reti64(ptr %ptr, i64 %cmp, i64 %val) |
930 | 988 | ; LD-SEQ-SA-NEXT: .LBB23_4: |
931 | 989 | ; LD-SEQ-SA-NEXT: move $a0, $a3 |
932 | 990 | ; LD-SEQ-SA-NEXT: ret |
| 991 | +; |
| 992 | +; LA64-LAMCAS-LABEL: cmpxchg_i64_monotonic_monotonic_reti64: |
| 993 | +; LA64-LAMCAS: # %bb.0: |
| 994 | +; LA64-LAMCAS-NEXT: amcas.d $a1, $a2, $a0 |
| 995 | +; LA64-LAMCAS-NEXT: move $a0, $a1 |
| 996 | +; LA64-LAMCAS-NEXT: ret |
933 | 997 | %tmp = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic |
934 | 998 | %res = extractvalue { i64, i1 } %tmp, 0 |
935 | 999 | ret i64 %res |
@@ -990,6 +1054,14 @@ define i1 @cmpxchg_i8_monotonic_monotonic_reti1(ptr %ptr, i8 %cmp, i8 %val) noun |
990 | 1054 | ; LD-SEQ-SA-NEXT: xor $a0, $a1, $a0 |
991 | 1055 | ; LD-SEQ-SA-NEXT: sltui $a0, $a0, 1 |
992 | 1056 | ; LD-SEQ-SA-NEXT: ret |
| 1057 | +; |
| 1058 | +; LA64-LAMCAS-LABEL: cmpxchg_i8_monotonic_monotonic_reti1: |
| 1059 | +; LA64-LAMCAS: # %bb.0: |
| 1060 | +; LA64-LAMCAS-NEXT: ext.w.b $a3, $a1 |
| 1061 | +; LA64-LAMCAS-NEXT: amcas.b $a1, $a2, $a0 |
| 1062 | +; LA64-LAMCAS-NEXT: xor $a0, $a1, $a3 |
| 1063 | +; LA64-LAMCAS-NEXT: sltui $a0, $a0, 1 |
| 1064 | +; LA64-LAMCAS-NEXT: ret |
993 | 1065 | %tmp = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic |
994 | 1066 | %res = extractvalue { i8, i1 } %tmp, 1 |
995 | 1067 | ret i1 %res |
@@ -1052,6 +1124,14 @@ define i1 @cmpxchg_i16_monotonic_monotonic_reti1(ptr %ptr, i16 %cmp, i16 %val) n |
1052 | 1124 | ; LD-SEQ-SA-NEXT: xor $a0, $a1, $a0 |
1053 | 1125 | ; LD-SEQ-SA-NEXT: sltui $a0, $a0, 1 |
1054 | 1126 | ; LD-SEQ-SA-NEXT: ret |
| 1127 | +; |
| 1128 | +; LA64-LAMCAS-LABEL: cmpxchg_i16_monotonic_monotonic_reti1: |
| 1129 | +; LA64-LAMCAS: # %bb.0: |
| 1130 | +; LA64-LAMCAS-NEXT: ext.w.h $a3, $a1 |
| 1131 | +; LA64-LAMCAS-NEXT: amcas.h $a1, $a2, $a0 |
| 1132 | +; LA64-LAMCAS-NEXT: xor $a0, $a1, $a3 |
| 1133 | +; LA64-LAMCAS-NEXT: sltui $a0, $a0, 1 |
| 1134 | +; LA64-LAMCAS-NEXT: ret |
1055 | 1135 | %tmp = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic |
1056 | 1136 | %res = extractvalue { i16, i1 } %tmp, 1 |
1057 | 1137 | ret i1 %res |
@@ -1092,6 +1172,14 @@ define i1 @cmpxchg_i32_monotonic_monotonic_reti1(ptr %ptr, i32 %cmp, i32 %val) n |
1092 | 1172 | ; LD-SEQ-SA-NEXT: xor $a0, $a3, $a1 |
1093 | 1173 | ; LD-SEQ-SA-NEXT: sltui $a0, $a0, 1 |
1094 | 1174 | ; LD-SEQ-SA-NEXT: ret |
| 1175 | +; |
| 1176 | +; LA64-LAMCAS-LABEL: cmpxchg_i32_monotonic_monotonic_reti1: |
| 1177 | +; LA64-LAMCAS: # %bb.0: |
| 1178 | +; LA64-LAMCAS-NEXT: addi.w $a3, $a1, 0 |
| 1179 | +; LA64-LAMCAS-NEXT: amcas.w $a1, $a2, $a0 |
| 1180 | +; LA64-LAMCAS-NEXT: xor $a0, $a1, $a3 |
| 1181 | +; LA64-LAMCAS-NEXT: sltui $a0, $a0, 1 |
| 1182 | +; LA64-LAMCAS-NEXT: ret |
1095 | 1183 | %tmp = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic |
1096 | 1184 | %res = extractvalue { i32, i1 } %tmp, 1 |
1097 | 1185 | ret i1 %res |
@@ -1130,6 +1218,14 @@ define i1 @cmpxchg_i64_monotonic_monotonic_reti1(ptr %ptr, i64 %cmp, i64 %val) n |
1130 | 1218 | ; LD-SEQ-SA-NEXT: xor $a0, $a3, $a1 |
1131 | 1219 | ; LD-SEQ-SA-NEXT: sltui $a0, $a0, 1 |
1132 | 1220 | ; LD-SEQ-SA-NEXT: ret |
| 1221 | +; |
| 1222 | +; LA64-LAMCAS-LABEL: cmpxchg_i64_monotonic_monotonic_reti1: |
| 1223 | +; LA64-LAMCAS: # %bb.0: |
| 1224 | +; LA64-LAMCAS-NEXT: move $a3, $a1 |
| 1225 | +; LA64-LAMCAS-NEXT: amcas.d $a3, $a2, $a0 |
| 1226 | +; LA64-LAMCAS-NEXT: xor $a0, $a3, $a1 |
| 1227 | +; LA64-LAMCAS-NEXT: sltui $a0, $a0, 1 |
| 1228 | +; LA64-LAMCAS-NEXT: ret |
1133 | 1229 | %tmp = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic |
1134 | 1230 | %res = extractvalue { i64, i1 } %tmp, 1 |
1135 | 1231 | ret i1 %res |
|
0 commit comments