brintos

brintos / llvm-project-archived public Read only

0
0
Text · 84.5 KiB · e0f2dd7 Raw
2338 lines · plain
1; 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)"2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lsfe -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lsfe -O1 | FileCheck %s --check-prefixes=CHECK,-O15 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/1311748 9define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) {10; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic:11; CHECK:    ldfadd h0, h0, [x0]12    %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 213    ret half %r14}15 16define 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 220    ret void21}22 23define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) {24; CHECK-LABEL: atomicrmw_fadd_half_aligned_acquire:25; CHECK:    ldfadda h0, h0, [x0]26    %r = atomicrmw fadd ptr %ptr, half %value acquire, align 227    ret half %r28}29 30define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value) {31; CHECK-LABEL: atomicrmw_fadd_half_aligned_release:32; CHECK:    ldfaddl h0, h0, [x0]33    %r = atomicrmw fadd ptr %ptr, half %value release, align 234    ret half %r35}36 37define 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 241    ret void42}43 44define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) {45; CHECK-LABEL: atomicrmw_fadd_half_aligned_acq_rel:46; CHECK:    ldfaddal h0, h0, [x0]47    %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 248    ret half %r49}50 51define dso_local half @atomicrmw_fadd_half_aligned_seq_cst(ptr %ptr, half %value) {52; CHECK-LABEL: atomicrmw_fadd_half_aligned_seq_cst:53; CHECK:    ldfaddal h0, h0, [x0]54    %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 255    ret half %r56}57 58define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {59; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic:60; CHECK:    ldbfadd h0, h0, [x0]61    %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 262    ret bfloat %r63}64 65define 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 269    ret void70}71 72define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {73; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:74; CHECK:    ldbfadda h0, h0, [x0]75    %r = atomicrmw fadd ptr %ptr, bfloat %value acquire, align 276    ret bfloat %r77}78 79define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat %value) {80; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release:81; CHECK:    ldbfaddl h0, h0, [x0]82    %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 283    ret bfloat %r84}85 86define 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 290    ret void91}92 93define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {94; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:95; CHECK:    ldbfaddal h0, h0, [x0]96    %r = atomicrmw fadd ptr %ptr, bfloat %value acq_rel, align 297    ret bfloat %r98}99 100define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {101; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_seq_cst:102; CHECK:    ldbfaddal h0, h0, [x0]103    %r = atomicrmw fadd ptr %ptr, bfloat %value seq_cst, align 2104    ret bfloat %r105}106 107define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %value) {108; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic:109; CHECK:    ldfadd s0, s0, [x0]110    %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4111    ret float %r112}113 114define 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 4118    ret void119}120 121define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) {122; CHECK-LABEL: atomicrmw_fadd_float_aligned_acquire:123; CHECK:    ldfadda s0, s0, [x0]124    %r = atomicrmw fadd ptr %ptr, float %value acquire, align 4125    ret float %r126}127 128define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %value) {129; CHECK-LABEL: atomicrmw_fadd_float_aligned_release:130; CHECK:    ldfaddl s0, s0, [x0]131    %r = atomicrmw fadd ptr %ptr, float %value release, align 4132    ret float %r133}134 135define 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 4139    ret void140}141 142define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) {143; CHECK-LABEL: atomicrmw_fadd_float_aligned_acq_rel:144; CHECK:    ldfaddal s0, s0, [x0]145    %r = atomicrmw fadd ptr %ptr, float %value acq_rel, align 4146    ret float %r147}148 149define dso_local float @atomicrmw_fadd_float_aligned_seq_cst(ptr %ptr, float %value) {150; CHECK-LABEL: atomicrmw_fadd_float_aligned_seq_cst:151; CHECK:    ldfaddal s0, s0, [x0]152    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4153    ret float %r154}155 156define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, double %value) {157; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic:158; CHECK:    ldfadd d0, d0, [x0]159    %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8160    ret double %r161}162 163define 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 8167    ret void168}169 170define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) {171; CHECK-LABEL: atomicrmw_fadd_double_aligned_acquire:172; CHECK:    ldfadda d0, d0, [x0]173    %r = atomicrmw fadd ptr %ptr, double %value acquire, align 8174    ret double %r175}176 177define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double %value) {178; CHECK-LABEL: atomicrmw_fadd_double_aligned_release:179; CHECK:    ldfaddl d0, d0, [x0]180    %r = atomicrmw fadd ptr %ptr, double %value release, align 8181    ret double %r182}183 184define 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 8188    ret void189}190 191define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) {192; CHECK-LABEL: atomicrmw_fadd_double_aligned_acq_rel:193; CHECK:    ldfaddal d0, d0, [x0]194    %r = atomicrmw fadd ptr %ptr, double %value acq_rel, align 8195    ret double %r196}197 198define dso_local double @atomicrmw_fadd_double_aligned_seq_cst(ptr %ptr, double %value) {199; CHECK-LABEL: atomicrmw_fadd_double_aligned_seq_cst:200; CHECK:    ldfaddal d0, d0, [x0]201    %r = atomicrmw fadd ptr %ptr, double %value seq_cst, align 8202    ret double %r203}204 205define dso_local half @atomicrmw_fadd_half_unaligned_monotonic(ptr %ptr, half %value) {206; CHECK-LABEL: atomicrmw_fadd_half_unaligned_monotonic:207; CHECK:    bl __atomic_compare_exchange208    %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 1209    ret half %r210}211 212define dso_local half @atomicrmw_fadd_half_unaligned_acquire(ptr %ptr, half %value) {213; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acquire:214; CHECK:    bl __atomic_compare_exchange215    %r = atomicrmw fadd ptr %ptr, half %value acquire, align 1216    ret half %r217}218 219define dso_local half @atomicrmw_fadd_half_unaligned_release(ptr %ptr, half %value) {220; CHECK-LABEL: atomicrmw_fadd_half_unaligned_release:221; CHECK:    bl __atomic_compare_exchange222    %r = atomicrmw fadd ptr %ptr, half %value release, align 1223    ret half %r224}225 226define dso_local half @atomicrmw_fadd_half_unaligned_acq_rel(ptr %ptr, half %value) {227; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acq_rel:228; CHECK:    bl __atomic_compare_exchange229    %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 1230    ret half %r231}232 233define dso_local half @atomicrmw_fadd_half_unaligned_seq_cst(ptr %ptr, half %value) {234; CHECK-LABEL: atomicrmw_fadd_half_unaligned_seq_cst:235; CHECK:    bl __atomic_compare_exchange236    %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 1237    ret half %r238}239 240define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {241; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_monotonic:242; -O0:    add w8, w8, w9243; -O0:    add w8, w8, w9244; -O0:    bl __atomic_compare_exchange245;246; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_monotonic:247; -O1:    add w8, w8, w20248; -O1:    add w8, w9, w8249; -O1:    bl __atomic_compare_exchange250    %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 1251    ret bfloat %r252}253 254define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {255; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acquire:256; -O0:    add w8, w8, w9257; -O0:    add w8, w8, w9258; -O0:    bl __atomic_compare_exchange259;260; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_acquire:261; -O1:    add w8, w8, w20262; -O1:    add w8, w9, w8263; -O1:    bl __atomic_compare_exchange264    %r = atomicrmw fadd ptr %ptr, bfloat %value acquire, align 1265    ret bfloat %r266}267 268define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloat %value) {269; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_release:270; -O0:    add w8, w8, w9271; -O0:    add w8, w8, w9272; -O0:    bl __atomic_compare_exchange273;274; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_release:275; -O1:    add w8, w8, w20276; -O1:    add w8, w9, w8277; -O1:    bl __atomic_compare_exchange278    %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 1279    ret bfloat %r280}281 282define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {283; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acq_rel:284; -O0:    add w8, w8, w9285; -O0:    add w8, w8, w9286; -O0:    bl __atomic_compare_exchange287;288; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_acq_rel:289; -O1:    add w8, w8, w20290; -O1:    add w8, w9, w8291; -O1:    bl __atomic_compare_exchange292    %r = atomicrmw fadd ptr %ptr, bfloat %value acq_rel, align 1293    ret bfloat %r294}295 296define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {297; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_seq_cst:298; -O0:    add w8, w8, w9299; -O0:    add w8, w8, w9300; -O0:    bl __atomic_compare_exchange301;302; -O1-LABEL: atomicrmw_fadd_bfloat_unaligned_seq_cst:303; -O1:    add w8, w8, w20304; -O1:    add w8, w9, w8305; -O1:    bl __atomic_compare_exchange306    %r = atomicrmw fadd ptr %ptr, bfloat %value seq_cst, align 1307    ret bfloat %r308}309 310define dso_local float @atomicrmw_fadd_float_unaligned_monotonic(ptr %ptr, float %value) {311; CHECK-LABEL: atomicrmw_fadd_float_unaligned_monotonic:312; CHECK:    bl __atomic_compare_exchange313    %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 1314    ret float %r315}316 317define dso_local float @atomicrmw_fadd_float_unaligned_acquire(ptr %ptr, float %value) {318; CHECK-LABEL: atomicrmw_fadd_float_unaligned_acquire:319; CHECK:    bl __atomic_compare_exchange320    %r = atomicrmw fadd ptr %ptr, float %value acquire, align 1321    ret float %r322}323 324define dso_local float @atomicrmw_fadd_float_unaligned_release(ptr %ptr, float %value) {325; CHECK-LABEL: atomicrmw_fadd_float_unaligned_release:326; CHECK:    bl __atomic_compare_exchange327    %r = atomicrmw fadd ptr %ptr, float %value release, align 1328    ret float %r329}330 331define dso_local float @atomicrmw_fadd_float_unaligned_acq_rel(ptr %ptr, float %value) {332; CHECK-LABEL: atomicrmw_fadd_float_unaligned_acq_rel:333; CHECK:    bl __atomic_compare_exchange334    %r = atomicrmw fadd ptr %ptr, float %value acq_rel, align 1335    ret float %r336}337 338define dso_local float @atomicrmw_fadd_float_unaligned_seq_cst(ptr %ptr, float %value) {339; CHECK-LABEL: atomicrmw_fadd_float_unaligned_seq_cst:340; CHECK:    bl __atomic_compare_exchange341    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 1342    ret float %r343}344 345define dso_local double @atomicrmw_fadd_double_unaligned_monotonic(ptr %ptr, double %value) {346; CHECK-LABEL: atomicrmw_fadd_double_unaligned_monotonic:347; CHECK:    bl __atomic_compare_exchange348    %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 1349    ret double %r350}351 352define dso_local double @atomicrmw_fadd_double_unaligned_acquire(ptr %ptr, double %value) {353; CHECK-LABEL: atomicrmw_fadd_double_unaligned_acquire:354; CHECK:    bl __atomic_compare_exchange355    %r = atomicrmw fadd ptr %ptr, double %value acquire, align 1356    ret double %r357}358 359define dso_local double @atomicrmw_fadd_double_unaligned_release(ptr %ptr, double %value) {360; CHECK-LABEL: atomicrmw_fadd_double_unaligned_release:361; CHECK:    bl __atomic_compare_exchange362    %r = atomicrmw fadd ptr %ptr, double %value release, align 1363    ret double %r364}365 366define dso_local double @atomicrmw_fadd_double_unaligned_acq_rel(ptr %ptr, double %value) {367; CHECK-LABEL: atomicrmw_fadd_double_unaligned_acq_rel:368; CHECK:    bl __atomic_compare_exchange369    %r = atomicrmw fadd ptr %ptr, double %value acq_rel, align 1370    ret double %r371}372 373define dso_local double @atomicrmw_fadd_double_unaligned_seq_cst(ptr %ptr, double %value) {374; CHECK-LABEL: atomicrmw_fadd_double_unaligned_seq_cst:375; CHECK:    bl __atomic_compare_exchange376    %r = atomicrmw fadd ptr %ptr, double %value seq_cst, align 1377    ret double %r378}379 380define dso_local half @atomicrmw_fsub_half_aligned_monotonic(ptr %ptr, half %value) {381; -O0-LABEL: atomicrmw_fsub_half_aligned_monotonic:382; -O0:    ldaxrh w0, [x9]383; -O0:    cmp w0, w10, uxth384; -O0:    stlxrh w8, w11, [x9]385; -O0:    subs w8, w8, w0, uxth386;387; -O1-LABEL: atomicrmw_fsub_half_aligned_monotonic:388; -O1:    ldxrh w8, [x0]389; -O1:    stxrh w9, w8, [x0]390    %r = atomicrmw fsub ptr %ptr, half %value monotonic, align 2391    ret half %r392}393 394define dso_local half @atomicrmw_fsub_half_aligned_acquire(ptr %ptr, half %value) {395; -O0-LABEL: atomicrmw_fsub_half_aligned_acquire:396; -O0:    ldaxrh w0, [x9]397; -O0:    cmp w0, w10, uxth398; -O0:    stlxrh w8, w11, [x9]399; -O0:    subs w8, w8, w0, uxth400;401; -O1-LABEL: atomicrmw_fsub_half_aligned_acquire:402; -O1:    ldaxrh w8, [x0]403; -O1:    stxrh w9, w8, [x0]404    %r = atomicrmw fsub ptr %ptr, half %value acquire, align 2405    ret half %r406}407 408define dso_local half @atomicrmw_fsub_half_aligned_release(ptr %ptr, half %value) {409; -O0-LABEL: atomicrmw_fsub_half_aligned_release:410; -O0:    ldaxrh w0, [x9]411; -O0:    cmp w0, w10, uxth412; -O0:    stlxrh w8, w11, [x9]413; -O0:    subs w8, w8, w0, uxth414;415; -O1-LABEL: atomicrmw_fsub_half_aligned_release:416; -O1:    ldxrh w8, [x0]417; -O1:    stlxrh w9, w8, [x0]418    %r = atomicrmw fsub ptr %ptr, half %value release, align 2419    ret half %r420}421 422define dso_local half @atomicrmw_fsub_half_aligned_acq_rel(ptr %ptr, half %value) {423; -O0-LABEL: atomicrmw_fsub_half_aligned_acq_rel:424; -O0:    ldaxrh w0, [x9]425; -O0:    cmp w0, w10, uxth426; -O0:    stlxrh w8, w11, [x9]427; -O0:    subs w8, w8, w0, uxth428;429; -O1-LABEL: atomicrmw_fsub_half_aligned_acq_rel:430; -O1:    ldaxrh w8, [x0]431; -O1:    stlxrh w9, w8, [x0]432    %r = atomicrmw fsub ptr %ptr, half %value acq_rel, align 2433    ret half %r434}435 436define dso_local half @atomicrmw_fsub_half_aligned_seq_cst(ptr %ptr, half %value) {437; -O0-LABEL: atomicrmw_fsub_half_aligned_seq_cst:438; -O0:    ldaxrh w0, [x9]439; -O0:    cmp w0, w10, uxth440; -O0:    stlxrh w8, w11, [x9]441; -O0:    subs w8, w8, w0, uxth442;443; -O1-LABEL: atomicrmw_fsub_half_aligned_seq_cst:444; -O1:    ldaxrh w8, [x0]445; -O1:    stlxrh w9, w8, [x0]446    %r = atomicrmw fsub ptr %ptr, half %value seq_cst, align 2447    ret half %r448}449 450define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {451; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_monotonic:452; -O0:    add w8, w8, w9453; -O0:    add w8, w8, w9454; -O0:    ldaxrh w8, [x11]455; -O0:    cmp w8, w9, uxth456; -O0:    stlxrh w10, w12, [x11]457; -O0:    subs w9, w8, w9, uxth458;459; -O1-LABEL: atomicrmw_fsub_bfloat_aligned_monotonic:460; -O1:    ldxrh w9, [x0]461; -O1:    add w9, w9, w8462; -O1:    add w9, w10, w9463; -O1:    stxrh w10, w9, [x0]464    %r = atomicrmw fsub ptr %ptr, bfloat %value monotonic, align 2465    ret bfloat %r466}467 468define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {469; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_acquire:470; -O0:    add w8, w8, w9471; -O0:    add w8, w8, w9472; -O0:    ldaxrh w8, [x11]473; -O0:    cmp w8, w9, uxth474; -O0:    stlxrh w10, w12, [x11]475; -O0:    subs w9, w8, w9, uxth476;477; -O1-LABEL: atomicrmw_fsub_bfloat_aligned_acquire:478; -O1:    ldaxrh w9, [x0]479; -O1:    add w9, w9, w8480; -O1:    add w9, w10, w9481; -O1:    stxrh w10, w9, [x0]482    %r = atomicrmw fsub ptr %ptr, bfloat %value acquire, align 2483    ret bfloat %r484}485 486define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_release(ptr %ptr, bfloat %value) {487; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_release:488; -O0:    add w8, w8, w9489; -O0:    add w8, w8, w9490; -O0:    ldaxrh w8, [x11]491; -O0:    cmp w8, w9, uxth492; -O0:    stlxrh w10, w12, [x11]493; -O0:    subs w9, w8, w9, uxth494;495; -O1-LABEL: atomicrmw_fsub_bfloat_aligned_release:496; -O1:    ldxrh w9, [x0]497; -O1:    add w9, w9, w8498; -O1:    add w9, w10, w9499; -O1:    stlxrh w10, w9, [x0]500    %r = atomicrmw fsub ptr %ptr, bfloat %value release, align 2501    ret bfloat %r502}503 504define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {505; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_acq_rel:506; -O0:    add w8, w8, w9507; -O0:    add w8, w8, w9508; -O0:    ldaxrh w8, [x11]509; -O0:    cmp w8, w9, uxth510; -O0:    stlxrh w10, w12, [x11]511; -O0:    subs w9, w8, w9, uxth512;513; -O1-LABEL: atomicrmw_fsub_bfloat_aligned_acq_rel:514; -O1:    ldaxrh w9, [x0]515; -O1:    add w9, w9, w8516; -O1:    add w9, w10, w9517; -O1:    stlxrh w10, w9, [x0]518    %r = atomicrmw fsub ptr %ptr, bfloat %value acq_rel, align 2519    ret bfloat %r520}521 522define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {523; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_seq_cst:524; -O0:    add w8, w8, w9525; -O0:    add w8, w8, w9526; -O0:    ldaxrh w8, [x11]527; -O0:    cmp w8, w9, uxth528; -O0:    stlxrh w10, w12, [x11]529; -O0:    subs w9, w8, w9, uxth530;531; -O1-LABEL: atomicrmw_fsub_bfloat_aligned_seq_cst:532; -O1:    ldaxrh w9, [x0]533; -O1:    add w9, w9, w8534; -O1:    add w9, w10, w9535; -O1:    stlxrh w10, w9, [x0]536    %r = atomicrmw fsub ptr %ptr, bfloat %value seq_cst, align 2537    ret bfloat %r538}539 540define dso_local float @atomicrmw_fsub_float_aligned_monotonic(ptr %ptr, float %value) {541; -O0-LABEL: atomicrmw_fsub_float_aligned_monotonic:542; -O0:    ldaxr w0, [x9]543; -O0:    cmp w0, w10544; -O0:    stlxr w8, w11, [x9]545; -O0:    subs w8, w0, w8546;547; -O1-LABEL: atomicrmw_fsub_float_aligned_monotonic:548; -O1:    ldxr w8, [x0]549; -O1:    stxr w9, w8, [x0]550    %r = atomicrmw fsub ptr %ptr, float %value monotonic, align 4551    ret float %r552}553 554define dso_local float @atomicrmw_fsub_float_aligned_acquire(ptr %ptr, float %value) {555; -O0-LABEL: atomicrmw_fsub_float_aligned_acquire:556; -O0:    ldaxr w0, [x9]557; -O0:    cmp w0, w10558; -O0:    stlxr w8, w11, [x9]559; -O0:    subs w8, w0, w8560;561; -O1-LABEL: atomicrmw_fsub_float_aligned_acquire:562; -O1:    ldaxr w8, [x0]563; -O1:    stxr w9, w8, [x0]564    %r = atomicrmw fsub ptr %ptr, float %value acquire, align 4565    ret float %r566}567 568define dso_local float @atomicrmw_fsub_float_aligned_release(ptr %ptr, float %value) {569; -O0-LABEL: atomicrmw_fsub_float_aligned_release:570; -O0:    ldaxr w0, [x9]571; -O0:    cmp w0, w10572; -O0:    stlxr w8, w11, [x9]573; -O0:    subs w8, w0, w8574;575; -O1-LABEL: atomicrmw_fsub_float_aligned_release:576; -O1:    ldxr w8, [x0]577; -O1:    stlxr w9, w8, [x0]578    %r = atomicrmw fsub ptr %ptr, float %value release, align 4579    ret float %r580}581 582define dso_local float @atomicrmw_fsub_float_aligned_acq_rel(ptr %ptr, float %value) {583; -O0-LABEL: atomicrmw_fsub_float_aligned_acq_rel:584; -O0:    ldaxr w0, [x9]585; -O0:    cmp w0, w10586; -O0:    stlxr w8, w11, [x9]587; -O0:    subs w8, w0, w8588;589; -O1-LABEL: atomicrmw_fsub_float_aligned_acq_rel:590; -O1:    ldaxr w8, [x0]591; -O1:    stlxr w9, w8, [x0]592    %r = atomicrmw fsub ptr %ptr, float %value acq_rel, align 4593    ret float %r594}595 596define dso_local float @atomicrmw_fsub_float_aligned_seq_cst(ptr %ptr, float %value) {597; -O0-LABEL: atomicrmw_fsub_float_aligned_seq_cst:598; -O0:    ldaxr w0, [x9]599; -O0:    cmp w0, w10600; -O0:    stlxr w8, w11, [x9]601; -O0:    subs w8, w0, w8602;603; -O1-LABEL: atomicrmw_fsub_float_aligned_seq_cst:604; -O1:    ldaxr w8, [x0]605; -O1:    stlxr w9, w8, [x0]606    %r = atomicrmw fsub ptr %ptr, float %value seq_cst, align 4607    ret float %r608}609 610define dso_local double @atomicrmw_fsub_double_aligned_monotonic(ptr %ptr, double %value) {611; -O0-LABEL: atomicrmw_fsub_double_aligned_monotonic:612; -O0:    ldaxr x0, [x9]613; -O0:    cmp x0, x10614; -O0:    stlxr w8, x11, [x9]615; -O0:    subs x8, x0, x8616;617; -O1-LABEL: atomicrmw_fsub_double_aligned_monotonic:618; -O1:    ldxr x8, [x0]619; -O1:    stxr w9, x8, [x0]620    %r = atomicrmw fsub ptr %ptr, double %value monotonic, align 8621    ret double %r622}623 624define dso_local double @atomicrmw_fsub_double_aligned_acquire(ptr %ptr, double %value) {625; -O0-LABEL: atomicrmw_fsub_double_aligned_acquire:626; -O0:    ldaxr x0, [x9]627; -O0:    cmp x0, x10628; -O0:    stlxr w8, x11, [x9]629; -O0:    subs x8, x0, x8630;631; -O1-LABEL: atomicrmw_fsub_double_aligned_acquire:632; -O1:    ldaxr x8, [x0]633; -O1:    stxr w9, x8, [x0]634    %r = atomicrmw fsub ptr %ptr, double %value acquire, align 8635    ret double %r636}637 638define dso_local double @atomicrmw_fsub_double_aligned_release(ptr %ptr, double %value) {639; -O0-LABEL: atomicrmw_fsub_double_aligned_release:640; -O0:    ldaxr x0, [x9]641; -O0:    cmp x0, x10642; -O0:    stlxr w8, x11, [x9]643; -O0:    subs x8, x0, x8644;645; -O1-LABEL: atomicrmw_fsub_double_aligned_release:646; -O1:    ldxr x8, [x0]647; -O1:    stlxr w9, x8, [x0]648    %r = atomicrmw fsub ptr %ptr, double %value release, align 8649    ret double %r650}651 652define dso_local double @atomicrmw_fsub_double_aligned_acq_rel(ptr %ptr, double %value) {653; -O0-LABEL: atomicrmw_fsub_double_aligned_acq_rel:654; -O0:    ldaxr x0, [x9]655; -O0:    cmp x0, x10656; -O0:    stlxr w8, x11, [x9]657; -O0:    subs x8, x0, x8658;659; -O1-LABEL: atomicrmw_fsub_double_aligned_acq_rel:660; -O1:    ldaxr x8, [x0]661; -O1:    stlxr w9, x8, [x0]662    %r = atomicrmw fsub ptr %ptr, double %value acq_rel, align 8663    ret double %r664}665 666define dso_local double @atomicrmw_fsub_double_aligned_seq_cst(ptr %ptr, double %value) {667; -O0-LABEL: atomicrmw_fsub_double_aligned_seq_cst:668; -O0:    ldaxr x0, [x9]669; -O0:    cmp x0, x10670; -O0:    stlxr w8, x11, [x9]671; -O0:    subs x8, x0, x8672;673; -O1-LABEL: atomicrmw_fsub_double_aligned_seq_cst:674; -O1:    ldaxr x8, [x0]675; -O1:    stlxr w9, x8, [x0]676    %r = atomicrmw fsub ptr %ptr, double %value seq_cst, align 8677    ret double %r678}679 680define dso_local half @atomicrmw_fsub_half_unaligned_monotonic(ptr %ptr, half %value) {681; CHECK-LABEL: atomicrmw_fsub_half_unaligned_monotonic:682; CHECK:    bl __atomic_compare_exchange683    %r = atomicrmw fsub ptr %ptr, half %value monotonic, align 1684    ret half %r685}686 687define dso_local half @atomicrmw_fsub_half_unaligned_acquire(ptr %ptr, half %value) {688; CHECK-LABEL: atomicrmw_fsub_half_unaligned_acquire:689; CHECK:    bl __atomic_compare_exchange690    %r = atomicrmw fsub ptr %ptr, half %value acquire, align 1691    ret half %r692}693 694define dso_local half @atomicrmw_fsub_half_unaligned_release(ptr %ptr, half %value) {695; CHECK-LABEL: atomicrmw_fsub_half_unaligned_release:696; CHECK:    bl __atomic_compare_exchange697    %r = atomicrmw fsub ptr %ptr, half %value release, align 1698    ret half %r699}700 701define dso_local half @atomicrmw_fsub_half_unaligned_acq_rel(ptr %ptr, half %value) {702; CHECK-LABEL: atomicrmw_fsub_half_unaligned_acq_rel:703; CHECK:    bl __atomic_compare_exchange704    %r = atomicrmw fsub ptr %ptr, half %value acq_rel, align 1705    ret half %r706}707 708define dso_local half @atomicrmw_fsub_half_unaligned_seq_cst(ptr %ptr, half %value) {709; CHECK-LABEL: atomicrmw_fsub_half_unaligned_seq_cst:710; CHECK:    bl __atomic_compare_exchange711    %r = atomicrmw fsub ptr %ptr, half %value seq_cst, align 1712    ret half %r713}714 715define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {716; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_monotonic:717; -O0:    add w8, w8, w9718; -O0:    add w8, w8, w9719; -O0:    bl __atomic_compare_exchange720;721; -O1-LABEL: atomicrmw_fsub_bfloat_unaligned_monotonic:722; -O1:    add w8, w8, w20723; -O1:    add w8, w9, w8724; -O1:    bl __atomic_compare_exchange725    %r = atomicrmw fsub ptr %ptr, bfloat %value monotonic, align 1726    ret bfloat %r727}728 729define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {730; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_acquire:731; -O0:    add w8, w8, w9732; -O0:    add w8, w8, w9733; -O0:    bl __atomic_compare_exchange734;735; -O1-LABEL: atomicrmw_fsub_bfloat_unaligned_acquire:736; -O1:    add w8, w8, w20737; -O1:    add w8, w9, w8738; -O1:    bl __atomic_compare_exchange739    %r = atomicrmw fsub ptr %ptr, bfloat %value acquire, align 1740    ret bfloat %r741}742 743define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_release(ptr %ptr, bfloat %value) {744; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_release:745; -O0:    add w8, w8, w9746; -O0:    add w8, w8, w9747; -O0:    bl __atomic_compare_exchange748;749; -O1-LABEL: atomicrmw_fsub_bfloat_unaligned_release:750; -O1:    add w8, w8, w20751; -O1:    add w8, w9, w8752; -O1:    bl __atomic_compare_exchange753    %r = atomicrmw fsub ptr %ptr, bfloat %value release, align 1754    ret bfloat %r755}756 757define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {758; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_acq_rel:759; -O0:    add w8, w8, w9760; -O0:    add w8, w8, w9761; -O0:    bl __atomic_compare_exchange762;763; -O1-LABEL: atomicrmw_fsub_bfloat_unaligned_acq_rel:764; -O1:    add w8, w8, w20765; -O1:    add w8, w9, w8766; -O1:    bl __atomic_compare_exchange767    %r = atomicrmw fsub ptr %ptr, bfloat %value acq_rel, align 1768    ret bfloat %r769}770 771define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {772; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_seq_cst:773; -O0:    add w8, w8, w9774; -O0:    add w8, w8, w9775; -O0:    bl __atomic_compare_exchange776;777; -O1-LABEL: atomicrmw_fsub_bfloat_unaligned_seq_cst:778; -O1:    add w8, w8, w20779; -O1:    add w8, w9, w8780; -O1:    bl __atomic_compare_exchange781    %r = atomicrmw fsub ptr %ptr, bfloat %value seq_cst, align 1782    ret bfloat %r783}784 785define dso_local float @atomicrmw_fsub_float_unaligned_monotonic(ptr %ptr, float %value) {786; CHECK-LABEL: atomicrmw_fsub_float_unaligned_monotonic:787; CHECK:    bl __atomic_compare_exchange788    %r = atomicrmw fsub ptr %ptr, float %value monotonic, align 1789    ret float %r790}791 792define dso_local float @atomicrmw_fsub_float_unaligned_acquire(ptr %ptr, float %value) {793; CHECK-LABEL: atomicrmw_fsub_float_unaligned_acquire:794; CHECK:    bl __atomic_compare_exchange795    %r = atomicrmw fsub ptr %ptr, float %value acquire, align 1796    ret float %r797}798 799define dso_local float @atomicrmw_fsub_float_unaligned_release(ptr %ptr, float %value) {800; CHECK-LABEL: atomicrmw_fsub_float_unaligned_release:801; CHECK:    bl __atomic_compare_exchange802    %r = atomicrmw fsub ptr %ptr, float %value release, align 1803    ret float %r804}805 806define dso_local float @atomicrmw_fsub_float_unaligned_acq_rel(ptr %ptr, float %value) {807; CHECK-LABEL: atomicrmw_fsub_float_unaligned_acq_rel:808; CHECK:    bl __atomic_compare_exchange809    %r = atomicrmw fsub ptr %ptr, float %value acq_rel, align 1810    ret float %r811}812 813define dso_local float @atomicrmw_fsub_float_unaligned_seq_cst(ptr %ptr, float %value) {814; CHECK-LABEL: atomicrmw_fsub_float_unaligned_seq_cst:815; CHECK:    bl __atomic_compare_exchange816    %r = atomicrmw fsub ptr %ptr, float %value seq_cst, align 1817    ret float %r818}819 820define dso_local double @atomicrmw_fsub_double_unaligned_monotonic(ptr %ptr, double %value) {821; CHECK-LABEL: atomicrmw_fsub_double_unaligned_monotonic:822; CHECK:    bl __atomic_compare_exchange823    %r = atomicrmw fsub ptr %ptr, double %value monotonic, align 1824    ret double %r825}826 827define dso_local double @atomicrmw_fsub_double_unaligned_acquire(ptr %ptr, double %value) {828; CHECK-LABEL: atomicrmw_fsub_double_unaligned_acquire:829; CHECK:    bl __atomic_compare_exchange830    %r = atomicrmw fsub ptr %ptr, double %value acquire, align 1831    ret double %r832}833 834define dso_local double @atomicrmw_fsub_double_unaligned_release(ptr %ptr, double %value) {835; CHECK-LABEL: atomicrmw_fsub_double_unaligned_release:836; CHECK:    bl __atomic_compare_exchange837    %r = atomicrmw fsub ptr %ptr, double %value release, align 1838    ret double %r839}840 841define dso_local double @atomicrmw_fsub_double_unaligned_acq_rel(ptr %ptr, double %value) {842; CHECK-LABEL: atomicrmw_fsub_double_unaligned_acq_rel:843; CHECK:    bl __atomic_compare_exchange844    %r = atomicrmw fsub ptr %ptr, double %value acq_rel, align 1845    ret double %r846}847 848define dso_local double @atomicrmw_fsub_double_unaligned_seq_cst(ptr %ptr, double %value) {849; CHECK-LABEL: atomicrmw_fsub_double_unaligned_seq_cst:850; CHECK:    bl __atomic_compare_exchange851    %r = atomicrmw fsub ptr %ptr, double %value seq_cst, align 1852    ret double %r853}854 855define dso_local half @atomicrmw_fmax_half_aligned_monotonic(ptr %ptr, half %value) {856; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic:857; CHECK:    ldfmaxnm h0, h0, [x0]858    %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2859    ret half %r860}861 862define dso_local void @atomicrmw_fmax_half_aligned_monotonic_unused(ptr %ptr, half %value) {863; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic_unused:864; CHECK:    ldfmaxnm h0, h0, [x0]865    %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2866    ret void867}868 869define dso_local half @atomicrmw_fmax_half_aligned_acquire(ptr %ptr, half %value) {870; CHECK-LABEL: atomicrmw_fmax_half_aligned_acquire:871; CHECK:    ldfmaxnma h0, h0, [x0]872    %r = atomicrmw fmax ptr %ptr, half %value acquire, align 2873    ret half %r874}875 876define dso_local half @atomicrmw_fmax_half_aligned_release(ptr %ptr, half %value) {877; CHECK-LABEL: atomicrmw_fmax_half_aligned_release:878; CHECK:    ldfmaxnml h0, h0, [x0]879    %r = atomicrmw fmax ptr %ptr, half %value release, align 2880    ret half %r881}882 883define dso_local void @atomicrmw_fmax_half_aligned_release_unused(ptr %ptr, half %value) {884; CHECK-LABEL: atomicrmw_fmax_half_aligned_release_unused:885; CHECK:    ldfmaxnml h0, h0, [x0]886    %r = atomicrmw fmax ptr %ptr, half %value release, align 2887    ret void888}889 890define dso_local half @atomicrmw_fmax_half_aligned_acq_rel(ptr %ptr, half %value) {891; CHECK-LABEL: atomicrmw_fmax_half_aligned_acq_rel:892; CHECK:    ldfmaxnmal h0, h0, [x0]893    %r = atomicrmw fmax ptr %ptr, half %value acq_rel, align 2894    ret half %r895}896 897define dso_local half @atomicrmw_fmax_half_aligned_seq_cst(ptr %ptr, half %value) {898; CHECK-LABEL: atomicrmw_fmax_half_aligned_seq_cst:899; CHECK:    ldfmaxnmal h0, h0, [x0]900    %r = atomicrmw fmax ptr %ptr, half %value seq_cst, align 2901    ret half %r902}903 904define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {905; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic:906; CHECK:    ldbfmaxnm h0, h0, [x0]907    %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2908    ret bfloat %r909}910 911define dso_local void @atomicrmw_fmax_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {912; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic_unused:913; CHECK:    ldbfmaxnm h0, h0, [x0]914    %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2915    ret void916}917 918define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {919; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acquire:920; CHECK:    ldbfmaxnma h0, h0, [x0]921    %r = atomicrmw fmax ptr %ptr, bfloat %value acquire, align 2922    ret bfloat %r923}924 925define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_release(ptr %ptr, bfloat %value) {926; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release:927; CHECK:    ldbfmaxnml h0, h0, [x0]928    %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2929    ret bfloat %r930}931 932define dso_local void @atomicrmw_fmax_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {933; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release_unused:934; CHECK:    ldbfmaxnml h0, h0, [x0]935    %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2936    ret void937}938 939define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {940; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acq_rel:941; CHECK:    ldbfmaxnmal h0, h0, [x0]942    %r = atomicrmw fmax ptr %ptr, bfloat %value acq_rel, align 2943    ret bfloat %r944}945 946define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {947; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_seq_cst:948; CHECK:    ldbfmaxnmal h0, h0, [x0]949    %r = atomicrmw fmax ptr %ptr, bfloat %value seq_cst, align 2950    ret bfloat %r951}952 953define dso_local float @atomicrmw_fmax_float_aligned_monotonic(ptr %ptr, float %value) {954; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic:955; CHECK:    ldfmaxnm s0, s0, [x0]956    %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4957    ret float %r958}959 960define dso_local void @atomicrmw_fmax_float_aligned_monotonic_unused(ptr %ptr, float %value) {961; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic_unused:962; CHECK:    ldfmaxnm s0, s0, [x0]963    %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4964    ret void965}966 967define dso_local float @atomicrmw_fmax_float_aligned_acquire(ptr %ptr, float %value) {968; CHECK-LABEL: atomicrmw_fmax_float_aligned_acquire:969; CHECK:    ldfmaxnma s0, s0, [x0]970    %r = atomicrmw fmax ptr %ptr, float %value acquire, align 4971    ret float %r972}973 974define dso_local float @atomicrmw_fmax_float_aligned_release(ptr %ptr, float %value) {975; CHECK-LABEL: atomicrmw_fmax_float_aligned_release:976; CHECK:    ldfmaxnml s0, s0, [x0]977    %r = atomicrmw fmax ptr %ptr, float %value release, align 4978    ret float %r979}980 981define dso_local void @atomicrmw_fmax_float_aligned_release_unused(ptr %ptr, float %value) {982; CHECK-LABEL: atomicrmw_fmax_float_aligned_release_unused:983; CHECK:    ldfmaxnml s0, s0, [x0]984    %r = atomicrmw fmax ptr %ptr, float %value release, align 4985    ret void986}987 988define dso_local float @atomicrmw_fmax_float_aligned_acq_rel(ptr %ptr, float %value) {989; CHECK-LABEL: atomicrmw_fmax_float_aligned_acq_rel:990; CHECK:    ldfmaxnmal s0, s0, [x0]991    %r = atomicrmw fmax ptr %ptr, float %value acq_rel, align 4992    ret float %r993}994 995define dso_local float @atomicrmw_fmax_float_aligned_seq_cst(ptr %ptr, float %value) {996; CHECK-LABEL: atomicrmw_fmax_float_aligned_seq_cst:997; CHECK:    ldfmaxnmal s0, s0, [x0]998    %r = atomicrmw fmax ptr %ptr, float %value seq_cst, align 4999    ret float %r1000}1001 1002define dso_local double @atomicrmw_fmax_double_aligned_monotonic(ptr %ptr, double %value) {1003; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic:1004; CHECK:    ldfmaxnm d0, d0, [x0]1005    %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 81006    ret double %r1007}1008 1009define dso_local void @atomicrmw_fmax_double_aligned_monotonic_unused(ptr %ptr, double %value) {1010; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic_unused:1011; CHECK:    ldfmaxnm d0, d0, [x0]1012    %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 81013    ret void1014}1015 1016define dso_local double @atomicrmw_fmax_double_aligned_acquire(ptr %ptr, double %value) {1017; CHECK-LABEL: atomicrmw_fmax_double_aligned_acquire:1018; CHECK:    ldfmaxnma d0, d0, [x0]1019    %r = atomicrmw fmax ptr %ptr, double %value acquire, align 81020    ret double %r1021}1022 1023define dso_local double @atomicrmw_fmax_double_aligned_release(ptr %ptr, double %value) {1024; CHECK-LABEL: atomicrmw_fmax_double_aligned_release:1025; CHECK:    ldfmaxnml d0, d0, [x0]1026    %r = atomicrmw fmax ptr %ptr, double %value release, align 81027    ret double %r1028}1029 1030define dso_local void @atomicrmw_fmax_double_aligned_release_unused(ptr %ptr, double %value) {1031; CHECK-LABEL: atomicrmw_fmax_double_aligned_release_unused:1032; CHECK:    ldfmaxnml d0, d0, [x0]1033    %r = atomicrmw fmax ptr %ptr, double %value release, align 81034    ret void1035}1036 1037define dso_local double @atomicrmw_fmax_double_aligned_acq_rel(ptr %ptr, double %value) {1038; CHECK-LABEL: atomicrmw_fmax_double_aligned_acq_rel:1039; CHECK:    ldfmaxnmal d0, d0, [x0]1040    %r = atomicrmw fmax ptr %ptr, double %value acq_rel, align 81041    ret double %r1042}1043 1044define dso_local double @atomicrmw_fmax_double_aligned_seq_cst(ptr %ptr, double %value) {1045; CHECK-LABEL: atomicrmw_fmax_double_aligned_seq_cst:1046; CHECK:    ldfmaxnmal d0, d0, [x0]1047    %r = atomicrmw fmax ptr %ptr, double %value seq_cst, align 81048    ret double %r1049}1050 1051define dso_local half @atomicrmw_fmax_half_unaligned_monotonic(ptr %ptr, half %value) {1052; CHECK-LABEL: atomicrmw_fmax_half_unaligned_monotonic:1053; CHECK:    bl __atomic_compare_exchange1054    %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 11055    ret half %r1056}1057 1058define dso_local half @atomicrmw_fmax_half_unaligned_acquire(ptr %ptr, half %value) {1059; CHECK-LABEL: atomicrmw_fmax_half_unaligned_acquire:1060; CHECK:    bl __atomic_compare_exchange1061    %r = atomicrmw fmax ptr %ptr, half %value acquire, align 11062    ret half %r1063}1064 1065define dso_local half @atomicrmw_fmax_half_unaligned_release(ptr %ptr, half %value) {1066; CHECK-LABEL: atomicrmw_fmax_half_unaligned_release:1067; CHECK:    bl __atomic_compare_exchange1068    %r = atomicrmw fmax ptr %ptr, half %value release, align 11069    ret half %r1070}1071 1072define dso_local half @atomicrmw_fmax_half_unaligned_acq_rel(ptr %ptr, half %value) {1073; CHECK-LABEL: atomicrmw_fmax_half_unaligned_acq_rel:1074; CHECK:    bl __atomic_compare_exchange1075    %r = atomicrmw fmax ptr %ptr, half %value acq_rel, align 11076    ret half %r1077}1078 1079define dso_local half @atomicrmw_fmax_half_unaligned_seq_cst(ptr %ptr, half %value) {1080; CHECK-LABEL: atomicrmw_fmax_half_unaligned_seq_cst:1081; CHECK:    bl __atomic_compare_exchange1082    %r = atomicrmw fmax ptr %ptr, half %value seq_cst, align 11083    ret half %r1084}1085 1086define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {1087; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_monotonic:1088; -O0:    add w8, w8, w91089; -O0:    add w8, w8, w91090; -O0:    bl __atomic_compare_exchange1091;1092; -O1-LABEL: atomicrmw_fmax_bfloat_unaligned_monotonic:1093; -O1:    add w8, w8, w201094; -O1:    add w8, w9, w81095; -O1:    bl __atomic_compare_exchange1096    %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 11097    ret bfloat %r1098}1099 1100define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {1101; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_acquire:1102; -O0:    add w8, w8, w91103; -O0:    add w8, w8, w91104; -O0:    bl __atomic_compare_exchange1105;1106; -O1-LABEL: atomicrmw_fmax_bfloat_unaligned_acquire:1107; -O1:    add w8, w8, w201108; -O1:    add w8, w9, w81109; -O1:    bl __atomic_compare_exchange1110    %r = atomicrmw fmax ptr %ptr, bfloat %value acquire, align 11111    ret bfloat %r1112}1113 1114define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_release(ptr %ptr, bfloat %value) {1115; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_release:1116; -O0:    add w8, w8, w91117; -O0:    add w8, w8, w91118; -O0:    bl __atomic_compare_exchange1119;1120; -O1-LABEL: atomicrmw_fmax_bfloat_unaligned_release:1121; -O1:    add w8, w8, w201122; -O1:    add w8, w9, w81123; -O1:    bl __atomic_compare_exchange1124    %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 11125    ret bfloat %r1126}1127 1128define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {1129; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_acq_rel:1130; -O0:    add w8, w8, w91131; -O0:    add w8, w8, w91132; -O0:    bl __atomic_compare_exchange1133;1134; -O1-LABEL: atomicrmw_fmax_bfloat_unaligned_acq_rel:1135; -O1:    add w8, w8, w201136; -O1:    add w8, w9, w81137; -O1:    bl __atomic_compare_exchange1138    %r = atomicrmw fmax ptr %ptr, bfloat %value acq_rel, align 11139    ret bfloat %r1140}1141 1142define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {1143; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_seq_cst:1144; -O0:    add w8, w8, w91145; -O0:    add w8, w8, w91146; -O0:    bl __atomic_compare_exchange1147;1148; -O1-LABEL: atomicrmw_fmax_bfloat_unaligned_seq_cst:1149; -O1:    add w8, w8, w201150; -O1:    add w8, w9, w81151; -O1:    bl __atomic_compare_exchange1152    %r = atomicrmw fmax ptr %ptr, bfloat %value seq_cst, align 11153    ret bfloat %r1154}1155 1156define dso_local float @atomicrmw_fmax_float_unaligned_monotonic(ptr %ptr, float %value) {1157; CHECK-LABEL: atomicrmw_fmax_float_unaligned_monotonic:1158; CHECK:    bl __atomic_compare_exchange1159    %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 11160    ret float %r1161}1162 1163define dso_local float @atomicrmw_fmax_float_unaligned_acquire(ptr %ptr, float %value) {1164; CHECK-LABEL: atomicrmw_fmax_float_unaligned_acquire:1165; CHECK:    bl __atomic_compare_exchange1166    %r = atomicrmw fmax ptr %ptr, float %value acquire, align 11167    ret float %r1168}1169 1170define dso_local float @atomicrmw_fmax_float_unaligned_release(ptr %ptr, float %value) {1171; CHECK-LABEL: atomicrmw_fmax_float_unaligned_release:1172; CHECK:    bl __atomic_compare_exchange1173    %r = atomicrmw fmax ptr %ptr, float %value release, align 11174    ret float %r1175}1176 1177define dso_local float @atomicrmw_fmax_float_unaligned_acq_rel(ptr %ptr, float %value) {1178; CHECK-LABEL: atomicrmw_fmax_float_unaligned_acq_rel:1179; CHECK:    bl __atomic_compare_exchange1180    %r = atomicrmw fmax ptr %ptr, float %value acq_rel, align 11181    ret float %r1182}1183 1184define dso_local float @atomicrmw_fmax_float_unaligned_seq_cst(ptr %ptr, float %value) {1185; CHECK-LABEL: atomicrmw_fmax_float_unaligned_seq_cst:1186; CHECK:    bl __atomic_compare_exchange1187    %r = atomicrmw fmax ptr %ptr, float %value seq_cst, align 11188    ret float %r1189}1190 1191define dso_local double @atomicrmw_fmax_double_unaligned_monotonic(ptr %ptr, double %value) {1192; CHECK-LABEL: atomicrmw_fmax_double_unaligned_monotonic:1193; CHECK:    bl __atomic_compare_exchange1194    %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 11195    ret double %r1196}1197 1198define dso_local double @atomicrmw_fmax_double_unaligned_acquire(ptr %ptr, double %value) {1199; CHECK-LABEL: atomicrmw_fmax_double_unaligned_acquire:1200; CHECK:    bl __atomic_compare_exchange1201    %r = atomicrmw fmax ptr %ptr, double %value acquire, align 11202    ret double %r1203}1204 1205define dso_local double @atomicrmw_fmax_double_unaligned_release(ptr %ptr, double %value) {1206; CHECK-LABEL: atomicrmw_fmax_double_unaligned_release:1207; CHECK:    bl __atomic_compare_exchange1208    %r = atomicrmw fmax ptr %ptr, double %value release, align 11209    ret double %r1210}1211 1212define dso_local double @atomicrmw_fmax_double_unaligned_acq_rel(ptr %ptr, double %value) {1213; CHECK-LABEL: atomicrmw_fmax_double_unaligned_acq_rel:1214; CHECK:    bl __atomic_compare_exchange1215    %r = atomicrmw fmax ptr %ptr, double %value acq_rel, align 11216    ret double %r1217}1218 1219define dso_local double @atomicrmw_fmax_double_unaligned_seq_cst(ptr %ptr, double %value) {1220; CHECK-LABEL: atomicrmw_fmax_double_unaligned_seq_cst:1221; CHECK:    bl __atomic_compare_exchange1222    %r = atomicrmw fmax ptr %ptr, double %value seq_cst, align 11223    ret double %r1224}1225 1226define dso_local half @atomicrmw_fmin_half_aligned_monotonic(ptr %ptr, half %value) {1227; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic:1228; CHECK:    ldfminnm h0, h0, [x0]1229    %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 21230    ret half %r1231}1232 1233define dso_local void @atomicrmw_fmin_half_aligned_monotonic_unused(ptr %ptr, half %value) {1234; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic_unused:1235; CHECK:    ldfminnm h0, h0, [x0]1236    %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 21237    ret void1238}1239 1240define dso_local half @atomicrmw_fmin_half_aligned_acquire(ptr %ptr, half %value) {1241; CHECK-LABEL: atomicrmw_fmin_half_aligned_acquire:1242; CHECK:    ldfminnma h0, h0, [x0]1243    %r = atomicrmw fmin ptr %ptr, half %value acquire, align 21244    ret half %r1245}1246 1247define dso_local half @atomicrmw_fmin_half_aligned_release(ptr %ptr, half %value) {1248; CHECK-LABEL: atomicrmw_fmin_half_aligned_release:1249; CHECK:    ldfminnml h0, h0, [x0]1250    %r = atomicrmw fmin ptr %ptr, half %value release, align 21251    ret half %r1252}1253 1254define dso_local void @atomicrmw_fmin_half_aligned_release_unused(ptr %ptr, half %value) {1255; CHECK-LABEL: atomicrmw_fmin_half_aligned_release_unused:1256; CHECK:    ldfminnml h0, h0, [x0]1257    %r = atomicrmw fmin ptr %ptr, half %value release, align 21258    ret void1259}1260 1261define dso_local half @atomicrmw_fmin_half_aligned_acq_rel(ptr %ptr, half %value) {1262; CHECK-LABEL: atomicrmw_fmin_half_aligned_acq_rel:1263; CHECK:    ldfminnmal h0, h0, [x0]1264    %r = atomicrmw fmin ptr %ptr, half %value acq_rel, align 21265    ret half %r1266}1267 1268define dso_local half @atomicrmw_fmin_half_aligned_seq_cst(ptr %ptr, half %value) {1269; CHECK-LABEL: atomicrmw_fmin_half_aligned_seq_cst:1270; CHECK:    ldfminnmal h0, h0, [x0]1271    %r = atomicrmw fmin ptr %ptr, half %value seq_cst, align 21272    ret half %r1273}1274 1275define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {1276; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic:1277; CHECK:    ldbfminnm h0, h0, [x0]1278    %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 21279    ret bfloat %r1280}1281 1282define dso_local void @atomicrmw_fmin_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {1283; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic_unused:1284; CHECK:    ldbfminnm h0, h0, [x0]1285    %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 21286    ret void1287}1288 1289define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {1290; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acquire:1291; CHECK:    ldbfminnma h0, h0, [x0]1292    %r = atomicrmw fmin ptr %ptr, bfloat %value acquire, align 21293    ret bfloat %r1294}1295 1296define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_release(ptr %ptr, bfloat %value) {1297; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release:1298; CHECK:    ldbfminnml h0, h0, [x0]1299    %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 21300    ret bfloat %r1301}1302 1303define dso_local void @atomicrmw_fmin_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {1304; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release_unused:1305; CHECK:    ldbfminnml h0, h0, [x0]1306    %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 21307    ret void1308}1309 1310define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {1311; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acq_rel:1312; CHECK:    ldbfminnmal h0, h0, [x0]1313    %r = atomicrmw fmin ptr %ptr, bfloat %value acq_rel, align 21314    ret bfloat %r1315}1316 1317define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {1318; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_seq_cst:1319; CHECK:    ldbfminnmal h0, h0, [x0]1320    %r = atomicrmw fmin ptr %ptr, bfloat %value seq_cst, align 21321    ret bfloat %r1322}1323 1324define dso_local float @atomicrmw_fmin_float_aligned_monotonic(ptr %ptr, float %value) {1325; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic:1326; CHECK:    ldfminnm s0, s0, [x0]1327    %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 41328    ret float %r1329}1330 1331define dso_local void @atomicrmw_fmin_float_aligned_monotonic_unused(ptr %ptr, float %value) {1332; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic_unused:1333; CHECK:    ldfminnm s0, s0, [x0]1334    %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 41335    ret void1336}1337 1338define dso_local float @atomicrmw_fmin_float_aligned_acquire(ptr %ptr, float %value) {1339; CHECK-LABEL: atomicrmw_fmin_float_aligned_acquire:1340; CHECK:    ldfminnma s0, s0, [x0]1341    %r = atomicrmw fmin ptr %ptr, float %value acquire, align 41342    ret float %r1343}1344 1345define dso_local float @atomicrmw_fmin_float_aligned_release(ptr %ptr, float %value) {1346; CHECK-LABEL: atomicrmw_fmin_float_aligned_release:1347; CHECK:    ldfminnml s0, s0, [x0]1348    %r = atomicrmw fmin ptr %ptr, float %value release, align 41349    ret float %r1350}1351 1352define dso_local void @atomicrmw_fmin_float_aligned_release_unused(ptr %ptr, float %value) {1353; CHECK-LABEL: atomicrmw_fmin_float_aligned_release_unused:1354; CHECK:    ldfminnml s0, s0, [x0]1355    %r = atomicrmw fmin ptr %ptr, float %value release, align 41356    ret void1357}1358 1359define dso_local float @atomicrmw_fmin_float_aligned_acq_rel(ptr %ptr, float %value) {1360; CHECK-LABEL: atomicrmw_fmin_float_aligned_acq_rel:1361; CHECK:    ldfminnmal s0, s0, [x0]1362    %r = atomicrmw fmin ptr %ptr, float %value acq_rel, align 41363    ret float %r1364}1365 1366define dso_local float @atomicrmw_fmin_float_aligned_seq_cst(ptr %ptr, float %value) {1367; CHECK-LABEL: atomicrmw_fmin_float_aligned_seq_cst:1368; CHECK:    ldfminnmal s0, s0, [x0]1369    %r = atomicrmw fmin ptr %ptr, float %value seq_cst, align 41370    ret float %r1371}1372 1373define dso_local double @atomicrmw_fmin_double_aligned_monotonic(ptr %ptr, double %value) {1374; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic:1375; CHECK:    ldfminnm d0, d0, [x0]1376    %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 81377    ret double %r1378}1379 1380define dso_local void @atomicrmw_fmin_double_aligned_monotonic_unused(ptr %ptr, double %value) {1381; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic_unused:1382; CHECK:    ldfminnm d0, d0, [x0]1383    %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 81384    ret void1385}1386 1387define dso_local double @atomicrmw_fmin_double_aligned_acquire(ptr %ptr, double %value) {1388; CHECK-LABEL: atomicrmw_fmin_double_aligned_acquire:1389; CHECK:    ldfminnma d0, d0, [x0]1390    %r = atomicrmw fmin ptr %ptr, double %value acquire, align 81391    ret double %r1392}1393 1394define dso_local double @atomicrmw_fmin_double_aligned_release(ptr %ptr, double %value) {1395; CHECK-LABEL: atomicrmw_fmin_double_aligned_release:1396; CHECK:    ldfminnml d0, d0, [x0]1397    %r = atomicrmw fmin ptr %ptr, double %value release, align 81398    ret double %r1399}1400 1401define dso_local void @atomicrmw_fmin_double_aligned_release_unused(ptr %ptr, double %value) {1402; CHECK-LABEL: atomicrmw_fmin_double_aligned_release_unused:1403; CHECK:    ldfminnml d0, d0, [x0]1404    %r = atomicrmw fmin ptr %ptr, double %value release, align 81405    ret void1406}1407 1408define dso_local double @atomicrmw_fmin_double_aligned_acq_rel(ptr %ptr, double %value) {1409; CHECK-LABEL: atomicrmw_fmin_double_aligned_acq_rel:1410; CHECK:    ldfminnmal d0, d0, [x0]1411    %r = atomicrmw fmin ptr %ptr, double %value acq_rel, align 81412    ret double %r1413}1414 1415define dso_local double @atomicrmw_fmin_double_aligned_seq_cst(ptr %ptr, double %value) {1416; CHECK-LABEL: atomicrmw_fmin_double_aligned_seq_cst:1417; CHECK:    ldfminnmal d0, d0, [x0]1418    %r = atomicrmw fmin ptr %ptr, double %value seq_cst, align 81419    ret double %r1420}1421 1422define dso_local half @atomicrmw_fmin_half_unaligned_monotonic(ptr %ptr, half %value) {1423; CHECK-LABEL: atomicrmw_fmin_half_unaligned_monotonic:1424; CHECK:    bl __atomic_compare_exchange1425    %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 11426    ret half %r1427}1428 1429define dso_local half @atomicrmw_fmin_half_unaligned_acquire(ptr %ptr, half %value) {1430; CHECK-LABEL: atomicrmw_fmin_half_unaligned_acquire:1431; CHECK:    bl __atomic_compare_exchange1432    %r = atomicrmw fmin ptr %ptr, half %value acquire, align 11433    ret half %r1434}1435 1436define dso_local half @atomicrmw_fmin_half_unaligned_release(ptr %ptr, half %value) {1437; CHECK-LABEL: atomicrmw_fmin_half_unaligned_release:1438; CHECK:    bl __atomic_compare_exchange1439    %r = atomicrmw fmin ptr %ptr, half %value release, align 11440    ret half %r1441}1442 1443define dso_local half @atomicrmw_fmin_half_unaligned_acq_rel(ptr %ptr, half %value) {1444; CHECK-LABEL: atomicrmw_fmin_half_unaligned_acq_rel:1445; CHECK:    bl __atomic_compare_exchange1446    %r = atomicrmw fmin ptr %ptr, half %value acq_rel, align 11447    ret half %r1448}1449 1450define dso_local half @atomicrmw_fmin_half_unaligned_seq_cst(ptr %ptr, half %value) {1451; CHECK-LABEL: atomicrmw_fmin_half_unaligned_seq_cst:1452; CHECK:    bl __atomic_compare_exchange1453    %r = atomicrmw fmin ptr %ptr, half %value seq_cst, align 11454    ret half %r1455}1456 1457define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {1458; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_monotonic:1459; -O0:    add w8, w8, w91460; -O0:    add w8, w8, w91461; -O0:    bl __atomic_compare_exchange1462;1463; -O1-LABEL: atomicrmw_fmin_bfloat_unaligned_monotonic:1464; -O1:    add w8, w8, w201465; -O1:    add w8, w9, w81466; -O1:    bl __atomic_compare_exchange1467    %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 11468    ret bfloat %r1469}1470 1471define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {1472; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_acquire:1473; -O0:    add w8, w8, w91474; -O0:    add w8, w8, w91475; -O0:    bl __atomic_compare_exchange1476;1477; -O1-LABEL: atomicrmw_fmin_bfloat_unaligned_acquire:1478; -O1:    add w8, w8, w201479; -O1:    add w8, w9, w81480; -O1:    bl __atomic_compare_exchange1481    %r = atomicrmw fmin ptr %ptr, bfloat %value acquire, align 11482    ret bfloat %r1483}1484 1485define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_release(ptr %ptr, bfloat %value) {1486; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_release:1487; -O0:    add w8, w8, w91488; -O0:    add w8, w8, w91489; -O0:    bl __atomic_compare_exchange1490;1491; -O1-LABEL: atomicrmw_fmin_bfloat_unaligned_release:1492; -O1:    add w8, w8, w201493; -O1:    add w8, w9, w81494; -O1:    bl __atomic_compare_exchange1495    %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 11496    ret bfloat %r1497}1498 1499define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {1500; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_acq_rel:1501; -O0:    add w8, w8, w91502; -O0:    add w8, w8, w91503; -O0:    bl __atomic_compare_exchange1504;1505; -O1-LABEL: atomicrmw_fmin_bfloat_unaligned_acq_rel:1506; -O1:    add w8, w8, w201507; -O1:    add w8, w9, w81508; -O1:    bl __atomic_compare_exchange1509    %r = atomicrmw fmin ptr %ptr, bfloat %value acq_rel, align 11510    ret bfloat %r1511}1512 1513define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {1514; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_seq_cst:1515; -O0:    add w8, w8, w91516; -O0:    add w8, w8, w91517; -O0:    bl __atomic_compare_exchange1518;1519; -O1-LABEL: atomicrmw_fmin_bfloat_unaligned_seq_cst:1520; -O1:    add w8, w8, w201521; -O1:    add w8, w9, w81522; -O1:    bl __atomic_compare_exchange1523    %r = atomicrmw fmin ptr %ptr, bfloat %value seq_cst, align 11524    ret bfloat %r1525}1526 1527define dso_local float @atomicrmw_fmin_float_unaligned_monotonic(ptr %ptr, float %value) {1528; CHECK-LABEL: atomicrmw_fmin_float_unaligned_monotonic:1529; CHECK:    bl __atomic_compare_exchange1530    %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 11531    ret float %r1532}1533 1534define dso_local float @atomicrmw_fmin_float_unaligned_acquire(ptr %ptr, float %value) {1535; CHECK-LABEL: atomicrmw_fmin_float_unaligned_acquire:1536; CHECK:    bl __atomic_compare_exchange1537    %r = atomicrmw fmin ptr %ptr, float %value acquire, align 11538    ret float %r1539}1540 1541define dso_local float @atomicrmw_fmin_float_unaligned_release(ptr %ptr, float %value) {1542; CHECK-LABEL: atomicrmw_fmin_float_unaligned_release:1543; CHECK:    bl __atomic_compare_exchange1544    %r = atomicrmw fmin ptr %ptr, float %value release, align 11545    ret float %r1546}1547 1548define dso_local float @atomicrmw_fmin_float_unaligned_acq_rel(ptr %ptr, float %value) {1549; CHECK-LABEL: atomicrmw_fmin_float_unaligned_acq_rel:1550; CHECK:    bl __atomic_compare_exchange1551    %r = atomicrmw fmin ptr %ptr, float %value acq_rel, align 11552    ret float %r1553}1554 1555define dso_local float @atomicrmw_fmin_float_unaligned_seq_cst(ptr %ptr, float %value) {1556; CHECK-LABEL: atomicrmw_fmin_float_unaligned_seq_cst:1557; CHECK:    bl __atomic_compare_exchange1558    %r = atomicrmw fmin ptr %ptr, float %value seq_cst, align 11559    ret float %r1560}1561 1562define dso_local double @atomicrmw_fmin_double_unaligned_monotonic(ptr %ptr, double %value) {1563; CHECK-LABEL: atomicrmw_fmin_double_unaligned_monotonic:1564; CHECK:    bl __atomic_compare_exchange1565    %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 11566    ret double %r1567}1568 1569define dso_local double @atomicrmw_fmin_double_unaligned_acquire(ptr %ptr, double %value) {1570; CHECK-LABEL: atomicrmw_fmin_double_unaligned_acquire:1571; CHECK:    bl __atomic_compare_exchange1572    %r = atomicrmw fmin ptr %ptr, double %value acquire, align 11573    ret double %r1574}1575 1576define dso_local double @atomicrmw_fmin_double_unaligned_release(ptr %ptr, double %value) {1577; CHECK-LABEL: atomicrmw_fmin_double_unaligned_release:1578; CHECK:    bl __atomic_compare_exchange1579    %r = atomicrmw fmin ptr %ptr, double %value release, align 11580    ret double %r1581}1582 1583define dso_local double @atomicrmw_fmin_double_unaligned_acq_rel(ptr %ptr, double %value) {1584; CHECK-LABEL: atomicrmw_fmin_double_unaligned_acq_rel:1585; CHECK:    bl __atomic_compare_exchange1586    %r = atomicrmw fmin ptr %ptr, double %value acq_rel, align 11587    ret double %r1588}1589 1590define dso_local double @atomicrmw_fmin_double_unaligned_seq_cst(ptr %ptr, double %value) {1591; CHECK-LABEL: atomicrmw_fmin_double_unaligned_seq_cst:1592; CHECK:    bl __atomic_compare_exchange1593    %r = atomicrmw fmin ptr %ptr, double %value seq_cst, align 11594    ret double %r1595}1596 1597define dso_local half @atomicrmw_fmaximum_half_aligned_monotonic(ptr %ptr, half %value) {1598; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_monotonic:1599; CHECK:    ldfmax h0, h0, [x0]1600    %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 21601    ret half %r1602}1603 1604define dso_local void @atomicrmw_fmaximum_half_aligned_monotonic_unused(ptr %ptr, half %value) {1605; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_monotonic_unused:1606; CHECK:    ldfmax h0, h0, [x0]1607    %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 21608    ret void1609}1610 1611define dso_local half @atomicrmw_fmaximum_half_aligned_acquire(ptr %ptr, half %value) {1612; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_acquire:1613; CHECK:    ldfmaxa h0, h0, [x0]1614    %r = atomicrmw fmaximum ptr %ptr, half %value acquire, align 21615    ret half %r1616}1617 1618define dso_local half @atomicrmw_fmaximum_half_aligned_release(ptr %ptr, half %value) {1619; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_release:1620; CHECK:    ldfmaxl h0, h0, [x0]1621    %r = atomicrmw fmaximum ptr %ptr, half %value release, align 21622    ret half %r1623}1624 1625define dso_local void @atomicrmw_fmaximum_half_aligned_release_unused(ptr %ptr, half %value) {1626; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_release_unused:1627; CHECK:    ldfmaxl h0, h0, [x0]1628    %r = atomicrmw fmaximum ptr %ptr, half %value release, align 21629    ret void1630}1631 1632define dso_local half @atomicrmw_fmaximum_half_aligned_acq_rel(ptr %ptr, half %value) {1633; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_acq_rel:1634; CHECK:    ldfmaxal h0, h0, [x0]1635    %r = atomicrmw fmaximum ptr %ptr, half %value acq_rel, align 21636    ret half %r1637}1638 1639define dso_local half @atomicrmw_fmaximum_half_aligned_seq_cst(ptr %ptr, half %value) {1640; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_seq_cst:1641; CHECK:    ldfmaxal h0, h0, [x0]1642    %r = atomicrmw fmaximum ptr %ptr, half %value seq_cst, align 21643    ret half %r1644}1645 1646define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {1647; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_monotonic:1648; CHECK:    ldbfmax h0, h0, [x0]1649    %r = atomicrmw fmaximum ptr %ptr, bfloat %value monotonic, align 21650    ret bfloat %r1651}1652 1653define dso_local void @atomicrmw_fmaximum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {1654; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_monotonic_unused:1655; CHECK:    ldbfmax h0, h0, [x0]1656    %r = atomicrmw fmaximum ptr %ptr, bfloat %value monotonic, align 21657    ret void1658}1659 1660define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {1661; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_acquire:1662; CHECK:    ldbfmaxa h0, h0, [x0]1663    %r = atomicrmw fmaximum ptr %ptr, bfloat %value acquire, align 21664    ret bfloat %r1665}1666 1667define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_release(ptr %ptr, bfloat %value) {1668; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_release:1669; CHECK:    ldbfmaxl h0, h0, [x0]1670    %r = atomicrmw fmaximum ptr %ptr, bfloat %value release, align 21671    ret bfloat %r1672}1673 1674define dso_local void @atomicrmw_fmaximum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {1675; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_release_unused:1676; CHECK:    ldbfmaxl h0, h0, [x0]1677    %r = atomicrmw fmaximum ptr %ptr, bfloat %value release, align 21678    ret void1679}1680 1681define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {1682; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_acq_rel:1683; CHECK:    ldbfmaxal h0, h0, [x0]1684    %r = atomicrmw fmaximum ptr %ptr, bfloat %value acq_rel, align 21685    ret bfloat %r1686}1687 1688define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {1689; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_seq_cst:1690; CHECK:    ldbfmaxal h0, h0, [x0]1691    %r = atomicrmw fmaximum ptr %ptr, bfloat %value seq_cst, align 21692    ret bfloat %r1693}1694 1695define dso_local float @atomicrmw_fmaximum_float_aligned_monotonic(ptr %ptr, float %value) {1696; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_monotonic:1697; CHECK:    ldfmax s0, s0, [x0]1698    %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 41699    ret float %r1700}1701 1702define dso_local void @atomicrmw_fmaximum_float_aligned_monotonic_unused(ptr %ptr, float %value) {1703; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_monotonic_unused:1704; CHECK:    ldfmax s0, s0, [x0]1705    %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 41706    ret void1707}1708 1709define dso_local float @atomicrmw_fmaximum_float_aligned_acquire(ptr %ptr, float %value) {1710; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_acquire:1711; CHECK:    ldfmaxa s0, s0, [x0]1712    %r = atomicrmw fmaximum ptr %ptr, float %value acquire, align 41713    ret float %r1714}1715 1716define dso_local float @atomicrmw_fmaximum_float_aligned_release(ptr %ptr, float %value) {1717; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_release:1718; CHECK:    ldfmaxl s0, s0, [x0]1719    %r = atomicrmw fmaximum ptr %ptr, float %value release, align 41720    ret float %r1721}1722 1723define dso_local void @atomicrmw_fmaximum_float_aligned_release_unused(ptr %ptr, float %value) {1724; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_release_unused:1725; CHECK:    ldfmaxl s0, s0, [x0]1726    %r = atomicrmw fmaximum ptr %ptr, float %value release, align 41727    ret void1728}1729 1730define dso_local float @atomicrmw_fmaximum_float_aligned_acq_rel(ptr %ptr, float %value) {1731; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_acq_rel:1732; CHECK:    ldfmaxal s0, s0, [x0]1733    %r = atomicrmw fmaximum ptr %ptr, float %value acq_rel, align 41734    ret float %r1735}1736 1737define dso_local float @atomicrmw_fmaximum_float_aligned_seq_cst(ptr %ptr, float %value) {1738; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_seq_cst:1739; CHECK:    ldfmaxal s0, s0, [x0]1740    %r = atomicrmw fmaximum ptr %ptr, float %value seq_cst, align 41741    ret float %r1742}1743 1744define dso_local double @atomicrmw_fmaximum_double_aligned_monotonic(ptr %ptr, double %value) {1745; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_monotonic:1746; CHECK:    ldfmax d0, d0, [x0]1747    %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 81748    ret double %r1749}1750 1751define dso_local void @atomicrmw_fmaximum_double_aligned_monotonic_unused(ptr %ptr, double %value) {1752; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_monotonic_unused:1753; CHECK:    ldfmax d0, d0, [x0]1754    %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 81755    ret void1756}1757 1758define dso_local double @atomicrmw_fmaximum_double_aligned_acquire(ptr %ptr, double %value) {1759; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_acquire:1760; CHECK:    ldfmaxa d0, d0, [x0]1761    %r = atomicrmw fmaximum ptr %ptr, double %value acquire, align 81762    ret double %r1763}1764 1765define dso_local double @atomicrmw_fmaximum_double_aligned_release(ptr %ptr, double %value) {1766; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_release:1767; CHECK:    ldfmaxl d0, d0, [x0]1768    %r = atomicrmw fmaximum ptr %ptr, double %value release, align 81769    ret double %r1770}1771 1772define dso_local void @atomicrmw_fmaximum_double_aligned_release_unused(ptr %ptr, double %value) {1773; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_release_unused:1774; CHECK:    ldfmaxl d0, d0, [x0]1775    %r = atomicrmw fmaximum ptr %ptr, double %value release, align 81776    ret void1777}1778 1779define dso_local double @atomicrmw_fmaximum_double_aligned_acq_rel(ptr %ptr, double %value) {1780; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_acq_rel:1781; CHECK:    ldfmaxal d0, d0, [x0]1782    %r = atomicrmw fmaximum ptr %ptr, double %value acq_rel, align 81783    ret double %r1784}1785 1786define dso_local double @atomicrmw_fmaximum_double_aligned_seq_cst(ptr %ptr, double %value) {1787; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_seq_cst:1788; CHECK:    ldfmaxal d0, d0, [x0]1789    %r = atomicrmw fmaximum ptr %ptr, double %value seq_cst, align 81790    ret double %r1791}1792 1793define dso_local half @atomicrmw_fmaximum_half_unaligned_monotonic(ptr %ptr, half %value) {1794; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_monotonic:1795; CHECK:    bl __atomic_compare_exchange1796    %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 11797    ret half %r1798}1799 1800define dso_local half @atomicrmw_fmaximum_half_unaligned_acquire(ptr %ptr, half %value) {1801; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_acquire:1802; CHECK:    bl __atomic_compare_exchange1803    %r = atomicrmw fmaximum ptr %ptr, half %value acquire, align 11804    ret half %r1805}1806 1807define dso_local half @atomicrmw_fmaximum_half_unaligned_release(ptr %ptr, half %value) {1808; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_release:1809; CHECK:    bl __atomic_compare_exchange1810    %r = atomicrmw fmaximum ptr %ptr, half %value release, align 11811    ret half %r1812}1813 1814define dso_local half @atomicrmw_fmaximum_half_unaligned_acq_rel(ptr %ptr, half %value) {1815; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_acq_rel:1816; CHECK:    bl __atomic_compare_exchange1817    %r = atomicrmw fmaximum ptr %ptr, half %value acq_rel, align 11818    ret half %r1819}1820 1821define dso_local half @atomicrmw_fmaximum_half_unaligned_seq_cst(ptr %ptr, half %value) {1822; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_seq_cst:1823; CHECK:    bl __atomic_compare_exchange1824    %r = atomicrmw fmaximum ptr %ptr, half %value seq_cst, align 11825    ret half %r1826}1827 1828define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {1829; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_monotonic:1830; -O0:    add w8, w8, w91831; -O0:    add w8, w8, w91832; -O0:    bl __atomic_compare_exchange1833;1834; -O1-LABEL: atomicrmw_fmaximum_bfloat_unaligned_monotonic:1835; -O1:    add w8, w8, w201836; -O1:    add w8, w9, w81837; -O1:    bl __atomic_compare_exchange1838    %r = atomicrmw fmaximum ptr %ptr, bfloat %value monotonic, align 11839    ret bfloat %r1840}1841 1842define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {1843; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acquire:1844; -O0:    add w8, w8, w91845; -O0:    add w8, w8, w91846; -O0:    bl __atomic_compare_exchange1847;1848; -O1-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acquire:1849; -O1:    add w8, w8, w201850; -O1:    add w8, w9, w81851; -O1:    bl __atomic_compare_exchange1852    %r = atomicrmw fmaximum ptr %ptr, bfloat %value acquire, align 11853    ret bfloat %r1854}1855 1856define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_release(ptr %ptr, bfloat %value) {1857; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_release:1858; -O0:    add w8, w8, w91859; -O0:    add w8, w8, w91860; -O0:    bl __atomic_compare_exchange1861;1862; -O1-LABEL: atomicrmw_fmaximum_bfloat_unaligned_release:1863; -O1:    add w8, w8, w201864; -O1:    add w8, w9, w81865; -O1:    bl __atomic_compare_exchange1866    %r = atomicrmw fmaximum ptr %ptr, bfloat %value release, align 11867    ret bfloat %r1868}1869 1870define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {1871; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acq_rel:1872; -O0:    add w8, w8, w91873; -O0:    add w8, w8, w91874; -O0:    bl __atomic_compare_exchange1875;1876; -O1-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acq_rel:1877; -O1:    add w8, w8, w201878; -O1:    add w8, w9, w81879; -O1:    bl __atomic_compare_exchange1880    %r = atomicrmw fmaximum ptr %ptr, bfloat %value acq_rel, align 11881    ret bfloat %r1882}1883 1884define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {1885; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_seq_cst:1886; -O0:    add w8, w8, w91887; -O0:    add w8, w8, w91888; -O0:    bl __atomic_compare_exchange1889;1890; -O1-LABEL: atomicrmw_fmaximum_bfloat_unaligned_seq_cst:1891; -O1:    add w8, w8, w201892; -O1:    add w8, w9, w81893; -O1:    bl __atomic_compare_exchange1894    %r = atomicrmw fmaximum ptr %ptr, bfloat %value seq_cst, align 11895    ret bfloat %r1896}1897 1898define dso_local float @atomicrmw_fmaximum_float_unaligned_monotonic(ptr %ptr, float %value) {1899; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_monotonic:1900; CHECK:    bl __atomic_compare_exchange1901    %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 11902    ret float %r1903}1904 1905define dso_local float @atomicrmw_fmaximum_float_unaligned_acquire(ptr %ptr, float %value) {1906; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_acquire:1907; CHECK:    bl __atomic_compare_exchange1908    %r = atomicrmw fmaximum ptr %ptr, float %value acquire, align 11909    ret float %r1910}1911 1912define dso_local float @atomicrmw_fmaximum_float_unaligned_release(ptr %ptr, float %value) {1913; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_release:1914; CHECK:    bl __atomic_compare_exchange1915    %r = atomicrmw fmaximum ptr %ptr, float %value release, align 11916    ret float %r1917}1918 1919define dso_local float @atomicrmw_fmaximum_float_unaligned_acq_rel(ptr %ptr, float %value) {1920; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_acq_rel:1921; CHECK:    bl __atomic_compare_exchange1922    %r = atomicrmw fmaximum ptr %ptr, float %value acq_rel, align 11923    ret float %r1924}1925 1926define dso_local float @atomicrmw_fmaximum_float_unaligned_seq_cst(ptr %ptr, float %value) {1927; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_seq_cst:1928; CHECK:    bl __atomic_compare_exchange1929    %r = atomicrmw fmaximum ptr %ptr, float %value seq_cst, align 11930    ret float %r1931}1932 1933define dso_local double @atomicrmw_fmaximum_double_unaligned_monotonic(ptr %ptr, double %value) {1934; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_monotonic:1935; CHECK:    bl __atomic_compare_exchange1936    %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 11937    ret double %r1938}1939 1940define dso_local double @atomicrmw_fmaximum_double_unaligned_acquire(ptr %ptr, double %value) {1941; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_acquire:1942; CHECK:    bl __atomic_compare_exchange1943    %r = atomicrmw fmaximum ptr %ptr, double %value acquire, align 11944    ret double %r1945}1946 1947define dso_local double @atomicrmw_fmaximum_double_unaligned_release(ptr %ptr, double %value) {1948; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_release:1949; CHECK:    bl __atomic_compare_exchange1950    %r = atomicrmw fmaximum ptr %ptr, double %value release, align 11951    ret double %r1952}1953 1954define dso_local double @atomicrmw_fmaximum_double_unaligned_acq_rel(ptr %ptr, double %value) {1955; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_acq_rel:1956; CHECK:    bl __atomic_compare_exchange1957    %r = atomicrmw fmaximum ptr %ptr, double %value acq_rel, align 11958    ret double %r1959}1960 1961define dso_local double @atomicrmw_fmaximum_double_unaligned_seq_cst(ptr %ptr, double %value) {1962; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_seq_cst:1963; CHECK:    bl __atomic_compare_exchange1964    %r = atomicrmw fmaximum ptr %ptr, double %value seq_cst, align 11965    ret double %r1966}1967 1968define dso_local half @atomicrmw_fminimum_half_aligned_monotonic(ptr %ptr, half %value) {1969; CHECK-LABEL: atomicrmw_fminimum_half_aligned_monotonic:1970; CHECK:    ldfmin h0, h0, [x0]1971    %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 21972    ret half %r1973}1974 1975define dso_local void @atomicrmw_fminimum_half_aligned_monotonic_unused(ptr %ptr, half %value) {1976; CHECK-LABEL: atomicrmw_fminimum_half_aligned_monotonic_unused:1977; CHECK:    ldfmin h0, h0, [x0]1978    %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 21979    ret void1980}1981 1982define dso_local half @atomicrmw_fminimum_half_aligned_acquire(ptr %ptr, half %value) {1983; CHECK-LABEL: atomicrmw_fminimum_half_aligned_acquire:1984; CHECK:    ldfmina h0, h0, [x0]1985    %r = atomicrmw fminimum ptr %ptr, half %value acquire, align 21986    ret half %r1987}1988 1989define dso_local half @atomicrmw_fminimum_half_aligned_release(ptr %ptr, half %value) {1990; CHECK-LABEL: atomicrmw_fminimum_half_aligned_release:1991; CHECK:    ldfminl h0, h0, [x0]1992    %r = atomicrmw fminimum ptr %ptr, half %value release, align 21993    ret half %r1994}1995 1996define dso_local void @atomicrmw_fminimum_half_aligned_release_unused(ptr %ptr, half %value) {1997; CHECK-LABEL: atomicrmw_fminimum_half_aligned_release_unused:1998; CHECK:    ldfminl h0, h0, [x0]1999    %r = atomicrmw fminimum ptr %ptr, half %value release, align 22000    ret void2001}2002 2003define dso_local half @atomicrmw_fminimum_half_aligned_acq_rel(ptr %ptr, half %value) {2004; CHECK-LABEL: atomicrmw_fminimum_half_aligned_acq_rel:2005; CHECK:    ldfminal h0, h0, [x0]2006    %r = atomicrmw fminimum ptr %ptr, half %value acq_rel, align 22007    ret half %r2008}2009 2010define dso_local half @atomicrmw_fminimum_half_aligned_seq_cst(ptr %ptr, half %value) {2011; CHECK-LABEL: atomicrmw_fminimum_half_aligned_seq_cst:2012; CHECK:    ldfminal h0, h0, [x0]2013    %r = atomicrmw fminimum ptr %ptr, half %value seq_cst, align 22014    ret half %r2015}2016 2017define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {2018; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_monotonic:2019; CHECK:    ldbfmin h0, h0, [x0]2020    %r = atomicrmw fminimum ptr %ptr, bfloat %value monotonic, align 22021    ret bfloat %r2022}2023 2024define dso_local void @atomicrmw_fminimum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {2025; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_monotonic_unused:2026; CHECK:    ldbfmin h0, h0, [x0]2027    %r = atomicrmw fminimum ptr %ptr, bfloat %value monotonic, align 22028    ret void2029}2030 2031define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {2032; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_acquire:2033; CHECK:    ldbfmina h0, h0, [x0]2034    %r = atomicrmw fminimum ptr %ptr, bfloat %value acquire, align 22035    ret bfloat %r2036}2037 2038define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_release(ptr %ptr, bfloat %value) {2039; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_release:2040; CHECK:    ldbfminl h0, h0, [x0]2041    %r = atomicrmw fminimum ptr %ptr, bfloat %value release, align 22042    ret bfloat %r2043}2044 2045define dso_local void @atomicrmw_fminimum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {2046; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_release_unused:2047; CHECK:    ldbfminl h0, h0, [x0]2048    %r = atomicrmw fminimum ptr %ptr, bfloat %value release, align 22049    ret void2050}2051 2052define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {2053; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_acq_rel:2054; CHECK:    ldbfminal h0, h0, [x0]2055    %r = atomicrmw fminimum ptr %ptr, bfloat %value acq_rel, align 22056    ret bfloat %r2057}2058 2059define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {2060; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_seq_cst:2061; CHECK:    ldbfminal h0, h0, [x0]2062    %r = atomicrmw fminimum ptr %ptr, bfloat %value seq_cst, align 22063    ret bfloat %r2064}2065 2066define dso_local float @atomicrmw_fminimum_float_aligned_monotonic(ptr %ptr, float %value) {2067; CHECK-LABEL: atomicrmw_fminimum_float_aligned_monotonic:2068; CHECK:    ldfmin s0, s0, [x0]2069    %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 42070    ret float %r2071}2072 2073define dso_local void @atomicrmw_fminimum_float_aligned_monotonic_unused(ptr %ptr, float %value) {2074; CHECK-LABEL: atomicrmw_fminimum_float_aligned_monotonic_unused:2075; CHECK:    ldfmin s0, s0, [x0]2076    %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 42077    ret void2078}2079 2080define dso_local float @atomicrmw_fminimum_float_aligned_acquire(ptr %ptr, float %value) {2081; CHECK-LABEL: atomicrmw_fminimum_float_aligned_acquire:2082; CHECK:    ldfmina s0, s0, [x0]2083    %r = atomicrmw fminimum ptr %ptr, float %value acquire, align 42084    ret float %r2085}2086 2087define dso_local float @atomicrmw_fminimum_float_aligned_release(ptr %ptr, float %value) {2088; CHECK-LABEL: atomicrmw_fminimum_float_aligned_release:2089; CHECK:    ldfminl s0, s0, [x0]2090    %r = atomicrmw fminimum ptr %ptr, float %value release, align 42091    ret float %r2092}2093 2094define dso_local void @atomicrmw_fminimum_float_aligned_release_unused(ptr %ptr, float %value) {2095; CHECK-LABEL: atomicrmw_fminimum_float_aligned_release_unused:2096; CHECK:    ldfminl s0, s0, [x0]2097    %r = atomicrmw fminimum ptr %ptr, float %value release, align 42098    ret void2099}2100 2101define dso_local float @atomicrmw_fminimum_float_aligned_acq_rel(ptr %ptr, float %value) {2102; CHECK-LABEL: atomicrmw_fminimum_float_aligned_acq_rel:2103; CHECK:    ldfminal s0, s0, [x0]2104    %r = atomicrmw fminimum ptr %ptr, float %value acq_rel, align 42105    ret float %r2106}2107 2108define dso_local float @atomicrmw_fminimum_float_aligned_seq_cst(ptr %ptr, float %value) {2109; CHECK-LABEL: atomicrmw_fminimum_float_aligned_seq_cst:2110; CHECK:    ldfminal s0, s0, [x0]2111    %r = atomicrmw fminimum ptr %ptr, float %value seq_cst, align 42112    ret float %r2113}2114 2115define dso_local double @atomicrmw_fminimum_double_aligned_monotonic(ptr %ptr, double %value) {2116; CHECK-LABEL: atomicrmw_fminimum_double_aligned_monotonic:2117; CHECK:    ldfmin d0, d0, [x0]2118    %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 82119    ret double %r2120}2121 2122define dso_local void @atomicrmw_fminimum_double_aligned_monotonic_unused(ptr %ptr, double %value) {2123; CHECK-LABEL: atomicrmw_fminimum_double_aligned_monotonic_unused:2124; CHECK:    ldfmin d0, d0, [x0]2125    %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 82126    ret void2127}2128 2129define dso_local double @atomicrmw_fminimum_double_aligned_acquire(ptr %ptr, double %value) {2130; CHECK-LABEL: atomicrmw_fminimum_double_aligned_acquire:2131; CHECK:    ldfmina d0, d0, [x0]2132    %r = atomicrmw fminimum ptr %ptr, double %value acquire, align 82133    ret double %r2134}2135 2136define dso_local double @atomicrmw_fminimum_double_aligned_release(ptr %ptr, double %value) {2137; CHECK-LABEL: atomicrmw_fminimum_double_aligned_release:2138; CHECK:    ldfminl d0, d0, [x0]2139    %r = atomicrmw fminimum ptr %ptr, double %value release, align 82140    ret double %r2141}2142 2143define dso_local void @atomicrmw_fminimum_double_aligned_release_unused(ptr %ptr, double %value) {2144; CHECK-LABEL: atomicrmw_fminimum_double_aligned_release_unused:2145; CHECK:    ldfminl d0, d0, [x0]2146    %r = atomicrmw fminimum ptr %ptr, double %value release, align 82147    ret void2148}2149 2150define dso_local double @atomicrmw_fminimum_double_aligned_acq_rel(ptr %ptr, double %value) {2151; CHECK-LABEL: atomicrmw_fminimum_double_aligned_acq_rel:2152; CHECK:    ldfminal d0, d0, [x0]2153    %r = atomicrmw fminimum ptr %ptr, double %value acq_rel, align 82154    ret double %r2155}2156 2157define dso_local double @atomicrmw_fminimum_double_aligned_seq_cst(ptr %ptr, double %value) {2158; CHECK-LABEL: atomicrmw_fminimum_double_aligned_seq_cst:2159; CHECK:    ldfminal d0, d0, [x0]2160    %r = atomicrmw fminimum ptr %ptr, double %value seq_cst, align 82161    ret double %r2162}2163 2164define dso_local half @atomicrmw_fminimum_half_unaligned_monotonic(ptr %ptr, half %value) {2165; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_monotonic:2166; CHECK:    bl __atomic_compare_exchange2167    %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 12168    ret half %r2169}2170 2171define dso_local half @atomicrmw_fminimum_half_unaligned_acquire(ptr %ptr, half %value) {2172; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_acquire:2173; CHECK:    bl __atomic_compare_exchange2174    %r = atomicrmw fminimum ptr %ptr, half %value acquire, align 12175    ret half %r2176}2177 2178define dso_local half @atomicrmw_fminimum_half_unaligned_release(ptr %ptr, half %value) {2179; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_release:2180; CHECK:    bl __atomic_compare_exchange2181    %r = atomicrmw fminimum ptr %ptr, half %value release, align 12182    ret half %r2183}2184 2185define dso_local half @atomicrmw_fminimum_half_unaligned_acq_rel(ptr %ptr, half %value) {2186; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_acq_rel:2187; CHECK:    bl __atomic_compare_exchange2188    %r = atomicrmw fminimum ptr %ptr, half %value acq_rel, align 12189    ret half %r2190}2191 2192define dso_local half @atomicrmw_fminimum_half_unaligned_seq_cst(ptr %ptr, half %value) {2193; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_seq_cst:2194; CHECK:    bl __atomic_compare_exchange2195    %r = atomicrmw fminimum ptr %ptr, half %value seq_cst, align 12196    ret half %r2197}2198 2199define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {2200; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_monotonic:2201; -O0:    add w8, w8, w92202; -O0:    add w8, w8, w92203; -O0:    bl __atomic_compare_exchange2204;2205; -O1-LABEL: atomicrmw_fminimum_bfloat_unaligned_monotonic:2206; -O1:    add w8, w8, w202207; -O1:    add w8, w9, w82208; -O1:    bl __atomic_compare_exchange2209    %r = atomicrmw fminimum ptr %ptr, bfloat %value monotonic, align 12210    ret bfloat %r2211}2212 2213define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {2214; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_acquire:2215; -O0:    add w8, w8, w92216; -O0:    add w8, w8, w92217; -O0:    bl __atomic_compare_exchange2218;2219; -O1-LABEL: atomicrmw_fminimum_bfloat_unaligned_acquire:2220; -O1:    add w8, w8, w202221; -O1:    add w8, w9, w82222; -O1:    bl __atomic_compare_exchange2223    %r = atomicrmw fminimum ptr %ptr, bfloat %value acquire, align 12224    ret bfloat %r2225}2226 2227define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_release(ptr %ptr, bfloat %value) {2228; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_release:2229; -O0:    add w8, w8, w92230; -O0:    add w8, w8, w92231; -O0:    bl __atomic_compare_exchange2232;2233; -O1-LABEL: atomicrmw_fminimum_bfloat_unaligned_release:2234; -O1:    add w8, w8, w202235; -O1:    add w8, w9, w82236; -O1:    bl __atomic_compare_exchange2237    %r = atomicrmw fminimum ptr %ptr, bfloat %value release, align 12238    ret bfloat %r2239}2240 2241define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {2242; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_acq_rel:2243; -O0:    add w8, w8, w92244; -O0:    add w8, w8, w92245; -O0:    bl __atomic_compare_exchange2246;2247; -O1-LABEL: atomicrmw_fminimum_bfloat_unaligned_acq_rel:2248; -O1:    add w8, w8, w202249; -O1:    add w8, w9, w82250; -O1:    bl __atomic_compare_exchange2251    %r = atomicrmw fminimum ptr %ptr, bfloat %value acq_rel, align 12252    ret bfloat %r2253}2254 2255define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {2256; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_seq_cst:2257; -O0:    add w8, w8, w92258; -O0:    add w8, w8, w92259; -O0:    bl __atomic_compare_exchange2260;2261; -O1-LABEL: atomicrmw_fminimum_bfloat_unaligned_seq_cst:2262; -O1:    add w8, w8, w202263; -O1:    add w8, w9, w82264; -O1:    bl __atomic_compare_exchange2265    %r = atomicrmw fminimum ptr %ptr, bfloat %value seq_cst, align 12266    ret bfloat %r2267}2268 2269define dso_local float @atomicrmw_fminimum_float_unaligned_monotonic(ptr %ptr, float %value) {2270; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_monotonic:2271; CHECK:    bl __atomic_compare_exchange2272    %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 12273    ret float %r2274}2275 2276define dso_local float @atomicrmw_fminimum_float_unaligned_acquire(ptr %ptr, float %value) {2277; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_acquire:2278; CHECK:    bl __atomic_compare_exchange2279    %r = atomicrmw fminimum ptr %ptr, float %value acquire, align 12280    ret float %r2281}2282 2283define dso_local float @atomicrmw_fminimum_float_unaligned_release(ptr %ptr, float %value) {2284; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_release:2285; CHECK:    bl __atomic_compare_exchange2286    %r = atomicrmw fminimum ptr %ptr, float %value release, align 12287    ret float %r2288}2289 2290define dso_local float @atomicrmw_fminimum_float_unaligned_acq_rel(ptr %ptr, float %value) {2291; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_acq_rel:2292; CHECK:    bl __atomic_compare_exchange2293    %r = atomicrmw fminimum ptr %ptr, float %value acq_rel, align 12294    ret float %r2295}2296 2297define dso_local float @atomicrmw_fminimum_float_unaligned_seq_cst(ptr %ptr, float %value) {2298; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_seq_cst:2299; CHECK:    bl __atomic_compare_exchange2300    %r = atomicrmw fminimum ptr %ptr, float %value seq_cst, align 12301    ret float %r2302}2303 2304define dso_local double @atomicrmw_fminimum_double_unaligned_monotonic(ptr %ptr, double %value) {2305; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_monotonic:2306; CHECK:    bl __atomic_compare_exchange2307    %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 12308    ret double %r2309}2310 2311define dso_local double @atomicrmw_fminimum_double_unaligned_acquire(ptr %ptr, double %value) {2312; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_acquire:2313; CHECK:    bl __atomic_compare_exchange2314    %r = atomicrmw fminimum ptr %ptr, double %value acquire, align 12315    ret double %r2316}2317 2318define dso_local double @atomicrmw_fminimum_double_unaligned_release(ptr %ptr, double %value) {2319; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_release:2320; CHECK:    bl __atomic_compare_exchange2321    %r = atomicrmw fminimum ptr %ptr, double %value release, align 12322    ret double %r2323}2324 2325define dso_local double @atomicrmw_fminimum_double_unaligned_acq_rel(ptr %ptr, double %value) {2326; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_acq_rel:2327; CHECK:    bl __atomic_compare_exchange2328    %r = atomicrmw fminimum ptr %ptr, double %value acq_rel, align 12329    ret double %r2330}2331 2332define dso_local double @atomicrmw_fminimum_double_unaligned_seq_cst(ptr %ptr, double %value) {2333; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_seq_cst:2334; CHECK:    bl __atomic_compare_exchange2335    %r = atomicrmw fminimum ptr %ptr, double %value seq_cst, align 12336    ret double %r2337}2338