Skip to content

Commit d09ecb0

Browse files
[AArch64][CodeGen] Add +lsfe atomicrmw tests where the result is unused. (#132022)
Following the discussion on #131174, update generate-tests.py script to emit atomicrmw tests where the result is unused and add a note to explain why these do use ST[F]ADD.
1 parent dd17c64 commit d09ecb0

File tree

3 files changed

+379
-4
lines changed

3 files changed

+379
-4
lines changed

llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,23 @@
33
; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lsfe -O0 | FileCheck %s --check-prefixes=CHECK,-O0
44
; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lsfe -O1 | FileCheck %s --check-prefixes=CHECK,-O1
55

6+
; NOTE: '_unused' tests are added to ensure we do not lower to ST[F]ADD when the destination register is WZR/XZR.
7+
; See discussion on https://github.com/llvm/llvm-project/pull/131174
8+
69
define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) {
710
; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic:
811
; CHECK: ldfadd h0, h0, [x0]
912
%r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
1013
ret half %r
1114
}
1215

16+
define dso_local void @atomicrmw_fadd_half_aligned_monotonic_unused(ptr %ptr, half %value) {
17+
; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic_unused:
18+
; CHECK: ldfadd h0, h0, [x0]
19+
%r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
20+
ret void
21+
}
22+
1323
define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) {
1424
; CHECK-LABEL: atomicrmw_fadd_half_aligned_acquire:
1525
; CHECK: ldfadda h0, h0, [x0]
@@ -24,6 +34,13 @@ define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value
2434
ret half %r
2535
}
2636

37+
define dso_local void @atomicrmw_fadd_half_aligned_release_unused(ptr %ptr, half %value) {
38+
; CHECK-LABEL: atomicrmw_fadd_half_aligned_release_unused:
39+
; CHECK: ldfaddl h0, h0, [x0]
40+
%r = atomicrmw fadd ptr %ptr, half %value release, align 2
41+
ret void
42+
}
43+
2744
define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) {
2845
; CHECK-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
2946
; CHECK: ldfaddal h0, h0, [x0]
@@ -45,6 +62,13 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloa
4562
ret bfloat %r
4663
}
4764

65+
define dso_local void @atomicrmw_fadd_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
66+
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic_unused:
67+
; CHECK: ldbfadd h0, h0, [x0]
68+
%r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
69+
ret void
70+
}
71+
4872
define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
4973
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
5074
; CHECK: ldbfadda h0, h0, [x0]
@@ -59,6 +83,13 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat
5983
ret bfloat %r
6084
}
6185

86+
define dso_local void @atomicrmw_fadd_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
87+
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release_unused:
88+
; CHECK: ldbfaddl h0, h0, [x0]
89+
%r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
90+
ret void
91+
}
92+
6293
define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
6394
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
6495
; CHECK: ldbfaddal h0, h0, [x0]
@@ -80,6 +111,13 @@ define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %
80111
ret float %r
81112
}
82113

114+
define dso_local void @atomicrmw_fadd_float_aligned_monotonic_unused(ptr %ptr, float %value) {
115+
; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic_unused:
116+
; CHECK: ldfadd s0, s0, [x0]
117+
%r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
118+
ret void
119+
}
120+
83121
define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) {
84122
; CHECK-LABEL: atomicrmw_fadd_float_aligned_acquire:
85123
; CHECK: ldfadda s0, s0, [x0]
@@ -94,6 +132,13 @@ define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %va
94132
ret float %r
95133
}
96134

135+
define dso_local void @atomicrmw_fadd_float_aligned_release_unused(ptr %ptr, float %value) {
136+
; CHECK-LABEL: atomicrmw_fadd_float_aligned_release_unused:
137+
; CHECK: ldfaddl s0, s0, [x0]
138+
%r = atomicrmw fadd ptr %ptr, float %value release, align 4
139+
ret void
140+
}
141+
97142
define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) {
98143
; CHECK-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
99144
; CHECK: ldfaddal s0, s0, [x0]
@@ -115,6 +160,13 @@ define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, doubl
115160
ret double %r
116161
}
117162

