brintos

brintos / llvm-project-archived public Read only

0
0
Text · 37.6 KiB · 9d69417 Raw
818 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2 3; RUN: llc < %s -mtriple=thumbv8m.base-arm-none-eabi < %s | FileCheck %s4 5define void @arm_q15_to_q31(ptr nocapture noundef readonly %pSrc, ptr nocapture noundef writeonly %pDst, i32 noundef %blockSize) {6; CHECK-LABEL: arm_q15_to_q31:7; CHECK:       @ %bb.0: @ %entry8; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}9; CHECK-NEXT:    push {r4, r5, r6, r7, lr}10; CHECK-NEXT:    .pad #811; CHECK-NEXT:    sub sp, #812; CHECK-NEXT:    mov r7, r213; CHECK-NEXT:    lsrs r3, r2, #214; CHECK-NEXT:    beq .LBB0_615; CHECK-NEXT:  @ %bb.1: @ %while.body.preheader16; CHECK-NEXT:    movs r5, #317; CHECK-NEXT:    ands r5, r318; CHECK-NEXT:    subs r2, r3, #119; CHECK-NEXT:    cbz r5, .LBB0_420; CHECK-NEXT:  @ %bb.2: @ %while.body.prol21; CHECK-NEXT:    str r2, [sp] @ 4-byte Spill22; CHECK-NEXT:    str r7, [sp, #4] @ 4-byte Spill23; CHECK-NEXT:    ldrh r2, [r0]24; CHECK-NEXT:    ldrh r7, [r0, #2]25; CHECK-NEXT:    ldrh r4, [r0, #4]26; CHECK-NEXT:    ldrh r6, [r0, #6]27; CHECK-NEXT:    lsls r6, r6, #1628; CHECK-NEXT:    lsls r4, r4, #1629; CHECK-NEXT:    lsls r7, r7, #1630; CHECK-NEXT:    lsls r2, r2, #1631; CHECK-NEXT:    stm r1!, {r2, r7}32; CHECK-NEXT:    str r4, [r1]33; CHECK-NEXT:    str r6, [r1, #4]34; CHECK-NEXT:    subs r1, #835; CHECK-NEXT:    cmp r5, #136; CHECK-NEXT:    bne .LBB0_1137; CHECK-NEXT:  @ %bb.3:38; CHECK-NEXT:    adds r1, #1639; CHECK-NEXT:    adds r0, #840; CHECK-NEXT:    ldr r2, [sp] @ 4-byte Reload41; CHECK-NEXT:    mov r3, r242; CHECK-NEXT:    ldr r7, [sp, #4] @ 4-byte Reload43; CHECK-NEXT:  .LBB0_4: @ %while.body.prol.loopexit44; CHECK-NEXT:    cmp r2, #345; CHECK-NEXT:    blo .LBB0_646; CHECK-NEXT:  .LBB0_5: @ %while.body47; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=148; CHECK-NEXT:    ldrh r2, [r0]49; CHECK-NEXT:    ldrh r4, [r0, #2]50; CHECK-NEXT:    ldrh r5, [r0, #4]51; CHECK-NEXT:    ldrh r6, [r0, #6]52; CHECK-NEXT:    lsls r6, r6, #1653; CHECK-NEXT:    str r6, [r1, #12]54; CHECK-NEXT:    lsls r5, r5, #1655; CHECK-NEXT:    str r5, [r1, #8]56; CHECK-NEXT:    lsls r4, r4, #1657; CHECK-NEXT:    str r4, [r1, #4]58; CHECK-NEXT:    lsls r2, r2, #1659; CHECK-NEXT:    str r2, [r1]60; CHECK-NEXT:    ldrh r2, [r0, #8]61; CHECK-NEXT:    ldrh r4, [r0, #10]62; CHECK-NEXT:    ldrh r5, [r0, #12]63; CHECK-NEXT:    ldrh r6, [r0, #14]64; CHECK-NEXT:    lsls r6, r6, #1665; CHECK-NEXT:    str r6, [r1, #28]66; CHECK-NEXT:    lsls r5, r5, #1667; CHECK-NEXT:    str r5, [r1, #24]68; CHECK-NEXT:    lsls r4, r4, #1669; CHECK-NEXT:    str r4, [r1, #20]70; CHECK-NEXT:    lsls r2, r2, #1671; CHECK-NEXT:    str r2, [r1, #16]72; CHECK-NEXT:    ldrh r2, [r0, #16]73; CHECK-NEXT:    ldrh r4, [r0, #18]74; CHECK-NEXT:    ldrh r5, [r0, #20]75; CHECK-NEXT:    ldrh r6, [r0, #22]76; CHECK-NEXT:    lsls r6, r6, #1677; CHECK-NEXT:    str r6, [r1, #44]78; CHECK-NEXT:    lsls r5, r5, #1679; CHECK-NEXT:    str r5, [r1, #40]80; CHECK-NEXT:    lsls r4, r4, #1681; CHECK-NEXT:    str r4, [r1, #36]82; CHECK-NEXT:    lsls r2, r2, #1683; CHECK-NEXT:    str r2, [r1, #32]84; CHECK-NEXT:    ldrh r2, [r0, #24]85; CHECK-NEXT:    ldrh r4, [r0, #26]86; CHECK-NEXT:    ldrh r5, [r0, #28]87; CHECK-NEXT:    ldrh r6, [r0, #30]88; CHECK-NEXT:    lsls r6, r6, #1689; CHECK-NEXT:    str r6, [r1, #60]90; CHECK-NEXT:    lsls r5, r5, #1691; CHECK-NEXT:    str r5, [r1, #56]92; CHECK-NEXT:    lsls r4, r4, #1693; CHECK-NEXT:    str r4, [r1, #52]94; CHECK-NEXT:    lsls r2, r2, #1695; CHECK-NEXT:    str r2, [r1, #48]96; CHECK-NEXT:    adds r1, #6497; CHECK-NEXT:    adds r0, #3298; CHECK-NEXT:    subs r3, r3, #499; CHECK-NEXT:    bne .LBB0_5100; CHECK-NEXT:  .LBB0_6: @ %while.end101; CHECK-NEXT:    movs r2, #3102; CHECK-NEXT:    ands r7, r2103; CHECK-NEXT:    beq .LBB0_10104; CHECK-NEXT:  @ %bb.7: @ %while.body12105; CHECK-NEXT:    ldrh r2, [r0]106; CHECK-NEXT:    lsls r2, r2, #16107; CHECK-NEXT:    str r2, [r1]108; CHECK-NEXT:    cmp r7, #1109; CHECK-NEXT:    beq .LBB0_10110; CHECK-NEXT:  @ %bb.8: @ %while.body12.1111; CHECK-NEXT:    ldrh r2, [r0, #2]112; CHECK-NEXT:    lsls r2, r2, #16113; CHECK-NEXT:    str r2, [r1, #4]114; CHECK-NEXT:    cmp r7, #2115; CHECK-NEXT:    beq .LBB0_10116; CHECK-NEXT:  @ %bb.9: @ %while.body12.2117; CHECK-NEXT:    ldrh r0, [r0, #4]118; CHECK-NEXT:    lsls r0, r0, #16119; CHECK-NEXT:    str r0, [r1, #8]120; CHECK-NEXT:  .LBB0_10: @ %while.end17121; CHECK-NEXT:    add sp, #8122; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}123; CHECK-NEXT:  .LBB0_11: @ %while.body.prol.1124; CHECK-NEXT:    ldrh r2, [r0, #8]125; CHECK-NEXT:    ldrh r4, [r0, #10]126; CHECK-NEXT:    ldrh r6, [r0, #12]127; CHECK-NEXT:    ldrh r7, [r0, #14]128; CHECK-NEXT:    lsls r7, r7, #16129; CHECK-NEXT:    lsls r6, r6, #16130; CHECK-NEXT:    lsls r4, r4, #16131; CHECK-NEXT:    lsls r2, r2, #16132; CHECK-NEXT:    str r2, [r1, #16]133; CHECK-NEXT:    str r4, [r1, #20]134; CHECK-NEXT:    str r6, [r1, #24]135; CHECK-NEXT:    str r7, [r1, #28]136; CHECK-NEXT:    cmp r5, #2137; CHECK-NEXT:    bne .LBB0_13138; CHECK-NEXT:  @ %bb.12:139; CHECK-NEXT:    subs r3, r3, #2140; CHECK-NEXT:    adds r1, #32141; CHECK-NEXT:    adds r0, #16142; CHECK-NEXT:    b .LBB0_14143; CHECK-NEXT:  .LBB0_13: @ %while.body.prol.2144; CHECK-NEXT:    ldrh r2, [r0, #16]145; CHECK-NEXT:    ldrh r4, [r0, #18]146; CHECK-NEXT:    ldrh r5, [r0, #20]147; CHECK-NEXT:    ldrh r6, [r0, #22]148; CHECK-NEXT:    lsls r6, r6, #16149; CHECK-NEXT:    lsls r5, r5, #16150; CHECK-NEXT:    lsls r4, r4, #16151; CHECK-NEXT:    lsls r2, r2, #16152; CHECK-NEXT:    mov r7, r1153; CHECK-NEXT:    adds r7, #32154; CHECK-NEXT:    stm r7!, {r2, r4, r5, r6}155; CHECK-NEXT:    subs r3, r3, #3156; CHECK-NEXT:    adds r1, #48157; CHECK-NEXT:    adds r0, #24158; CHECK-NEXT:  .LBB0_14: @ %while.body.prol.loopexit159; CHECK-NEXT:    ldr r7, [sp, #4] @ 4-byte Reload160; CHECK-NEXT:    ldr r2, [sp] @ 4-byte Reload161; CHECK-NEXT:    cmp r2, #3162; CHECK-NEXT:    bhs .LBB0_5163; CHECK-NEXT:    b .LBB0_6164entry:165  %cmp.not19 = icmp ult i32 %blockSize, 4166  br i1 %cmp.not19, label %while.end, label %while.body.preheader167 168while.body.preheader:                             ; preds = %entry169  %shr = lshr i32 %blockSize, 2170  %0 = add nsw i32 %shr, -1171  %xtraiter = and i32 %shr, 3172  %lcmp.mod.not = icmp eq i32 %xtraiter, 0173  br i1 %lcmp.mod.not, label %while.body.prol.loopexit, label %while.body.prol174 175while.body.prol:                                  ; preds = %while.body.preheader176  %pIn.0.val.prol = load i16, ptr %pSrc, align 2177  %1 = getelementptr i8, ptr %pSrc, i32 2178  %pIn.0.val13.prol = load i16, ptr %1, align 2179  %conv.i.prol = sext i16 %pIn.0.val13.prol to i32180  %shl.i.prol = shl nsw i32 %conv.i.prol, 16181  %conv22.i.prol = zext i16 %pIn.0.val.prol to i32182  %add.ptr2.prol = getelementptr inbounds i16, ptr %pSrc, i32 4183  %add.ptr3.prol = getelementptr inbounds i16, ptr %pSrc, i32 2184  %add.ptr3.val.prol = load i16, ptr %add.ptr3.prol, align 2185  %2 = getelementptr i16, ptr %pSrc, i32 3186  %add.ptr3.val14.prol = load i16, ptr %2, align 2187  %conv.i15.prol = sext i16 %add.ptr3.val14.prol to i32188  %shl.i16.prol = shl nsw i32 %conv.i15.prol, 16189  %conv22.i17.prol = zext i16 %add.ptr3.val.prol to i32190  %shl.prol = shl nuw i32 %conv22.i.prol, 16191  %shl5.prol = shl nuw i32 %conv22.i17.prol, 16192  %incdec.ptr.prol = getelementptr inbounds i32, ptr %pDst, i32 1193  store i32 %shl.prol, ptr %pDst, align 4194  %incdec.ptr7.prol = getelementptr inbounds i32, ptr %pDst, i32 2195  store i32 %shl.i.prol, ptr %incdec.ptr.prol, align 4196  %incdec.ptr8.prol = getelementptr inbounds i32, ptr %pDst, i32 3197  store i32 %shl5.prol, ptr %incdec.ptr7.prol, align 4198  %incdec.ptr9.prol = getelementptr inbounds i32, ptr %pDst, i32 4199  store i32 %shl.i16.prol, ptr %incdec.ptr8.prol, align 4200  %dec.prol = add nsw i32 %shr, -1201  %prol.iter.cmp.not = icmp eq i32 %xtraiter, 1202  br i1 %prol.iter.cmp.not, label %while.body.prol.loopexit, label %while.body.prol.1203 204while.body.prol.1:                                ; preds = %while.body.prol205  %pIn.0.val.prol.1 = load i16, ptr %add.ptr2.prol, align 2206  %3 = getelementptr i16, ptr %pSrc, i32 5207  %pIn.0.val13.prol.1 = load i16, ptr %3, align 2208  %conv.i.prol.1 = sext i16 %pIn.0.val13.prol.1 to i32209  %shl.i.prol.1 = shl nsw i32 %conv.i.prol.1, 16210  %conv22.i.prol.1 = zext i16 %pIn.0.val.prol.1 to i32211  %add.ptr2.prol.1 = getelementptr inbounds i16, ptr %pSrc, i32 8212  %add.ptr3.prol.1 = getelementptr inbounds i16, ptr %pSrc, i32 6213  %add.ptr3.val.prol.1 = load i16, ptr %add.ptr3.prol.1, align 2214  %4 = getelementptr i16, ptr %pSrc, i32 7215  %add.ptr3.val14.prol.1 = load i16, ptr %4, align 2216  %conv.i15.prol.1 = sext i16 %add.ptr3.val14.prol.1 to i32217  %shl.i16.prol.1 = shl nsw i32 %conv.i15.prol.1, 16218  %conv22.i17.prol.1 = zext i16 %add.ptr3.val.prol.1 to i32219  %shl.prol.1 = shl nuw i32 %conv22.i.prol.1, 16220  %shl5.prol.1 = shl nuw i32 %conv22.i17.prol.1, 16221  %incdec.ptr.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 5222  store i32 %shl.prol.1, ptr %incdec.ptr9.prol, align 4223  %incdec.ptr7.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 6224  store i32 %shl.i.prol.1, ptr %incdec.ptr.prol.1, align 4225  %incdec.ptr8.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 7226  store i32 %shl5.prol.1, ptr %incdec.ptr7.prol.1, align 4227  %incdec.ptr9.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 8228  store i32 %shl.i16.prol.1, ptr %incdec.ptr8.prol.1, align 4229  %dec.prol.1 = add nsw i32 %shr, -2230  %prol.iter.cmp.1.not = icmp eq i32 %xtraiter, 2231  br i1 %prol.iter.cmp.1.not, label %while.body.prol.loopexit, label %while.body.prol.2232 233while.body.prol.2:                                ; preds = %while.body.prol.1234  %pIn.0.val.prol.2 = load i16, ptr %add.ptr2.prol.1, align 2235  %5 = getelementptr i16, ptr %pSrc, i32 9236  %pIn.0.val13.prol.2 = load i16, ptr %5, align 2237  %conv.i.prol.2 = sext i16 %pIn.0.val13.prol.2 to i32238  %shl.i.prol.2 = shl nsw i32 %conv.i.prol.2, 16239  %conv22.i.prol.2 = zext i16 %pIn.0.val.prol.2 to i32240  %add.ptr2.prol.2 = getelementptr inbounds i16, ptr %pSrc, i32 12241  %add.ptr3.prol.2 = getelementptr inbounds i16, ptr %pSrc, i32 10242  %add.ptr3.val.prol.2 = load i16, ptr %add.ptr3.prol.2, align 2243  %6 = getelementptr i16, ptr %pSrc, i32 11244  %add.ptr3.val14.prol.2 = load i16, ptr %6, align 2245  %conv.i15.prol.2 = sext i16 %add.ptr3.val14.prol.2 to i32246  %shl.i16.prol.2 = shl nsw i32 %conv.i15.prol.2, 16247  %conv22.i17.prol.2 = zext i16 %add.ptr3.val.prol.2 to i32248  %shl.prol.2 = shl nuw i32 %conv22.i.prol.2, 16249  %shl5.prol.2 = shl nuw i32 %conv22.i17.prol.2, 16250  %incdec.ptr.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 9251  store i32 %shl.prol.2, ptr %incdec.ptr9.prol.1, align 4252  %incdec.ptr7.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 10253  store i32 %shl.i.prol.2, ptr %incdec.ptr.prol.2, align 4254  %incdec.ptr8.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 11255  store i32 %shl5.prol.2, ptr %incdec.ptr7.prol.2, align 4256  %incdec.ptr9.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 12257  store i32 %shl.i16.prol.2, ptr %incdec.ptr8.prol.2, align 4258  %dec.prol.2 = add nsw i32 %shr, -3259  br label %while.body.prol.loopexit260 261while.body.prol.loopexit:                         ; preds = %while.body.prol, %while.body.prol.1, %while.body.prol.2, %while.body.preheader262  %add.ptr2.lcssa.unr = phi ptr [ undef, %while.body.preheader ], [ %add.ptr2.prol, %while.body.prol ], [ %add.ptr2.prol.1, %while.body.prol.1 ], [ %add.ptr2.prol.2, %while.body.prol.2 ]263  %incdec.ptr9.lcssa.unr = phi ptr [ undef, %while.body.preheader ], [ %incdec.ptr9.prol, %while.body.prol ], [ %incdec.ptr9.prol.1, %while.body.prol.1 ], [ %incdec.ptr9.prol.2, %while.body.prol.2 ]264  %pDst.addr.022.unr = phi ptr [ %pDst, %while.body.preheader ], [ %incdec.ptr9.prol, %while.body.prol ], [ %incdec.ptr9.prol.1, %while.body.prol.1 ], [ %incdec.ptr9.prol.2, %while.body.prol.2 ]265  %blkCnt.021.unr = phi i32 [ %shr, %while.body.preheader ], [ %dec.prol, %while.body.prol ], [ %dec.prol.1, %while.body.prol.1 ], [ %dec.prol.2, %while.body.prol.2 ]266  %pIn.020.unr = phi ptr [ %pSrc, %while.body.preheader ], [ %add.ptr2.prol, %while.body.prol ], [ %add.ptr2.prol.1, %while.body.prol.1 ], [ %add.ptr2.prol.2, %while.body.prol.2 ]267  %7 = icmp ult i32 %0, 3268  br i1 %7, label %while.end, label %while.body269 270while.body:                                       ; preds = %while.body.prol.loopexit, %while.body271  %pDst.addr.022 = phi ptr [ %incdec.ptr9.3, %while.body ], [ %pDst.addr.022.unr, %while.body.prol.loopexit ]272  %blkCnt.021 = phi i32 [ %dec.3, %while.body ], [ %blkCnt.021.unr, %while.body.prol.loopexit ]273  %pIn.020 = phi ptr [ %add.ptr2.3, %while.body ], [ %pIn.020.unr, %while.body.prol.loopexit ]274  %pIn.0.val = load i16, ptr %pIn.020, align 2275  %8 = getelementptr i8, ptr %pIn.020, i32 2276  %pIn.0.val13 = load i16, ptr %8, align 2277  %conv.i = sext i16 %pIn.0.val13 to i32278  %shl.i = shl nsw i32 %conv.i, 16279  %conv22.i = zext i16 %pIn.0.val to i32280  %add.ptr2 = getelementptr inbounds i16, ptr %pIn.020, i32 4281  %add.ptr3 = getelementptr inbounds i16, ptr %pIn.020, i32 2282  %add.ptr3.val = load i16, ptr %add.ptr3, align 2283  %9 = getelementptr i16, ptr %pIn.020, i32 3284  %add.ptr3.val14 = load i16, ptr %9, align 2285  %conv.i15 = sext i16 %add.ptr3.val14 to i32286  %shl.i16 = shl nsw i32 %conv.i15, 16287  %conv22.i17 = zext i16 %add.ptr3.val to i32288  %shl = shl nuw i32 %conv22.i, 16289  %shl5 = shl nuw i32 %conv22.i17, 16290  %incdec.ptr = getelementptr inbounds i32, ptr %pDst.addr.022, i32 1291  store i32 %shl, ptr %pDst.addr.022, align 4292  %incdec.ptr7 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 2293  store i32 %shl.i, ptr %incdec.ptr, align 4294  %incdec.ptr8 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 3295  store i32 %shl5, ptr %incdec.ptr7, align 4296  %incdec.ptr9 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 4297  store i32 %shl.i16, ptr %incdec.ptr8, align 4298  %pIn.0.val.1 = load i16, ptr %add.ptr2, align 2299  %10 = getelementptr i16, ptr %pIn.020, i32 5300  %pIn.0.val13.1 = load i16, ptr %10, align 2301  %conv.i.1 = sext i16 %pIn.0.val13.1 to i32302  %shl.i.1 = shl nsw i32 %conv.i.1, 16303  %conv22.i.1 = zext i16 %pIn.0.val.1 to i32304  %add.ptr2.1 = getelementptr inbounds i16, ptr %pIn.020, i32 8305  %add.ptr3.1 = getelementptr inbounds i16, ptr %pIn.020, i32 6306  %add.ptr3.val.1 = load i16, ptr %add.ptr3.1, align 2307  %11 = getelementptr i16, ptr %pIn.020, i32 7308  %add.ptr3.val14.1 = load i16, ptr %11, align 2309  %conv.i15.1 = sext i16 %add.ptr3.val14.1 to i32310  %shl.i16.1 = shl nsw i32 %conv.i15.1, 16311  %conv22.i17.1 = zext i16 %add.ptr3.val.1 to i32312  %shl.1 = shl nuw i32 %conv22.i.1, 16313  %shl5.1 = shl nuw i32 %conv22.i17.1, 16314  %incdec.ptr.1 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 5315  store i32 %shl.1, ptr %incdec.ptr9, align 4316  %incdec.ptr7.1 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 6317  store i32 %shl.i.1, ptr %incdec.ptr.1, align 4318  %incdec.ptr8.1 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 7319  store i32 %shl5.1, ptr %incdec.ptr7.1, align 4320  %incdec.ptr9.1 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 8321  store i32 %shl.i16.1, ptr %incdec.ptr8.1, align 4322  %pIn.0.val.2 = load i16, ptr %add.ptr2.1, align 2323  %12 = getelementptr i16, ptr %pIn.020, i32 9324  %pIn.0.val13.2 = load i16, ptr %12, align 2325  %conv.i.2 = sext i16 %pIn.0.val13.2 to i32326  %shl.i.2 = shl nsw i32 %conv.i.2, 16327  %conv22.i.2 = zext i16 %pIn.0.val.2 to i32328  %add.ptr2.2 = getelementptr inbounds i16, ptr %pIn.020, i32 12329  %add.ptr3.2 = getelementptr inbounds i16, ptr %pIn.020, i32 10330  %add.ptr3.val.2 = load i16, ptr %add.ptr3.2, align 2331  %13 = getelementptr i16, ptr %pIn.020, i32 11332  %add.ptr3.val14.2 = load i16, ptr %13, align 2333  %conv.i15.2 = sext i16 %add.ptr3.val14.2 to i32334  %shl.i16.2 = shl nsw i32 %conv.i15.2, 16335  %conv22.i17.2 = zext i16 %add.ptr3.val.2 to i32336  %shl.2 = shl nuw i32 %conv22.i.2, 16337  %shl5.2 = shl nuw i32 %conv22.i17.2, 16338  %incdec.ptr.2 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 9339  store i32 %shl.2, ptr %incdec.ptr9.1, align 4340  %incdec.ptr7.2 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 10341  store i32 %shl.i.2, ptr %incdec.ptr.2, align 4342  %incdec.ptr8.2 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 11343  store i32 %shl5.2, ptr %incdec.ptr7.2, align 4344  %incdec.ptr9.2 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 12345  store i32 %shl.i16.2, ptr %incdec.ptr8.2, align 4346  %pIn.0.val.3 = load i16, ptr %add.ptr2.2, align 2347  %14 = getelementptr i16, ptr %pIn.020, i32 13348  %pIn.0.val13.3 = load i16, ptr %14, align 2349  %conv.i.3 = sext i16 %pIn.0.val13.3 to i32350  %shl.i.3 = shl nsw i32 %conv.i.3, 16351  %conv22.i.3 = zext i16 %pIn.0.val.3 to i32352  %add.ptr2.3 = getelementptr inbounds i16, ptr %pIn.020, i32 16353  %add.ptr3.3 = getelementptr inbounds i16, ptr %pIn.020, i32 14354  %add.ptr3.val.3 = load i16, ptr %add.ptr3.3, align 2355  %15 = getelementptr i16, ptr %pIn.020, i32 15356  %add.ptr3.val14.3 = load i16, ptr %15, align 2357  %conv.i15.3 = sext i16 %add.ptr3.val14.3 to i32358  %shl.i16.3 = shl nsw i32 %conv.i15.3, 16359  %conv22.i17.3 = zext i16 %add.ptr3.val.3 to i32360  %shl.3 = shl nuw i32 %conv22.i.3, 16361  %shl5.3 = shl nuw i32 %conv22.i17.3, 16362  %incdec.ptr.3 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 13363  store i32 %shl.3, ptr %incdec.ptr9.2, align 4364  %incdec.ptr7.3 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 14365  store i32 %shl.i.3, ptr %incdec.ptr.3, align 4366  %incdec.ptr8.3 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 15367  store i32 %shl5.3, ptr %incdec.ptr7.3, align 4368  %incdec.ptr9.3 = getelementptr inbounds i32, ptr %pDst.addr.022, i32 16369  store i32 %shl.i16.3, ptr %incdec.ptr8.3, align 4370  %dec.3 = add nsw i32 %blkCnt.021, -4371  %cmp.not.3 = icmp eq i32 %dec.3, 0372  br i1 %cmp.not.3, label %while.end, label %while.body373 374while.end:                                        ; preds = %while.body.prol.loopexit, %while.body, %entry375  %pIn.0.lcssa = phi ptr [ %pSrc, %entry ], [ %add.ptr2.lcssa.unr, %while.body.prol.loopexit ], [ %add.ptr2.3, %while.body ]376  %pDst.addr.0.lcssa = phi ptr [ %pDst, %entry ], [ %incdec.ptr9.lcssa.unr, %while.body.prol.loopexit ], [ %incdec.ptr9.3, %while.body ]377  %rem = and i32 %blockSize, 3378  %cmp11.not24 = icmp eq i32 %rem, 0379  br i1 %cmp11.not24, label %while.end17, label %while.body12380 381while.body12:                                     ; preds = %while.end382  %16 = load i16, ptr %pIn.0.lcssa, align 2383  %conv = sext i16 %16 to i32384  %shl14 = shl nsw i32 %conv, 16385  store i32 %shl14, ptr %pDst.addr.0.lcssa, align 4386  %cmp11.not = icmp eq i32 %rem, 1387  br i1 %cmp11.not, label %while.end17, label %while.body12.1388 389while.body12.1:                                   ; preds = %while.body12390  %incdec.ptr15 = getelementptr inbounds i32, ptr %pDst.addr.0.lcssa, i32 1391  %incdec.ptr13 = getelementptr inbounds i16, ptr %pIn.0.lcssa, i32 1392  %17 = load i16, ptr %incdec.ptr13, align 2393  %conv.1 = sext i16 %17 to i32394  %shl14.1 = shl nsw i32 %conv.1, 16395  store i32 %shl14.1, ptr %incdec.ptr15, align 4396  %cmp11.not.1 = icmp eq i32 %rem, 2397  br i1 %cmp11.not.1, label %while.end17, label %while.body12.2398 399while.body12.2:                                   ; preds = %while.body12.1400  %incdec.ptr15.1 = getelementptr inbounds i32, ptr %pDst.addr.0.lcssa, i32 2401  %incdec.ptr13.1 = getelementptr inbounds i16, ptr %pIn.0.lcssa, i32 2402  %18 = load i16, ptr %incdec.ptr13.1, align 2403  %conv.2 = sext i16 %18 to i32404  %shl14.2 = shl nsw i32 %conv.2, 16405  store i32 %shl14.2, ptr %incdec.ptr15.1, align 4406  br label %while.end17407 408while.end17:                                      ; preds = %while.body12, %while.body12.1, %while.body12.2, %while.end409  ret void410}411 412define void @arm_q15_to_q31_altorder(ptr nocapture noundef readonly %pSrc, ptr nocapture noundef writeonly %pDst, i32 noundef %blockSize) {413; CHECK-LABEL: arm_q15_to_q31_altorder:414; CHECK:       @ %bb.0: @ %entry415; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}416; CHECK-NEXT:    push {r4, r5, r6, r7, lr}417; CHECK-NEXT:    .pad #8418; CHECK-NEXT:    sub sp, #8419; CHECK-NEXT:    mov r7, r2420; CHECK-NEXT:    lsrs r3, r2, #2421; CHECK-NEXT:    beq .LBB1_6422; CHECK-NEXT:  @ %bb.1: @ %while.body.preheader423; CHECK-NEXT:    movs r5, #3424; CHECK-NEXT:    ands r5, r3425; CHECK-NEXT:    subs r2, r3, #1426; CHECK-NEXT:    cbz r5, .LBB1_4427; CHECK-NEXT:  @ %bb.2: @ %while.body.prol428; CHECK-NEXT:    str r2, [sp] @ 4-byte Spill429; CHECK-NEXT:    str r7, [sp, #4] @ 4-byte Spill430; CHECK-NEXT:    ldrh r2, [r0]431; CHECK-NEXT:    ldrh r7, [r0, #2]432; CHECK-NEXT:    ldrh r4, [r0, #4]433; CHECK-NEXT:    ldrh r6, [r0, #6]434; CHECK-NEXT:    lsls r6, r6, #16435; CHECK-NEXT:    lsls r4, r4, #16436; CHECK-NEXT:    lsls r7, r7, #16437; CHECK-NEXT:    lsls r2, r2, #16438; CHECK-NEXT:    stm r1!, {r2, r7}439; CHECK-NEXT:    str r4, [r1]440; CHECK-NEXT:    str r6, [r1, #4]441; CHECK-NEXT:    subs r1, #8442; CHECK-NEXT:    cmp r5, #1443; CHECK-NEXT:    bne .LBB1_11444; CHECK-NEXT:  @ %bb.3:445; CHECK-NEXT:    adds r1, #16446; CHECK-NEXT:    adds r0, #8447; CHECK-NEXT:    ldr r2, [sp] @ 4-byte Reload448; CHECK-NEXT:    mov r3, r2449; CHECK-NEXT:    ldr r7, [sp, #4] @ 4-byte Reload450; CHECK-NEXT:  .LBB1_4: @ %while.body.prol.loopexit451; CHECK-NEXT:    cmp r2, #3452; CHECK-NEXT:    blo .LBB1_6453; CHECK-NEXT:  .LBB1_5: @ %while.body454; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1455; CHECK-NEXT:    ldrh r2, [r0]456; CHECK-NEXT:    ldrh r4, [r0, #2]457; CHECK-NEXT:    ldrh r5, [r0, #4]458; CHECK-NEXT:    ldrh r6, [r0, #6]459; CHECK-NEXT:    lsls r6, r6, #16460; CHECK-NEXT:    str r6, [r1, #12]461; CHECK-NEXT:    lsls r5, r5, #16462; CHECK-NEXT:    str r5, [r1, #8]463; CHECK-NEXT:    lsls r4, r4, #16464; CHECK-NEXT:    str r4, [r1, #4]465; CHECK-NEXT:    lsls r2, r2, #16466; CHECK-NEXT:    str r2, [r1]467; CHECK-NEXT:    ldrh r2, [r0, #8]468; CHECK-NEXT:    ldrh r4, [r0, #10]469; CHECK-NEXT:    ldrh r5, [r0, #12]470; CHECK-NEXT:    ldrh r6, [r0, #14]471; CHECK-NEXT:    lsls r6, r6, #16472; CHECK-NEXT:    str r6, [r1, #28]473; CHECK-NEXT:    lsls r5, r5, #16474; CHECK-NEXT:    str r5, [r1, #24]475; CHECK-NEXT:    lsls r4, r4, #16476; CHECK-NEXT:    str r4, [r1, #20]477; CHECK-NEXT:    lsls r2, r2, #16478; CHECK-NEXT:    str r2, [r1, #16]479; CHECK-NEXT:    ldrh r2, [r0, #16]480; CHECK-NEXT:    ldrh r4, [r0, #18]481; CHECK-NEXT:    ldrh r5, [r0, #20]482; CHECK-NEXT:    ldrh r6, [r0, #22]483; CHECK-NEXT:    lsls r6, r6, #16484; CHECK-NEXT:    str r6, [r1, #44]485; CHECK-NEXT:    lsls r5, r5, #16486; CHECK-NEXT:    str r5, [r1, #40]487; CHECK-NEXT:    lsls r4, r4, #16488; CHECK-NEXT:    str r4, [r1, #36]489; CHECK-NEXT:    lsls r2, r2, #16490; CHECK-NEXT:    str r2, [r1, #32]491; CHECK-NEXT:    ldrh r2, [r0, #24]492; CHECK-NEXT:    ldrh r4, [r0, #26]493; CHECK-NEXT:    ldrh r5, [r0, #28]494; CHECK-NEXT:    ldrh r6, [r0, #30]495; CHECK-NEXT:    lsls r6, r6, #16496; CHECK-NEXT:    str r6, [r1, #60]497; CHECK-NEXT:    lsls r5, r5, #16498; CHECK-NEXT:    str r5, [r1, #56]499; CHECK-NEXT:    lsls r4, r4, #16500; CHECK-NEXT:    str r4, [r1, #52]501; CHECK-NEXT:    lsls r2, r2, #16502; CHECK-NEXT:    str r2, [r1, #48]503; CHECK-NEXT:    adds r1, #64504; CHECK-NEXT:    adds r0, #32505; CHECK-NEXT:    subs r3, r3, #4506; CHECK-NEXT:    bne .LBB1_5507; CHECK-NEXT:  .LBB1_6: @ %while.end508; CHECK-NEXT:    movs r2, #3509; CHECK-NEXT:    ands r7, r2510; CHECK-NEXT:    beq .LBB1_10511; CHECK-NEXT:  @ %bb.7: @ %while.body12512; CHECK-NEXT:    ldrh r2, [r0]513; CHECK-NEXT:    lsls r2, r2, #16514; CHECK-NEXT:    str r2, [r1]515; CHECK-NEXT:    cmp r7, #1516; CHECK-NEXT:    beq .LBB1_10517; CHECK-NEXT:  @ %bb.8: @ %while.body12.1518; CHECK-NEXT:    ldrh r2, [r0, #2]519; CHECK-NEXT:    lsls r2, r2, #16520; CHECK-NEXT:    str r2, [r1, #4]521; CHECK-NEXT:    cmp r7, #2522; CHECK-NEXT:    beq .LBB1_10523; CHECK-NEXT:  @ %bb.9: @ %while.body12.2524; CHECK-NEXT:    ldrh r0, [r0, #4]525; CHECK-NEXT:    lsls r0, r0, #16526; CHECK-NEXT:    str r0, [r1, #8]527; CHECK-NEXT:  .LBB1_10: @ %while.end17528; CHECK-NEXT:    add sp, #8529; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}530; CHECK-NEXT:  .LBB1_11: @ %while.body.prol.1531; CHECK-NEXT:    ldrh r2, [r0, #8]532; CHECK-NEXT:    ldrh r4, [r0, #10]533; CHECK-NEXT:    ldrh r6, [r0, #12]534; CHECK-NEXT:    ldrh r7, [r0, #14]535; CHECK-NEXT:    lsls r7, r7, #16536; CHECK-NEXT:    lsls r6, r6, #16537; CHECK-NEXT:    lsls r4, r4, #16538; CHECK-NEXT:    lsls r2, r2, #16539; CHECK-NEXT:    str r2, [r1, #16]540; CHECK-NEXT:    str r4, [r1, #20]541; CHECK-NEXT:    str r6, [r1, #24]542; CHECK-NEXT:    str r7, [r1, #28]543; CHECK-NEXT:    cmp r5, #2544; CHECK-NEXT:    bne .LBB1_13545; CHECK-NEXT:  @ %bb.12:546; CHECK-NEXT:    subs r3, r3, #2547; CHECK-NEXT:    adds r1, #32548; CHECK-NEXT:    adds r0, #16549; CHECK-NEXT:    b .LBB1_14550; CHECK-NEXT:  .LBB1_13: @ %while.body.prol.2551; CHECK-NEXT:    ldrh r2, [r0, #16]552; CHECK-NEXT:    ldrh r4, [r0, #18]553; CHECK-NEXT:    ldrh r5, [r0, #20]554; CHECK-NEXT:    ldrh r6, [r0, #22]555; CHECK-NEXT:    lsls r6, r6, #16556; CHECK-NEXT:    lsls r5, r5, #16557; CHECK-NEXT:    lsls r4, r4, #16558; CHECK-NEXT:    lsls r2, r2, #16559; CHECK-NEXT:    mov r7, r1560; CHECK-NEXT:    adds r7, #32561; CHECK-NEXT:    stm r7!, {r2, r4, r5, r6}562; CHECK-NEXT:    subs r3, r3, #3563; CHECK-NEXT:    adds r1, #48564; CHECK-NEXT:    adds r0, #24565; CHECK-NEXT:  .LBB1_14: @ %while.body.prol.loopexit566; CHECK-NEXT:    ldr r7, [sp, #4] @ 4-byte Reload567; CHECK-NEXT:    ldr r2, [sp] @ 4-byte Reload568; CHECK-NEXT:    cmp r2, #3569; CHECK-NEXT:    bhs .LBB1_5570; CHECK-NEXT:    b .LBB1_6571entry:572  %cmp.not18 = icmp ult i32 %blockSize, 4573  br i1 %cmp.not18, label %while.end, label %while.body.preheader574 575while.body.preheader:                             ; preds = %entry576  %shr = lshr i32 %blockSize, 2577  %0 = add nsw i32 %shr, -1578  %xtraiter = and i32 %shr, 3579  %lcmp.mod.not = icmp eq i32 %xtraiter, 0580  br i1 %lcmp.mod.not, label %while.body.prol.loopexit, label %while.body.prol581 582while.body.prol:                                  ; preds = %while.body.preheader583  %arrayidx.i.prol = getelementptr inbounds i16, ptr %pSrc, i32 1584  %1 = load i16, ptr %arrayidx.i.prol, align 2585  %conv.i.prol = sext i16 %1 to i32586  %shl.i.prol = shl nsw i32 %conv.i.prol, 16587  %2 = load i16, ptr %pSrc, align 2588  %conv22.i.prol = zext i16 %2 to i32589  %add.ptr2.prol = getelementptr inbounds i16, ptr %pSrc, i32 4590  %add.ptr3.prol = getelementptr inbounds i16, ptr %pSrc, i32 2591  %arrayidx.i13.prol = getelementptr inbounds i16, ptr %pSrc, i32 3592  %3 = load i16, ptr %arrayidx.i13.prol, align 2593  %conv.i14.prol = sext i16 %3 to i32594  %shl.i15.prol = shl nsw i32 %conv.i14.prol, 16595  %4 = load i16, ptr %add.ptr3.prol, align 2596  %conv22.i16.prol = zext i16 %4 to i32597  %shl.prol = shl nuw i32 %conv22.i.prol, 16598  %shl5.prol = shl nuw i32 %conv22.i16.prol, 16599  %incdec.ptr.prol = getelementptr inbounds i32, ptr %pDst, i32 1600  store i32 %shl.prol, ptr %pDst, align 4601  %incdec.ptr7.prol = getelementptr inbounds i32, ptr %pDst, i32 2602  store i32 %shl.i.prol, ptr %incdec.ptr.prol, align 4603  %incdec.ptr8.prol = getelementptr inbounds i32, ptr %pDst, i32 3604  store i32 %shl5.prol, ptr %incdec.ptr7.prol, align 4605  %incdec.ptr9.prol = getelementptr inbounds i32, ptr %pDst, i32 4606  store i32 %shl.i15.prol, ptr %incdec.ptr8.prol, align 4607  %dec.prol = add nsw i32 %shr, -1608  %prol.iter.cmp.not = icmp eq i32 %xtraiter, 1609  br i1 %prol.iter.cmp.not, label %while.body.prol.loopexit, label %while.body.prol.1610 611while.body.prol.1:                                ; preds = %while.body.prol612  %arrayidx.i.prol.1 = getelementptr inbounds i16, ptr %pSrc, i32 5613  %5 = load i16, ptr %arrayidx.i.prol.1, align 2614  %conv.i.prol.1 = sext i16 %5 to i32615  %shl.i.prol.1 = shl nsw i32 %conv.i.prol.1, 16616  %6 = load i16, ptr %add.ptr2.prol, align 2617  %conv22.i.prol.1 = zext i16 %6 to i32618  %add.ptr2.prol.1 = getelementptr inbounds i16, ptr %pSrc, i32 8619  %add.ptr3.prol.1 = getelementptr inbounds i16, ptr %pSrc, i32 6620  %arrayidx.i13.prol.1 = getelementptr inbounds i16, ptr %pSrc, i32 7621  %7 = load i16, ptr %arrayidx.i13.prol.1, align 2622  %conv.i14.prol.1 = sext i16 %7 to i32623  %shl.i15.prol.1 = shl nsw i32 %conv.i14.prol.1, 16624  %8 = load i16, ptr %add.ptr3.prol.1, align 2625  %conv22.i16.prol.1 = zext i16 %8 to i32626  %shl.prol.1 = shl nuw i32 %conv22.i.prol.1, 16627  %shl5.prol.1 = shl nuw i32 %conv22.i16.prol.1, 16628  %incdec.ptr.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 5629  store i32 %shl.prol.1, ptr %incdec.ptr9.prol, align 4630  %incdec.ptr7.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 6631  store i32 %shl.i.prol.1, ptr %incdec.ptr.prol.1, align 4632  %incdec.ptr8.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 7633  store i32 %shl5.prol.1, ptr %incdec.ptr7.prol.1, align 4634  %incdec.ptr9.prol.1 = getelementptr inbounds i32, ptr %pDst, i32 8635  store i32 %shl.i15.prol.1, ptr %incdec.ptr8.prol.1, align 4636  %dec.prol.1 = add nsw i32 %shr, -2637  %prol.iter.cmp.1.not = icmp eq i32 %xtraiter, 2638  br i1 %prol.iter.cmp.1.not, label %while.body.prol.loopexit, label %while.body.prol.2639 640while.body.prol.2:                                ; preds = %while.body.prol.1641  %arrayidx.i.prol.2 = getelementptr inbounds i16, ptr %pSrc, i32 9642  %9 = load i16, ptr %arrayidx.i.prol.2, align 2643  %conv.i.prol.2 = sext i16 %9 to i32644  %shl.i.prol.2 = shl nsw i32 %conv.i.prol.2, 16645  %10 = load i16, ptr %add.ptr2.prol.1, align 2646  %conv22.i.prol.2 = zext i16 %10 to i32647  %add.ptr2.prol.2 = getelementptr inbounds i16, ptr %pSrc, i32 12648  %add.ptr3.prol.2 = getelementptr inbounds i16, ptr %pSrc, i32 10649  %arrayidx.i13.prol.2 = getelementptr inbounds i16, ptr %pSrc, i32 11650  %11 = load i16, ptr %arrayidx.i13.prol.2, align 2651  %conv.i14.prol.2 = sext i16 %11 to i32652  %shl.i15.prol.2 = shl nsw i32 %conv.i14.prol.2, 16653  %12 = load i16, ptr %add.ptr3.prol.2, align 2654  %conv22.i16.prol.2 = zext i16 %12 to i32655  %shl.prol.2 = shl nuw i32 %conv22.i.prol.2, 16656  %shl5.prol.2 = shl nuw i32 %conv22.i16.prol.2, 16657  %incdec.ptr.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 9658  store i32 %shl.prol.2, ptr %incdec.ptr9.prol.1, align 4659  %incdec.ptr7.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 10660  store i32 %shl.i.prol.2, ptr %incdec.ptr.prol.2, align 4661  %incdec.ptr8.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 11662  store i32 %shl5.prol.2, ptr %incdec.ptr7.prol.2, align 4663  %incdec.ptr9.prol.2 = getelementptr inbounds i32, ptr %pDst, i32 12664  store i32 %shl.i15.prol.2, ptr %incdec.ptr8.prol.2, align 4665  %dec.prol.2 = add nsw i32 %shr, -3666  br label %while.body.prol.loopexit667 668while.body.prol.loopexit:                         ; preds = %while.body.prol, %while.body.prol.1, %while.body.prol.2, %while.body.preheader669  %add.ptr2.lcssa.unr = phi ptr [ undef, %while.body.preheader ], [ %add.ptr2.prol, %while.body.prol ], [ %add.ptr2.prol.1, %while.body.prol.1 ], [ %add.ptr2.prol.2, %while.body.prol.2 ]670  %incdec.ptr9.lcssa.unr = phi ptr [ undef, %while.body.preheader ], [ %incdec.ptr9.prol, %while.body.prol ], [ %incdec.ptr9.prol.1, %while.body.prol.1 ], [ %incdec.ptr9.prol.2, %while.body.prol.2 ]671  %pDst.addr.021.unr = phi ptr [ %pDst, %while.body.preheader ], [ %incdec.ptr9.prol, %while.body.prol ], [ %incdec.ptr9.prol.1, %while.body.prol.1 ], [ %incdec.ptr9.prol.2, %while.body.prol.2 ]672  %blkCnt.020.unr = phi i32 [ %shr, %while.body.preheader ], [ %dec.prol, %while.body.prol ], [ %dec.prol.1, %while.body.prol.1 ], [ %dec.prol.2, %while.body.prol.2 ]673  %pIn.019.unr = phi ptr [ %pSrc, %while.body.preheader ], [ %add.ptr2.prol, %while.body.prol ], [ %add.ptr2.prol.1, %while.body.prol.1 ], [ %add.ptr2.prol.2, %while.body.prol.2 ]674  %13 = icmp ult i32 %0, 3675  br i1 %13, label %while.end, label %while.body676 677while.body:                                       ; preds = %while.body.prol.loopexit, %while.body678  %pDst.addr.021 = phi ptr [ %incdec.ptr9.3, %while.body ], [ %pDst.addr.021.unr, %while.body.prol.loopexit ]679  %blkCnt.020 = phi i32 [ %dec.3, %while.body ], [ %blkCnt.020.unr, %while.body.prol.loopexit ]680  %pIn.019 = phi ptr [ %add.ptr2.3, %while.body ], [ %pIn.019.unr, %while.body.prol.loopexit ]681  %arrayidx.i = getelementptr inbounds i16, ptr %pIn.019, i32 1682  %14 = load i16, ptr %arrayidx.i, align 2683  %conv.i = sext i16 %14 to i32684  %shl.i = shl nsw i32 %conv.i, 16685  %15 = load i16, ptr %pIn.019, align 2686  %conv22.i = zext i16 %15 to i32687  %add.ptr2 = getelementptr inbounds i16, ptr %pIn.019, i32 4688  %add.ptr3 = getelementptr inbounds i16, ptr %pIn.019, i32 2689  %arrayidx.i13 = getelementptr inbounds i16, ptr %pIn.019, i32 3690  %16 = load i16, ptr %arrayidx.i13, align 2691  %conv.i14 = sext i16 %16 to i32692  %shl.i15 = shl nsw i32 %conv.i14, 16693  %17 = load i16, ptr %add.ptr3, align 2694  %conv22.i16 = zext i16 %17 to i32695  %shl = shl nuw i32 %conv22.i, 16696  %shl5 = shl nuw i32 %conv22.i16, 16697  %incdec.ptr = getelementptr inbounds i32, ptr %pDst.addr.021, i32 1698  store i32 %shl, ptr %pDst.addr.021, align 4699  %incdec.ptr7 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 2700  store i32 %shl.i, ptr %incdec.ptr, align 4701  %incdec.ptr8 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 3702  store i32 %shl5, ptr %incdec.ptr7, align 4703  %incdec.ptr9 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 4704  store i32 %shl.i15, ptr %incdec.ptr8, align 4705  %arrayidx.i.1 = getelementptr inbounds i16, ptr %pIn.019, i32 5706  %18 = load i16, ptr %arrayidx.i.1, align 2707  %conv.i.1 = sext i16 %18 to i32708  %shl.i.1 = shl nsw i32 %conv.i.1, 16709  %19 = load i16, ptr %add.ptr2, align 2710  %conv22.i.1 = zext i16 %19 to i32711  %add.ptr2.1 = getelementptr inbounds i16, ptr %pIn.019, i32 8712  %add.ptr3.1 = getelementptr inbounds i16, ptr %pIn.019, i32 6713  %arrayidx.i13.1 = getelementptr inbounds i16, ptr %pIn.019, i32 7714  %20 = load i16, ptr %arrayidx.i13.1, align 2715  %conv.i14.1 = sext i16 %20 to i32716  %shl.i15.1 = shl nsw i32 %conv.i14.1, 16717  %21 = load i16, ptr %add.ptr3.1, align 2718  %conv22.i16.1 = zext i16 %21 to i32719  %shl.1 = shl nuw i32 %conv22.i.1, 16720  %shl5.1 = shl nuw i32 %conv22.i16.1, 16721  %incdec.ptr.1 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 5722  store i32 %shl.1, ptr %incdec.ptr9, align 4723  %incdec.ptr7.1 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 6724  store i32 %shl.i.1, ptr %incdec.ptr.1, align 4725  %incdec.ptr8.1 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 7726  store i32 %shl5.1, ptr %incdec.ptr7.1, align 4727  %incdec.ptr9.1 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 8728  store i32 %shl.i15.1, ptr %incdec.ptr8.1, align 4729  %arrayidx.i.2 = getelementptr inbounds i16, ptr %pIn.019, i32 9730  %22 = load i16, ptr %arrayidx.i.2, align 2731  %conv.i.2 = sext i16 %22 to i32732  %shl.i.2 = shl nsw i32 %conv.i.2, 16733  %23 = load i16, ptr %add.ptr2.1, align 2734  %conv22.i.2 = zext i16 %23 to i32735  %add.ptr2.2 = getelementptr inbounds i16, ptr %pIn.019, i32 12736  %add.ptr3.2 = getelementptr inbounds i16, ptr %pIn.019, i32 10737  %arrayidx.i13.2 = getelementptr inbounds i16, ptr %pIn.019, i32 11738  %24 = load i16, ptr %arrayidx.i13.2, align 2739  %conv.i14.2 = sext i16 %24 to i32740  %shl.i15.2 = shl nsw i32 %conv.i14.2, 16741  %25 = load i16, ptr %add.ptr3.2, align 2742  %conv22.i16.2 = zext i16 %25 to i32743  %shl.2 = shl nuw i32 %conv22.i.2, 16744  %shl5.2 = shl nuw i32 %conv22.i16.2, 16745  %incdec.ptr.2 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 9746  store i32 %shl.2, ptr %incdec.ptr9.1, align 4747  %incdec.ptr7.2 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 10748  store i32 %shl.i.2, ptr %incdec.ptr.2, align 4749  %incdec.ptr8.2 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 11750  store i32 %shl5.2, ptr %incdec.ptr7.2, align 4751  %incdec.ptr9.2 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 12752  store i32 %shl.i15.2, ptr %incdec.ptr8.2, align 4753  %arrayidx.i.3 = getelementptr inbounds i16, ptr %pIn.019, i32 13754  %26 = load i16, ptr %arrayidx.i.3, align 2755  %conv.i.3 = sext i16 %26 to i32756  %shl.i.3 = shl nsw i32 %conv.i.3, 16757  %27 = load i16, ptr %add.ptr2.2, align 2758  %conv22.i.3 = zext i16 %27 to i32759  %add.ptr2.3 = getelementptr inbounds i16, ptr %pIn.019, i32 16760  %add.ptr3.3 = getelementptr inbounds i16, ptr %pIn.019, i32 14761  %arrayidx.i13.3 = getelementptr inbounds i16, ptr %pIn.019, i32 15762  %28 = load i16, ptr %arrayidx.i13.3, align 2763  %conv.i14.3 = sext i16 %28 to i32764  %shl.i15.3 = shl nsw i32 %conv.i14.3, 16765  %29 = load i16, ptr %add.ptr3.3, align 2766  %conv22.i16.3 = zext i16 %29 to i32767  %shl.3 = shl nuw i32 %conv22.i.3, 16768  %shl5.3 = shl nuw i32 %conv22.i16.3, 16769  %incdec.ptr.3 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 13770  store i32 %shl.3, ptr %incdec.ptr9.2, align 4771  %incdec.ptr7.3 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 14772  store i32 %shl.i.3, ptr %incdec.ptr.3, align 4773  %incdec.ptr8.3 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 15774  store i32 %shl5.3, ptr %incdec.ptr7.3, align 4775  %incdec.ptr9.3 = getelementptr inbounds i32, ptr %pDst.addr.021, i32 16776  store i32 %shl.i15.3, ptr %incdec.ptr8.3, align 4777  %dec.3 = add nsw i32 %blkCnt.020, -4778  %cmp.not.3 = icmp eq i32 %dec.3, 0779  br i1 %cmp.not.3, label %while.end, label %while.body780 781while.end:                                        ; preds = %while.body.prol.loopexit, %while.body, %entry782  %pIn.0.lcssa = phi ptr [ %pSrc, %entry ], [ %add.ptr2.lcssa.unr, %while.body.prol.loopexit ], [ %add.ptr2.3, %while.body ]783  %pDst.addr.0.lcssa = phi ptr [ %pDst, %entry ], [ %incdec.ptr9.lcssa.unr, %while.body.prol.loopexit ], [ %incdec.ptr9.3, %while.body ]784  %rem = and i32 %blockSize, 3785  %cmp11.not23 = icmp eq i32 %rem, 0786  br i1 %cmp11.not23, label %while.end17, label %while.body12787 788while.body12:                                     ; preds = %while.end789  %30 = load i16, ptr %pIn.0.lcssa, align 2790  %conv = sext i16 %30 to i32791  %shl14 = shl nsw i32 %conv, 16792  store i32 %shl14, ptr %pDst.addr.0.lcssa, align 4793  %cmp11.not = icmp eq i32 %rem, 1794  br i1 %cmp11.not, label %while.end17, label %while.body12.1795 796while.body12.1:                                   ; preds = %while.body12797  %incdec.ptr15 = getelementptr inbounds i32, ptr %pDst.addr.0.lcssa, i32 1798  %incdec.ptr13 = getelementptr inbounds i16, ptr %pIn.0.lcssa, i32 1799  %31 = load i16, ptr %incdec.ptr13, align 2800  %conv.1 = sext i16 %31 to i32801  %shl14.1 = shl nsw i32 %conv.1, 16802  store i32 %shl14.1, ptr %incdec.ptr15, align 4803  %cmp11.not.1 = icmp eq i32 %rem, 2804  br i1 %cmp11.not.1, label %while.end17, label %while.body12.2805 806while.body12.2:                                   ; preds = %while.body12.1807  %incdec.ptr15.1 = getelementptr inbounds i32, ptr %pDst.addr.0.lcssa, i32 2808  %incdec.ptr13.1 = getelementptr inbounds i16, ptr %pIn.0.lcssa, i32 2809  %32 = load i16, ptr %incdec.ptr13.1, align 2810  %conv.2 = sext i16 %32 to i32811  %shl14.2 = shl nsw i32 %conv.2, 16812  store i32 %shl14.2, ptr %incdec.ptr15.1, align 4813  br label %while.end17814 815while.end17:                                      ; preds = %while.body12, %while.body12.1, %while.body12.2, %while.end816  ret void817}818