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