147 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s3 4define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {5; CHECK-LABEL: atomicrmw_uinc_wrap_i8:6; CHECK: // %bb.0:7; CHECK-NEXT: .LBB0_1: // %atomicrmw.start8; CHECK-NEXT: // =>This Inner Loop Header: Depth=19; CHECK-NEXT: ldaxrb w8, [x0]10; CHECK-NEXT: cmp w8, w1, uxtb11; CHECK-NEXT: csinc w9, wzr, w8, hs12; CHECK-NEXT: stlxrb w10, w9, [x0]13; CHECK-NEXT: cbnz w10, .LBB0_114; CHECK-NEXT: // %bb.2: // %atomicrmw.end15; CHECK-NEXT: mov w0, w816; CHECK-NEXT: ret17 %result = atomicrmw uinc_wrap ptr %ptr, i8 %val seq_cst18 ret i8 %result19}20 21define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {22; CHECK-LABEL: atomicrmw_uinc_wrap_i16:23; CHECK: // %bb.0:24; CHECK-NEXT: .LBB1_1: // %atomicrmw.start25; CHECK-NEXT: // =>This Inner Loop Header: Depth=126; CHECK-NEXT: ldaxrh w8, [x0]27; CHECK-NEXT: cmp w8, w1, uxth28; CHECK-NEXT: csinc w9, wzr, w8, hs29; CHECK-NEXT: stlxrh w10, w9, [x0]30; CHECK-NEXT: cbnz w10, .LBB1_131; CHECK-NEXT: // %bb.2: // %atomicrmw.end32; CHECK-NEXT: mov w0, w833; CHECK-NEXT: ret34 %result = atomicrmw uinc_wrap ptr %ptr, i16 %val seq_cst35 ret i16 %result36}37 38define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {39; CHECK-LABEL: atomicrmw_uinc_wrap_i32:40; CHECK: // %bb.0:41; CHECK-NEXT: .LBB2_1: // %atomicrmw.start42; CHECK-NEXT: // =>This Inner Loop Header: Depth=143; CHECK-NEXT: ldaxr w8, [x0]44; CHECK-NEXT: cmp w8, w145; CHECK-NEXT: csinc w9, wzr, w8, hs46; CHECK-NEXT: stlxr w10, w9, [x0]47; CHECK-NEXT: cbnz w10, .LBB2_148; CHECK-NEXT: // %bb.2: // %atomicrmw.end49; CHECK-NEXT: mov w0, w850; CHECK-NEXT: ret51 %result = atomicrmw uinc_wrap ptr %ptr, i32 %val seq_cst52 ret i32 %result53}54 55define i64 @atomicrmw_uinc_wrap_i64(ptr %ptr, i64 %val) {56; CHECK-LABEL: atomicrmw_uinc_wrap_i64:57; CHECK: // %bb.0:58; CHECK-NEXT: .LBB3_1: // %atomicrmw.start59; CHECK-NEXT: // =>This Inner Loop Header: Depth=160; CHECK-NEXT: ldaxr x8, [x0]61; CHECK-NEXT: cmp x8, x162; CHECK-NEXT: csinc x9, xzr, x8, hs63; CHECK-NEXT: stlxr w10, x9, [x0]64; CHECK-NEXT: cbnz w10, .LBB3_165; CHECK-NEXT: // %bb.2: // %atomicrmw.end66; CHECK-NEXT: mov x0, x867; CHECK-NEXT: ret68 %result = atomicrmw uinc_wrap ptr %ptr, i64 %val seq_cst69 ret i64 %result70}71 72define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {73; CHECK-LABEL: atomicrmw_udec_wrap_i8:74; CHECK: // %bb.0:75; CHECK-NEXT: .LBB4_1: // %atomicrmw.start76; CHECK-NEXT: // =>This Inner Loop Header: Depth=177; CHECK-NEXT: ldaxrb w8, [x0]78; CHECK-NEXT: cmp w8, w1, uxtb79; CHECK-NEXT: sub w9, w8, #180; CHECK-NEXT: ccmp w8, #0, #4, ls81; CHECK-NEXT: csel w9, w1, w9, eq82; CHECK-NEXT: stlxrb w10, w9, [x0]83; CHECK-NEXT: cbnz w10, .LBB4_184; CHECK-NEXT: // %bb.2: // %atomicrmw.end85; CHECK-NEXT: mov w0, w886; CHECK-NEXT: ret87 %result = atomicrmw udec_wrap ptr %ptr, i8 %val seq_cst88 ret i8 %result89}90 91define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {92; CHECK-LABEL: atomicrmw_udec_wrap_i16:93; CHECK: // %bb.0:94; CHECK-NEXT: .LBB5_1: // %atomicrmw.start95; CHECK-NEXT: // =>This Inner Loop Header: Depth=196; CHECK-NEXT: ldaxrh w8, [x0]97; CHECK-NEXT: cmp w8, w1, uxth98; CHECK-NEXT: sub w9, w8, #199; CHECK-NEXT: ccmp w8, #0, #4, ls100; CHECK-NEXT: csel w9, w1, w9, eq101; CHECK-NEXT: stlxrh w10, w9, [x0]102; CHECK-NEXT: cbnz w10, .LBB5_1103; CHECK-NEXT: // %bb.2: // %atomicrmw.end104; CHECK-NEXT: mov w0, w8105; CHECK-NEXT: ret106 %result = atomicrmw udec_wrap ptr %ptr, i16 %val seq_cst107 ret i16 %result108}109 110define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {111; CHECK-LABEL: atomicrmw_udec_wrap_i32:112; CHECK: // %bb.0:113; CHECK-NEXT: .LBB6_1: // %atomicrmw.start114; CHECK-NEXT: // =>This Inner Loop Header: Depth=1115; CHECK-NEXT: ldaxr w8, [x0]116; CHECK-NEXT: cmp w8, w1117; CHECK-NEXT: sub w9, w8, #1118; CHECK-NEXT: ccmp w8, #0, #4, ls119; CHECK-NEXT: csel w9, w1, w9, eq120; CHECK-NEXT: stlxr w10, w9, [x0]121; CHECK-NEXT: cbnz w10, .LBB6_1122; CHECK-NEXT: // %bb.2: // %atomicrmw.end123; CHECK-NEXT: mov w0, w8124; CHECK-NEXT: ret125 %result = atomicrmw udec_wrap ptr %ptr, i32 %val seq_cst126 ret i32 %result127}128 129define i64 @atomicrmw_udec_wrap_i64(ptr %ptr, i64 %val) {130; CHECK-LABEL: atomicrmw_udec_wrap_i64:131; CHECK: // %bb.0:132; CHECK-NEXT: mov x8, x0133; CHECK-NEXT: .LBB7_1: // %atomicrmw.start134; CHECK-NEXT: // =>This Inner Loop Header: Depth=1135; CHECK-NEXT: ldaxr x0, [x8]136; CHECK-NEXT: cmp x0, x1137; CHECK-NEXT: sub x9, x0, #1138; CHECK-NEXT: ccmp x0, #0, #4, ls139; CHECK-NEXT: csel x9, x1, x9, eq140; CHECK-NEXT: stlxr w10, x9, [x8]141; CHECK-NEXT: cbnz w10, .LBB7_1142; CHECK-NEXT: // %bb.2: // %atomicrmw.end143; CHECK-NEXT: ret144 %result = atomicrmw udec_wrap ptr %ptr, i64 %val seq_cst145 ret i64 %result146}147