-
Notifications
You must be signed in to change notification settings - Fork 14.2k
[AArch64] Pre-commit tests for #125686 (NFC) #126643
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
Conversation
@llvm/pr-subscribers-backend-aarch64 Author: Jonathan Thackray (jthackray) ChangesUpdate the Generate auto-tests to check both with and without Patch is 188.98 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/126643.diff 5 Files Affected:
diff --git a/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll b/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
new file mode 100644
index 000000000000000..662f4fa8c4c3a64
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
@@ -0,0 +1,2565 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --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)"
+; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py
+; 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
+; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK-no-lsfe
+
+define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) {
+; -O0-LABEL: atomicrmw_fadd_half_aligned_monotonic:
+; -O0: ldaxrh w0, [x9]
+; -O0: cmp w0, w10, uxth
+; -O0: stlxrh w8, w11, [x9]
+; -O0: subs w8, w8, w0, uxth
+;
+; -O1-LABEL: atomicrmw_fadd_half_aligned_monotonic:
+; -O1: ldxrh w8, [x0]
+; -O1: stxrh w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_aligned_monotonic:
+; CHECK-no-lsfe: ldxrh w8, [x0]
+; CHECK-no-lsfe: stxrh w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) {
+; -O0-LABEL: atomicrmw_fadd_half_aligned_acquire:
+; -O0: ldaxrh w0, [x9]
+; -O0: cmp w0, w10, uxth
+; -O0: stlxrh w8, w11, [x9]
+; -O0: subs w8, w8, w0, uxth
+;
+; -O1-LABEL: atomicrmw_fadd_half_aligned_acquire:
+; -O1: ldaxrh w8, [x0]
+; -O1: stxrh w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_aligned_acquire:
+; CHECK-no-lsfe: ldaxrh w8, [x0]
+; CHECK-no-lsfe: stxrh w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value acquire, align 2
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value) {
+; -O0-LABEL: atomicrmw_fadd_half_aligned_release:
+; -O0: ldaxrh w0, [x9]
+; -O0: cmp w0, w10, uxth
+; -O0: stlxrh w8, w11, [x9]
+; -O0: subs w8, w8, w0, uxth
+;
+; -O1-LABEL: atomicrmw_fadd_half_aligned_release:
+; -O1: ldxrh w8, [x0]
+; -O1: stlxrh w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_aligned_release:
+; CHECK-no-lsfe: ldxrh w8, [x0]
+; CHECK-no-lsfe: stlxrh w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value release, align 2
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) {
+; -O0-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
+; -O0: ldaxrh w0, [x9]
+; -O0: cmp w0, w10, uxth
+; -O0: stlxrh w8, w11, [x9]
+; -O0: subs w8, w8, w0, uxth
+;
+; -O1-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
+; -O1: ldaxrh w8, [x0]
+; -O1: stlxrh w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
+; CHECK-no-lsfe: ldaxrh w8, [x0]
+; CHECK-no-lsfe: stlxrh w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 2
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_aligned_seq_cst(ptr %ptr, half %value) {
+; -O0-LABEL: atomicrmw_fadd_half_aligned_seq_cst:
+; -O0: ldaxrh w0, [x9]
+; -O0: cmp w0, w10, uxth
+; -O0: stlxrh w8, w11, [x9]
+; -O0: subs w8, w8, w0, uxth
+;
+; -O1-LABEL: atomicrmw_fadd_half_aligned_seq_cst:
+; -O1: ldaxrh w8, [x0]
+; -O1: stlxrh w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_aligned_seq_cst:
+; CHECK-no-lsfe: ldaxrh w8, [x0]
+; CHECK-no-lsfe: stlxrh w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 2
+ ret half %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: ldaxrh w9, [x11]
+; -O0: cmp w9, w8, uxth
+; -O0: stlxrh w10, w12, [x11]
+; -O0: subs w8, w9, w8, uxth
+; -O0: subs w8, w8, #1
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic:
+; -O1: ldxrh w9, [x0]
+; -O1: add w9, w9, w8
+; -O1: add w9, w10, w9
+; -O1: stxrh w10, w9, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic:
+; CHECK-no-lsfe: ldxrh w9, [x0]
+; CHECK-no-lsfe: add w9, w9, w8
+; CHECK-no-lsfe: add w9, w10, w9
+; CHECK-no-lsfe: stxrh w10, w9, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: ldaxrh w9, [x11]
+; -O0: cmp w9, w8, uxth
+; -O0: stlxrh w10, w12, [x11]
+; -O0: subs w8, w9, w8, uxth
+; -O0: subs w8, w8, #1
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
+; -O1: ldaxrh w9, [x0]
+; -O1: add w9, w9, w8
+; -O1: add w9, w10, w9
+; -O1: stxrh w10, w9, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
+; CHECK-no-lsfe: ldaxrh w9, [x0]
+; CHECK-no-lsfe: add w9, w9, w8
+; CHECK-no-lsfe: add w9, w10, w9
+; CHECK-no-lsfe: stxrh w10, w9, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value acquire, align 2
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_aligned_release:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: ldaxrh w9, [x11]
+; -O0: cmp w9, w8, uxth
+; -O0: stlxrh w10, w12, [x11]
+; -O0: subs w8, w9, w8, uxth
+; -O0: subs w8, w8, #1
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_aligned_release:
+; -O1: ldxrh w9, [x0]
+; -O1: add w9, w9, w8
+; -O1: add w9, w10, w9
+; -O1: stlxrh w10, w9, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_aligned_release:
+; CHECK-no-lsfe: ldxrh w9, [x0]
+; CHECK-no-lsfe: add w9, w9, w8
+; CHECK-no-lsfe: add w9, w10, w9
+; CHECK-no-lsfe: stlxrh w10, w9, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: ldaxrh w9, [x11]
+; -O0: cmp w9, w8, uxth
+; -O0: stlxrh w10, w12, [x11]
+; -O0: subs w8, w9, w8, uxth
+; -O0: subs w8, w8, #1
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
+; -O1: ldaxrh w9, [x0]
+; -O1: add w9, w9, w8
+; -O1: add w9, w10, w9
+; -O1: stlxrh w10, w9, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
+; CHECK-no-lsfe: ldaxrh w9, [x0]
+; CHECK-no-lsfe: add w9, w9, w8
+; CHECK-no-lsfe: add w9, w10, w9
+; CHECK-no-lsfe: stlxrh w10, w9, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value acq_rel, align 2
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_aligned_seq_cst:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: ldaxrh w9, [x11]
+; -O0: cmp w9, w8, uxth
+; -O0: stlxrh w10, w12, [x11]
+; -O0: subs w8, w9, w8, uxth
+; -O0: subs w8, w8, #1
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_aligned_seq_cst:
+; -O1: ldaxrh w9, [x0]
+; -O1: add w9, w9, w8
+; -O1: add w9, w10, w9
+; -O1: stlxrh w10, w9, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_aligned_seq_cst:
+; CHECK-no-lsfe: ldaxrh w9, [x0]
+; CHECK-no-lsfe: add w9, w9, w8
+; CHECK-no-lsfe: add w9, w10, w9
+; CHECK-no-lsfe: stlxrh w10, w9, [x0]
+ %r = atomicrmw fadd ptr %ptr, bfloat %value seq_cst, align 2
+ ret bfloat %r
+}
+
+define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %value) {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_monotonic:
+; -O0: ldaxr w0, [x9]
+; -O0: cmp w0, w10
+; -O0: stlxr w8, w11, [x9]
+; -O0: subs w8, w0, w8
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_monotonic:
+; -O1: ldxr w8, [x0]
+; -O1: stxr w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_aligned_monotonic:
+; CHECK-no-lsfe: ldxr w8, [x0]
+; CHECK-no-lsfe: stxr w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
+ ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_acquire:
+; -O0: ldaxr w0, [x9]
+; -O0: cmp w0, w10
+; -O0: stlxr w8, w11, [x9]
+; -O0: subs w8, w0, w8
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_acquire:
+; -O1: ldaxr w8, [x0]
+; -O1: stxr w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_aligned_acquire:
+; CHECK-no-lsfe: ldaxr w8, [x0]
+; CHECK-no-lsfe: stxr w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value acquire, align 4
+ ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %value) {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_release:
+; -O0: ldaxr w0, [x9]
+; -O0: cmp w0, w10
+; -O0: stlxr w8, w11, [x9]
+; -O0: subs w8, w0, w8
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_release:
+; -O1: ldxr w8, [x0]
+; -O1: stlxr w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_aligned_release:
+; CHECK-no-lsfe: ldxr w8, [x0]
+; CHECK-no-lsfe: stlxr w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value release, align 4
+ ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
+; -O0: ldaxr w0, [x9]
+; -O0: cmp w0, w10
+; -O0: stlxr w8, w11, [x9]
+; -O0: subs w8, w0, w8
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
+; -O1: ldaxr w8, [x0]
+; -O1: stlxr w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
+; CHECK-no-lsfe: ldaxr w8, [x0]
+; CHECK-no-lsfe: stlxr w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value acq_rel, align 4
+ ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_aligned_seq_cst(ptr %ptr, float %value) {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_seq_cst:
+; -O0: ldaxr w0, [x9]
+; -O0: cmp w0, w10
+; -O0: stlxr w8, w11, [x9]
+; -O0: subs w8, w0, w8
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_seq_cst:
+; -O1: ldaxr w8, [x0]
+; -O1: stlxr w9, w8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_aligned_seq_cst:
+; CHECK-no-lsfe: ldaxr w8, [x0]
+; CHECK-no-lsfe: stlxr w9, w8, [x0]
+ %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
+ ret float %r
+}
+
+define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, double %value) {
+; -O0-LABEL: atomicrmw_fadd_double_aligned_monotonic:
+; -O0: ldaxr x0, [x9]
+; -O0: cmp x0, x10
+; -O0: stlxr w8, x11, [x9]
+; -O0: subs x8, x0, x8
+;
+; -O1-LABEL: atomicrmw_fadd_double_aligned_monotonic:
+; -O1: ldxr x8, [x0]
+; -O1: stxr w9, x8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_double_aligned_monotonic:
+; CHECK-no-lsfe: ldxr x8, [x0]
+; CHECK-no-lsfe: stxr w9, x8, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
+ ret double %r
+}
+
+define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) {
+; -O0-LABEL: atomicrmw_fadd_double_aligned_acquire:
+; -O0: ldaxr x0, [x9]
+; -O0: cmp x0, x10
+; -O0: stlxr w8, x11, [x9]
+; -O0: subs x8, x0, x8
+;
+; -O1-LABEL: atomicrmw_fadd_double_aligned_acquire:
+; -O1: ldaxr x8, [x0]
+; -O1: stxr w9, x8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_double_aligned_acquire:
+; CHECK-no-lsfe: ldaxr x8, [x0]
+; CHECK-no-lsfe: stxr w9, x8, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value acquire, align 8
+ ret double %r
+}
+
+define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double %value) {
+; -O0-LABEL: atomicrmw_fadd_double_aligned_release:
+; -O0: ldaxr x0, [x9]
+; -O0: cmp x0, x10
+; -O0: stlxr w8, x11, [x9]
+; -O0: subs x8, x0, x8
+;
+; -O1-LABEL: atomicrmw_fadd_double_aligned_release:
+; -O1: ldxr x8, [x0]
+; -O1: stlxr w9, x8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_double_aligned_release:
+; CHECK-no-lsfe: ldxr x8, [x0]
+; CHECK-no-lsfe: stlxr w9, x8, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value release, align 8
+ ret double %r
+}
+
+define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) {
+; -O0-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
+; -O0: ldaxr x0, [x9]
+; -O0: cmp x0, x10
+; -O0: stlxr w8, x11, [x9]
+; -O0: subs x8, x0, x8
+;
+; -O1-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
+; -O1: ldaxr x8, [x0]
+; -O1: stlxr w9, x8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
+; CHECK-no-lsfe: ldaxr x8, [x0]
+; CHECK-no-lsfe: stlxr w9, x8, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value acq_rel, align 8
+ ret double %r
+}
+
+define dso_local double @atomicrmw_fadd_double_aligned_seq_cst(ptr %ptr, double %value) {
+; -O0-LABEL: atomicrmw_fadd_double_aligned_seq_cst:
+; -O0: ldaxr x0, [x9]
+; -O0: cmp x0, x10
+; -O0: stlxr w8, x11, [x9]
+; -O0: subs x8, x0, x8
+;
+; -O1-LABEL: atomicrmw_fadd_double_aligned_seq_cst:
+; -O1: ldaxr x8, [x0]
+; -O1: stlxr w9, x8, [x0]
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_double_aligned_seq_cst:
+; CHECK-no-lsfe: ldaxr x8, [x0]
+; CHECK-no-lsfe: stlxr w9, x8, [x0]
+ %r = atomicrmw fadd ptr %ptr, double %value seq_cst, align 8
+ ret double %r
+}
+
+define dso_local half @atomicrmw_fadd_half_unaligned_monotonic(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_unaligned_monotonic:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_unaligned_monotonic:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 1
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_unaligned_acquire(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acquire:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_unaligned_acquire:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, half %value acquire, align 1
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_unaligned_release(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_unaligned_release:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_unaligned_release:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, half %value release, align 1
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_unaligned_acq_rel(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acq_rel:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_unaligned_acq_rel:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 1
+ ret half %r
+}
+
+define dso_local half @atomicrmw_fadd_half_unaligned_seq_cst(ptr %ptr, half %value) {
+; CHECK-LABEL: atomicrmw_fadd_half_unaligned_seq_cst:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_half_unaligned_seq_cst:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 1
+ ret half %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_monotonic:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: bl __atomic_compare_exchange
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_monotonic:
+; -O1: add w8, w8, w20
+; -O1: add w8, w9, w8
+; -O1: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_unaligned_monotonic:
+; CHECK-no-lsfe: add w8, w8, w20
+; CHECK-no-lsfe: add w8, w9, w8
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 1
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acquire:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: bl __atomic_compare_exchange
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_acquire:
+; -O1: add w8, w8, w20
+; -O1: add w8, w9, w8
+; -O1: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_unaligned_acquire:
+; CHECK-no-lsfe: add w8, w8, w20
+; CHECK-no-lsfe: add w8, w9, w8
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, bfloat %value acquire, align 1
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_release:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: bl __atomic_compare_exchange
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_release:
+; -O1: add w8, w8, w20
+; -O1: add w8, w9, w8
+; -O1: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_unaligned_release:
+; CHECK-no-lsfe: add w8, w8, w20
+; CHECK-no-lsfe: add w8, w9, w8
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 1
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acq_rel:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: bl __atomic_compare_exchange
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_acq_rel:
+; -O1: add w8, w8, w20
+; -O1: add w8, w9, w8
+; -O1: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_unaligned_acq_rel:
+; CHECK-no-lsfe: add w8, w8, w20
+; CHECK-no-lsfe: add w8, w9, w8
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, bfloat %value acq_rel, align 1
+ ret bfloat %r
+}
+
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_seq_cst:
+; -O0: add w8, w8, w9
+; -O0: add w8, w8, w9
+; -O0: bl __atomic_compare_exchange
+;
+; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_seq_cst:
+; -O1: add w8, w8, w20
+; -O1: add w8, w9, w8
+; -O1: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_bfloat_unaligned_seq_cst:
+; CHECK-no-lsfe: add w8, w8, w20
+; CHECK-no-lsfe: add w8, w9, w8
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, bfloat %value seq_cst, align 1
+ ret bfloat %r
+}
+
+define dso_local float @atomicrmw_fadd_float_unaligned_monotonic(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fadd_float_unaligned_monotonic:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_unaligned_monotonic:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 1
+ ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_unaligned_acquire(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fadd_float_unaligned_acquire:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_unaligned_acquire:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, float %value acquire, align 1
+ ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_unaligned_release(ptr %ptr, float %value) {
+; CHECK-LABEL: atomicrmw_fadd_float_unaligned_release:
+; CHECK: bl __atomic_compare_exchange
+;
+; CHECK-no-lsfe-LABEL: atomicrmw_fadd_float_unaligned_release:
+; CHECK-no-lsfe: bl __atomic_compare_exchange
+ %r = atomicrmw fadd ptr %ptr, float %value release, align 1
+ ret float %r
+}
+
+define dso_local float @atomicrmw_...
[truncated]
|
✅ With the latest revision this PR passed the Python code formatter. |
Update the `generate-tests.py` script to create new tests for `atomicrmw {fadd,fmin,fmax}` and test these with `half`, `float`, `bfloat` and `double`. Generate auto-tests to check both with and without `+lsfe`, so that when llvm#125868 is merged, `+lsfe` will use a single atomic floating-point instruction.
e4399f2
to
3c897b1
Compare
ec88dda
to
5bf38e7
Compare
Update the `generate-tests.py` script to create new tests for `atomicrmw {fadd,fmin,fmax}` and test these with `half`, `float`, `bfloat` and `double`. Generate fp auto-tests to check both with and without `+lsfe`, so that when llvm#125686 is merged, `+lsfe` will use a single atomic floating-point instruction.
Update the `generate-tests.py` script to create new tests for `atomicrmw {fadd,fmin,fmax}` and test these with `half`, `float`, `bfloat` and `double`. Generate fp auto-tests to check both with and without `+lsfe`, so that when llvm#125686 is merged, `+lsfe` will use a single atomic floating-point instruction.
Update the `generate-tests.py` script to create new tests for `atomicrmw {fadd,fmin,fmax}` and test these with `half`, `float`, `bfloat` and `double`. Generate fp auto-tests to check both with and without `+lsfe`, so that when llvm#125686 is merged, `+lsfe` will use a single atomic floating-point instruction.
Update the
generate-tests.py
script to create new tests foratomicrmw {fadd,fmin,fmax}
and test these withhalf
,float
,bfloat
anddouble
.Generate auto-tests to check both with and without
+lsfe
, so that when #125686 is merged,+lsfe
will use a single atomic floating-point instruction.