-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[AArch64][CodeGen] Add +lsfe atomicrmw tests where the result is unused. #132022
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[AArch64][CodeGen] Add +lsfe atomicrmw tests where the result is unused. #132022
Conversation
Following the discussion on llvm#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.
|
@llvm/pr-subscribers-backend-aarch64 Author: Kerry McLaughlin (kmclaughlin-arm) ChangesFollowing the discussion on #131174, update generate-tests.py script to Patch is 32.17 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/132022.diff 3 Files Affected:
diff --git a/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll b/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
index fc9a126f79a83..ef1f11e71f433 100644
--- a/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
+++ b/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
@@ -3,6 +3,9 @@
; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lsfe -O0 | FileCheck %s --check-prefixes=CHECK,-O0
; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lsfe -O1 | FileCheck %s --check-prefixes=CHECK,-O1
+; NOTE: '_unused' tests are added to ensure we do not lower to ST[F]ADD when the destination register is WZR/XZR.
+; See discussion on https://github.com/llvm/llvm-project/pull/131174
+
define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic:
; CHECK: ldfadd h0, h0, [x0]
@@ -10,6 +13,13 @@ define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %val
ret half %r
}
+define dso_local void @atomicrmw_fadd_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic_unused:
+; CHECK: ldfadd h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fadd_half_aligned_acquire:
; CHECK: ldfadda h0, h0, [x0]
@@ -24,6 +34,13 @@ define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value
ret half %r
}
+define dso_local void @atomicrmw_fadd_half_aligned_release_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_aligned_release_unused:
+; CHECK: ldfaddl h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value release, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
; CHECK: ldfaddal h0, h0, [x0]
@@ -45,6 +62,13 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloa
ret bfloat %r
}
+define dso_local void @atomicrmw_fadd_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic_unused:
+; CHECK: ldbfadd h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
; CHECK: ldbfadda h0, h0, [x0]
@@ -59,6 +83,13 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat
ret bfloat %r
}
+define dso_local void @atomicrmw_fadd_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release_unused:
+; CHECK: ldbfaddl h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
; CHECK: ldbfaddal h0, h0, [x0]
@@ -80,6 +111,13 @@ define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %
ret float %r
}
+define dso_local void @atomicrmw_fadd_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic_unused:
+; CHECK: ldfadd s0, s0, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fadd_float_aligned_acquire:
; CHECK: ldfadda s0, s0, [x0]
@@ -94,6 +132,13 @@ define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %va
ret float %r
}
+define dso_local void @atomicrmw_fadd_float_aligned_release_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fadd_float_aligned_release_unused:
+; CHECK: ldfaddl s0, s0, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value release, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
; CHECK: ldfaddal s0, s0, [x0]
@@ -115,6 +160,13 @@ define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, doubl
ret double %r
}
+define dso_local void @atomicrmw_fadd_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic_unused:
+; CHECK: ldfadd d0, d0, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fadd_double_aligned_acquire:
; CHECK: ldfadda d0, d0, [x0]
@@ -129,6 +181,13 @@ define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double
ret double %r
}
+define dso_local void @atomicrmw_fadd_double_aligned_release_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fadd_double_aligned_release_unused:
+; CHECK: ldfaddl d0, d0, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value release, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
; CHECK: ldfaddal d0, d0, [x0]
@@ -805,6 +864,13 @@ define dso_local half @atomicrmw_fmax_half_aligned_monotonic(ptr %ptr, half %val
ret half %r
}
+define dso_local void @atomicrmw_fmax_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic_unused:
+; CHECK: ldfmaxnm h0, h0, [x0]
+ %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fmax_half_aligned_acquire(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fmax_half_aligned_acquire:
; CHECK: ldfmaxnma h0, h0, [x0]
@@ -819,6 +885,13 @@ define dso_local half @atomicrmw_fmax_half_aligned_release(ptr %ptr, half %value
ret half %r
}
+define dso_local void @atomicrmw_fmax_half_aligned_release_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fmax_half_aligned_release_unused:
+; CHECK: ldfmaxnml h0, h0, [x0]
+ %r = atomicrmw fmax ptr %ptr, half %value release, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fmax_half_aligned_acq_rel(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fmax_half_aligned_acq_rel:
; CHECK: ldfmaxnmal h0, h0, [x0]
@@ -840,6 +913,13 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_monotonic(ptr %ptr, bfloa
ret bfloat %r
}
+define dso_local void @atomicrmw_fmax_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic_unused:
+; CHECK: ldbfmaxnm h0, h0, [x0]
+ %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acquire:
; CHECK: ldbfmaxnma h0, h0, [x0]
@@ -854,6 +934,13 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_release(ptr %ptr, bfloat
ret bfloat %r
}
+define dso_local void @atomicrmw_fmax_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release_unused:
+; CHECK: ldbfmaxnml h0, h0, [x0]
+ %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acq_rel:
; CHECK: ldbfmaxnmal h0, h0, [x0]
@@ -875,6 +962,13 @@ define dso_local float @atomicrmw_fmax_float_aligned_monotonic(ptr %ptr, float %
ret float %r
}
+define dso_local void @atomicrmw_fmax_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic_unused:
+; CHECK: ldfmaxnm s0, s0, [x0]
+ %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fmax_float_aligned_acquire(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fmax_float_aligned_acquire:
; CHECK: ldfmaxnma s0, s0, [x0]
@@ -889,6 +983,13 @@ define dso_local float @atomicrmw_fmax_float_aligned_release(ptr %ptr, float %va
ret float %r
}
+define dso_local void @atomicrmw_fmax_float_aligned_release_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fmax_float_aligned_release_unused:
+; CHECK: ldfmaxnml s0, s0, [x0]
+ %r = atomicrmw fmax ptr %ptr, float %value release, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fmax_float_aligned_acq_rel(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fmax_float_aligned_acq_rel:
; CHECK: ldfmaxnmal s0, s0, [x0]
@@ -910,6 +1011,13 @@ define dso_local double @atomicrmw_fmax_double_aligned_monotonic(ptr %ptr, doubl
ret double %r
}
+define dso_local void @atomicrmw_fmax_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic_unused:
+; CHECK: ldfmaxnm d0, d0, [x0]
+ %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fmax_double_aligned_acquire(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fmax_double_aligned_acquire:
; CHECK: ldfmaxnma d0, d0, [x0]
@@ -924,6 +1032,13 @@ define dso_local double @atomicrmw_fmax_double_aligned_release(ptr %ptr, double
ret double %r
}
+define dso_local void @atomicrmw_fmax_double_aligned_release_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fmax_double_aligned_release_unused:
+; CHECK: ldfmaxnml d0, d0, [x0]
+ %r = atomicrmw fmax ptr %ptr, double %value release, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fmax_double_aligned_acq_rel(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fmax_double_aligned_acq_rel:
; CHECK: ldfmaxnmal d0, d0, [x0]
@@ -1120,6 +1235,13 @@ define dso_local half @atomicrmw_fmin_half_aligned_monotonic(ptr %ptr, half %val
ret half %r
}
+define dso_local void @atomicrmw_fmin_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic_unused:
+; CHECK: ldfminnm h0, h0, [x0]
+ %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fmin_half_aligned_acquire(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fmin_half_aligned_acquire:
; CHECK: ldfminnma h0, h0, [x0]
@@ -1134,6 +1256,13 @@ define dso_local half @atomicrmw_fmin_half_aligned_release(ptr %ptr, half %value
ret half %r
}
+define dso_local void @atomicrmw_fmin_half_aligned_release_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fmin_half_aligned_release_unused:
+; CHECK: ldfminnml h0, h0, [x0]
+ %r = atomicrmw fmin ptr %ptr, half %value release, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fmin_half_aligned_acq_rel(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fmin_half_aligned_acq_rel:
; CHECK: ldfminnmal h0, h0, [x0]
@@ -1155,6 +1284,13 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_monotonic(ptr %ptr, bfloa
ret bfloat %r
}
+define dso_local void @atomicrmw_fmin_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic_unused:
+; CHECK: ldbfminnm h0, h0, [x0]
+ %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acquire:
; CHECK: ldbfminnma h0, h0, [x0]
@@ -1169,6 +1305,13 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_release(ptr %ptr, bfloat
ret bfloat %r
}
+define dso_local void @atomicrmw_fmin_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release_unused:
+; CHECK: ldbfminnml h0, h0, [x0]
+ %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acq_rel:
; CHECK: ldbfminnmal h0, h0, [x0]
@@ -1190,6 +1333,13 @@ define dso_local float @atomicrmw_fmin_float_aligned_monotonic(ptr %ptr, float %
ret float %r
}
+define dso_local void @atomicrmw_fmin_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic_unused:
+; CHECK: ldfminnm s0, s0, [x0]
+ %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fmin_float_aligned_acquire(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fmin_float_aligned_acquire:
; CHECK: ldfminnma s0, s0, [x0]
@@ -1204,6 +1354,13 @@ define dso_local float @atomicrmw_fmin_float_aligned_release(ptr %ptr, float %va
ret float %r
}
+define dso_local void @atomicrmw_fmin_float_aligned_release_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fmin_float_aligned_release_unused:
+; CHECK: ldfminnml s0, s0, [x0]
+ %r = atomicrmw fmin ptr %ptr, float %value release, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fmin_float_aligned_acq_rel(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fmin_float_aligned_acq_rel:
; CHECK: ldfminnmal s0, s0, [x0]
@@ -1225,6 +1382,13 @@ define dso_local double @atomicrmw_fmin_double_aligned_monotonic(ptr %ptr, doubl
ret double %r
}
+define dso_local void @atomicrmw_fmin_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic_unused:
+; CHECK: ldfminnm d0, d0, [x0]
+ %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fmin_double_aligned_acquire(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fmin_double_aligned_acquire:
; CHECK: ldfminnma d0, d0, [x0]
@@ -1239,6 +1403,13 @@ define dso_local double @atomicrmw_fmin_double_aligned_release(ptr %ptr, double
ret double %r
}
+define dso_local void @atomicrmw_fmin_double_aligned_release_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fmin_double_aligned_release_unused:
+; CHECK: ldfminnml d0, d0, [x0]
+ %r = atomicrmw fmin ptr %ptr, double %value release, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fmin_double_aligned_acq_rel(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fmin_double_aligned_acq_rel:
; CHECK: ldfminnmal d0, d0, [x0]
diff --git a/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll b/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll
index a22cc5806d86d..b43d6eb0fe80b 100644
--- a/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll
+++ b/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll
@@ -3,6 +3,9 @@
; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+lsfe -O0 | FileCheck %s --check-prefixes=CHECK,-O0
; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+lsfe -O1 | FileCheck %s --check-prefixes=CHECK,-O1
+; NOTE: '_unused' tests are added to ensure we do not lower to ST[F]ADD when the destination register is WZR/XZR.
+; See discussion on https://github.com/llvm/llvm-project/pull/131174
+
define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic:
; CHECK: ldfadd h0, h0, [x0]
@@ -10,6 +13,13 @@ define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %val
ret half %r
}
+define dso_local void @atomicrmw_fadd_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic_unused:
+; CHECK: ldfadd h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fadd_half_aligned_acquire:
; CHECK: ldfadda h0, h0, [x0]
@@ -24,6 +34,13 @@ define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value
ret half %r
}
+define dso_local void @atomicrmw_fadd_half_aligned_release_unused(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_aligned_release_unused:
+; CHECK: ldfaddl h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value release, align 2
+ ret void
+}
+
define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) {
; CHECK-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
; CHECK: ldfaddal h0, h0, [x0]
@@ -45,6 +62,13 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloa
ret bfloat %r
}
+define dso_local void @atomicrmw_fadd_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic_unused:
+; CHECK: ldbfadd h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
; CHECK: ldbfadda h0, h0, [x0]
@@ -59,6 +83,13 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat
ret bfloat %r
}
+define dso_local void @atomicrmw_fadd_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release_unused:
+; CHECK: ldbfaddl h0, h0, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
+ ret void
+}
+
define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
; CHECK: ldbfaddal h0, h0, [x0]
@@ -80,6 +111,13 @@ define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %
ret float %r
}
+define dso_local void @atomicrmw_fadd_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic_unused:
+; CHECK: ldfadd s0, s0, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fadd_float_aligned_acquire:
; CHECK: ldfadda s0, s0, [x0]
@@ -94,6 +132,13 @@ define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %va
ret float %r
}
+define dso_local void @atomicrmw_fadd_float_aligned_release_unused(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fadd_float_aligned_release_unused:
+; CHECK: ldfaddl s0, s0, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value release, align 4
+ ret void
+}
+
define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) {
; CHECK-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
; CHECK: ldfaddal s0, s0, [x0]
@@ -115,6 +160,13 @@ define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, doubl
ret double %r
}
+define dso_local void @atomicrmw_fadd_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic_unused:
+; CHECK: ldfadd d0, d0, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fadd_double_aligned_acquire:
; CHECK: ldfadda d0, d0, [x0]
@@ -129,6 +181,13 @@ define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double
ret double %r
}
+define dso_local void @atomicrmw_fadd_double_aligned_release_unused(ptr %ptr, double %value) {
+; CHECK-LABEL: atomicrmw_fadd_double_aligned_release_unused:
+; CHECK: ldfaddl d0, d0, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value release, align 8
+ ret void
+}
+
define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) {
; CHECK-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
; CHECK: ldfaddal d0, d0, [x0]
@@ -82...
[truncated]
|
|
✅ With the latest revision this PR passed the Python code formatter. |
tmatheson-arm
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks. This doesn't cover the equivalent LSE cases but at least we have LSFE covered.
jthackray
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM; should help us when we revisit this in future
|
Thanks! |
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.