163+
define dso_local void @atomicrmw_fadd_double_aligned_monotonic_unused(ptr %ptr, double %value) {
164+
; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic_unused:
165+
; CHECK: ldfadd d0, d0, [x0]
166+
%r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
167+
ret void
168+
}
169+
118170
define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) {
119171
; CHECK-LABEL: atomicrmw_fadd_double_aligned_acquire:
120172
; CHECK: ldfadda d0, d0, [x0]
@@ -129,6 +181,13 @@ define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double
129181
ret double %r
130182
}
131183

184+
define dso_local void @atomicrmw_fadd_double_aligned_release_unused(ptr %ptr, double %value) {
185+
; CHECK-LABEL: atomicrmw_fadd_double_aligned_release_unused:
186+
; CHECK: ldfaddl d0, d0, [x0]
187+
%r = atomicrmw fadd ptr %ptr, double %value release, align 8
188+
ret void
189+
}
190+
132191
define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) {
133192
; CHECK-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
134193
; CHECK: ldfaddal d0, d0, [x0]
@@ -805,6 +864,13 @@ define dso_local half @atomicrmw_fmax_half_aligned_monotonic(ptr %ptr, half %val
805864
ret half %r
806865
}
807866

867+
define dso_local void @atomicrmw_fmax_half_aligned_monotonic_unused(ptr %ptr, half %value) {
868+
; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic_unused:
869+
; CHECK: ldfmaxnm h0, h0, [x0]
870+
%r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2
871+
ret void
872+
}
873+
808874
define dso_local half @atomicrmw_fmax_half_aligned_acquire(ptr %ptr, half %value) {
809875
; CHECK-LABEL: atomicrmw_fmax_half_aligned_acquire:
810876
; CHECK: ldfmaxnma h0, h0, [x0]
@@ -819,6 +885,13 @@ define dso_local half @atomicrmw_fmax_half_aligned_release(ptr %ptr, half %value
819885
ret half %r
820886
}
821887

888+
define dso_local void @atomicrmw_fmax_half_aligned_release_unused(ptr %ptr, half %value) {
889+
; CHECK-LABEL: atomicrmw_fmax_half_aligned_release_unused:
890+
; CHECK: ldfmaxnml h0, h0, [x0]
891+
%r = atomicrmw fmax ptr %ptr, half %value release, align 2
892+
ret void
893+
}
894+
822895
define dso_local half @atomicrmw_fmax_half_aligned_acq_rel(ptr %ptr, half %value) {
823896
; CHECK-LABEL: atomicrmw_fmax_half_aligned_acq_rel:
824897
; CHECK: ldfmaxnmal h0, h0, [x0]
@@ -840,6 +913,13 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_monotonic(ptr %ptr, bfloa
840913
ret bfloat %r
841914
}
842915

916+
define dso_local void @atomicrmw_fmax_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
917+
; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic_unused:
918+
; CHECK: ldbfmaxnm h0, h0, [x0]
919+
%r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2
920+
ret void
921+
}
922+
843923
define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
844924
; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acquire:
845925
; CHECK: ldbfmaxnma h0, h0, [x0]
@@ -854,6 +934,13 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_release(ptr %ptr, bfloat
854934
ret bfloat %r
855935
}
856936

937+
define dso_local void @atomicrmw_fmax_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
938+
; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release_unused:
939+
; CHECK: ldbfmaxnml h0, h0, [x0]
940+
%r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2
941+
ret void
942+
}
943+
857944
define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
858945
; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acq_rel:
859946
; CHECK: ldbfmaxnmal h0, h0, [x0]
@@ -875,6 +962,13 @@ define dso_local float @atomicrmw_fmax_float_aligned_monotonic(ptr %ptr, float %
875962
ret float %r
876963
}
877964

965+
define dso_local void @atomicrmw_fmax_float_aligned_monotonic_unused(ptr %ptr, float %value) {
966+
; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic_unused:
967+
; CHECK: ldfmaxnm s0, s0, [x0]
968+
%r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4
969+
ret void
970+
}
971+
878972
define dso_local float @atomicrmw_fmax_float_aligned_acquire(ptr %ptr, float %value) {
879973
; CHECK-LABEL: atomicrmw_fmax_float_aligned_acquire:
880974
; CHECK: ldfmaxnma s0, s0, [x0]
@@ -889,6 +983,13 @@ define dso_local float @atomicrmw_fmax_float_aligned_release(ptr %ptr, float %va
889983
ret float %r
890984
}
891985

986+
define dso_local void @atomicrmw_fmax_float_aligned_release_unused(ptr %ptr, float %value) {
987+
; CHECK-LABEL: atomicrmw_fmax_float_aligned_release_unused:
988+
; CHECK: ldfmaxnml s0, s0, [x0]
989+
%r = atomicrmw fmax ptr %ptr, float %value release, align 4
990+
ret void
991+
}
992+
892993
define dso_local float @atomicrmw_fmax_float_aligned_acq_rel(ptr %ptr, float %value) {
893994
; CHECK-LABEL: atomicrmw_fmax_float_aligned_acq_rel:
894995
; CHECK: ldfmaxnmal s0, s0, [x0]
@@ -910,6 +1011,13 @@ define dso_local double @atomicrmw_fmax_double_aligned_monotonic(ptr %ptr, doubl
9101011
ret double %r
9111012
}
9121013

1014+
define dso_local void @atomicrmw_fmax_double_aligned_monotonic_unused(ptr %ptr, double %value) {
1015+
; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic_unused:
1016+
; CHECK: ldfmaxnm d0, d0, [x0]
1017+
%r = atomicrmw fmax ptr %ptr, double %value monotonic, align 8
1018+
ret void
1019+
}
1020+
9131021
define dso_local double @atomicrmw_fmax_double_aligned_acquire(ptr %ptr, double %value) {
9141022
; CHECK-LABEL: atomicrmw_fmax_double_aligned_acquire:
9151023
; CHECK: ldfmaxnma d0, d0, [x0]
@@ -924,6 +1032,13 @@ define dso_local double @atomicrmw_fmax_double_aligned_release(ptr %ptr, double
9241032
ret double %r
9251033
}
9261034

1035+
define dso_local void @atomicrmw_fmax_double_aligned_release_unused(ptr %ptr, double %value) {
1036+
; CHECK-LABEL: atomicrmw_fmax_double_aligned_release_unused:
1037+
; CHECK: ldfmaxnml d0, d0, [x0]
1038+
%r = atomicrmw fmax ptr %ptr, double %value release, align 8
1039+
ret void
1040+
}
1041+
9271042
define dso_local double @atomicrmw_fmax_double_aligned_acq_rel(ptr %ptr, double %value) {
9281043
; CHECK-LABEL: atomicrmw_fmax_double_aligned_acq_rel:
9291044
; CHECK: ldfmaxnmal d0, d0, [x0]
@@ -1120,6 +1235,13 @@ define dso_local half @atomicrmw_fmin_half_aligned_monotonic(ptr %ptr, half %val
11201235
ret half %r
11211236
}
11221237

1238+
define dso_local void @atomicrmw_fmin_half_aligned_monotonic_unused(ptr %ptr, half %value) {
1239+
; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic_unused:
1240+
; CHECK: ldfminnm h0, h0, [x0]
1241+
%r = atomicrmw fmin ptr %ptr, half %value monotonic, align 2
1242+
ret void
1243+
}
1244+
11231245
define dso_local half @atomicrmw_fmin_half_aligned_acquire(ptr %ptr, half %value) {
11241246
; CHECK-LABEL: atomicrmw_fmin_half_aligned_acquire:
11251247
; CHECK: ldfminnma h0, h0, [x0]
@@ -1134,6 +1256,13 @@ define dso_local half @atomicrmw_fmin_half_aligned_release(ptr %ptr, half %value
11341256
ret half %r
11351257
}
11361258

1259+
define dso_local void @atomicrmw_fmin_half_aligned_release_unused(ptr %ptr, half %value) {
1260+
; CHECK-LABEL: atomicrmw_fmin_half_aligned_release_unused:
1261+
; CHECK: ldfminnml h0, h0, [x0]
1262+
%r = atomicrmw fmin ptr %ptr, half %value release, align 2
1263+
ret void
1264+
}
1265+
11371266
define dso_local half @atomicrmw_fmin_half_aligned_acq_rel(ptr %ptr, half %value) {
11381267
; CHECK-LABEL: atomicrmw_fmin_half_aligned_acq_rel:
11391268
; CHECK: ldfminnmal h0, h0, [x0]
@@ -1155,6 +1284,13 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_monotonic(ptr %ptr, bfloa
11551284
ret bfloat %r
11561285
}
11571286

1287+
define dso_local void @atomicrmw_fmin_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
1288+
; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic_unused:
1289+
; CHECK: ldbfminnm h0, h0, [x0]
1290+
%r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 2
1291+
ret void
1292+
}
1293+
11581294
define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
11591295
; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acquire:
11601296
; CHECK: ldbfminnma h0, h0, [x0]
@@ -1169,6 +1305,13 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_release(ptr %ptr, bfloat
11691305
ret bfloat %r
11701306
}
11711307

1308+
define dso_local void @atomicrmw_fmin_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
1309+
; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release_unused:
1310+
; CHECK: ldbfminnml h0, h0, [x0]
1311+
%r = atomicrmw fmin ptr %ptr, bfloat %value release, align 2
1312+
ret void
1313+
}
1314+
11721315
define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
11731316
; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acq_rel:
11741317
; CHECK: ldbfminnmal h0, h0, [x0]
@@ -1190,6 +1333,13 @@ define dso_local float @atomicrmw_fmin_float_aligned_monotonic(ptr %ptr, float %
11901333
ret float %r
11911334
}
11921335

1336+
define dso_local void @atomicrmw_fmin_float_aligned_monotonic_unused(ptr %ptr, float %value) {
1337+
; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic_unused:
1338+
; CHECK: ldfminnm s0, s0, [x0]
1339+
%r = atomicrmw fmin ptr %ptr, float %value monotonic, align 4
1340+
ret void
1341+
}
1342+
11931343
define dso_local float @atomicrmw_fmin_float_aligned_acquire(ptr %ptr, float %value) {
11941344
; CHECK-LABEL: atomicrmw_fmin_float_aligned_acquire:
11951345
; CHECK: ldfminnma s0, s0, [x0]
@@ -1204,6 +1354,13 @@ define dso_local float @atomicrmw_fmin_float_aligned_release(ptr %ptr, float %va
12041354
ret float %r
12051355
}
12061356

1357+
define dso_local void @atomicrmw_fmin_float_aligned_release_unused(ptr %ptr, float %value) {
1358+
; CHECK-LABEL: atomicrmw_fmin_float_aligned_release_unused:
1359+
; CHECK: ldfminnml s0, s0, [x0]
1360+
%r = atomicrmw fmin ptr %ptr, float %value release, align 4
1361+
ret void
1362+
}
1363+
12071364
define dso_local float @atomicrmw_fmin_float_aligned_acq_rel(ptr %ptr, float %value) {
12081365
; CHECK-LABEL: atomicrmw_fmin_float_aligned_acq_rel:
12091366
; CHECK: ldfminnmal s0, s0, [x0]
@@ -1225,6 +1382,13 @@ define dso_local double @atomicrmw_fmin_double_aligned_monotonic(ptr %ptr, doubl
12251382
ret double %r
12261383
}
12271384

1385+
define dso_local void @atomicrmw_fmin_double_aligned_monotonic_unused(ptr %ptr, double %value) {
1386+
; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic_unused:
1387+
; CHECK: ldfminnm d0, d0, [x0]
1388+
%r = atomicrmw fmin ptr %ptr, double %value monotonic, align 8
1389+
ret void
1390+
}
1391+
12281392
define dso_local double @atomicrmw_fmin_double_aligned_acquire(ptr %ptr, double %value) {
12291393
; CHECK-LABEL: atomicrmw_fmin_double_aligned_acquire:
12301394
; CHECK: ldfminnma d0, d0, [x0]
@@ -1239,6 +1403,13 @@ define dso_local double @atomicrmw_fmin_double_aligned_release(ptr %ptr, double
12391403
ret double %r
12401404
}
12411405

1406+
define dso_local void @atomicrmw_fmin_double_aligned_release_unused(ptr %ptr, double %value) {
1407+
; CHECK-LABEL: atomicrmw_fmin_double_aligned_release_unused:
1408+
; CHECK: ldfminnml d0, d0, [x0]
1409+
%r = atomicrmw fmin ptr %ptr, double %value release, align 8
1410+
ret void
1411+
}
1412+
12421413
define dso_local double @atomicrmw_fmin_double_aligned_acq_rel(ptr %ptr, double %value) {
12431414
; CHECK-LABEL: atomicrmw_fmin_double_aligned_acq_rel:
12441415
; CHECK: ldfminnmal d0, d0, [x0]

0 commit comments

Comments
 (0)