brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 17daa7d Raw
138 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp %s -o - | FileCheck %s3 4define nonnull ptr @useafterloop(ptr nocapture noundef readonly %pSrcA, ptr nocapture noundef readonly %pSrcB, ptr noundef writeonly %pDst, i32 noundef %blockSize) {5; CHECK-LABEL: useafterloop:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    .save {r7, lr}8; CHECK-NEXT:    push {r7, lr}9; CHECK-NEXT:    mov.w lr, #6410; CHECK-NEXT:    mov r3, r211; CHECK-NEXT:  .LBB0_1: @ %while.body12; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=113; CHECK-NEXT:    vldrw.u32 q0, [r0], #1614; CHECK-NEXT:    vldrw.u32 q1, [r1], #1615; CHECK-NEXT:    vadd.f32 q0, q1, q016; CHECK-NEXT:    vstrb.8 q0, [r3], #1617; CHECK-NEXT:    le lr, .LBB0_118; CHECK-NEXT:  @ %bb.2: @ %while.end19; CHECK-NEXT:    mov r0, r220; CHECK-NEXT:    pop {r7, pc}21entry:22  br label %while.body23 24while.body:25  %pSrcA.addr.012 = phi ptr [ %pSrcA, %entry ], [ %add.ptr, %while.body ]26  %pSrcB.addr.011 = phi ptr [ %pSrcB, %entry ], [ %add.ptr1, %while.body ]27  %pDst.addr.010 = phi ptr [ %pDst, %entry ], [ %add.ptr2, %while.body ]28  %blkCnt.09 = phi i32 [ 64, %entry ], [ %dec, %while.body ]29  %0 = load <4 x float>, ptr %pSrcA.addr.012, align 430  %1 = load <4 x float>, ptr %pSrcB.addr.011, align 431  %2 = fadd fast <4 x float> %1, %032  store <4 x float> %2, ptr %pDst.addr.010, align 433  %add.ptr = getelementptr inbounds float, ptr %pSrcA.addr.012, i32 434  %add.ptr1 = getelementptr inbounds float, ptr %pSrcB.addr.011, i32 435  %add.ptr2 = getelementptr inbounds float, ptr %pDst.addr.010, i32 436  %dec = add nsw i32 %blkCnt.09, -137  %cmp.not = icmp eq i32 %dec, 038  br i1 %cmp.not, label %while.end, label %while.body39 40while.end:41  ret ptr %pDst42}43 44 45define nonnull ptr @nouse(ptr nocapture noundef readonly %pSrcA, ptr nocapture noundef readonly %pSrcB, ptr noundef writeonly %pDst, i32 noundef %blockSize) {46; CHECK-LABEL: nouse:47; CHECK:       @ %bb.0: @ %entry48; CHECK-NEXT:    .save {r7, lr}49; CHECK-NEXT:    push {r7, lr}50; CHECK-NEXT:    mov.w lr, #6451; CHECK-NEXT:    mov r3, r252; CHECK-NEXT:  .LBB1_1: @ %while.body53; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=154; CHECK-NEXT:    vldrw.u32 q0, [r0], #1655; CHECK-NEXT:    vldrw.u32 q1, [r1], #1656; CHECK-NEXT:    vadd.f32 q0, q1, q057; CHECK-NEXT:    vstrb.8 q0, [r3], #1658; CHECK-NEXT:    le lr, .LBB1_159; CHECK-NEXT:  @ %bb.2: @ %while.end60; CHECK-NEXT:    adds r0, r2, #461; CHECK-NEXT:    pop {r7, pc}62entry:63  br label %while.body64 65while.body:66  %pSrcA.addr.012 = phi ptr [ %pSrcA, %entry ], [ %add.ptr, %while.body ]67  %pSrcB.addr.011 = phi ptr [ %pSrcB, %entry ], [ %add.ptr1, %while.body ]68  %pDst.addr.010 = phi ptr [ %pDst, %entry ], [ %add.ptr2, %while.body ]69  %blkCnt.09 = phi i32 [ 64, %entry ], [ %dec, %while.body ]70  %0 = load <4 x float>, ptr %pSrcA.addr.012, align 471  %1 = load <4 x float>, ptr %pSrcB.addr.011, align 472  %2 = fadd fast <4 x float> %1, %073  store <4 x float> %2, ptr %pDst.addr.010, align 474  %add.ptr = getelementptr inbounds float, ptr %pSrcA.addr.012, i32 475  %add.ptr1 = getelementptr inbounds float, ptr %pSrcB.addr.011, i32 476  %add.ptr2 = getelementptr inbounds float, ptr %pDst.addr.010, i32 477  %dec = add nsw i32 %blkCnt.09, -178  %cmp.not = icmp eq i32 %dec, 079  br i1 %cmp.not, label %while.end, label %while.body80 81while.end:82  %add.ptr3 = getelementptr inbounds float, ptr %pDst, i32 183  ret ptr %add.ptr384}85 86define nofpclass(nan inf) float @manyusesafterloop(ptr nocapture noundef readonly %pSrcA, ptr nocapture noundef readonly %pSrcB, ptr nocapture noundef %pDst, i32 noundef %blockSize) {87; CHECK-LABEL: manyusesafterloop:88; CHECK:       @ %bb.0: @ %entry89; CHECK-NEXT:    .save {r4, lr}90; CHECK-NEXT:    push {r4, lr}91; CHECK-NEXT:    mov.w lr, #6492; CHECK-NEXT:    mov r12, r093; CHECK-NEXT:    mov r3, r194; CHECK-NEXT:    mov r4, r295; CHECK-NEXT:  .LBB2_1: @ %while.body96; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=197; CHECK-NEXT:    vldrw.u32 q0, [r12], #1698; CHECK-NEXT:    vldrw.u32 q1, [r3], #1699; CHECK-NEXT:    vadd.f32 q0, q1, q0100; CHECK-NEXT:    vstrb.8 q0, [r4], #16101; CHECK-NEXT:    le lr, .LBB2_1102; CHECK-NEXT:  @ %bb.2: @ %while.end103; CHECK-NEXT:    vldr s0, [r2]104; CHECK-NEXT:    vldr s2, [r0]105; CHECK-NEXT:    vadd.f32 s0, s2, s0106; CHECK-NEXT:    vldr s2, [r1]107; CHECK-NEXT:    vadd.f32 s0, s0, s2108; CHECK-NEXT:    vmov r0, s0109; CHECK-NEXT:    pop {r4, pc}110entry:111  br label %while.body112 113while.body:114  %pSrcA.addr.016 = phi ptr [ %pSrcA, %entry ], [ %add.ptr, %while.body ]115  %pSrcB.addr.015 = phi ptr [ %pSrcB, %entry ], [ %add.ptr1, %while.body ]116  %pDst.addr.014 = phi ptr [ %pDst, %entry ], [ %add.ptr2, %while.body ]117  %blkCnt.013 = phi i32 [ 64, %entry ], [ %dec, %while.body ]118  %0 = load <4 x float>, ptr %pSrcA.addr.016, align 4119  %1 = load <4 x float>, ptr %pSrcB.addr.015, align 4120  %2 = fadd fast <4 x float> %1, %0121  store <4 x float> %2, ptr %pDst.addr.014, align 4122  %add.ptr = getelementptr inbounds float, ptr %pSrcA.addr.016, i32 4123  %add.ptr1 = getelementptr inbounds float, ptr %pSrcB.addr.015, i32 4124  %add.ptr2 = getelementptr inbounds float, ptr %pDst.addr.014, i32 4125  %dec = add nsw i32 %blkCnt.013, -1126  %cmp.not = icmp eq i32 %dec, 0127  br i1 %cmp.not, label %while.end, label %while.body128 129while.end:130  %3 = load float, ptr %pDst, align 4131  %4 = load float, ptr %pSrcA, align 4132  %add = fadd fast float %4, %3133  %5 = load float, ptr %pSrcB, align 4134  %add5 = fadd fast float %add, %5135  ret float %add5136}137 138