3830 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=+lse2,+rcpc3 -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse2,+rcpc3 -O1 | FileCheck %s --check-prefixes=CHECK,-O15 6define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {7; -O0-LABEL: cmpxchg_i8_aligned_monotonic_monotonic:8; -O0: ldaxrb w0, [x2]9; -O0: cmp w0, w9, uxtb10; -O0: stlxrb w8, w1, [x2]11;12; -O1-LABEL: cmpxchg_i8_aligned_monotonic_monotonic:13; -O1: and w8, w0, #0xff14; -O1: ldxrb w0, [x2]15; -O1: cmp w0, w816; -O1: stxrb w9, w1, [x2]17 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 118 %r = extractvalue { i8, i1 } %pair, 019 ret i8 %r20}21 22define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {23; -O0-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak:24; -O0: ldaxrb w0, [x2]25; -O0: cmp w0, w9, uxtb26; -O0: stlxrb w8, w1, [x2]27;28; -O1-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak:29; -O1: ldxrb w8, [x2]30; -O1: cmp w8, w0, uxtb31; -O1: stxrb wzr, w1, [x2]32 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 133 %r = extractvalue { i8, i1 } %pair, 034 ret i8 %r35}36 37define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {38; -O0-LABEL: cmpxchg_i8_aligned_monotonic_acquire:39; -O0: ldaxrb w0, [x2]40; -O0: cmp w0, w9, uxtb41; -O0: stlxrb w8, w1, [x2]42;43; -O1-LABEL: cmpxchg_i8_aligned_monotonic_acquire:44; -O1: and w8, w0, #0xff45; -O1: ldaxrb w0, [x2]46; -O1: cmp w0, w847; -O1: stxrb w9, w1, [x2]48 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 149 %r = extractvalue { i8, i1 } %pair, 050 ret i8 %r51}52 53define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {54; -O0-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak:55; -O0: ldaxrb w0, [x2]56; -O0: cmp w0, w9, uxtb57; -O0: stlxrb w8, w1, [x2]58;59; -O1-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak:60; -O1: ldaxrb w8, [x2]61; -O1: cmp w8, w0, uxtb62; -O1: stxrb wzr, w1, [x2]63 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 164 %r = extractvalue { i8, i1 } %pair, 065 ret i8 %r66}67 68define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {69; -O0-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst:70; -O0: ldaxrb w0, [x2]71; -O0: cmp w0, w9, uxtb72; -O0: stlxrb w8, w1, [x2]73;74; -O1-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst:75; -O1: and w8, w0, #0xff76; -O1: ldaxrb w0, [x2]77; -O1: cmp w0, w878; -O1: stlxrb w9, w1, [x2]79 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 180 %r = extractvalue { i8, i1 } %pair, 081 ret i8 %r82}83 84define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {85; -O0-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak:86; -O0: ldaxrb w0, [x2]87; -O0: cmp w0, w9, uxtb88; -O0: stlxrb w8, w1, [x2]89;90; -O1-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak:91; -O1: ldaxrb w8, [x2]92; -O1: cmp w8, w0, uxtb93; -O1: stlxrb wzr, w1, [x2]94 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 195 %r = extractvalue { i8, i1 } %pair, 096 ret i8 %r97}98 99define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {100; -O0-LABEL: cmpxchg_i8_aligned_acquire_monotonic:101; -O0: ldaxrb w0, [x2]102; -O0: cmp w0, w9, uxtb103; -O0: stlxrb w8, w1, [x2]104;105; -O1-LABEL: cmpxchg_i8_aligned_acquire_monotonic:106; -O1: and w8, w0, #0xff107; -O1: ldaxrb w0, [x2]108; -O1: cmp w0, w8109; -O1: stxrb w9, w1, [x2]110 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1111 %r = extractvalue { i8, i1 } %pair, 0112 ret i8 %r113}114 115define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {116; -O0-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak:117; -O0: ldaxrb w0, [x2]118; -O0: cmp w0, w9, uxtb119; -O0: stlxrb w8, w1, [x2]120;121; -O1-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak:122; -O1: ldaxrb w8, [x2]123; -O1: cmp w8, w0, uxtb124; -O1: stxrb wzr, w1, [x2]125 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1126 %r = extractvalue { i8, i1 } %pair, 0127 ret i8 %r128}129 130define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {131; -O0-LABEL: cmpxchg_i8_aligned_acquire_acquire:132; -O0: ldaxrb w0, [x2]133; -O0: cmp w0, w9, uxtb134; -O0: stlxrb w8, w1, [x2]135;136; -O1-LABEL: cmpxchg_i8_aligned_acquire_acquire:137; -O1: and w8, w0, #0xff138; -O1: ldaxrb w0, [x2]139; -O1: cmp w0, w8140; -O1: stxrb w9, w1, [x2]141 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1142 %r = extractvalue { i8, i1 } %pair, 0143 ret i8 %r144}145 146define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {147; -O0-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak:148; -O0: ldaxrb w0, [x2]149; -O0: cmp w0, w9, uxtb150; -O0: stlxrb w8, w1, [x2]151;152; -O1-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak:153; -O1: ldaxrb w8, [x2]154; -O1: cmp w8, w0, uxtb155; -O1: stxrb wzr, w1, [x2]156 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1157 %r = extractvalue { i8, i1 } %pair, 0158 ret i8 %r159}160 161define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {162; -O0-LABEL: cmpxchg_i8_aligned_acquire_seq_cst:163; -O0: ldaxrb w0, [x2]164; -O0: cmp w0, w9, uxtb165; -O0: stlxrb w8, w1, [x2]166;167; -O1-LABEL: cmpxchg_i8_aligned_acquire_seq_cst:168; -O1: and w8, w0, #0xff169; -O1: ldaxrb w0, [x2]170; -O1: cmp w0, w8171; -O1: stlxrb w9, w1, [x2]172 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1173 %r = extractvalue { i8, i1 } %pair, 0174 ret i8 %r175}176 177define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {178; -O0-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak:179; -O0: ldaxrb w0, [x2]180; -O0: cmp w0, w9, uxtb181; -O0: stlxrb w8, w1, [x2]182;183; -O1-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak:184; -O1: ldaxrb w8, [x2]185; -O1: cmp w8, w0, uxtb186; -O1: stlxrb wzr, w1, [x2]187 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1188 %r = extractvalue { i8, i1 } %pair, 0189 ret i8 %r190}191 192define dso_local i8 @cmpxchg_i8_aligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {193; -O0-LABEL: cmpxchg_i8_aligned_release_monotonic:194; -O0: ldaxrb w0, [x2]195; -O0: cmp w0, w9, uxtb196; -O0: stlxrb w8, w1, [x2]197;198; -O1-LABEL: cmpxchg_i8_aligned_release_monotonic:199; -O1: and w8, w0, #0xff200; -O1: ldxrb w0, [x2]201; -O1: cmp w0, w8202; -O1: stlxrb w9, w1, [x2]203 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1204 %r = extractvalue { i8, i1 } %pair, 0205 ret i8 %r206}207 208define dso_local i8 @cmpxchg_i8_aligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {209; -O0-LABEL: cmpxchg_i8_aligned_release_monotonic_weak:210; -O0: ldaxrb w0, [x2]211; -O0: cmp w0, w9, uxtb212; -O0: stlxrb w8, w1, [x2]213;214; -O1-LABEL: cmpxchg_i8_aligned_release_monotonic_weak:215; -O1: ldxrb w8, [x2]216; -O1: cmp w8, w0, uxtb217; -O1: stlxrb wzr, w1, [x2]218 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1219 %r = extractvalue { i8, i1 } %pair, 0220 ret i8 %r221}222 223define dso_local i8 @cmpxchg_i8_aligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {224; -O0-LABEL: cmpxchg_i8_aligned_release_acquire:225; -O0: ldaxrb w0, [x2]226; -O0: cmp w0, w9, uxtb227; -O0: stlxrb w8, w1, [x2]228;229; -O1-LABEL: cmpxchg_i8_aligned_release_acquire:230; -O1: and w8, w0, #0xff231; -O1: ldaxrb w0, [x2]232; -O1: cmp w0, w8233; -O1: stlxrb w9, w1, [x2]234 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1235 %r = extractvalue { i8, i1 } %pair, 0236 ret i8 %r237}238 239define dso_local i8 @cmpxchg_i8_aligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {240; -O0-LABEL: cmpxchg_i8_aligned_release_acquire_weak:241; -O0: ldaxrb w0, [x2]242; -O0: cmp w0, w9, uxtb243; -O0: stlxrb w8, w1, [x2]244;245; -O1-LABEL: cmpxchg_i8_aligned_release_acquire_weak:246; -O1: ldaxrb w8, [x2]247; -O1: cmp w8, w0, uxtb248; -O1: stlxrb wzr, w1, [x2]249 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1250 %r = extractvalue { i8, i1 } %pair, 0251 ret i8 %r252}253 254define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {255; -O0-LABEL: cmpxchg_i8_aligned_release_seq_cst:256; -O0: ldaxrb w0, [x2]257; -O0: cmp w0, w9, uxtb258; -O0: stlxrb w8, w1, [x2]259;260; -O1-LABEL: cmpxchg_i8_aligned_release_seq_cst:261; -O1: and w8, w0, #0xff262; -O1: ldaxrb w0, [x2]263; -O1: cmp w0, w8264; -O1: stlxrb w9, w1, [x2]265 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1266 %r = extractvalue { i8, i1 } %pair, 0267 ret i8 %r268}269 270define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {271; -O0-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak:272; -O0: ldaxrb w0, [x2]273; -O0: cmp w0, w9, uxtb274; -O0: stlxrb w8, w1, [x2]275;276; -O1-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak:277; -O1: ldaxrb w8, [x2]278; -O1: cmp w8, w0, uxtb279; -O1: stlxrb wzr, w1, [x2]280 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1281 %r = extractvalue { i8, i1 } %pair, 0282 ret i8 %r283}284 285define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {286; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic:287; -O0: ldaxrb w0, [x2]288; -O0: cmp w0, w9, uxtb289; -O0: stlxrb w8, w1, [x2]290;291; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic:292; -O1: and w8, w0, #0xff293; -O1: ldaxrb w0, [x2]294; -O1: cmp w0, w8295; -O1: stlxrb w9, w1, [x2]296 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1297 %r = extractvalue { i8, i1 } %pair, 0298 ret i8 %r299}300 301define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {302; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak:303; -O0: ldaxrb w0, [x2]304; -O0: cmp w0, w9, uxtb305; -O0: stlxrb w8, w1, [x2]306;307; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak:308; -O1: ldaxrb w8, [x2]309; -O1: cmp w8, w0, uxtb310; -O1: stlxrb wzr, w1, [x2]311 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1312 %r = extractvalue { i8, i1 } %pair, 0313 ret i8 %r314}315 316define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {317; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_acquire:318; -O0: ldaxrb w0, [x2]319; -O0: cmp w0, w9, uxtb320; -O0: stlxrb w8, w1, [x2]321;322; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_acquire:323; -O1: and w8, w0, #0xff324; -O1: ldaxrb w0, [x2]325; -O1: cmp w0, w8326; -O1: stlxrb w9, w1, [x2]327 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1328 %r = extractvalue { i8, i1 } %pair, 0329 ret i8 %r330}331 332define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {333; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak:334; -O0: ldaxrb w0, [x2]335; -O0: cmp w0, w9, uxtb336; -O0: stlxrb w8, w1, [x2]337;338; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak:339; -O1: ldaxrb w8, [x2]340; -O1: cmp w8, w0, uxtb341; -O1: stlxrb wzr, w1, [x2]342 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1343 %r = extractvalue { i8, i1 } %pair, 0344 ret i8 %r345}346 347define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {348; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst:349; -O0: ldaxrb w0, [x2]350; -O0: cmp w0, w9, uxtb351; -O0: stlxrb w8, w1, [x2]352;353; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst:354; -O1: and w8, w0, #0xff355; -O1: ldaxrb w0, [x2]356; -O1: cmp w0, w8357; -O1: stlxrb w9, w1, [x2]358 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1359 %r = extractvalue { i8, i1 } %pair, 0360 ret i8 %r361}362 363define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {364; -O0-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak:365; -O0: ldaxrb w0, [x2]366; -O0: cmp w0, w9, uxtb367; -O0: stlxrb w8, w1, [x2]368;369; -O1-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak:370; -O1: ldaxrb w8, [x2]371; -O1: cmp w8, w0, uxtb372; -O1: stlxrb wzr, w1, [x2]373 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1374 %r = extractvalue { i8, i1 } %pair, 0375 ret i8 %r376}377 378define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {379; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic:380; -O0: ldaxrb w0, [x2]381; -O0: cmp w0, w9, uxtb382; -O0: stlxrb w8, w1, [x2]383;384; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic:385; -O1: and w8, w0, #0xff386; -O1: ldaxrb w0, [x2]387; -O1: cmp w0, w8388; -O1: stlxrb w9, w1, [x2]389 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1390 %r = extractvalue { i8, i1 } %pair, 0391 ret i8 %r392}393 394define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {395; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak:396; -O0: ldaxrb w0, [x2]397; -O0: cmp w0, w9, uxtb398; -O0: stlxrb w8, w1, [x2]399;400; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak:401; -O1: ldaxrb w8, [x2]402; -O1: cmp w8, w0, uxtb403; -O1: stlxrb wzr, w1, [x2]404 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1405 %r = extractvalue { i8, i1 } %pair, 0406 ret i8 %r407}408 409define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {410; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_acquire:411; -O0: ldaxrb w0, [x2]412; -O0: cmp w0, w9, uxtb413; -O0: stlxrb w8, w1, [x2]414;415; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_acquire:416; -O1: and w8, w0, #0xff417; -O1: ldaxrb w0, [x2]418; -O1: cmp w0, w8419; -O1: stlxrb w9, w1, [x2]420 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1421 %r = extractvalue { i8, i1 } %pair, 0422 ret i8 %r423}424 425define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {426; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak:427; -O0: ldaxrb w0, [x2]428; -O0: cmp w0, w9, uxtb429; -O0: stlxrb w8, w1, [x2]430;431; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak:432; -O1: ldaxrb w8, [x2]433; -O1: cmp w8, w0, uxtb434; -O1: stlxrb wzr, w1, [x2]435 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1436 %r = extractvalue { i8, i1 } %pair, 0437 ret i8 %r438}439 440define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {441; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst:442; -O0: ldaxrb w0, [x2]443; -O0: cmp w0, w9, uxtb444; -O0: stlxrb w8, w1, [x2]445;446; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst:447; -O1: and w8, w0, #0xff448; -O1: ldaxrb w0, [x2]449; -O1: cmp w0, w8450; -O1: stlxrb w9, w1, [x2]451 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1452 %r = extractvalue { i8, i1 } %pair, 0453 ret i8 %r454}455 456define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {457; -O0-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak:458; -O0: ldaxrb w0, [x2]459; -O0: cmp w0, w9, uxtb460; -O0: stlxrb w8, w1, [x2]461;462; -O1-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak:463; -O1: ldaxrb w8, [x2]464; -O1: cmp w8, w0, uxtb465; -O1: stlxrb wzr, w1, [x2]466 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1467 %r = extractvalue { i8, i1 } %pair, 0468 ret i8 %r469}470 471define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {472; -O0-LABEL: cmpxchg_i16_aligned_monotonic_monotonic:473; -O0: ldaxrh w0, [x2]474; -O0: cmp w0, w9, uxth475; -O0: stlxrh w8, w1, [x2]476;477; -O1-LABEL: cmpxchg_i16_aligned_monotonic_monotonic:478; -O1: and w8, w0, #0xffff479; -O1: ldxrh w0, [x2]480; -O1: cmp w0, w8481; -O1: stxrh w9, w1, [x2]482 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2483 %r = extractvalue { i16, i1 } %pair, 0484 ret i16 %r485}486 487define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {488; -O0-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak:489; -O0: ldaxrh w0, [x2]490; -O0: cmp w0, w9, uxth491; -O0: stlxrh w8, w1, [x2]492;493; -O1-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak:494; -O1: ldxrh w8, [x2]495; -O1: cmp w8, w0, uxth496; -O1: stxrh wzr, w1, [x2]497 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2498 %r = extractvalue { i16, i1 } %pair, 0499 ret i16 %r500}501 502define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {503; -O0-LABEL: cmpxchg_i16_aligned_monotonic_acquire:504; -O0: ldaxrh w0, [x2]505; -O0: cmp w0, w9, uxth506; -O0: stlxrh w8, w1, [x2]507;508; -O1-LABEL: cmpxchg_i16_aligned_monotonic_acquire:509; -O1: and w8, w0, #0xffff510; -O1: ldaxrh w0, [x2]511; -O1: cmp w0, w8512; -O1: stxrh w9, w1, [x2]513 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2514 %r = extractvalue { i16, i1 } %pair, 0515 ret i16 %r516}517 518define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {519; -O0-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak:520; -O0: ldaxrh w0, [x2]521; -O0: cmp w0, w9, uxth522; -O0: stlxrh w8, w1, [x2]523;524; -O1-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak:525; -O1: ldaxrh w8, [x2]526; -O1: cmp w8, w0, uxth527; -O1: stxrh wzr, w1, [x2]528 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2529 %r = extractvalue { i16, i1 } %pair, 0530 ret i16 %r531}532 533define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {534; -O0-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst:535; -O0: ldaxrh w0, [x2]536; -O0: cmp w0, w9, uxth537; -O0: stlxrh w8, w1, [x2]538;539; -O1-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst:540; -O1: and w8, w0, #0xffff541; -O1: ldaxrh w0, [x2]542; -O1: cmp w0, w8543; -O1: stlxrh w9, w1, [x2]544 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2545 %r = extractvalue { i16, i1 } %pair, 0546 ret i16 %r547}548 549define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {550; -O0-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak:551; -O0: ldaxrh w0, [x2]552; -O0: cmp w0, w9, uxth553; -O0: stlxrh w8, w1, [x2]554;555; -O1-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak:556; -O1: ldaxrh w8, [x2]557; -O1: cmp w8, w0, uxth558; -O1: stlxrh wzr, w1, [x2]559 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2560 %r = extractvalue { i16, i1 } %pair, 0561 ret i16 %r562}563 564define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {565; -O0-LABEL: cmpxchg_i16_aligned_acquire_monotonic:566; -O0: ldaxrh w0, [x2]567; -O0: cmp w0, w9, uxth568; -O0: stlxrh w8, w1, [x2]569;570; -O1-LABEL: cmpxchg_i16_aligned_acquire_monotonic:571; -O1: and w8, w0, #0xffff572; -O1: ldaxrh w0, [x2]573; -O1: cmp w0, w8574; -O1: stxrh w9, w1, [x2]575 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2576 %r = extractvalue { i16, i1 } %pair, 0577 ret i16 %r578}579 580define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {581; -O0-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak:582; -O0: ldaxrh w0, [x2]583; -O0: cmp w0, w9, uxth584; -O0: stlxrh w8, w1, [x2]585;586; -O1-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak:587; -O1: ldaxrh w8, [x2]588; -O1: cmp w8, w0, uxth589; -O1: stxrh wzr, w1, [x2]590 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2591 %r = extractvalue { i16, i1 } %pair, 0592 ret i16 %r593}594 595define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {596; -O0-LABEL: cmpxchg_i16_aligned_acquire_acquire:597; -O0: ldaxrh w0, [x2]598; -O0: cmp w0, w9, uxth599; -O0: stlxrh w8, w1, [x2]600;601; -O1-LABEL: cmpxchg_i16_aligned_acquire_acquire:602; -O1: and w8, w0, #0xffff603; -O1: ldaxrh w0, [x2]604; -O1: cmp w0, w8605; -O1: stxrh w9, w1, [x2]606 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2607 %r = extractvalue { i16, i1 } %pair, 0608 ret i16 %r609}610 611define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {612; -O0-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak:613; -O0: ldaxrh w0, [x2]614; -O0: cmp w0, w9, uxth615; -O0: stlxrh w8, w1, [x2]616;617; -O1-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak:618; -O1: ldaxrh w8, [x2]619; -O1: cmp w8, w0, uxth620; -O1: stxrh wzr, w1, [x2]621 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2622 %r = extractvalue { i16, i1 } %pair, 0623 ret i16 %r624}625 626define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {627; -O0-LABEL: cmpxchg_i16_aligned_acquire_seq_cst:628; -O0: ldaxrh w0, [x2]629; -O0: cmp w0, w9, uxth630; -O0: stlxrh w8, w1, [x2]631;632; -O1-LABEL: cmpxchg_i16_aligned_acquire_seq_cst:633; -O1: and w8, w0, #0xffff634; -O1: ldaxrh w0, [x2]635; -O1: cmp w0, w8636; -O1: stlxrh w9, w1, [x2]637 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2638 %r = extractvalue { i16, i1 } %pair, 0639 ret i16 %r640}641 642define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {643; -O0-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak:644; -O0: ldaxrh w0, [x2]645; -O0: cmp w0, w9, uxth646; -O0: stlxrh w8, w1, [x2]647;648; -O1-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak:649; -O1: ldaxrh w8, [x2]650; -O1: cmp w8, w0, uxth651; -O1: stlxrh wzr, w1, [x2]652 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2653 %r = extractvalue { i16, i1 } %pair, 0654 ret i16 %r655}656 657define dso_local i16 @cmpxchg_i16_aligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {658; -O0-LABEL: cmpxchg_i16_aligned_release_monotonic:659; -O0: ldaxrh w0, [x2]660; -O0: cmp w0, w9, uxth661; -O0: stlxrh w8, w1, [x2]662;663; -O1-LABEL: cmpxchg_i16_aligned_release_monotonic:664; -O1: and w8, w0, #0xffff665; -O1: ldxrh w0, [x2]666; -O1: cmp w0, w8667; -O1: stlxrh w9, w1, [x2]668 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 2669 %r = extractvalue { i16, i1 } %pair, 0670 ret i16 %r671}672 673define dso_local i16 @cmpxchg_i16_aligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {674; -O0-LABEL: cmpxchg_i16_aligned_release_monotonic_weak:675; -O0: ldaxrh w0, [x2]676; -O0: cmp w0, w9, uxth677; -O0: stlxrh w8, w1, [x2]678;679; -O1-LABEL: cmpxchg_i16_aligned_release_monotonic_weak:680; -O1: ldxrh w8, [x2]681; -O1: cmp w8, w0, uxth682; -O1: stlxrh wzr, w1, [x2]683 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 2684 %r = extractvalue { i16, i1 } %pair, 0685 ret i16 %r686}687 688define dso_local i16 @cmpxchg_i16_aligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {689; -O0-LABEL: cmpxchg_i16_aligned_release_acquire:690; -O0: ldaxrh w0, [x2]691; -O0: cmp w0, w9, uxth692; -O0: stlxrh w8, w1, [x2]693;694; -O1-LABEL: cmpxchg_i16_aligned_release_acquire:695; -O1: and w8, w0, #0xffff696; -O1: ldaxrh w0, [x2]697; -O1: cmp w0, w8698; -O1: stlxrh w9, w1, [x2]699 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 2700 %r = extractvalue { i16, i1 } %pair, 0701 ret i16 %r702}703 704define dso_local i16 @cmpxchg_i16_aligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {705; -O0-LABEL: cmpxchg_i16_aligned_release_acquire_weak:706; -O0: ldaxrh w0, [x2]707; -O0: cmp w0, w9, uxth708; -O0: stlxrh w8, w1, [x2]709;710; -O1-LABEL: cmpxchg_i16_aligned_release_acquire_weak:711; -O1: ldaxrh w8, [x2]712; -O1: cmp w8, w0, uxth713; -O1: stlxrh wzr, w1, [x2]714 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 2715 %r = extractvalue { i16, i1 } %pair, 0716 ret i16 %r717}718 719define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {720; -O0-LABEL: cmpxchg_i16_aligned_release_seq_cst:721; -O0: ldaxrh w0, [x2]722; -O0: cmp w0, w9, uxth723; -O0: stlxrh w8, w1, [x2]724;725; -O1-LABEL: cmpxchg_i16_aligned_release_seq_cst:726; -O1: and w8, w0, #0xffff727; -O1: ldaxrh w0, [x2]728; -O1: cmp w0, w8729; -O1: stlxrh w9, w1, [x2]730 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2731 %r = extractvalue { i16, i1 } %pair, 0732 ret i16 %r733}734 735define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {736; -O0-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak:737; -O0: ldaxrh w0, [x2]738; -O0: cmp w0, w9, uxth739; -O0: stlxrh w8, w1, [x2]740;741; -O1-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak:742; -O1: ldaxrh w8, [x2]743; -O1: cmp w8, w0, uxth744; -O1: stlxrh wzr, w1, [x2]745 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2746 %r = extractvalue { i16, i1 } %pair, 0747 ret i16 %r748}749 750define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {751; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic:752; -O0: ldaxrh w0, [x2]753; -O0: cmp w0, w9, uxth754; -O0: stlxrh w8, w1, [x2]755;756; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic:757; -O1: and w8, w0, #0xffff758; -O1: ldaxrh w0, [x2]759; -O1: cmp w0, w8760; -O1: stlxrh w9, w1, [x2]761 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2762 %r = extractvalue { i16, i1 } %pair, 0763 ret i16 %r764}765 766define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {767; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak:768; -O0: ldaxrh w0, [x2]769; -O0: cmp w0, w9, uxth770; -O0: stlxrh w8, w1, [x2]771;772; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak:773; -O1: ldaxrh w8, [x2]774; -O1: cmp w8, w0, uxth775; -O1: stlxrh wzr, w1, [x2]776 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2777 %r = extractvalue { i16, i1 } %pair, 0778 ret i16 %r779}780 781define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {782; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_acquire:783; -O0: ldaxrh w0, [x2]784; -O0: cmp w0, w9, uxth785; -O0: stlxrh w8, w1, [x2]786;787; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_acquire:788; -O1: and w8, w0, #0xffff789; -O1: ldaxrh w0, [x2]790; -O1: cmp w0, w8791; -O1: stlxrh w9, w1, [x2]792 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2793 %r = extractvalue { i16, i1 } %pair, 0794 ret i16 %r795}796 797define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {798; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak:799; -O0: ldaxrh w0, [x2]800; -O0: cmp w0, w9, uxth801; -O0: stlxrh w8, w1, [x2]802;803; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak:804; -O1: ldaxrh w8, [x2]805; -O1: cmp w8, w0, uxth806; -O1: stlxrh wzr, w1, [x2]807 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2808 %r = extractvalue { i16, i1 } %pair, 0809 ret i16 %r810}811 812define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {813; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst:814; -O0: ldaxrh w0, [x2]815; -O0: cmp w0, w9, uxth816; -O0: stlxrh w8, w1, [x2]817;818; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst:819; -O1: and w8, w0, #0xffff820; -O1: ldaxrh w0, [x2]821; -O1: cmp w0, w8822; -O1: stlxrh w9, w1, [x2]823 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2824 %r = extractvalue { i16, i1 } %pair, 0825 ret i16 %r826}827 828define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {829; -O0-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak:830; -O0: ldaxrh w0, [x2]831; -O0: cmp w0, w9, uxth832; -O0: stlxrh w8, w1, [x2]833;834; -O1-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak:835; -O1: ldaxrh w8, [x2]836; -O1: cmp w8, w0, uxth837; -O1: stlxrh wzr, w1, [x2]838 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2839 %r = extractvalue { i16, i1 } %pair, 0840 ret i16 %r841}842 843define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {844; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic:845; -O0: ldaxrh w0, [x2]846; -O0: cmp w0, w9, uxth847; -O0: stlxrh w8, w1, [x2]848;849; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic:850; -O1: and w8, w0, #0xffff851; -O1: ldaxrh w0, [x2]852; -O1: cmp w0, w8853; -O1: stlxrh w9, w1, [x2]854 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2855 %r = extractvalue { i16, i1 } %pair, 0856 ret i16 %r857}858 859define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {860; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak:861; -O0: ldaxrh w0, [x2]862; -O0: cmp w0, w9, uxth863; -O0: stlxrh w8, w1, [x2]864;865; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak:866; -O1: ldaxrh w8, [x2]867; -O1: cmp w8, w0, uxth868; -O1: stlxrh wzr, w1, [x2]869 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2870 %r = extractvalue { i16, i1 } %pair, 0871 ret i16 %r872}873 874define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {875; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_acquire:876; -O0: ldaxrh w0, [x2]877; -O0: cmp w0, w9, uxth878; -O0: stlxrh w8, w1, [x2]879;880; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_acquire:881; -O1: and w8, w0, #0xffff882; -O1: ldaxrh w0, [x2]883; -O1: cmp w0, w8884; -O1: stlxrh w9, w1, [x2]885 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2886 %r = extractvalue { i16, i1 } %pair, 0887 ret i16 %r888}889 890define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {891; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak:892; -O0: ldaxrh w0, [x2]893; -O0: cmp w0, w9, uxth894; -O0: stlxrh w8, w1, [x2]895;896; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak:897; -O1: ldaxrh w8, [x2]898; -O1: cmp w8, w0, uxth899; -O1: stlxrh wzr, w1, [x2]900 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2901 %r = extractvalue { i16, i1 } %pair, 0902 ret i16 %r903}904 905define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {906; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst:907; -O0: ldaxrh w0, [x2]908; -O0: cmp w0, w9, uxth909; -O0: stlxrh w8, w1, [x2]910;911; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst:912; -O1: and w8, w0, #0xffff913; -O1: ldaxrh w0, [x2]914; -O1: cmp w0, w8915; -O1: stlxrh w9, w1, [x2]916 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2917 %r = extractvalue { i16, i1 } %pair, 0918 ret i16 %r919}920 921define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {922; -O0-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak:923; -O0: ldaxrh w0, [x2]924; -O0: cmp w0, w9, uxth925; -O0: stlxrh w8, w1, [x2]926;927; -O1-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak:928; -O1: ldaxrh w8, [x2]929; -O1: cmp w8, w0, uxth930; -O1: stlxrh wzr, w1, [x2]931 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2932 %r = extractvalue { i16, i1 } %pair, 0933 ret i16 %r934}935 936define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {937; -O0-LABEL: cmpxchg_i32_aligned_monotonic_monotonic:938; -O0: ldaxr w0, [x2]939; -O0: cmp w0, w9940; -O0: stlxr w8, w1, [x2]941;942; -O1-LABEL: cmpxchg_i32_aligned_monotonic_monotonic:943; -O1: ldxr w0, [x2]944; -O1: cmp w0, w8945; -O1: stxr w9, w1, [x2]946 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4947 %r = extractvalue { i32, i1 } %pair, 0948 ret i32 %r949}950 951define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {952; -O0-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak:953; -O0: ldaxr w0, [x2]954; -O0: cmp w0, w9955; -O0: stlxr w8, w1, [x2]956;957; -O1-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak:958; -O1: ldxr w8, [x2]959; -O1: cmp w8, w0960; -O1: stxr wzr, w1, [x2]961 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4962 %r = extractvalue { i32, i1 } %pair, 0963 ret i32 %r964}965 966define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {967; -O0-LABEL: cmpxchg_i32_aligned_monotonic_acquire:968; -O0: ldaxr w0, [x2]969; -O0: cmp w0, w9970; -O0: stlxr w8, w1, [x2]971;972; -O1-LABEL: cmpxchg_i32_aligned_monotonic_acquire:973; -O1: ldaxr w0, [x2]974; -O1: cmp w0, w8975; -O1: stxr w9, w1, [x2]976 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4977 %r = extractvalue { i32, i1 } %pair, 0978 ret i32 %r979}980 981define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {982; -O0-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak:983; -O0: ldaxr w0, [x2]984; -O0: cmp w0, w9985; -O0: stlxr w8, w1, [x2]986;987; -O1-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak:988; -O1: ldaxr w8, [x2]989; -O1: cmp w8, w0990; -O1: stxr wzr, w1, [x2]991 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4992 %r = extractvalue { i32, i1 } %pair, 0993 ret i32 %r994}995 996define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {997; -O0-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst:998; -O0: ldaxr w0, [x2]999; -O0: cmp w0, w91000; -O0: stlxr w8, w1, [x2]1001;1002; -O1-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst:1003; -O1: ldaxr w0, [x2]1004; -O1: cmp w0, w81005; -O1: stlxr w9, w1, [x2]1006 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 41007 %r = extractvalue { i32, i1 } %pair, 01008 ret i32 %r1009}1010 1011define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1012; -O0-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak:1013; -O0: ldaxr w0, [x2]1014; -O0: cmp w0, w91015; -O0: stlxr w8, w1, [x2]1016;1017; -O1-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak:1018; -O1: ldaxr w8, [x2]1019; -O1: cmp w8, w01020; -O1: stlxr wzr, w1, [x2]1021 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 41022 %r = extractvalue { i32, i1 } %pair, 01023 ret i32 %r1024}1025 1026define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {1027; -O0-LABEL: cmpxchg_i32_aligned_acquire_monotonic:1028; -O0: ldaxr w0, [x2]1029; -O0: cmp w0, w91030; -O0: stlxr w8, w1, [x2]1031;1032; -O1-LABEL: cmpxchg_i32_aligned_acquire_monotonic:1033; -O1: ldaxr w0, [x2]1034; -O1: cmp w0, w81035; -O1: stxr w9, w1, [x2]1036 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 41037 %r = extractvalue { i32, i1 } %pair, 01038 ret i32 %r1039}1040 1041define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1042; -O0-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak:1043; -O0: ldaxr w0, [x2]1044; -O0: cmp w0, w91045; -O0: stlxr w8, w1, [x2]1046;1047; -O1-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak:1048; -O1: ldaxr w8, [x2]1049; -O1: cmp w8, w01050; -O1: stxr wzr, w1, [x2]1051 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 41052 %r = extractvalue { i32, i1 } %pair, 01053 ret i32 %r1054}1055 1056define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {1057; -O0-LABEL: cmpxchg_i32_aligned_acquire_acquire:1058; -O0: ldaxr w0, [x2]1059; -O0: cmp w0, w91060; -O0: stlxr w8, w1, [x2]1061;1062; -O1-LABEL: cmpxchg_i32_aligned_acquire_acquire:1063; -O1: ldaxr w0, [x2]1064; -O1: cmp w0, w81065; -O1: stxr w9, w1, [x2]1066 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 41067 %r = extractvalue { i32, i1 } %pair, 01068 ret i32 %r1069}1070 1071define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1072; -O0-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak:1073; -O0: ldaxr w0, [x2]1074; -O0: cmp w0, w91075; -O0: stlxr w8, w1, [x2]1076;1077; -O1-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak:1078; -O1: ldaxr w8, [x2]1079; -O1: cmp w8, w01080; -O1: stxr wzr, w1, [x2]1081 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 41082 %r = extractvalue { i32, i1 } %pair, 01083 ret i32 %r1084}1085 1086define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1087; -O0-LABEL: cmpxchg_i32_aligned_acquire_seq_cst:1088; -O0: ldaxr w0, [x2]1089; -O0: cmp w0, w91090; -O0: stlxr w8, w1, [x2]1091;1092; -O1-LABEL: cmpxchg_i32_aligned_acquire_seq_cst:1093; -O1: ldaxr w0, [x2]1094; -O1: cmp w0, w81095; -O1: stlxr w9, w1, [x2]1096 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 41097 %r = extractvalue { i32, i1 } %pair, 01098 ret i32 %r1099}1100 1101define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1102; -O0-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak:1103; -O0: ldaxr w0, [x2]1104; -O0: cmp w0, w91105; -O0: stlxr w8, w1, [x2]1106;1107; -O1-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak:1108; -O1: ldaxr w8, [x2]1109; -O1: cmp w8, w01110; -O1: stlxr wzr, w1, [x2]1111 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 41112 %r = extractvalue { i32, i1 } %pair, 01113 ret i32 %r1114}1115 1116define dso_local i32 @cmpxchg_i32_aligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {1117; -O0-LABEL: cmpxchg_i32_aligned_release_monotonic:1118; -O0: ldaxr w0, [x2]1119; -O0: cmp w0, w91120; -O0: stlxr w8, w1, [x2]1121;1122; -O1-LABEL: cmpxchg_i32_aligned_release_monotonic:1123; -O1: ldxr w0, [x2]1124; -O1: cmp w0, w81125; -O1: stlxr w9, w1, [x2]1126 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 41127 %r = extractvalue { i32, i1 } %pair, 01128 ret i32 %r1129}1130 1131define dso_local i32 @cmpxchg_i32_aligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1132; -O0-LABEL: cmpxchg_i32_aligned_release_monotonic_weak:1133; -O0: ldaxr w0, [x2]1134; -O0: cmp w0, w91135; -O0: stlxr w8, w1, [x2]1136;1137; -O1-LABEL: cmpxchg_i32_aligned_release_monotonic_weak:1138; -O1: ldxr w8, [x2]1139; -O1: cmp w8, w01140; -O1: stlxr wzr, w1, [x2]1141 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 41142 %r = extractvalue { i32, i1 } %pair, 01143 ret i32 %r1144}1145 1146define dso_local i32 @cmpxchg_i32_aligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {1147; -O0-LABEL: cmpxchg_i32_aligned_release_acquire:1148; -O0: ldaxr w0, [x2]1149; -O0: cmp w0, w91150; -O0: stlxr w8, w1, [x2]1151;1152; -O1-LABEL: cmpxchg_i32_aligned_release_acquire:1153; -O1: ldaxr w0, [x2]1154; -O1: cmp w0, w81155; -O1: stlxr w9, w1, [x2]1156 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 41157 %r = extractvalue { i32, i1 } %pair, 01158 ret i32 %r1159}1160 1161define dso_local i32 @cmpxchg_i32_aligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1162; -O0-LABEL: cmpxchg_i32_aligned_release_acquire_weak:1163; -O0: ldaxr w0, [x2]1164; -O0: cmp w0, w91165; -O0: stlxr w8, w1, [x2]1166;1167; -O1-LABEL: cmpxchg_i32_aligned_release_acquire_weak:1168; -O1: ldaxr w8, [x2]1169; -O1: cmp w8, w01170; -O1: stlxr wzr, w1, [x2]1171 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 41172 %r = extractvalue { i32, i1 } %pair, 01173 ret i32 %r1174}1175 1176define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1177; -O0-LABEL: cmpxchg_i32_aligned_release_seq_cst:1178; -O0: ldaxr w0, [x2]1179; -O0: cmp w0, w91180; -O0: stlxr w8, w1, [x2]1181;1182; -O1-LABEL: cmpxchg_i32_aligned_release_seq_cst:1183; -O1: ldaxr w0, [x2]1184; -O1: cmp w0, w81185; -O1: stlxr w9, w1, [x2]1186 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 41187 %r = extractvalue { i32, i1 } %pair, 01188 ret i32 %r1189}1190 1191define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1192; -O0-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak:1193; -O0: ldaxr w0, [x2]1194; -O0: cmp w0, w91195; -O0: stlxr w8, w1, [x2]1196;1197; -O1-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak:1198; -O1: ldaxr w8, [x2]1199; -O1: cmp w8, w01200; -O1: stlxr wzr, w1, [x2]1201 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 41202 %r = extractvalue { i32, i1 } %pair, 01203 ret i32 %r1204}1205 1206define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {1207; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic:1208; -O0: ldaxr w0, [x2]1209; -O0: cmp w0, w91210; -O0: stlxr w8, w1, [x2]1211;1212; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic:1213; -O1: ldaxr w0, [x2]1214; -O1: cmp w0, w81215; -O1: stlxr w9, w1, [x2]1216 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 41217 %r = extractvalue { i32, i1 } %pair, 01218 ret i32 %r1219}1220 1221define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1222; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak:1223; -O0: ldaxr w0, [x2]1224; -O0: cmp w0, w91225; -O0: stlxr w8, w1, [x2]1226;1227; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak:1228; -O1: ldaxr w8, [x2]1229; -O1: cmp w8, w01230; -O1: stlxr wzr, w1, [x2]1231 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 41232 %r = extractvalue { i32, i1 } %pair, 01233 ret i32 %r1234}1235 1236define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {1237; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_acquire:1238; -O0: ldaxr w0, [x2]1239; -O0: cmp w0, w91240; -O0: stlxr w8, w1, [x2]1241;1242; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_acquire:1243; -O1: ldaxr w0, [x2]1244; -O1: cmp w0, w81245; -O1: stlxr w9, w1, [x2]1246 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 41247 %r = extractvalue { i32, i1 } %pair, 01248 ret i32 %r1249}1250 1251define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1252; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak:1253; -O0: ldaxr w0, [x2]1254; -O0: cmp w0, w91255; -O0: stlxr w8, w1, [x2]1256;1257; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak:1258; -O1: ldaxr w8, [x2]1259; -O1: cmp w8, w01260; -O1: stlxr wzr, w1, [x2]1261 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 41262 %r = extractvalue { i32, i1 } %pair, 01263 ret i32 %r1264}1265 1266define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1267; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst:1268; -O0: ldaxr w0, [x2]1269; -O0: cmp w0, w91270; -O0: stlxr w8, w1, [x2]1271;1272; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst:1273; -O1: ldaxr w0, [x2]1274; -O1: cmp w0, w81275; -O1: stlxr w9, w1, [x2]1276 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 41277 %r = extractvalue { i32, i1 } %pair, 01278 ret i32 %r1279}1280 1281define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1282; -O0-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak:1283; -O0: ldaxr w0, [x2]1284; -O0: cmp w0, w91285; -O0: stlxr w8, w1, [x2]1286;1287; -O1-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak:1288; -O1: ldaxr w8, [x2]1289; -O1: cmp w8, w01290; -O1: stlxr wzr, w1, [x2]1291 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 41292 %r = extractvalue { i32, i1 } %pair, 01293 ret i32 %r1294}1295 1296define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {1297; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic:1298; -O0: ldaxr w0, [x2]1299; -O0: cmp w0, w91300; -O0: stlxr w8, w1, [x2]1301;1302; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic:1303; -O1: ldaxr w0, [x2]1304; -O1: cmp w0, w81305; -O1: stlxr w9, w1, [x2]1306 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 41307 %r = extractvalue { i32, i1 } %pair, 01308 ret i32 %r1309}1310 1311define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {1312; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak:1313; -O0: ldaxr w0, [x2]1314; -O0: cmp w0, w91315; -O0: stlxr w8, w1, [x2]1316;1317; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak:1318; -O1: ldaxr w8, [x2]1319; -O1: cmp w8, w01320; -O1: stlxr wzr, w1, [x2]1321 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 41322 %r = extractvalue { i32, i1 } %pair, 01323 ret i32 %r1324}1325 1326define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {1327; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_acquire:1328; -O0: ldaxr w0, [x2]1329; -O0: cmp w0, w91330; -O0: stlxr w8, w1, [x2]1331;1332; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_acquire:1333; -O1: ldaxr w0, [x2]1334; -O1: cmp w0, w81335; -O1: stlxr w9, w1, [x2]1336 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 41337 %r = extractvalue { i32, i1 } %pair, 01338 ret i32 %r1339}1340 1341define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {1342; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak:1343; -O0: ldaxr w0, [x2]1344; -O0: cmp w0, w91345; -O0: stlxr w8, w1, [x2]1346;1347; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak:1348; -O1: ldaxr w8, [x2]1349; -O1: cmp w8, w01350; -O1: stlxr wzr, w1, [x2]1351 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 41352 %r = extractvalue { i32, i1 } %pair, 01353 ret i32 %r1354}1355 1356define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {1357; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst:1358; -O0: ldaxr w0, [x2]1359; -O0: cmp w0, w91360; -O0: stlxr w8, w1, [x2]1361;1362; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst:1363; -O1: ldaxr w0, [x2]1364; -O1: cmp w0, w81365; -O1: stlxr w9, w1, [x2]1366 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 41367 %r = extractvalue { i32, i1 } %pair, 01368 ret i32 %r1369}1370 1371define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {1372; -O0-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak:1373; -O0: ldaxr w0, [x2]1374; -O0: cmp w0, w91375; -O0: stlxr w8, w1, [x2]1376;1377; -O1-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak:1378; -O1: ldaxr w8, [x2]1379; -O1: cmp w8, w01380; -O1: stlxr wzr, w1, [x2]1381 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 41382 %r = extractvalue { i32, i1 } %pair, 01383 ret i32 %r1384}1385 1386define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {1387; -O0-LABEL: cmpxchg_i64_aligned_monotonic_monotonic:1388; -O0: ldaxr x0, [x2]1389; -O0: cmp x0, x91390; -O0: stlxr w8, x1, [x2]1391;1392; -O1-LABEL: cmpxchg_i64_aligned_monotonic_monotonic:1393; -O1: ldxr x0, [x2]1394; -O1: cmp x0, x81395; -O1: stxr w9, x1, [x2]1396 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 81397 %r = extractvalue { i64, i1 } %pair, 01398 ret i64 %r1399}1400 1401define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {1402; -O0-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak:1403; -O0: ldaxr x0, [x2]1404; -O0: cmp x0, x91405; -O0: stlxr w8, x1, [x2]1406;1407; -O1-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak:1408; -O1: ldxr x8, [x2]1409; -O1: cmp x8, x01410; -O1: stxr wzr, x1, [x2]1411 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 81412 %r = extractvalue { i64, i1 } %pair, 01413 ret i64 %r1414}1415 1416define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {1417; -O0-LABEL: cmpxchg_i64_aligned_monotonic_acquire:1418; -O0: ldaxr x0, [x2]1419; -O0: cmp x0, x91420; -O0: stlxr w8, x1, [x2]1421;1422; -O1-LABEL: cmpxchg_i64_aligned_monotonic_acquire:1423; -O1: ldaxr x0, [x2]1424; -O1: cmp x0, x81425; -O1: stxr w9, x1, [x2]1426 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 81427 %r = extractvalue { i64, i1 } %pair, 01428 ret i64 %r1429}1430 1431define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {1432; -O0-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak:1433; -O0: ldaxr x0, [x2]1434; -O0: cmp x0, x91435; -O0: stlxr w8, x1, [x2]1436;1437; -O1-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak:1438; -O1: ldaxr x8, [x2]1439; -O1: cmp x8, x01440; -O1: stxr wzr, x1, [x2]1441 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 81442 %r = extractvalue { i64, i1 } %pair, 01443 ret i64 %r1444}1445 1446define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {1447; -O0-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst:1448; -O0: ldaxr x0, [x2]1449; -O0: cmp x0, x91450; -O0: stlxr w8, x1, [x2]1451;1452; -O1-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst:1453; -O1: ldaxr x0, [x2]1454; -O1: cmp x0, x81455; -O1: stlxr w9, x1, [x2]1456 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 81457 %r = extractvalue { i64, i1 } %pair, 01458 ret i64 %r1459}1460 1461define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {1462; -O0-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak:1463; -O0: ldaxr x0, [x2]1464; -O0: cmp x0, x91465; -O0: stlxr w8, x1, [x2]1466;1467; -O1-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak:1468; -O1: ldaxr x8, [x2]1469; -O1: cmp x8, x01470; -O1: stlxr wzr, x1, [x2]1471 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 81472 %r = extractvalue { i64, i1 } %pair, 01473 ret i64 %r1474}1475 1476define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {1477; -O0-LABEL: cmpxchg_i64_aligned_acquire_monotonic:1478; -O0: ldaxr x0, [x2]1479; -O0: cmp x0, x91480; -O0: stlxr w8, x1, [x2]1481;1482; -O1-LABEL: cmpxchg_i64_aligned_acquire_monotonic:1483; -O1: ldaxr x0, [x2]1484; -O1: cmp x0, x81485; -O1: stxr w9, x1, [x2]1486 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 81487 %r = extractvalue { i64, i1 } %pair, 01488 ret i64 %r1489}1490 1491define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {1492; -O0-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak:1493; -O0: ldaxr x0, [x2]1494; -O0: cmp x0, x91495; -O0: stlxr w8, x1, [x2]1496;1497; -O1-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak:1498; -O1: ldaxr x8, [x2]1499; -O1: cmp x8, x01500; -O1: stxr wzr, x1, [x2]1501 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 81502 %r = extractvalue { i64, i1 } %pair, 01503 ret i64 %r1504}1505 1506define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {1507; -O0-LABEL: cmpxchg_i64_aligned_acquire_acquire:1508; -O0: ldaxr x0, [x2]1509; -O0: cmp x0, x91510; -O0: stlxr w8, x1, [x2]1511;1512; -O1-LABEL: cmpxchg_i64_aligned_acquire_acquire:1513; -O1: ldaxr x0, [x2]1514; -O1: cmp x0, x81515; -O1: stxr w9, x1, [x2]1516 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 81517 %r = extractvalue { i64, i1 } %pair, 01518 ret i64 %r1519}1520 1521define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {1522; -O0-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak:1523; -O0: ldaxr x0, [x2]1524; -O0: cmp x0, x91525; -O0: stlxr w8, x1, [x2]1526;1527; -O1-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak:1528; -O1: ldaxr x8, [x2]1529; -O1: cmp x8, x01530; -O1: stxr wzr, x1, [x2]1531 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 81532 %r = extractvalue { i64, i1 } %pair, 01533 ret i64 %r1534}1535 1536define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {1537; -O0-LABEL: cmpxchg_i64_aligned_acquire_seq_cst:1538; -O0: ldaxr x0, [x2]1539; -O0: cmp x0, x91540; -O0: stlxr w8, x1, [x2]1541;1542; -O1-LABEL: cmpxchg_i64_aligned_acquire_seq_cst:1543; -O1: ldaxr x0, [x2]1544; -O1: cmp x0, x81545; -O1: stlxr w9, x1, [x2]1546 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 81547 %r = extractvalue { i64, i1 } %pair, 01548 ret i64 %r1549}1550 1551define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {1552; -O0-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak:1553; -O0: ldaxr x0, [x2]1554; -O0: cmp x0, x91555; -O0: stlxr w8, x1, [x2]1556;1557; -O1-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak:1558; -O1: ldaxr x8, [x2]1559; -O1: cmp x8, x01560; -O1: stlxr wzr, x1, [x2]1561 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 81562 %r = extractvalue { i64, i1 } %pair, 01563 ret i64 %r1564}1565 1566define dso_local i64 @cmpxchg_i64_aligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {1567; -O0-LABEL: cmpxchg_i64_aligned_release_monotonic:1568; -O0: ldaxr x0, [x2]1569; -O0: cmp x0, x91570; -O0: stlxr w8, x1, [x2]1571;1572; -O1-LABEL: cmpxchg_i64_aligned_release_monotonic:1573; -O1: ldxr x0, [x2]1574; -O1: cmp x0, x81575; -O1: stlxr w9, x1, [x2]1576 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 81577 %r = extractvalue { i64, i1 } %pair, 01578 ret i64 %r1579}1580 1581define dso_local i64 @cmpxchg_i64_aligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {1582; -O0-LABEL: cmpxchg_i64_aligned_release_monotonic_weak:1583; -O0: ldaxr x0, [x2]1584; -O0: cmp x0, x91585; -O0: stlxr w8, x1, [x2]1586;1587; -O1-LABEL: cmpxchg_i64_aligned_release_monotonic_weak:1588; -O1: ldxr x8, [x2]1589; -O1: cmp x8, x01590; -O1: stlxr wzr, x1, [x2]1591 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 81592 %r = extractvalue { i64, i1 } %pair, 01593 ret i64 %r1594}1595 1596define dso_local i64 @cmpxchg_i64_aligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {1597; -O0-LABEL: cmpxchg_i64_aligned_release_acquire:1598; -O0: ldaxr x0, [x2]1599; -O0: cmp x0, x91600; -O0: stlxr w8, x1, [x2]1601;1602; -O1-LABEL: cmpxchg_i64_aligned_release_acquire:1603; -O1: ldaxr x0, [x2]1604; -O1: cmp x0, x81605; -O1: stlxr w9, x1, [x2]1606 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 81607 %r = extractvalue { i64, i1 } %pair, 01608 ret i64 %r1609}1610 1611define dso_local i64 @cmpxchg_i64_aligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {1612; -O0-LABEL: cmpxchg_i64_aligned_release_acquire_weak:1613; -O0: ldaxr x0, [x2]1614; -O0: cmp x0, x91615; -O0: stlxr w8, x1, [x2]1616;1617; -O1-LABEL: cmpxchg_i64_aligned_release_acquire_weak:1618; -O1: ldaxr x8, [x2]1619; -O1: cmp x8, x01620; -O1: stlxr wzr, x1, [x2]1621 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 81622 %r = extractvalue { i64, i1 } %pair, 01623 ret i64 %r1624}1625 1626define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {1627; -O0-LABEL: cmpxchg_i64_aligned_release_seq_cst:1628; -O0: ldaxr x0, [x2]1629; -O0: cmp x0, x91630; -O0: stlxr w8, x1, [x2]1631;1632; -O1-LABEL: cmpxchg_i64_aligned_release_seq_cst:1633; -O1: ldaxr x0, [x2]1634; -O1: cmp x0, x81635; -O1: stlxr w9, x1, [x2]1636 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 81637 %r = extractvalue { i64, i1 } %pair, 01638 ret i64 %r1639}1640 1641define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {1642; -O0-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak:1643; -O0: ldaxr x0, [x2]1644; -O0: cmp x0, x91645; -O0: stlxr w8, x1, [x2]1646;1647; -O1-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak:1648; -O1: ldaxr x8, [x2]1649; -O1: cmp x8, x01650; -O1: stlxr wzr, x1, [x2]1651 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 81652 %r = extractvalue { i64, i1 } %pair, 01653 ret i64 %r1654}1655 1656define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {1657; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic:1658; -O0: ldaxr x0, [x2]1659; -O0: cmp x0, x91660; -O0: stlxr w8, x1, [x2]1661;1662; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic:1663; -O1: ldaxr x0, [x2]1664; -O1: cmp x0, x81665; -O1: stlxr w9, x1, [x2]1666 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 81667 %r = extractvalue { i64, i1 } %pair, 01668 ret i64 %r1669}1670 1671define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {1672; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak:1673; -O0: ldaxr x0, [x2]1674; -O0: cmp x0, x91675; -O0: stlxr w8, x1, [x2]1676;1677; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak:1678; -O1: ldaxr x8, [x2]1679; -O1: cmp x8, x01680; -O1: stlxr wzr, x1, [x2]1681 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 81682 %r = extractvalue { i64, i1 } %pair, 01683 ret i64 %r1684}1685 1686define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {1687; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_acquire:1688; -O0: ldaxr x0, [x2]1689; -O0: cmp x0, x91690; -O0: stlxr w8, x1, [x2]1691;1692; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_acquire:1693; -O1: ldaxr x0, [x2]1694; -O1: cmp x0, x81695; -O1: stlxr w9, x1, [x2]1696 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 81697 %r = extractvalue { i64, i1 } %pair, 01698 ret i64 %r1699}1700 1701define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {1702; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak:1703; -O0: ldaxr x0, [x2]1704; -O0: cmp x0, x91705; -O0: stlxr w8, x1, [x2]1706;1707; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak:1708; -O1: ldaxr x8, [x2]1709; -O1: cmp x8, x01710; -O1: stlxr wzr, x1, [x2]1711 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 81712 %r = extractvalue { i64, i1 } %pair, 01713 ret i64 %r1714}1715 1716define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {1717; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst:1718; -O0: ldaxr x0, [x2]1719; -O0: cmp x0, x91720; -O0: stlxr w8, x1, [x2]1721;1722; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst:1723; -O1: ldaxr x0, [x2]1724; -O1: cmp x0, x81725; -O1: stlxr w9, x1, [x2]1726 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 81727 %r = extractvalue { i64, i1 } %pair, 01728 ret i64 %r1729}1730 1731define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {1732; -O0-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak:1733; -O0: ldaxr x0, [x2]1734; -O0: cmp x0, x91735; -O0: stlxr w8, x1, [x2]1736;1737; -O1-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak:1738; -O1: ldaxr x8, [x2]1739; -O1: cmp x8, x01740; -O1: stlxr wzr, x1, [x2]1741 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 81742 %r = extractvalue { i64, i1 } %pair, 01743 ret i64 %r1744}1745 1746define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {1747; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic:1748; -O0: ldaxr x0, [x2]1749; -O0: cmp x0, x91750; -O0: stlxr w8, x1, [x2]1751;1752; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic:1753; -O1: ldaxr x0, [x2]1754; -O1: cmp x0, x81755; -O1: stlxr w9, x1, [x2]1756 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 81757 %r = extractvalue { i64, i1 } %pair, 01758 ret i64 %r1759}1760 1761define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {1762; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak:1763; -O0: ldaxr x0, [x2]1764; -O0: cmp x0, x91765; -O0: stlxr w8, x1, [x2]1766;1767; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak:1768; -O1: ldaxr x8, [x2]1769; -O1: cmp x8, x01770; -O1: stlxr wzr, x1, [x2]1771 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 81772 %r = extractvalue { i64, i1 } %pair, 01773 ret i64 %r1774}1775 1776define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {1777; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_acquire:1778; -O0: ldaxr x0, [x2]1779; -O0: cmp x0, x91780; -O0: stlxr w8, x1, [x2]1781;1782; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_acquire:1783; -O1: ldaxr x0, [x2]1784; -O1: cmp x0, x81785; -O1: stlxr w9, x1, [x2]1786 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 81787 %r = extractvalue { i64, i1 } %pair, 01788 ret i64 %r1789}1790 1791define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {1792; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak:1793; -O0: ldaxr x0, [x2]1794; -O0: cmp x0, x91795; -O0: stlxr w8, x1, [x2]1796;1797; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak:1798; -O1: ldaxr x8, [x2]1799; -O1: cmp x8, x01800; -O1: stlxr wzr, x1, [x2]1801 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 81802 %r = extractvalue { i64, i1 } %pair, 01803 ret i64 %r1804}1805 1806define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {1807; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst:1808; -O0: ldaxr x0, [x2]1809; -O0: cmp x0, x91810; -O0: stlxr w8, x1, [x2]1811;1812; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst:1813; -O1: ldaxr x0, [x2]1814; -O1: cmp x0, x81815; -O1: stlxr w9, x1, [x2]1816 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 81817 %r = extractvalue { i64, i1 } %pair, 01818 ret i64 %r1819}1820 1821define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {1822; -O0-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak:1823; -O0: ldaxr x0, [x2]1824; -O0: cmp x0, x91825; -O0: stlxr w8, x1, [x2]1826;1827; -O1-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak:1828; -O1: ldaxr x8, [x2]1829; -O1: cmp x8, x01830; -O1: stlxr wzr, x1, [x2]1831 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 81832 %r = extractvalue { i64, i1 } %pair, 01833 ret i64 %r1834}1835 1836define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {1837; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:1838; -O0: ldxp x0, x1, [x4]1839; -O0: cmp x0, x91840; -O0: cmp x1, x101841; -O0: stxp w8, x2, x3, [x4]1842; -O0: stxp w8, x0, x1, [x4]1843;1844; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:1845; -O1: ldxp x8, x9, [x4]1846; -O1: cmp x8, x01847; -O1: cmp x9, x11848; -O1: stxp w10, x8, x9, [x4]1849; -O1: stxp w10, x2, x3, [x4]1850 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 161851 %r = extractvalue { i128, i1 } %pair, 01852 ret i128 %r1853}1854 1855define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {1856; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:1857; -O0: ldxp x0, x1, [x4]1858; -O0: cmp x0, x91859; -O0: cmp x1, x101860; -O0: stxp w8, x2, x3, [x4]1861; -O0: stxp w8, x0, x1, [x4]1862;1863; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:1864; -O1: ldxp x8, x9, [x4]1865; -O1: cmp x8, x01866; -O1: cmp x9, x11867; -O1: stxp w10, x8, x9, [x4]1868; -O1: stxp w10, x2, x3, [x4]1869 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 161870 %r = extractvalue { i128, i1 } %pair, 01871 ret i128 %r1872}1873 1874define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {1875; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire:1876; -O0: ldaxp x0, x1, [x4]1877; -O0: cmp x0, x91878; -O0: cmp x1, x101879; -O0: stxp w8, x2, x3, [x4]1880; -O0: stxp w8, x0, x1, [x4]1881;1882; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire:1883; -O1: ldaxp x8, x9, [x4]1884; -O1: cmp x8, x01885; -O1: cmp x9, x11886; -O1: stxp w10, x8, x9, [x4]1887; -O1: stxp w10, x2, x3, [x4]1888 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 161889 %r = extractvalue { i128, i1 } %pair, 01890 ret i128 %r1891}1892 1893define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {1894; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:1895; -O0: ldaxp x0, x1, [x4]1896; -O0: cmp x0, x91897; -O0: cmp x1, x101898; -O0: stxp w8, x2, x3, [x4]1899; -O0: stxp w8, x0, x1, [x4]1900;1901; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:1902; -O1: ldaxp x8, x9, [x4]1903; -O1: cmp x8, x01904; -O1: cmp x9, x11905; -O1: stxp w10, x8, x9, [x4]1906; -O1: stxp w10, x2, x3, [x4]1907 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 161908 %r = extractvalue { i128, i1 } %pair, 01909 ret i128 %r1910}1911 1912define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {1913; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:1914; -O0: ldaxp x0, x1, [x4]1915; -O0: cmp x0, x91916; -O0: cmp x1, x101917; -O0: stlxp w8, x2, x3, [x4]1918; -O0: stlxp w8, x0, x1, [x4]1919;1920; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:1921; -O1: ldaxp x8, x9, [x4]1922; -O1: cmp x8, x01923; -O1: cmp x9, x11924; -O1: stlxp w10, x8, x9, [x4]1925; -O1: stlxp w10, x2, x3, [x4]1926 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 161927 %r = extractvalue { i128, i1 } %pair, 01928 ret i128 %r1929}1930 1931define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {1932; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:1933; -O0: ldaxp x0, x1, [x4]1934; -O0: cmp x0, x91935; -O0: cmp x1, x101936; -O0: stlxp w8, x2, x3, [x4]1937; -O0: stlxp w8, x0, x1, [x4]1938;1939; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:1940; -O1: ldaxp x8, x9, [x4]1941; -O1: cmp x8, x01942; -O1: cmp x9, x11943; -O1: stlxp w10, x8, x9, [x4]1944; -O1: stlxp w10, x2, x3, [x4]1945 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 161946 %r = extractvalue { i128, i1 } %pair, 01947 ret i128 %r1948}1949 1950define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {1951; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic:1952; -O0: ldaxp x0, x1, [x4]1953; -O0: cmp x0, x91954; -O0: cmp x1, x101955; -O0: stxp w8, x2, x3, [x4]1956; -O0: stxp w8, x0, x1, [x4]1957;1958; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic:1959; -O1: ldaxp x8, x9, [x4]1960; -O1: cmp x8, x01961; -O1: cmp x9, x11962; -O1: stxp w10, x8, x9, [x4]1963; -O1: stxp w10, x2, x3, [x4]1964 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 161965 %r = extractvalue { i128, i1 } %pair, 01966 ret i128 %r1967}1968 1969define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {1970; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:1971; -O0: ldaxp x0, x1, [x4]1972; -O0: cmp x0, x91973; -O0: cmp x1, x101974; -O0: stxp w8, x2, x3, [x4]1975; -O0: stxp w8, x0, x1, [x4]1976;1977; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:1978; -O1: ldaxp x8, x9, [x4]1979; -O1: cmp x8, x01980; -O1: cmp x9, x11981; -O1: stxp w10, x8, x9, [x4]1982; -O1: stxp w10, x2, x3, [x4]1983 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 161984 %r = extractvalue { i128, i1 } %pair, 01985 ret i128 %r1986}1987 1988define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {1989; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire:1990; -O0: ldaxp x0, x1, [x4]1991; -O0: cmp x0, x91992; -O0: cmp x1, x101993; -O0: stxp w8, x2, x3, [x4]1994; -O0: stxp w8, x0, x1, [x4]1995;1996; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire:1997; -O1: ldaxp x8, x9, [x4]1998; -O1: cmp x8, x01999; -O1: cmp x9, x12000; -O1: stxp w10, x8, x9, [x4]2001; -O1: stxp w10, x2, x3, [x4]2002 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 162003 %r = extractvalue { i128, i1 } %pair, 02004 ret i128 %r2005}2006 2007define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2008; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:2009; -O0: ldaxp x0, x1, [x4]2010; -O0: cmp x0, x92011; -O0: cmp x1, x102012; -O0: stxp w8, x2, x3, [x4]2013; -O0: stxp w8, x0, x1, [x4]2014;2015; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:2016; -O1: ldaxp x8, x9, [x4]2017; -O1: cmp x8, x02018; -O1: cmp x9, x12019; -O1: stxp w10, x8, x9, [x4]2020; -O1: stxp w10, x2, x3, [x4]2021 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 162022 %r = extractvalue { i128, i1 } %pair, 02023 ret i128 %r2024}2025 2026define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2027; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:2028; -O0: ldaxp x0, x1, [x4]2029; -O0: cmp x0, x92030; -O0: cmp x1, x102031; -O0: stlxp w8, x2, x3, [x4]2032; -O0: stlxp w8, x0, x1, [x4]2033;2034; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:2035; -O1: ldaxp x8, x9, [x4]2036; -O1: cmp x8, x02037; -O1: cmp x9, x12038; -O1: stlxp w10, x8, x9, [x4]2039; -O1: stlxp w10, x2, x3, [x4]2040 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 162041 %r = extractvalue { i128, i1 } %pair, 02042 ret i128 %r2043}2044 2045define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2046; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:2047; -O0: ldaxp x0, x1, [x4]2048; -O0: cmp x0, x92049; -O0: cmp x1, x102050; -O0: stlxp w8, x2, x3, [x4]2051; -O0: stlxp w8, x0, x1, [x4]2052;2053; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:2054; -O1: ldaxp x8, x9, [x4]2055; -O1: cmp x8, x02056; -O1: cmp x9, x12057; -O1: stlxp w10, x8, x9, [x4]2058; -O1: stlxp w10, x2, x3, [x4]2059 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 162060 %r = extractvalue { i128, i1 } %pair, 02061 ret i128 %r2062}2063 2064define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {2065; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic:2066; -O0: ldxp x0, x1, [x4]2067; -O0: cmp x0, x92068; -O0: cmp x1, x102069; -O0: stlxp w8, x2, x3, [x4]2070; -O0: stlxp w8, x0, x1, [x4]2071;2072; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic:2073; -O1: ldxp x8, x9, [x4]2074; -O1: cmp x8, x02075; -O1: cmp x9, x12076; -O1: stlxp w10, x8, x9, [x4]2077; -O1: stlxp w10, x2, x3, [x4]2078 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 162079 %r = extractvalue { i128, i1 } %pair, 02080 ret i128 %r2081}2082 2083define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2084; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:2085; -O0: ldxp x0, x1, [x4]2086; -O0: cmp x0, x92087; -O0: cmp x1, x102088; -O0: stlxp w8, x2, x3, [x4]2089; -O0: stlxp w8, x0, x1, [x4]2090;2091; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:2092; -O1: ldxp x8, x9, [x4]2093; -O1: cmp x8, x02094; -O1: cmp x9, x12095; -O1: stlxp w10, x8, x9, [x4]2096; -O1: stlxp w10, x2, x3, [x4]2097 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 162098 %r = extractvalue { i128, i1 } %pair, 02099 ret i128 %r2100}2101 2102define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {2103; -O0-LABEL: cmpxchg_i128_aligned_release_acquire:2104; -O0: ldaxp x0, x1, [x4]2105; -O0: cmp x0, x92106; -O0: cmp x1, x102107; -O0: stlxp w8, x2, x3, [x4]2108; -O0: stlxp w8, x0, x1, [x4]2109;2110; -O1-LABEL: cmpxchg_i128_aligned_release_acquire:2111; -O1: ldaxp x8, x9, [x4]2112; -O1: cmp x8, x02113; -O1: cmp x9, x12114; -O1: stlxp w10, x8, x9, [x4]2115; -O1: stlxp w10, x2, x3, [x4]2116 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 162117 %r = extractvalue { i128, i1 } %pair, 02118 ret i128 %r2119}2120 2121define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2122; -O0-LABEL: cmpxchg_i128_aligned_release_acquire_weak:2123; -O0: ldaxp x0, x1, [x4]2124; -O0: cmp x0, x92125; -O0: cmp x1, x102126; -O0: stlxp w8, x2, x3, [x4]2127; -O0: stlxp w8, x0, x1, [x4]2128;2129; -O1-LABEL: cmpxchg_i128_aligned_release_acquire_weak:2130; -O1: ldaxp x8, x9, [x4]2131; -O1: cmp x8, x02132; -O1: cmp x9, x12133; -O1: stlxp w10, x8, x9, [x4]2134; -O1: stlxp w10, x2, x3, [x4]2135 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 162136 %r = extractvalue { i128, i1 } %pair, 02137 ret i128 %r2138}2139 2140define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2141; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst:2142; -O0: ldaxp x0, x1, [x4]2143; -O0: cmp x0, x92144; -O0: cmp x1, x102145; -O0: stlxp w8, x2, x3, [x4]2146; -O0: stlxp w8, x0, x1, [x4]2147;2148; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst:2149; -O1: ldaxp x8, x9, [x4]2150; -O1: cmp x8, x02151; -O1: cmp x9, x12152; -O1: stlxp w10, x8, x9, [x4]2153; -O1: stlxp w10, x2, x3, [x4]2154 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 162155 %r = extractvalue { i128, i1 } %pair, 02156 ret i128 %r2157}2158 2159define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2160; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:2161; -O0: ldaxp x0, x1, [x4]2162; -O0: cmp x0, x92163; -O0: cmp x1, x102164; -O0: stlxp w8, x2, x3, [x4]2165; -O0: stlxp w8, x0, x1, [x4]2166;2167; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:2168; -O1: ldaxp x8, x9, [x4]2169; -O1: cmp x8, x02170; -O1: cmp x9, x12171; -O1: stlxp w10, x8, x9, [x4]2172; -O1: stlxp w10, x2, x3, [x4]2173 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 162174 %r = extractvalue { i128, i1 } %pair, 02175 ret i128 %r2176}2177 2178define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {2179; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:2180; -O0: ldaxp x0, x1, [x4]2181; -O0: cmp x0, x92182; -O0: cmp x1, x102183; -O0: stlxp w8, x2, x3, [x4]2184; -O0: stlxp w8, x0, x1, [x4]2185;2186; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:2187; -O1: ldaxp x8, x9, [x4]2188; -O1: cmp x8, x02189; -O1: cmp x9, x12190; -O1: stlxp w10, x8, x9, [x4]2191; -O1: stlxp w10, x2, x3, [x4]2192 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 162193 %r = extractvalue { i128, i1 } %pair, 02194 ret i128 %r2195}2196 2197define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2198; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:2199; -O0: ldaxp x0, x1, [x4]2200; -O0: cmp x0, x92201; -O0: cmp x1, x102202; -O0: stlxp w8, x2, x3, [x4]2203; -O0: stlxp w8, x0, x1, [x4]2204;2205; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:2206; -O1: ldaxp x8, x9, [x4]2207; -O1: cmp x8, x02208; -O1: cmp x9, x12209; -O1: stlxp w10, x8, x9, [x4]2210; -O1: stlxp w10, x2, x3, [x4]2211 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 162212 %r = extractvalue { i128, i1 } %pair, 02213 ret i128 %r2214}2215 2216define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {2217; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:2218; -O0: ldaxp x0, x1, [x4]2219; -O0: cmp x0, x92220; -O0: cmp x1, x102221; -O0: stlxp w8, x2, x3, [x4]2222; -O0: stlxp w8, x0, x1, [x4]2223;2224; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:2225; -O1: ldaxp x8, x9, [x4]2226; -O1: cmp x8, x02227; -O1: cmp x9, x12228; -O1: stlxp w10, x8, x9, [x4]2229; -O1: stlxp w10, x2, x3, [x4]2230 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 162231 %r = extractvalue { i128, i1 } %pair, 02232 ret i128 %r2233}2234 2235define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2236; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:2237; -O0: ldaxp x0, x1, [x4]2238; -O0: cmp x0, x92239; -O0: cmp x1, x102240; -O0: stlxp w8, x2, x3, [x4]2241; -O0: stlxp w8, x0, x1, [x4]2242;2243; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:2244; -O1: ldaxp x8, x9, [x4]2245; -O1: cmp x8, x02246; -O1: cmp x9, x12247; -O1: stlxp w10, x8, x9, [x4]2248; -O1: stlxp w10, x2, x3, [x4]2249 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 162250 %r = extractvalue { i128, i1 } %pair, 02251 ret i128 %r2252}2253 2254define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2255; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:2256; -O0: ldaxp x0, x1, [x4]2257; -O0: cmp x0, x92258; -O0: cmp x1, x102259; -O0: stlxp w8, x2, x3, [x4]2260; -O0: stlxp w8, x0, x1, [x4]2261;2262; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:2263; -O1: ldaxp x8, x9, [x4]2264; -O1: cmp x8, x02265; -O1: cmp x9, x12266; -O1: stlxp w10, x8, x9, [x4]2267; -O1: stlxp w10, x2, x3, [x4]2268 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 162269 %r = extractvalue { i128, i1 } %pair, 02270 ret i128 %r2271}2272 2273define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2274; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:2275; -O0: ldaxp x0, x1, [x4]2276; -O0: cmp x0, x92277; -O0: cmp x1, x102278; -O0: stlxp w8, x2, x3, [x4]2279; -O0: stlxp w8, x0, x1, [x4]2280;2281; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:2282; -O1: ldaxp x8, x9, [x4]2283; -O1: cmp x8, x02284; -O1: cmp x9, x12285; -O1: stlxp w10, x8, x9, [x4]2286; -O1: stlxp w10, x2, x3, [x4]2287 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 162288 %r = extractvalue { i128, i1 } %pair, 02289 ret i128 %r2290}2291 2292define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {2293; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:2294; -O0: ldaxp x0, x1, [x4]2295; -O0: cmp x0, x92296; -O0: cmp x1, x102297; -O0: stlxp w8, x2, x3, [x4]2298; -O0: stlxp w8, x0, x1, [x4]2299;2300; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:2301; -O1: ldaxp x8, x9, [x4]2302; -O1: cmp x8, x02303; -O1: cmp x9, x12304; -O1: stlxp w10, x8, x9, [x4]2305; -O1: stlxp w10, x2, x3, [x4]2306 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 162307 %r = extractvalue { i128, i1 } %pair, 02308 ret i128 %r2309}2310 2311define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {2312; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:2313; -O0: ldaxp x0, x1, [x4]2314; -O0: cmp x0, x92315; -O0: cmp x1, x102316; -O0: stlxp w8, x2, x3, [x4]2317; -O0: stlxp w8, x0, x1, [x4]2318;2319; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:2320; -O1: ldaxp x8, x9, [x4]2321; -O1: cmp x8, x02322; -O1: cmp x9, x12323; -O1: stlxp w10, x8, x9, [x4]2324; -O1: stlxp w10, x2, x3, [x4]2325 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 162326 %r = extractvalue { i128, i1 } %pair, 02327 ret i128 %r2328}2329 2330define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {2331; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:2332; -O0: ldaxp x0, x1, [x4]2333; -O0: cmp x0, x92334; -O0: cmp x1, x102335; -O0: stlxp w8, x2, x3, [x4]2336; -O0: stlxp w8, x0, x1, [x4]2337;2338; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:2339; -O1: ldaxp x8, x9, [x4]2340; -O1: cmp x8, x02341; -O1: cmp x9, x12342; -O1: stlxp w10, x8, x9, [x4]2343; -O1: stlxp w10, x2, x3, [x4]2344 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 162345 %r = extractvalue { i128, i1 } %pair, 02346 ret i128 %r2347}2348 2349define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {2350; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:2351; -O0: ldaxp x0, x1, [x4]2352; -O0: cmp x0, x92353; -O0: cmp x1, x102354; -O0: stlxp w8, x2, x3, [x4]2355; -O0: stlxp w8, x0, x1, [x4]2356;2357; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:2358; -O1: ldaxp x8, x9, [x4]2359; -O1: cmp x8, x02360; -O1: cmp x9, x12361; -O1: stlxp w10, x8, x9, [x4]2362; -O1: stlxp w10, x2, x3, [x4]2363 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 162364 %r = extractvalue { i128, i1 } %pair, 02365 ret i128 %r2366}2367 2368define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {2369; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:2370; -O0: ldaxp x0, x1, [x4]2371; -O0: cmp x0, x92372; -O0: cmp x1, x102373; -O0: stlxp w8, x2, x3, [x4]2374; -O0: stlxp w8, x0, x1, [x4]2375;2376; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:2377; -O1: ldaxp x8, x9, [x4]2378; -O1: cmp x8, x02379; -O1: cmp x9, x12380; -O1: stlxp w10, x8, x9, [x4]2381; -O1: stlxp w10, x2, x3, [x4]2382 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 162383 %r = extractvalue { i128, i1 } %pair, 02384 ret i128 %r2385}2386 2387define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {2388; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:2389; -O0: ldaxp x0, x1, [x4]2390; -O0: cmp x0, x92391; -O0: cmp x1, x102392; -O0: stlxp w8, x2, x3, [x4]2393; -O0: stlxp w8, x0, x1, [x4]2394;2395; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:2396; -O1: ldaxp x8, x9, [x4]2397; -O1: cmp x8, x02398; -O1: cmp x9, x12399; -O1: stlxp w10, x8, x9, [x4]2400; -O1: stlxp w10, x2, x3, [x4]2401 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 162402 %r = extractvalue { i128, i1 } %pair, 02403 ret i128 %r2404}2405 2406define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {2407; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic:2408; -O0: ldaxrb w0, [x2]2409; -O0: cmp w0, w9, uxtb2410; -O0: stlxrb w8, w1, [x2]2411;2412; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic:2413; -O1: and w8, w0, #0xff2414; -O1: ldxrb w0, [x2]2415; -O1: cmp w0, w82416; -O1: stxrb w9, w1, [x2]2417 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 12418 %r = extractvalue { i8, i1 } %pair, 02419 ret i8 %r2420}2421 2422define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {2423; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak:2424; -O0: ldaxrb w0, [x2]2425; -O0: cmp w0, w9, uxtb2426; -O0: stlxrb w8, w1, [x2]2427;2428; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak:2429; -O1: ldxrb w8, [x2]2430; -O1: cmp w8, w0, uxtb2431; -O1: stxrb wzr, w1, [x2]2432 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 12433 %r = extractvalue { i8, i1 } %pair, 02434 ret i8 %r2435}2436 2437define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {2438; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_acquire:2439; -O0: ldaxrb w0, [x2]2440; -O0: cmp w0, w9, uxtb2441; -O0: stlxrb w8, w1, [x2]2442;2443; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_acquire:2444; -O1: and w8, w0, #0xff2445; -O1: ldaxrb w0, [x2]2446; -O1: cmp w0, w82447; -O1: stxrb w9, w1, [x2]2448 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 12449 %r = extractvalue { i8, i1 } %pair, 02450 ret i8 %r2451}2452 2453define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {2454; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak:2455; -O0: ldaxrb w0, [x2]2456; -O0: cmp w0, w9, uxtb2457; -O0: stlxrb w8, w1, [x2]2458;2459; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak:2460; -O1: ldaxrb w8, [x2]2461; -O1: cmp w8, w0, uxtb2462; -O1: stxrb wzr, w1, [x2]2463 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 12464 %r = extractvalue { i8, i1 } %pair, 02465 ret i8 %r2466}2467 2468define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {2469; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst:2470; -O0: ldaxrb w0, [x2]2471; -O0: cmp w0, w9, uxtb2472; -O0: stlxrb w8, w1, [x2]2473;2474; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst:2475; -O1: and w8, w0, #0xff2476; -O1: ldaxrb w0, [x2]2477; -O1: cmp w0, w82478; -O1: stlxrb w9, w1, [x2]2479 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 12480 %r = extractvalue { i8, i1 } %pair, 02481 ret i8 %r2482}2483 2484define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {2485; -O0-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak:2486; -O0: ldaxrb w0, [x2]2487; -O0: cmp w0, w9, uxtb2488; -O0: stlxrb w8, w1, [x2]2489;2490; -O1-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak:2491; -O1: ldaxrb w8, [x2]2492; -O1: cmp w8, w0, uxtb2493; -O1: stlxrb wzr, w1, [x2]2494 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 12495 %r = extractvalue { i8, i1 } %pair, 02496 ret i8 %r2497}2498 2499define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {2500; -O0-LABEL: cmpxchg_i8_unaligned_acquire_monotonic:2501; -O0: ldaxrb w0, [x2]2502; -O0: cmp w0, w9, uxtb2503; -O0: stlxrb w8, w1, [x2]2504;2505; -O1-LABEL: cmpxchg_i8_unaligned_acquire_monotonic:2506; -O1: and w8, w0, #0xff2507; -O1: ldaxrb w0, [x2]2508; -O1: cmp w0, w82509; -O1: stxrb w9, w1, [x2]2510 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 12511 %r = extractvalue { i8, i1 } %pair, 02512 ret i8 %r2513}2514 2515define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {2516; -O0-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak:2517; -O0: ldaxrb w0, [x2]2518; -O0: cmp w0, w9, uxtb2519; -O0: stlxrb w8, w1, [x2]2520;2521; -O1-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak:2522; -O1: ldaxrb w8, [x2]2523; -O1: cmp w8, w0, uxtb2524; -O1: stxrb wzr, w1, [x2]2525 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 12526 %r = extractvalue { i8, i1 } %pair, 02527 ret i8 %r2528}2529 2530define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {2531; -O0-LABEL: cmpxchg_i8_unaligned_acquire_acquire:2532; -O0: ldaxrb w0, [x2]2533; -O0: cmp w0, w9, uxtb2534; -O0: stlxrb w8, w1, [x2]2535;2536; -O1-LABEL: cmpxchg_i8_unaligned_acquire_acquire:2537; -O1: and w8, w0, #0xff2538; -O1: ldaxrb w0, [x2]2539; -O1: cmp w0, w82540; -O1: stxrb w9, w1, [x2]2541 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 12542 %r = extractvalue { i8, i1 } %pair, 02543 ret i8 %r2544}2545 2546define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {2547; -O0-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak:2548; -O0: ldaxrb w0, [x2]2549; -O0: cmp w0, w9, uxtb2550; -O0: stlxrb w8, w1, [x2]2551;2552; -O1-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak:2553; -O1: ldaxrb w8, [x2]2554; -O1: cmp w8, w0, uxtb2555; -O1: stxrb wzr, w1, [x2]2556 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 12557 %r = extractvalue { i8, i1 } %pair, 02558 ret i8 %r2559}2560 2561define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {2562; -O0-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst:2563; -O0: ldaxrb w0, [x2]2564; -O0: cmp w0, w9, uxtb2565; -O0: stlxrb w8, w1, [x2]2566;2567; -O1-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst:2568; -O1: and w8, w0, #0xff2569; -O1: ldaxrb w0, [x2]2570; -O1: cmp w0, w82571; -O1: stlxrb w9, w1, [x2]2572 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 12573 %r = extractvalue { i8, i1 } %pair, 02574 ret i8 %r2575}2576 2577define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {2578; -O0-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak:2579; -O0: ldaxrb w0, [x2]2580; -O0: cmp w0, w9, uxtb2581; -O0: stlxrb w8, w1, [x2]2582;2583; -O1-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak:2584; -O1: ldaxrb w8, [x2]2585; -O1: cmp w8, w0, uxtb2586; -O1: stlxrb wzr, w1, [x2]2587 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 12588 %r = extractvalue { i8, i1 } %pair, 02589 ret i8 %r2590}2591 2592define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {2593; -O0-LABEL: cmpxchg_i8_unaligned_release_monotonic:2594; -O0: ldaxrb w0, [x2]2595; -O0: cmp w0, w9, uxtb2596; -O0: stlxrb w8, w1, [x2]2597;2598; -O1-LABEL: cmpxchg_i8_unaligned_release_monotonic:2599; -O1: and w8, w0, #0xff2600; -O1: ldxrb w0, [x2]2601; -O1: cmp w0, w82602; -O1: stlxrb w9, w1, [x2]2603 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 12604 %r = extractvalue { i8, i1 } %pair, 02605 ret i8 %r2606}2607 2608define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {2609; -O0-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak:2610; -O0: ldaxrb w0, [x2]2611; -O0: cmp w0, w9, uxtb2612; -O0: stlxrb w8, w1, [x2]2613;2614; -O1-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak:2615; -O1: ldxrb w8, [x2]2616; -O1: cmp w8, w0, uxtb2617; -O1: stlxrb wzr, w1, [x2]2618 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 12619 %r = extractvalue { i8, i1 } %pair, 02620 ret i8 %r2621}2622 2623define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {2624; -O0-LABEL: cmpxchg_i8_unaligned_release_acquire:2625; -O0: ldaxrb w0, [x2]2626; -O0: cmp w0, w9, uxtb2627; -O0: stlxrb w8, w1, [x2]2628;2629; -O1-LABEL: cmpxchg_i8_unaligned_release_acquire:2630; -O1: and w8, w0, #0xff2631; -O1: ldaxrb w0, [x2]2632; -O1: cmp w0, w82633; -O1: stlxrb w9, w1, [x2]2634 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 12635 %r = extractvalue { i8, i1 } %pair, 02636 ret i8 %r2637}2638 2639define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {2640; -O0-LABEL: cmpxchg_i8_unaligned_release_acquire_weak:2641; -O0: ldaxrb w0, [x2]2642; -O0: cmp w0, w9, uxtb2643; -O0: stlxrb w8, w1, [x2]2644;2645; -O1-LABEL: cmpxchg_i8_unaligned_release_acquire_weak:2646; -O1: ldaxrb w8, [x2]2647; -O1: cmp w8, w0, uxtb2648; -O1: stlxrb wzr, w1, [x2]2649 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 12650 %r = extractvalue { i8, i1 } %pair, 02651 ret i8 %r2652}2653 2654define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {2655; -O0-LABEL: cmpxchg_i8_unaligned_release_seq_cst:2656; -O0: ldaxrb w0, [x2]2657; -O0: cmp w0, w9, uxtb2658; -O0: stlxrb w8, w1, [x2]2659;2660; -O1-LABEL: cmpxchg_i8_unaligned_release_seq_cst:2661; -O1: and w8, w0, #0xff2662; -O1: ldaxrb w0, [x2]2663; -O1: cmp w0, w82664; -O1: stlxrb w9, w1, [x2]2665 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 12666 %r = extractvalue { i8, i1 } %pair, 02667 ret i8 %r2668}2669 2670define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {2671; -O0-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak:2672; -O0: ldaxrb w0, [x2]2673; -O0: cmp w0, w9, uxtb2674; -O0: stlxrb w8, w1, [x2]2675;2676; -O1-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak:2677; -O1: ldaxrb w8, [x2]2678; -O1: cmp w8, w0, uxtb2679; -O1: stlxrb wzr, w1, [x2]2680 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 12681 %r = extractvalue { i8, i1 } %pair, 02682 ret i8 %r2683}2684 2685define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {2686; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic:2687; -O0: ldaxrb w0, [x2]2688; -O0: cmp w0, w9, uxtb2689; -O0: stlxrb w8, w1, [x2]2690;2691; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic:2692; -O1: and w8, w0, #0xff2693; -O1: ldaxrb w0, [x2]2694; -O1: cmp w0, w82695; -O1: stlxrb w9, w1, [x2]2696 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 12697 %r = extractvalue { i8, i1 } %pair, 02698 ret i8 %r2699}2700 2701define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {2702; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak:2703; -O0: ldaxrb w0, [x2]2704; -O0: cmp w0, w9, uxtb2705; -O0: stlxrb w8, w1, [x2]2706;2707; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak:2708; -O1: ldaxrb w8, [x2]2709; -O1: cmp w8, w0, uxtb2710; -O1: stlxrb wzr, w1, [x2]2711 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 12712 %r = extractvalue { i8, i1 } %pair, 02713 ret i8 %r2714}2715 2716define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {2717; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire:2718; -O0: ldaxrb w0, [x2]2719; -O0: cmp w0, w9, uxtb2720; -O0: stlxrb w8, w1, [x2]2721;2722; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire:2723; -O1: and w8, w0, #0xff2724; -O1: ldaxrb w0, [x2]2725; -O1: cmp w0, w82726; -O1: stlxrb w9, w1, [x2]2727 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 12728 %r = extractvalue { i8, i1 } %pair, 02729 ret i8 %r2730}2731 2732define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {2733; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak:2734; -O0: ldaxrb w0, [x2]2735; -O0: cmp w0, w9, uxtb2736; -O0: stlxrb w8, w1, [x2]2737;2738; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak:2739; -O1: ldaxrb w8, [x2]2740; -O1: cmp w8, w0, uxtb2741; -O1: stlxrb wzr, w1, [x2]2742 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 12743 %r = extractvalue { i8, i1 } %pair, 02744 ret i8 %r2745}2746 2747define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {2748; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst:2749; -O0: ldaxrb w0, [x2]2750; -O0: cmp w0, w9, uxtb2751; -O0: stlxrb w8, w1, [x2]2752;2753; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst:2754; -O1: and w8, w0, #0xff2755; -O1: ldaxrb w0, [x2]2756; -O1: cmp w0, w82757; -O1: stlxrb w9, w1, [x2]2758 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 12759 %r = extractvalue { i8, i1 } %pair, 02760 ret i8 %r2761}2762 2763define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {2764; -O0-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak:2765; -O0: ldaxrb w0, [x2]2766; -O0: cmp w0, w9, uxtb2767; -O0: stlxrb w8, w1, [x2]2768;2769; -O1-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak:2770; -O1: ldaxrb w8, [x2]2771; -O1: cmp w8, w0, uxtb2772; -O1: stlxrb wzr, w1, [x2]2773 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 12774 %r = extractvalue { i8, i1 } %pair, 02775 ret i8 %r2776}2777 2778define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {2779; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic:2780; -O0: ldaxrb w0, [x2]2781; -O0: cmp w0, w9, uxtb2782; -O0: stlxrb w8, w1, [x2]2783;2784; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic:2785; -O1: and w8, w0, #0xff2786; -O1: ldaxrb w0, [x2]2787; -O1: cmp w0, w82788; -O1: stlxrb w9, w1, [x2]2789 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 12790 %r = extractvalue { i8, i1 } %pair, 02791 ret i8 %r2792}2793 2794define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {2795; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak:2796; -O0: ldaxrb w0, [x2]2797; -O0: cmp w0, w9, uxtb2798; -O0: stlxrb w8, w1, [x2]2799;2800; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak:2801; -O1: ldaxrb w8, [x2]2802; -O1: cmp w8, w0, uxtb2803; -O1: stlxrb wzr, w1, [x2]2804 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 12805 %r = extractvalue { i8, i1 } %pair, 02806 ret i8 %r2807}2808 2809define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {2810; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire:2811; -O0: ldaxrb w0, [x2]2812; -O0: cmp w0, w9, uxtb2813; -O0: stlxrb w8, w1, [x2]2814;2815; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire:2816; -O1: and w8, w0, #0xff2817; -O1: ldaxrb w0, [x2]2818; -O1: cmp w0, w82819; -O1: stlxrb w9, w1, [x2]2820 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 12821 %r = extractvalue { i8, i1 } %pair, 02822 ret i8 %r2823}2824 2825define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {2826; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak:2827; -O0: ldaxrb w0, [x2]2828; -O0: cmp w0, w9, uxtb2829; -O0: stlxrb w8, w1, [x2]2830;2831; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak:2832; -O1: ldaxrb w8, [x2]2833; -O1: cmp w8, w0, uxtb2834; -O1: stlxrb wzr, w1, [x2]2835 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 12836 %r = extractvalue { i8, i1 } %pair, 02837 ret i8 %r2838}2839 2840define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {2841; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst:2842; -O0: ldaxrb w0, [x2]2843; -O0: cmp w0, w9, uxtb2844; -O0: stlxrb w8, w1, [x2]2845;2846; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst:2847; -O1: and w8, w0, #0xff2848; -O1: ldaxrb w0, [x2]2849; -O1: cmp w0, w82850; -O1: stlxrb w9, w1, [x2]2851 %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 12852 %r = extractvalue { i8, i1 } %pair, 02853 ret i8 %r2854}2855 2856define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {2857; -O0-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak:2858; -O0: ldaxrb w0, [x2]2859; -O0: cmp w0, w9, uxtb2860; -O0: stlxrb w8, w1, [x2]2861;2862; -O1-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak:2863; -O1: ldaxrb w8, [x2]2864; -O1: cmp w8, w0, uxtb2865; -O1: stlxrb wzr, w1, [x2]2866 %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 12867 %r = extractvalue { i8, i1 } %pair, 02868 ret i8 %r2869}2870 2871define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {2872; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic:2873; CHECK: bl __atomic_compare_exchange2874 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 12875 %r = extractvalue { i16, i1 } %pair, 02876 ret i16 %r2877}2878 2879define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {2880; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak:2881; CHECK: bl __atomic_compare_exchange2882 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 12883 %r = extractvalue { i16, i1 } %pair, 02884 ret i16 %r2885}2886 2887define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {2888; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire:2889; CHECK: bl __atomic_compare_exchange2890 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 12891 %r = extractvalue { i16, i1 } %pair, 02892 ret i16 %r2893}2894 2895define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {2896; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak:2897; CHECK: bl __atomic_compare_exchange2898 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 12899 %r = extractvalue { i16, i1 } %pair, 02900 ret i16 %r2901}2902 2903define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {2904; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst:2905; CHECK: bl __atomic_compare_exchange2906 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 12907 %r = extractvalue { i16, i1 } %pair, 02908 ret i16 %r2909}2910 2911define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {2912; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak:2913; CHECK: bl __atomic_compare_exchange2914 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 12915 %r = extractvalue { i16, i1 } %pair, 02916 ret i16 %r2917}2918 2919define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {2920; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic:2921; CHECK: bl __atomic_compare_exchange2922 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 12923 %r = extractvalue { i16, i1 } %pair, 02924 ret i16 %r2925}2926 2927define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {2928; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak:2929; CHECK: bl __atomic_compare_exchange2930 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 12931 %r = extractvalue { i16, i1 } %pair, 02932 ret i16 %r2933}2934 2935define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {2936; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire:2937; CHECK: bl __atomic_compare_exchange2938 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 12939 %r = extractvalue { i16, i1 } %pair, 02940 ret i16 %r2941}2942 2943define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {2944; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak:2945; CHECK: bl __atomic_compare_exchange2946 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 12947 %r = extractvalue { i16, i1 } %pair, 02948 ret i16 %r2949}2950 2951define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {2952; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst:2953; CHECK: bl __atomic_compare_exchange2954 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 12955 %r = extractvalue { i16, i1 } %pair, 02956 ret i16 %r2957}2958 2959define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {2960; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak:2961; CHECK: bl __atomic_compare_exchange2962 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 12963 %r = extractvalue { i16, i1 } %pair, 02964 ret i16 %r2965}2966 2967define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {2968; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic:2969; CHECK: bl __atomic_compare_exchange2970 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 12971 %r = extractvalue { i16, i1 } %pair, 02972 ret i16 %r2973}2974 2975define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {2976; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak:2977; CHECK: bl __atomic_compare_exchange2978 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 12979 %r = extractvalue { i16, i1 } %pair, 02980 ret i16 %r2981}2982 2983define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {2984; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire:2985; CHECK: bl __atomic_compare_exchange2986 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 12987 %r = extractvalue { i16, i1 } %pair, 02988 ret i16 %r2989}2990 2991define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {2992; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak:2993; CHECK: bl __atomic_compare_exchange2994 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 12995 %r = extractvalue { i16, i1 } %pair, 02996 ret i16 %r2997}2998 2999define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {3000; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst:3001; CHECK: bl __atomic_compare_exchange3002 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 13003 %r = extractvalue { i16, i1 } %pair, 03004 ret i16 %r3005}3006 3007define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {3008; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak:3009; CHECK: bl __atomic_compare_exchange3010 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 13011 %r = extractvalue { i16, i1 } %pair, 03012 ret i16 %r3013}3014 3015define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {3016; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic:3017; CHECK: bl __atomic_compare_exchange3018 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 13019 %r = extractvalue { i16, i1 } %pair, 03020 ret i16 %r3021}3022 3023define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {3024; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak:3025; CHECK: bl __atomic_compare_exchange3026 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 13027 %r = extractvalue { i16, i1 } %pair, 03028 ret i16 %r3029}3030 3031define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {3032; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire:3033; CHECK: bl __atomic_compare_exchange3034 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 13035 %r = extractvalue { i16, i1 } %pair, 03036 ret i16 %r3037}3038 3039define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {3040; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak:3041; CHECK: bl __atomic_compare_exchange3042 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 13043 %r = extractvalue { i16, i1 } %pair, 03044 ret i16 %r3045}3046 3047define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {3048; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst:3049; CHECK: bl __atomic_compare_exchange3050 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 13051 %r = extractvalue { i16, i1 } %pair, 03052 ret i16 %r3053}3054 3055define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {3056; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak:3057; CHECK: bl __atomic_compare_exchange3058 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 13059 %r = extractvalue { i16, i1 } %pair, 03060 ret i16 %r3061}3062 3063define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {3064; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic:3065; CHECK: bl __atomic_compare_exchange3066 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 13067 %r = extractvalue { i16, i1 } %pair, 03068 ret i16 %r3069}3070 3071define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {3072; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak:3073; CHECK: bl __atomic_compare_exchange3074 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 13075 %r = extractvalue { i16, i1 } %pair, 03076 ret i16 %r3077}3078 3079define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {3080; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire:3081; CHECK: bl __atomic_compare_exchange3082 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 13083 %r = extractvalue { i16, i1 } %pair, 03084 ret i16 %r3085}3086 3087define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {3088; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak:3089; CHECK: bl __atomic_compare_exchange3090 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 13091 %r = extractvalue { i16, i1 } %pair, 03092 ret i16 %r3093}3094 3095define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {3096; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst:3097; CHECK: bl __atomic_compare_exchange3098 %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 13099 %r = extractvalue { i16, i1 } %pair, 03100 ret i16 %r3101}3102 3103define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {3104; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak:3105; CHECK: bl __atomic_compare_exchange3106 %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 13107 %r = extractvalue { i16, i1 } %pair, 03108 ret i16 %r3109}3110 3111define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {3112; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic:3113; CHECK: bl __atomic_compare_exchange3114 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 13115 %r = extractvalue { i32, i1 } %pair, 03116 ret i32 %r3117}3118 3119define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {3120; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak:3121; CHECK: bl __atomic_compare_exchange3122 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 13123 %r = extractvalue { i32, i1 } %pair, 03124 ret i32 %r3125}3126 3127define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {3128; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire:3129; CHECK: bl __atomic_compare_exchange3130 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 13131 %r = extractvalue { i32, i1 } %pair, 03132 ret i32 %r3133}3134 3135define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {3136; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak:3137; CHECK: bl __atomic_compare_exchange3138 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 13139 %r = extractvalue { i32, i1 } %pair, 03140 ret i32 %r3141}3142 3143define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {3144; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst:3145; CHECK: bl __atomic_compare_exchange3146 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 13147 %r = extractvalue { i32, i1 } %pair, 03148 ret i32 %r3149}3150 3151define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {3152; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak:3153; CHECK: bl __atomic_compare_exchange3154 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 13155 %r = extractvalue { i32, i1 } %pair, 03156 ret i32 %r3157}3158 3159define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {3160; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic:3161; CHECK: bl __atomic_compare_exchange3162 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 13163 %r = extractvalue { i32, i1 } %pair, 03164 ret i32 %r3165}3166 3167define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {3168; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak:3169; CHECK: bl __atomic_compare_exchange3170 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 13171 %r = extractvalue { i32, i1 } %pair, 03172 ret i32 %r3173}3174 3175define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {3176; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire:3177; CHECK: bl __atomic_compare_exchange3178 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 13179 %r = extractvalue { i32, i1 } %pair, 03180 ret i32 %r3181}3182 3183define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {3184; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak:3185; CHECK: bl __atomic_compare_exchange3186 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 13187 %r = extractvalue { i32, i1 } %pair, 03188 ret i32 %r3189}3190 3191define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {3192; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst:3193; CHECK: bl __atomic_compare_exchange3194 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 13195 %r = extractvalue { i32, i1 } %pair, 03196 ret i32 %r3197}3198 3199define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {3200; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak:3201; CHECK: bl __atomic_compare_exchange3202 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 13203 %r = extractvalue { i32, i1 } %pair, 03204 ret i32 %r3205}3206 3207define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {3208; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic:3209; CHECK: bl __atomic_compare_exchange3210 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 13211 %r = extractvalue { i32, i1 } %pair, 03212 ret i32 %r3213}3214 3215define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {3216; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak:3217; CHECK: bl __atomic_compare_exchange3218 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 13219 %r = extractvalue { i32, i1 } %pair, 03220 ret i32 %r3221}3222 3223define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {3224; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire:3225; CHECK: bl __atomic_compare_exchange3226 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 13227 %r = extractvalue { i32, i1 } %pair, 03228 ret i32 %r3229}3230 3231define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {3232; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak:3233; CHECK: bl __atomic_compare_exchange3234 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 13235 %r = extractvalue { i32, i1 } %pair, 03236 ret i32 %r3237}3238 3239define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {3240; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst:3241; CHECK: bl __atomic_compare_exchange3242 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 13243 %r = extractvalue { i32, i1 } %pair, 03244 ret i32 %r3245}3246 3247define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {3248; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak:3249; CHECK: bl __atomic_compare_exchange3250 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 13251 %r = extractvalue { i32, i1 } %pair, 03252 ret i32 %r3253}3254 3255define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {3256; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic:3257; CHECK: bl __atomic_compare_exchange3258 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 13259 %r = extractvalue { i32, i1 } %pair, 03260 ret i32 %r3261}3262 3263define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {3264; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak:3265; CHECK: bl __atomic_compare_exchange3266 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 13267 %r = extractvalue { i32, i1 } %pair, 03268 ret i32 %r3269}3270 3271define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {3272; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire:3273; CHECK: bl __atomic_compare_exchange3274 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 13275 %r = extractvalue { i32, i1 } %pair, 03276 ret i32 %r3277}3278 3279define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {3280; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak:3281; CHECK: bl __atomic_compare_exchange3282 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 13283 %r = extractvalue { i32, i1 } %pair, 03284 ret i32 %r3285}3286 3287define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {3288; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst:3289; CHECK: bl __atomic_compare_exchange3290 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 13291 %r = extractvalue { i32, i1 } %pair, 03292 ret i32 %r3293}3294 3295define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {3296; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak:3297; CHECK: bl __atomic_compare_exchange3298 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 13299 %r = extractvalue { i32, i1 } %pair, 03300 ret i32 %r3301}3302 3303define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {3304; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic:3305; CHECK: bl __atomic_compare_exchange3306 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 13307 %r = extractvalue { i32, i1 } %pair, 03308 ret i32 %r3309}3310 3311define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {3312; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak:3313; CHECK: bl __atomic_compare_exchange3314 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 13315 %r = extractvalue { i32, i1 } %pair, 03316 ret i32 %r3317}3318 3319define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {3320; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire:3321; CHECK: bl __atomic_compare_exchange3322 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 13323 %r = extractvalue { i32, i1 } %pair, 03324 ret i32 %r3325}3326 3327define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {3328; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak:3329; CHECK: bl __atomic_compare_exchange3330 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 13331 %r = extractvalue { i32, i1 } %pair, 03332 ret i32 %r3333}3334 3335define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {3336; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst:3337; CHECK: bl __atomic_compare_exchange3338 %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 13339 %r = extractvalue { i32, i1 } %pair, 03340 ret i32 %r3341}3342 3343define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {3344; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak:3345; CHECK: bl __atomic_compare_exchange3346 %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 13347 %r = extractvalue { i32, i1 } %pair, 03348 ret i32 %r3349}3350 3351define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {3352; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic:3353; CHECK: bl __atomic_compare_exchange3354 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 13355 %r = extractvalue { i64, i1 } %pair, 03356 ret i64 %r3357}3358 3359define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {3360; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak:3361; CHECK: bl __atomic_compare_exchange3362 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 13363 %r = extractvalue { i64, i1 } %pair, 03364 ret i64 %r3365}3366 3367define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {3368; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire:3369; CHECK: bl __atomic_compare_exchange3370 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 13371 %r = extractvalue { i64, i1 } %pair, 03372 ret i64 %r3373}3374 3375define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {3376; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak:3377; CHECK: bl __atomic_compare_exchange3378 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 13379 %r = extractvalue { i64, i1 } %pair, 03380 ret i64 %r3381}3382 3383define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {3384; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst:3385; CHECK: bl __atomic_compare_exchange3386 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 13387 %r = extractvalue { i64, i1 } %pair, 03388 ret i64 %r3389}3390 3391define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {3392; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak:3393; CHECK: bl __atomic_compare_exchange3394 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 13395 %r = extractvalue { i64, i1 } %pair, 03396 ret i64 %r3397}3398 3399define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {3400; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic:3401; CHECK: bl __atomic_compare_exchange3402 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 13403 %r = extractvalue { i64, i1 } %pair, 03404 ret i64 %r3405}3406 3407define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {3408; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak:3409; CHECK: bl __atomic_compare_exchange3410 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 13411 %r = extractvalue { i64, i1 } %pair, 03412 ret i64 %r3413}3414 3415define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {3416; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire:3417; CHECK: bl __atomic_compare_exchange3418 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 13419 %r = extractvalue { i64, i1 } %pair, 03420 ret i64 %r3421}3422 3423define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {3424; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak:3425; CHECK: bl __atomic_compare_exchange3426 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 13427 %r = extractvalue { i64, i1 } %pair, 03428 ret i64 %r3429}3430 3431define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {3432; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst:3433; CHECK: bl __atomic_compare_exchange3434 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 13435 %r = extractvalue { i64, i1 } %pair, 03436 ret i64 %r3437}3438 3439define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {3440; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak:3441; CHECK: bl __atomic_compare_exchange3442 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 13443 %r = extractvalue { i64, i1 } %pair, 03444 ret i64 %r3445}3446 3447define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {3448; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic:3449; CHECK: bl __atomic_compare_exchange3450 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 13451 %r = extractvalue { i64, i1 } %pair, 03452 ret i64 %r3453}3454 3455define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {3456; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak:3457; CHECK: bl __atomic_compare_exchange3458 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 13459 %r = extractvalue { i64, i1 } %pair, 03460 ret i64 %r3461}3462 3463define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {3464; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire:3465; CHECK: bl __atomic_compare_exchange3466 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 13467 %r = extractvalue { i64, i1 } %pair, 03468 ret i64 %r3469}3470 3471define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {3472; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak:3473; CHECK: bl __atomic_compare_exchange3474 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 13475 %r = extractvalue { i64, i1 } %pair, 03476 ret i64 %r3477}3478 3479define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {3480; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst:3481; CHECK: bl __atomic_compare_exchange3482 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 13483 %r = extractvalue { i64, i1 } %pair, 03484 ret i64 %r3485}3486 3487define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {3488; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak:3489; CHECK: bl __atomic_compare_exchange3490 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 13491 %r = extractvalue { i64, i1 } %pair, 03492 ret i64 %r3493}3494 3495define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {3496; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic:3497; CHECK: bl __atomic_compare_exchange3498 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 13499 %r = extractvalue { i64, i1 } %pair, 03500 ret i64 %r3501}3502 3503define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {3504; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak:3505; CHECK: bl __atomic_compare_exchange3506 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 13507 %r = extractvalue { i64, i1 } %pair, 03508 ret i64 %r3509}3510 3511define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {3512; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire:3513; CHECK: bl __atomic_compare_exchange3514 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 13515 %r = extractvalue { i64, i1 } %pair, 03516 ret i64 %r3517}3518 3519define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {3520; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak:3521; CHECK: bl __atomic_compare_exchange3522 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 13523 %r = extractvalue { i64, i1 } %pair, 03524 ret i64 %r3525}3526 3527define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {3528; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst:3529; CHECK: bl __atomic_compare_exchange3530 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 13531 %r = extractvalue { i64, i1 } %pair, 03532 ret i64 %r3533}3534 3535define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {3536; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak:3537; CHECK: bl __atomic_compare_exchange3538 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 13539 %r = extractvalue { i64, i1 } %pair, 03540 ret i64 %r3541}3542 3543define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {3544; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic:3545; CHECK: bl __atomic_compare_exchange3546 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 13547 %r = extractvalue { i64, i1 } %pair, 03548 ret i64 %r3549}3550 3551define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {3552; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak:3553; CHECK: bl __atomic_compare_exchange3554 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 13555 %r = extractvalue { i64, i1 } %pair, 03556 ret i64 %r3557}3558 3559define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {3560; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire:3561; CHECK: bl __atomic_compare_exchange3562 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 13563 %r = extractvalue { i64, i1 } %pair, 03564 ret i64 %r3565}3566 3567define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {3568; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak:3569; CHECK: bl __atomic_compare_exchange3570 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 13571 %r = extractvalue { i64, i1 } %pair, 03572 ret i64 %r3573}3574 3575define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {3576; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst:3577; CHECK: bl __atomic_compare_exchange3578 %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 13579 %r = extractvalue { i64, i1 } %pair, 03580 ret i64 %r3581}3582 3583define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {3584; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak:3585; CHECK: bl __atomic_compare_exchange3586 %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 13587 %r = extractvalue { i64, i1 } %pair, 03588 ret i64 %r3589}3590 3591define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {3592; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic:3593; CHECK: bl __atomic_compare_exchange3594 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 13595 %r = extractvalue { i128, i1 } %pair, 03596 ret i128 %r3597}3598 3599define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {3600; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak:3601; CHECK: bl __atomic_compare_exchange3602 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 13603 %r = extractvalue { i128, i1 } %pair, 03604 ret i128 %r3605}3606 3607define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {3608; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire:3609; CHECK: bl __atomic_compare_exchange3610 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 13611 %r = extractvalue { i128, i1 } %pair, 03612 ret i128 %r3613}3614 3615define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {3616; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak:3617; CHECK: bl __atomic_compare_exchange3618 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 13619 %r = extractvalue { i128, i1 } %pair, 03620 ret i128 %r3621}3622 3623define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {3624; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst:3625; CHECK: bl __atomic_compare_exchange3626 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 13627 %r = extractvalue { i128, i1 } %pair, 03628 ret i128 %r3629}3630 3631define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {3632; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak:3633; CHECK: bl __atomic_compare_exchange3634 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 13635 %r = extractvalue { i128, i1 } %pair, 03636 ret i128 %r3637}3638 3639define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {3640; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic:3641; CHECK: bl __atomic_compare_exchange3642 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 13643 %r = extractvalue { i128, i1 } %pair, 03644 ret i128 %r3645}3646 3647define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {3648; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak:3649; CHECK: bl __atomic_compare_exchange3650 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 13651 %r = extractvalue { i128, i1 } %pair, 03652 ret i128 %r3653}3654 3655define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {3656; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire:3657; CHECK: bl __atomic_compare_exchange3658 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 13659 %r = extractvalue { i128, i1 } %pair, 03660 ret i128 %r3661}3662 3663define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {3664; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak:3665; CHECK: bl __atomic_compare_exchange3666 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 13667 %r = extractvalue { i128, i1 } %pair, 03668 ret i128 %r3669}3670 3671define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {3672; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst:3673; CHECK: bl __atomic_compare_exchange3674 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 13675 %r = extractvalue { i128, i1 } %pair, 03676 ret i128 %r3677}3678 3679define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {3680; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak:3681; CHECK: bl __atomic_compare_exchange3682 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 13683 %r = extractvalue { i128, i1 } %pair, 03684 ret i128 %r3685}3686 3687define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {3688; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic:3689; CHECK: bl __atomic_compare_exchange3690 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 13691 %r = extractvalue { i128, i1 } %pair, 03692 ret i128 %r3693}3694 3695define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {3696; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak:3697; CHECK: bl __atomic_compare_exchange3698 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 13699 %r = extractvalue { i128, i1 } %pair, 03700 ret i128 %r3701}3702 3703define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {3704; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire:3705; CHECK: bl __atomic_compare_exchange3706 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 13707 %r = extractvalue { i128, i1 } %pair, 03708 ret i128 %r3709}3710 3711define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {3712; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak:3713; CHECK: bl __atomic_compare_exchange3714 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 13715 %r = extractvalue { i128, i1 } %pair, 03716 ret i128 %r3717}3718 3719define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {3720; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst:3721; CHECK: bl __atomic_compare_exchange3722 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 13723 %r = extractvalue { i128, i1 } %pair, 03724 ret i128 %r3725}3726 3727define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {3728; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak:3729; CHECK: bl __atomic_compare_exchange3730 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 13731 %r = extractvalue { i128, i1 } %pair, 03732 ret i128 %r3733}3734 3735define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {3736; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic:3737; CHECK: bl __atomic_compare_exchange3738 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 13739 %r = extractvalue { i128, i1 } %pair, 03740 ret i128 %r3741}3742 3743define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {3744; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak:3745; CHECK: bl __atomic_compare_exchange3746 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 13747 %r = extractvalue { i128, i1 } %pair, 03748 ret i128 %r3749}3750 3751define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {3752; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire:3753; CHECK: bl __atomic_compare_exchange3754 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 13755 %r = extractvalue { i128, i1 } %pair, 03756 ret i128 %r3757}3758 3759define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {3760; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak:3761; CHECK: bl __atomic_compare_exchange3762 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 13763 %r = extractvalue { i128, i1 } %pair, 03764 ret i128 %r3765}3766 3767define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {3768; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst:3769; CHECK: bl __atomic_compare_exchange3770 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 13771 %r = extractvalue { i128, i1 } %pair, 03772 ret i128 %r3773}3774 3775define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {3776; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak:3777; CHECK: bl __atomic_compare_exchange3778 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 13779 %r = extractvalue { i128, i1 } %pair, 03780 ret i128 %r3781}3782 3783define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {3784; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic:3785; CHECK: bl __atomic_compare_exchange3786 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 13787 %r = extractvalue { i128, i1 } %pair, 03788 ret i128 %r3789}3790 3791define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {3792; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak:3793; CHECK: bl __atomic_compare_exchange3794 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 13795 %r = extractvalue { i128, i1 } %pair, 03796 ret i128 %r3797}3798 3799define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {3800; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire:3801; CHECK: bl __atomic_compare_exchange3802 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 13803 %r = extractvalue { i128, i1 } %pair, 03804 ret i128 %r3805}3806 3807define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {3808; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak:3809; CHECK: bl __atomic_compare_exchange3810 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 13811 %r = extractvalue { i128, i1 } %pair, 03812 ret i128 %r3813}3814 3815define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {3816; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst:3817; CHECK: bl __atomic_compare_exchange3818 %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 13819 %r = extractvalue { i128, i1 } %pair, 03820 ret i128 %r3821}3822 3823define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {3824; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak:3825; CHECK: bl __atomic_compare_exchange3826 %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 13827 %r = extractvalue { i128, i1 } %pair, 03828 ret i128 %r3829}3830