|
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