[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.
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
@@ -820,6 +879,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]
|
||||
@@ -834,6 +900,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]
|
||||
@@ -855,6 +928,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]
|
||||
@@ -869,6 +949,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]
|
||||
@@ -890,6 +977,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]
|
||||
@@ -904,6 +998,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]
|
||||
@@ -925,6 +1026,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]
|
||||
@@ -939,6 +1047,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]
|
||||
@@ -1135,6 +1250,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]
|
||||
@@ -1149,6 +1271,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]
|
||||
@@ -1170,6 +1299,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]
|
||||
@@ -1184,6 +1320,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]
|
||||
@@ -1205,6 +1348,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]
|
||||
@@ -1219,6 +1369,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]
|
||||
@@ -1240,6 +1397,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]
|
||||
@@ -1254,6 +1418,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]
|
||||
|
||||
@@ -189,19 +189,29 @@ def relpath():
|
||||
return fp
|
||||
|
||||
|
||||
def generate_unused_res_test(featname, ordering, op, alignval):
|
||||
if featname != "lsfe" or op == "fsub" or alignval == 1:
|
||||
return False
|
||||
if ordering not in [AtomicOrder.monotonic, AtomicOrder.release]:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def align(val, aligned: bool) -> int:
|
||||
return val if aligned else 1
|
||||
|
||||
|
||||
def all_atomicrmw(f, datatype, atomicrmw_ops):
|
||||
def all_atomicrmw(f, datatype, atomicrmw_ops, featname):
|
||||
instr = "atomicrmw"
|
||||
generate_unused = False
|
||||
tests = []
|
||||
for op in atomicrmw_ops:
|
||||
for aligned in Aligned:
|
||||
for ty, val in datatype:
|
||||
alignval = align(val, aligned)
|
||||
for ordering in ATOMICRMW_ORDERS:
|
||||
name = f"atomicrmw_{op}_{ty}_{aligned}_{ordering}"
|
||||
instr = "atomicrmw"
|
||||
f.write(
|
||||
tests.append(
|
||||
textwrap.dedent(
|
||||
f"""
|
||||
define dso_local {ty} @{name}(ptr %ptr, {ty} %value) {{
|
||||
@@ -211,6 +221,29 @@ def all_atomicrmw(f, datatype, atomicrmw_ops):
|
||||
"""
|
||||
)
|
||||
)
|
||||
if generate_unused_res_test(featname, ordering, op, alignval):
|
||||
generate_unused = True
|
||||
name = f"atomicrmw_{op}_{ty}_{aligned}_{ordering}_unused"
|
||||
tests.append(
|
||||
textwrap.dedent(
|
||||
f"""
|
||||
define dso_local void @{name}(ptr %ptr, {ty} %value) {{
|
||||
%r = {instr} {op} ptr %ptr, {ty} %value {ordering}, align {alignval}
|
||||
ret void
|
||||
}}
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
if generate_unused:
|
||||
f.write(
|
||||
"\n; NOTE: '_unused' tests are added to ensure we do not lower to "
|
||||
"ST[F]ADD when the destination register is WZR/XZR.\n"
|
||||
"; See discussion on https://github.com/llvm/llvm-project/pull/131174\n"
|
||||
)
|
||||
|
||||
for test in tests:
|
||||
f.write(test)
|
||||
|
||||
|
||||
def all_load(f):
|
||||
@@ -340,7 +373,7 @@ def write_lit_tests(feature, datatypes, ops):
|
||||
with open(f"{triple}-atomicrmw-{feat.name}.ll", "w") as f:
|
||||
filter_args = r'--filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"'
|
||||
header(f, triple, [feat], filter_args)
|
||||
all_atomicrmw(f, datatypes, ops)
|
||||
all_atomicrmw(f, datatypes, ops, feat.name)
|
||||
|
||||
# Floating point atomics only supported for atomicrmw currently
|
||||
if feature.test_scope() == "atomicrmw":
|
||||
|
||||
Reference in New Issue
Block a user