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