brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 433fb32 Raw
199 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a9 < %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:    uxtb r12, r18; CHECK-NEXT:    dmb ish9; CHECK-NEXT:  .LBB0_1: @ %atomicrmw.start10; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=111; CHECK-NEXT:    ldrexb r1, [r0]12; CHECK-NEXT:    cmp r1, r1213; CHECK-NEXT:    add r3, r1, #114; CHECK-NEXT:    movwhs r3, #015; CHECK-NEXT:    strexb r2, r3, [r0]16; CHECK-NEXT:    cmp r2, #017; CHECK-NEXT:    bne .LBB0_118; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end19; CHECK-NEXT:    mov r0, r120; CHECK-NEXT:    dmb ish21; CHECK-NEXT:    bx lr22  %result = atomicrmw uinc_wrap ptr %ptr, i8 %val seq_cst23  ret i8 %result24}25 26define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {27; CHECK-LABEL: atomicrmw_uinc_wrap_i16:28; CHECK:       @ %bb.0:29; CHECK-NEXT:    uxth r12, r130; CHECK-NEXT:    dmb ish31; CHECK-NEXT:  .LBB1_1: @ %atomicrmw.start32; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=133; CHECK-NEXT:    ldrexh r1, [r0]34; CHECK-NEXT:    cmp r1, r1235; CHECK-NEXT:    add r3, r1, #136; CHECK-NEXT:    movwhs r3, #037; CHECK-NEXT:    strexh r2, r3, [r0]38; CHECK-NEXT:    cmp r2, #039; CHECK-NEXT:    bne .LBB1_140; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end41; CHECK-NEXT:    mov r0, r142; CHECK-NEXT:    dmb ish43; CHECK-NEXT:    bx lr44  %result = atomicrmw uinc_wrap ptr %ptr, i16 %val seq_cst45  ret i16 %result46}47 48define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {49; CHECK-LABEL: atomicrmw_uinc_wrap_i32:50; CHECK:       @ %bb.0:51; CHECK-NEXT:    dmb ish52; CHECK-NEXT:  .LBB2_1: @ %atomicrmw.start53; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=154; CHECK-NEXT:    ldrex r2, [r0]55; CHECK-NEXT:    cmp r2, r156; CHECK-NEXT:    add r12, r2, #157; CHECK-NEXT:    movwhs r12, #058; CHECK-NEXT:    strex r3, r12, [r0]59; CHECK-NEXT:    cmp r3, #060; CHECK-NEXT:    bne .LBB2_161; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end62; CHECK-NEXT:    mov r0, r263; CHECK-NEXT:    dmb ish64; CHECK-NEXT:    bx lr65  %result = atomicrmw uinc_wrap ptr %ptr, i32 %val seq_cst66  ret i32 %result67}68 69define i64 @atomicrmw_uinc_wrap_i64(ptr %ptr, i64 %val) {70; CHECK-LABEL: atomicrmw_uinc_wrap_i64:71; CHECK:       @ %bb.0:72; CHECK-NEXT:    .save {r4, r6, r7, lr}73; CHECK-NEXT:    push {r4, r6, r7, lr}74; CHECK-NEXT:    mov r12, r075; CHECK-NEXT:    dmb ish76; CHECK-NEXT:  .LBB3_1: @ %atomicrmw.start77; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=178; CHECK-NEXT:    ldrexd r0, r1, [r12]79; CHECK-NEXT:    adds r6, r0, #180; CHECK-NEXT:    adc r7, r1, #081; CHECK-NEXT:    subs r4, r0, r282; CHECK-NEXT:    sbcs r4, r1, r383; CHECK-NEXT:    movwhs r7, #084; CHECK-NEXT:    movwhs r6, #085; CHECK-NEXT:    strexd r4, r6, r7, [r12]86; CHECK-NEXT:    cmp r4, #087; CHECK-NEXT:    bne .LBB3_188; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end89; CHECK-NEXT:    dmb ish90; CHECK-NEXT:    pop {r4, r6, r7, pc}91  %result = atomicrmw uinc_wrap ptr %ptr, i64 %val seq_cst92  ret i64 %result93}94 95define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {96; CHECK-LABEL: atomicrmw_udec_wrap_i8:97; CHECK:       @ %bb.0:98; CHECK-NEXT:    dmb ish99; CHECK-NEXT:  .LBB4_1: @ %atomicrmw.start100; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1101; CHECK-NEXT:    ldrexb r12, [r0]102; CHECK-NEXT:    uxtb r3, r1103; CHECK-NEXT:    cmp r12, r3104; CHECK-NEXT:    mov r3, r1105; CHECK-NEXT:    subls r3, r12, #1106; CHECK-NEXT:    cmp r12, #0107; CHECK-NEXT:    moveq r3, r1108; CHECK-NEXT:    strexb r2, r3, [r0]109; CHECK-NEXT:    cmp r2, #0110; CHECK-NEXT:    bne .LBB4_1111; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end112; CHECK-NEXT:    mov r0, r12113; CHECK-NEXT:    dmb ish114; CHECK-NEXT:    bx lr115  %result = atomicrmw udec_wrap ptr %ptr, i8 %val seq_cst116  ret i8 %result117}118 119define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {120; CHECK-LABEL: atomicrmw_udec_wrap_i16:121; CHECK:       @ %bb.0:122; CHECK-NEXT:    dmb ish123; CHECK-NEXT:  .LBB5_1: @ %atomicrmw.start124; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1125; CHECK-NEXT:    ldrexh r12, [r0]126; CHECK-NEXT:    uxth r3, r1127; CHECK-NEXT:    cmp r12, r3128; CHECK-NEXT:    mov r3, r1129; CHECK-NEXT:    subls r3, r12, #1130; CHECK-NEXT:    cmp r12, #0131; CHECK-NEXT:    moveq r3, r1132; CHECK-NEXT:    strexh r2, r3, [r0]133; CHECK-NEXT:    cmp r2, #0134; CHECK-NEXT:    bne .LBB5_1135; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end136; CHECK-NEXT:    mov r0, r12137; CHECK-NEXT:    dmb ish138; CHECK-NEXT:    bx lr139  %result = atomicrmw udec_wrap ptr %ptr, i16 %val seq_cst140  ret i16 %result141}142 143define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {144; CHECK-LABEL: atomicrmw_udec_wrap_i32:145; CHECK:       @ %bb.0:146; CHECK-NEXT:    dmb ish147; CHECK-NEXT:  .LBB6_1: @ %atomicrmw.start148; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1149; CHECK-NEXT:    ldrex r12, [r0]150; CHECK-NEXT:    mov r3, r1151; CHECK-NEXT:    cmp r12, r1152; CHECK-NEXT:    subls r3, r12, #1153; CHECK-NEXT:    cmp r12, #0154; CHECK-NEXT:    moveq r3, r1155; CHECK-NEXT:    strex r2, r3, [r0]156; CHECK-NEXT:    cmp r2, #0157; CHECK-NEXT:    bne .LBB6_1158; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end159; CHECK-NEXT:    mov r0, r12160; CHECK-NEXT:    dmb ish161; CHECK-NEXT:    bx lr162  %result = atomicrmw udec_wrap ptr %ptr, i32 %val seq_cst163  ret i32 %result164}165 166define i64 @atomicrmw_udec_wrap_i64(ptr %ptr, i64 %val) {167; CHECK-LABEL: atomicrmw_udec_wrap_i64:168; CHECK:       @ %bb.0:169; CHECK-NEXT:    .save {r4, r5, r6, r7, r11, lr}170; CHECK-NEXT:    push {r4, r5, r6, r7, r11, lr}171; CHECK-NEXT:    dmb ish172; CHECK-NEXT:  .LBB7_1: @ %atomicrmw.start173; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1174; CHECK-NEXT:    ldrexd r4, r5, [r0]175; CHECK-NEXT:    mov r12, #0176; CHECK-NEXT:    subs r1, r2, r4177; CHECK-NEXT:    sbcs r1, r3, r5178; CHECK-NEXT:    orr r1, r4, r5179; CHECK-NEXT:    clz r1, r1180; CHECK-NEXT:    movwlo r12, #1181; CHECK-NEXT:    lsr r1, r1, #5182; CHECK-NEXT:    subs r6, r4, #1183; CHECK-NEXT:    sbc r7, r5, #0184; CHECK-NEXT:    orr r1, r1, r12185; CHECK-NEXT:    cmp r1, #0186; CHECK-NEXT:    movne r7, r3187; CHECK-NEXT:    movne r6, r2188; CHECK-NEXT:    strexd r1, r6, r7, [r0]189; CHECK-NEXT:    cmp r1, #0190; CHECK-NEXT:    bne .LBB7_1191; CHECK-NEXT:  @ %bb.2: @ %atomicrmw.end192; CHECK-NEXT:    mov r0, r4193; CHECK-NEXT:    mov r1, r5194; CHECK-NEXT:    dmb ish195; CHECK-NEXT:    pop {r4, r5, r6, r7, r11, pc}196  %result = atomicrmw udec_wrap ptr %ptr, i64 %val seq_cst197  ret i64 %result198}199