brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 575176f Raw
182 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple thumbv6m-none-eabi -o - %s | FileCheck %s --check-prefix=CHECK-V6M3; RUN: llc -mtriple thumbv7m-none-eabi -o - %s | FileCheck %s --check-prefix=CHECK-V7M4; RUN: llc -mtriple thumbv8.1m.main-none-eabi -mattr=+mve,+lob -o - %s | FileCheck %s --check-prefix=CHECK-V81M5; RUN: llc -mtriple armv7a-none-eabi -o - %s | FileCheck %s --check-prefix=CHECK-V7A6 7define i32 @test_lshr(ptr nocapture %x, ptr nocapture readonly %y, i32 %n) {8; CHECK-V6M-LABEL: test_lshr:9; CHECK-V6M:       @ %bb.0: @ %entry10; CHECK-V6M-NEXT:    lsrs r2, r2, #211; CHECK-V6M-NEXT:    beq .LBB0_212; CHECK-V6M-NEXT:  .LBB0_1: @ %while.body13; CHECK-V6M-NEXT:    @ =>This Inner Loop Header: Depth=114; CHECK-V6M-NEXT:    ldm r1!, {r3}15; CHECK-V6M-NEXT:    lsls r3, r3, #116; CHECK-V6M-NEXT:    stm r0!, {r3}17; CHECK-V6M-NEXT:    subs r2, r2, #118; CHECK-V6M-NEXT:    bne .LBB0_119; CHECK-V6M-NEXT:  .LBB0_2: @ %while.end20; CHECK-V6M-NEXT:    movs r0, #021; CHECK-V6M-NEXT:    bx lr22;23; CHECK-V7M-LABEL: test_lshr:24; CHECK-V7M:       @ %bb.0: @ %entry25; CHECK-V7M-NEXT:    lsrs r2, r2, #226; CHECK-V7M-NEXT:    beq .LBB0_327; CHECK-V7M-NEXT:  @ %bb.1: @ %while.body.preheader28; CHECK-V7M-NEXT:    subs r1, #429; CHECK-V7M-NEXT:    subs r0, #430; CHECK-V7M-NEXT:  .LBB0_2: @ %while.body31; CHECK-V7M-NEXT:    @ =>This Inner Loop Header: Depth=132; CHECK-V7M-NEXT:    ldr r3, [r1, #4]!33; CHECK-V7M-NEXT:    subs r2, #134; CHECK-V7M-NEXT:    lsl.w r3, r3, #135; CHECK-V7M-NEXT:    str r3, [r0, #4]!36; CHECK-V7M-NEXT:    bne .LBB0_237; CHECK-V7M-NEXT:  .LBB0_3: @ %while.end38; CHECK-V7M-NEXT:    movs r0, #039; CHECK-V7M-NEXT:    bx lr40;41; CHECK-V81M-LABEL: test_lshr:42; CHECK-V81M:       @ %bb.0: @ %entry43; CHECK-V81M-NEXT:    .save {r7, lr}44; CHECK-V81M-NEXT:    push {r7, lr}45; CHECK-V81M-NEXT:    lsrs r2, r2, #246; CHECK-V81M-NEXT:    wls lr, r2, .LBB0_247; CHECK-V81M-NEXT:  .LBB0_1: @ %while.body48; CHECK-V81M-NEXT:    @ =>This Inner Loop Header: Depth=149; CHECK-V81M-NEXT:    ldr r2, [r1], #450; CHECK-V81M-NEXT:    lsls r2, r2, #151; CHECK-V81M-NEXT:    str r2, [r0], #452; CHECK-V81M-NEXT:    le lr, .LBB0_153; CHECK-V81M-NEXT:  .LBB0_2: @ %while.end54; CHECK-V81M-NEXT:    movs r0, #055; CHECK-V81M-NEXT:    pop {r7, pc}56;57; CHECK-V7A-LABEL: test_lshr:58; CHECK-V7A:       @ %bb.0: @ %entry59; CHECK-V7A-NEXT:    lsrs r2, r2, #260; CHECK-V7A-NEXT:    beq .LBB0_261; CHECK-V7A-NEXT:  .LBB0_1: @ %while.body62; CHECK-V7A-NEXT:    @ =>This Inner Loop Header: Depth=163; CHECK-V7A-NEXT:    ldr r3, [r1], #464; CHECK-V7A-NEXT:    subs r2, r2, #165; CHECK-V7A-NEXT:    lsl r3, r3, #166; CHECK-V7A-NEXT:    str r3, [r0], #467; CHECK-V7A-NEXT:    bne .LBB0_168; CHECK-V7A-NEXT:  .LBB0_2: @ %while.end69; CHECK-V7A-NEXT:    mov r0, #070; CHECK-V7A-NEXT:    bx lr71entry:72  %shr = lshr i32 %n, 273  %tobool.not4 = icmp eq i32 %shr, 074  br i1 %tobool.not4, label %while.end, label %while.body75 76while.body:                                       ; preds = %entry, %while.body77  %c.07 = phi i32 [ %dec, %while.body ], [ %shr, %entry ]78  %x.addr.06 = phi ptr [ %incdec.ptr1, %while.body ], [ %x, %entry ]79  %y.addr.05 = phi ptr [ %incdec.ptr, %while.body ], [ %y, %entry ]80  %incdec.ptr = getelementptr inbounds i32, ptr %y.addr.05, i32 181  %0 = load i32, ptr %y.addr.05, align 482  %mul = shl nsw i32 %0, 183  %incdec.ptr1 = getelementptr inbounds i32, ptr %x.addr.06, i32 184  store i32 %mul, ptr %x.addr.06, align 485  %dec = add nsw i32 %c.07, -186  %tobool.not = icmp eq i32 %dec, 087  br i1 %tobool.not, label %while.end, label %while.body88 89while.end:                                        ; preds = %while.body, %entry90  ret i32 091}92 93define i32 @test_lshr2(ptr nocapture %x, ptr nocapture readonly %y, i32 %n) {94; CHECK-V6M-LABEL: test_lshr2:95; CHECK-V6M:       @ %bb.0: @ %entry96; CHECK-V6M-NEXT:    lsrs r2, r2, #297; CHECK-V6M-NEXT:    beq .LBB1_298; CHECK-V6M-NEXT:  .LBB1_1: @ %while.body99; CHECK-V6M-NEXT:    @ =>This Inner Loop Header: Depth=1100; CHECK-V6M-NEXT:    ldm r1!, {r3}101; CHECK-V6M-NEXT:    lsls r3, r3, #1102; CHECK-V6M-NEXT:    stm r0!, {r3}103; CHECK-V6M-NEXT:    subs r2, r2, #1104; CHECK-V6M-NEXT:    bne .LBB1_1105; CHECK-V6M-NEXT:  .LBB1_2: @ %while.end106; CHECK-V6M-NEXT:    movs r0, #0107; CHECK-V6M-NEXT:    bx lr108;109; CHECK-V7M-LABEL: test_lshr2:110; CHECK-V7M:       @ %bb.0: @ %entry111; CHECK-V7M-NEXT:    lsrs r2, r2, #2112; CHECK-V7M-NEXT:    beq .LBB1_3113; CHECK-V7M-NEXT:  @ %bb.1: @ %while.body.preheader114; CHECK-V7M-NEXT:    subs r1, #4115; CHECK-V7M-NEXT:    subs r0, #4116; CHECK-V7M-NEXT:  .LBB1_2: @ %while.body117; CHECK-V7M-NEXT:    @ =>This Inner Loop Header: Depth=1118; CHECK-V7M-NEXT:    ldr r3, [r1, #4]!119; CHECK-V7M-NEXT:    subs r2, #1120; CHECK-V7M-NEXT:    lsl.w r3, r3, #1121; CHECK-V7M-NEXT:    str r3, [r0, #4]!122; CHECK-V7M-NEXT:    bne .LBB1_2123; CHECK-V7M-NEXT:  .LBB1_3: @ %while.end124; CHECK-V7M-NEXT:    movs r0, #0125; CHECK-V7M-NEXT:    bx lr126;127; CHECK-V81M-LABEL: test_lshr2:128; CHECK-V81M:       @ %bb.0: @ %entry129; CHECK-V81M-NEXT:    .save {r7, lr}130; CHECK-V81M-NEXT:    push {r7, lr}131; CHECK-V81M-NEXT:    lsrs r2, r2, #2132; CHECK-V81M-NEXT:    wls lr, r2, .LBB1_2133; CHECK-V81M-NEXT:  .LBB1_1: @ %while.body134; CHECK-V81M-NEXT:    @ =>This Inner Loop Header: Depth=1135; CHECK-V81M-NEXT:    ldr r2, [r1], #4136; CHECK-V81M-NEXT:    lsls r2, r2, #1137; CHECK-V81M-NEXT:    str r2, [r0], #4138; CHECK-V81M-NEXT:    le lr, .LBB1_1139; CHECK-V81M-NEXT:  .LBB1_2: @ %while.end140; CHECK-V81M-NEXT:    movs r0, #0141; CHECK-V81M-NEXT:    pop {r7, pc}142;143; CHECK-V7A-LABEL: test_lshr2:144; CHECK-V7A:       @ %bb.0: @ %entry145; CHECK-V7A-NEXT:    lsrs r2, r2, #2146; CHECK-V7A-NEXT:    beq .LBB1_2147; CHECK-V7A-NEXT:  .LBB1_1: @ %while.body148; CHECK-V7A-NEXT:    @ =>This Inner Loop Header: Depth=1149; CHECK-V7A-NEXT:    ldr r3, [r1], #4150; CHECK-V7A-NEXT:    subs r2, r2, #1151; CHECK-V7A-NEXT:    lsl r3, r3, #1152; CHECK-V7A-NEXT:    str r3, [r0], #4153; CHECK-V7A-NEXT:    bne .LBB1_1154; CHECK-V7A-NEXT:  .LBB1_2: @ %while.end155; CHECK-V7A-NEXT:    mov r0, #0156; CHECK-V7A-NEXT:    bx lr157entry:158  %tobool.not4 = icmp ult i32 %n, 4159  br i1 %tobool.not4, label %while.end, label %while.body.preheader160 161while.body.preheader:                             ; preds = %entry162  %shr = lshr i32 %n, 2163  br label %while.body164 165while.body:                                       ; preds = %while.body.preheader, %while.body166  %c.07 = phi i32 [ %dec, %while.body ], [ %shr, %while.body.preheader ]167  %x.addr.06 = phi ptr [ %incdec.ptr1, %while.body ], [ %x, %while.body.preheader ]168  %y.addr.05 = phi ptr [ %incdec.ptr, %while.body ], [ %y, %while.body.preheader ]169  %incdec.ptr = getelementptr inbounds i32, ptr %y.addr.05, i32 1170  %0 = load i32, ptr %y.addr.05, align 4171  %mul = shl nsw i32 %0, 1172  %incdec.ptr1 = getelementptr inbounds i32, ptr %x.addr.06, i32 1173  store i32 %mul, ptr %x.addr.06, align 4174  %dec = add nsw i32 %c.07, -1175  %tobool.not = icmp eq i32 %dec, 0176  br i1 %tobool.not, label %while.end, label %while.body177 178while.end:                                        ; preds = %while.body, %entry179  ret i32 0180}181 182