brintos

brintos / llvm-project-archived public Read only

0
0
Text · 35.9 KiB · be57809 Raw
864 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes="default<O3>" -S -o - %s | FileCheck %s3 4target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"5target triple = "aarch64"6 7; for(int i =0; i < 1024; i+=4) {8;   x[i] += y[i];9;   x[i+1] += y[i+1];10;   x[i+2] += y[i+2];11;   x[i+3] += y[i+3];12; }13define void @add4(ptr noalias noundef %x, ptr noalias noundef %y, i32 noundef %n) {14; CHECK-LABEL: @add4(15; CHECK-NEXT:  entry:16; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]17; CHECK:       vector.body:18; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]19; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = shl i64 [[INDEX]], 220; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw i16, ptr [[Y:%.*]], i64 [[OFFSET_IDX]]21; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <32 x i16>, ptr [[TMP0]], align 222; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i16, ptr [[X:%.*]], i64 [[OFFSET_IDX]]23; CHECK-NEXT:    [[WIDE_VEC24:%.*]] = load <32 x i16>, ptr [[TMP1]], align 224; CHECK-NEXT:    [[INTERLEAVED_VEC:%.*]] = add <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]25; CHECK-NEXT:    store <32 x i16> [[INTERLEAVED_VEC]], ptr [[TMP1]], align 226; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 827; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 25628; CHECK-NEXT:    br i1 [[TMP3]], label [[FOR_END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]29; CHECK:       for.end:30; CHECK-NEXT:    ret void31;32entry:33  %x.addr = alloca ptr, align 834  %y.addr = alloca ptr, align 835  %n.addr = alloca i32, align 436  %i = alloca i32, align 437  store ptr %x, ptr %x.addr, align 838  store ptr %y, ptr %y.addr, align 839  store i32 %n, ptr %n.addr, align 440  store i32 0, ptr %i, align 441  br label %for.cond42 43for.cond:44  %0 = load i32, ptr %i, align 445  %cmp = icmp slt i32 %0, 102446  br i1 %cmp, label %for.body, label %for.end47 48for.body:49  %1 = load ptr, ptr %y.addr, align 850  %2 = load i32, ptr %i, align 451  %idxprom = sext i32 %2 to i6452  %arrayidx = getelementptr inbounds i16, ptr %1, i64 %idxprom53  %3 = load i16, ptr %arrayidx, align 254  %conv = sext i16 %3 to i3255  %4 = load ptr, ptr %x.addr, align 856  %5 = load i32, ptr %i, align 457  %idxprom1 = sext i32 %5 to i6458  %arrayidx2 = getelementptr inbounds i16, ptr %4, i64 %idxprom159  %6 = load i16, ptr %arrayidx2, align 260  %conv3 = sext i16 %6 to i3261  %add = add nsw i32 %conv3, %conv62  %conv4 = trunc i32 %add to i1663  store i16 %conv4, ptr %arrayidx2, align 264  %7 = load ptr, ptr %y.addr, align 865  %8 = load i32, ptr %i, align 466  %add5 = add nsw i32 %8, 167  %idxprom6 = sext i32 %add5 to i6468  %arrayidx7 = getelementptr inbounds i16, ptr %7, i64 %idxprom669  %9 = load i16, ptr %arrayidx7, align 270  %conv8 = sext i16 %9 to i3271  %10 = load ptr, ptr %x.addr, align 872  %11 = load i32, ptr %i, align 473  %add9 = add nsw i32 %11, 174  %idxprom10 = sext i32 %add9 to i6475  %arrayidx11 = getelementptr inbounds i16, ptr %10, i64 %idxprom1076  %12 = load i16, ptr %arrayidx11, align 277  %conv12 = sext i16 %12 to i3278  %add13 = add nsw i32 %conv12, %conv879  %conv14 = trunc i32 %add13 to i1680  store i16 %conv14, ptr %arrayidx11, align 281  %13 = load ptr, ptr %y.addr, align 882  %14 = load i32, ptr %i, align 483  %add15 = add nsw i32 %14, 284  %idxprom16 = sext i32 %add15 to i6485  %arrayidx17 = getelementptr inbounds i16, ptr %13, i64 %idxprom1686  %15 = load i16, ptr %arrayidx17, align 287  %conv18 = sext i16 %15 to i3288  %16 = load ptr, ptr %x.addr, align 889  %17 = load i32, ptr %i, align 490  %add19 = add nsw i32 %17, 291  %idxprom20 = sext i32 %add19 to i6492  %arrayidx21 = getelementptr inbounds i16, ptr %16, i64 %idxprom2093  %18 = load i16, ptr %arrayidx21, align 294  %conv22 = sext i16 %18 to i3295  %add23 = add nsw i32 %conv22, %conv1896  %conv24 = trunc i32 %add23 to i1697  store i16 %conv24, ptr %arrayidx21, align 298  %19 = load ptr, ptr %y.addr, align 899  %20 = load i32, ptr %i, align 4100  %add25 = add nsw i32 %20, 3101  %idxprom26 = sext i32 %add25 to i64102  %arrayidx27 = getelementptr inbounds i16, ptr %19, i64 %idxprom26103  %21 = load i16, ptr %arrayidx27, align 2104  %conv28 = sext i16 %21 to i32105  %22 = load ptr, ptr %x.addr, align 8106  %23 = load i32, ptr %i, align 4107  %add29 = add nsw i32 %23, 3108  %idxprom30 = sext i32 %add29 to i64109  %arrayidx31 = getelementptr inbounds i16, ptr %22, i64 %idxprom30110  %24 = load i16, ptr %arrayidx31, align 2111  %conv32 = sext i16 %24 to i32112  %add33 = add nsw i32 %conv32, %conv28113  %conv34 = trunc i32 %add33 to i16114  store i16 %conv34, ptr %arrayidx31, align 2115  br label %for.inc116 117for.inc:118  %25 = load i32, ptr %i, align 4119  %add35 = add nsw i32 %25, 4120  store i32 %add35, ptr %i, align 4121  br label %for.cond122 123for.end:124  ret void125}126 127; for(int i =0; i < 1024; i+=4) {128;   x[i] += y[i];129;   x[i+1] -= y[i+1];130;   x[i+2] += y[i+2];131;   x[i+3] -= y[i+3];132; }133define void @addsubs(ptr noalias noundef %x, ptr noundef %y, i32 noundef %n) {134; CHECK-LABEL: @addsubs(135; CHECK-NEXT:  entry:136; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]137; CHECK:       vector.body:138; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]139; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = shl i64 [[INDEX]], 2140; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw i16, ptr [[Y:%.*]], i64 [[OFFSET_IDX]]141; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <32 x i16>, ptr [[TMP0]], align 2142; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i16, ptr [[X:%.*]], i64 [[OFFSET_IDX]]143; CHECK-NEXT:    [[WIDE_VEC24:%.*]] = load <32 x i16>, ptr [[TMP1]], align 2144; CHECK-NEXT:    [[TMP2:%.*]] = add <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]145; CHECK-NEXT:    [[TMP3:%.*]] = sub <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]146; CHECK-NEXT:    [[TMP4:%.*]] = add <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]147; CHECK-NEXT:    [[TMP6:%.*]] = sub <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]148; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <32 x i16> [[TMP2]], <32 x i16> [[TMP3]], <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28, i32 33, i32 37, i32 41, i32 45, i32 49, i32 53, i32 57, i32 61>149; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <32 x i16> [[TMP4]], <32 x i16> [[TMP6]], <16 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30, i32 35, i32 39, i32 43, i32 47, i32 51, i32 55, i32 59, i32 63>150; CHECK-NEXT:    [[INTERLEAVED_VEC:%.*]] = shufflevector <16 x i16> [[TMP7]], <16 x i16> [[TMP8]], <32 x i32> <i32 0, i32 8, i32 16, i32 24, i32 1, i32 9, i32 17, i32 25, i32 2, i32 10, i32 18, i32 26, i32 3, i32 11, i32 19, i32 27, i32 4, i32 12, i32 20, i32 28, i32 5, i32 13, i32 21, i32 29, i32 6, i32 14, i32 22, i32 30, i32 7, i32 15, i32 23, i32 31>151; CHECK-NEXT:    store <32 x i16> [[INTERLEAVED_VEC]], ptr [[TMP1]], align 2152; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8153; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], 256154; CHECK-NEXT:    br i1 [[TMP9]], label [[FOR_END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]155; CHECK:       for.end:156; CHECK-NEXT:    ret void157;158entry:159  %x.addr = alloca ptr, align 8160  %y.addr = alloca ptr, align 8161  %n.addr = alloca i32, align 4162  %i = alloca i32, align 4163  store ptr %x, ptr %x.addr, align 8164  store ptr %y, ptr %y.addr, align 8165  store i32 %n, ptr %n.addr, align 4166  store i32 0, ptr %i, align 4167  br label %for.cond168 169for.cond:170  %0 = load i32, ptr %i, align 4171  %cmp = icmp slt i32 %0, 1024172  br i1 %cmp, label %for.body, label %for.end173 174for.body:175  %1 = load ptr, ptr %y.addr, align 8176  %2 = load i32, ptr %i, align 4177  %idxprom = sext i32 %2 to i64178  %arrayidx = getelementptr inbounds i16, ptr %1, i64 %idxprom179  %3 = load i16, ptr %arrayidx, align 2180  %conv = sext i16 %3 to i32181  %4 = load ptr, ptr %x.addr, align 8182  %5 = load i32, ptr %i, align 4183  %idxprom1 = sext i32 %5 to i64184  %arrayidx2 = getelementptr inbounds i16, ptr %4, i64 %idxprom1185  %6 = load i16, ptr %arrayidx2, align 2186  %conv3 = sext i16 %6 to i32187  %add = add nsw i32 %conv3, %conv188  %conv4 = trunc i32 %add to i16189  store i16 %conv4, ptr %arrayidx2, align 2190  %7 = load ptr, ptr %y.addr, align 8191  %8 = load i32, ptr %i, align 4192  %add5 = add nsw i32 %8, 1193  %idxprom6 = sext i32 %add5 to i64194  %arrayidx7 = getelementptr inbounds i16, ptr %7, i64 %idxprom6195  %9 = load i16, ptr %arrayidx7, align 2196  %conv8 = sext i16 %9 to i32197  %10 = load ptr, ptr %x.addr, align 8198  %11 = load i32, ptr %i, align 4199  %add9 = add nsw i32 %11, 1200  %idxprom10 = sext i32 %add9 to i64201  %arrayidx11 = getelementptr inbounds i16, ptr %10, i64 %idxprom10202  %12 = load i16, ptr %arrayidx11, align 2203  %conv12 = sext i16 %12 to i32204  %sub = sub nsw i32 %conv12, %conv8205  %conv13 = trunc i32 %sub to i16206  store i16 %conv13, ptr %arrayidx11, align 2207  %13 = load ptr, ptr %y.addr, align 8208  %14 = load i32, ptr %i, align 4209  %add14 = add nsw i32 %14, 2210  %idxprom15 = sext i32 %add14 to i64211  %arrayidx16 = getelementptr inbounds i16, ptr %13, i64 %idxprom15212  %15 = load i16, ptr %arrayidx16, align 2213  %conv17 = sext i16 %15 to i32214  %16 = load ptr, ptr %x.addr, align 8215  %17 = load i32, ptr %i, align 4216  %add18 = add nsw i32 %17, 2217  %idxprom19 = sext i32 %add18 to i64218  %arrayidx20 = getelementptr inbounds i16, ptr %16, i64 %idxprom19219  %18 = load i16, ptr %arrayidx20, align 2220  %conv21 = sext i16 %18 to i32221  %add22 = add nsw i32 %conv21, %conv17222  %conv23 = trunc i32 %add22 to i16223  store i16 %conv23, ptr %arrayidx20, align 2224  %19 = load ptr, ptr %y.addr, align 8225  %20 = load i32, ptr %i, align 4226  %add24 = add nsw i32 %20, 3227  %idxprom25 = sext i32 %add24 to i64228  %arrayidx26 = getelementptr inbounds i16, ptr %19, i64 %idxprom25229  %21 = load i16, ptr %arrayidx26, align 2230  %conv27 = sext i16 %21 to i32231  %22 = load ptr, ptr %x.addr, align 8232  %23 = load i32, ptr %i, align 4233  %add28 = add nsw i32 %23, 3234  %idxprom29 = sext i32 %add28 to i64235  %arrayidx30 = getelementptr inbounds i16, ptr %22, i64 %idxprom29236  %24 = load i16, ptr %arrayidx30, align 2237  %conv31 = sext i16 %24 to i32238  %sub32 = sub nsw i32 %conv31, %conv27239  %conv33 = trunc i32 %sub32 to i16240  store i16 %conv33, ptr %arrayidx30, align 2241  br label %for.inc242 243for.inc:244  %25 = load i32, ptr %i, align 4245  %add34 = add nsw i32 %25, 4246  store i32 %add34, ptr %i, align 4247  br label %for.cond248 249for.end:250  ret void251}252 253; for(int i =0; i < 1024; i+=4) {254;   x[i] += y[i];255;   x[i+1] += y[i+1];256;   x[i+2] -= y[i+2];257;   x[i+3] -= y[i+3];258; }259define void @add2sub2(ptr noalias noundef %x, ptr noundef %y, i32 noundef %n) {260; CHECK-LABEL: @add2sub2(261; CHECK-NEXT:  entry:262; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]263; CHECK:       vector.body:264; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]265; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = shl i64 [[INDEX]], 2266; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw i16, ptr [[Y:%.*]], i64 [[OFFSET_IDX]]267; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <32 x i16>, ptr [[TMP0]], align 2268; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i16, ptr [[X:%.*]], i64 [[OFFSET_IDX]]269; CHECK-NEXT:    [[WIDE_VEC24:%.*]] = load <32 x i16>, ptr [[TMP1]], align 2270; CHECK-NEXT:    [[TMP2:%.*]] = add <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]271; CHECK-NEXT:    [[TMP3:%.*]] = add <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]272; CHECK-NEXT:    [[TMP4:%.*]] = sub <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]273; CHECK-NEXT:    [[TMP6:%.*]] = sub <32 x i16> [[WIDE_VEC24]], [[WIDE_VEC]]274; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <32 x i16> [[TMP2]], <32 x i16> [[TMP3]], <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28, i32 33, i32 37, i32 41, i32 45, i32 49, i32 53, i32 57, i32 61>275; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <32 x i16> [[TMP4]], <32 x i16> [[TMP6]], <16 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30, i32 35, i32 39, i32 43, i32 47, i32 51, i32 55, i32 59, i32 63>276; CHECK-NEXT:    [[INTERLEAVED_VEC:%.*]] = shufflevector <16 x i16> [[TMP7]], <16 x i16> [[TMP8]], <32 x i32> <i32 0, i32 8, i32 16, i32 24, i32 1, i32 9, i32 17, i32 25, i32 2, i32 10, i32 18, i32 26, i32 3, i32 11, i32 19, i32 27, i32 4, i32 12, i32 20, i32 28, i32 5, i32 13, i32 21, i32 29, i32 6, i32 14, i32 22, i32 30, i32 7, i32 15, i32 23, i32 31>277; CHECK-NEXT:    store <32 x i16> [[INTERLEAVED_VEC]], ptr [[TMP1]], align 2278; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8279; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], 256280; CHECK-NEXT:    br i1 [[TMP9]], label [[FOR_END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]281; CHECK:       for.end:282; CHECK-NEXT:    ret void283;284entry:285  %x.addr = alloca ptr, align 8286  %y.addr = alloca ptr, align 8287  %n.addr = alloca i32, align 4288  %i = alloca i32, align 4289  store ptr %x, ptr %x.addr, align 8290  store ptr %y, ptr %y.addr, align 8291  store i32 %n, ptr %n.addr, align 4292  store i32 0, ptr %i, align 4293  br label %for.cond294 295for.cond:296  %0 = load i32, ptr %i, align 4297  %cmp = icmp slt i32 %0, 1024298  br i1 %cmp, label %for.body, label %for.end299 300for.body:301  %1 = load ptr, ptr %y.addr, align 8302  %2 = load i32, ptr %i, align 4303  %idxprom = sext i32 %2 to i64304  %arrayidx = getelementptr inbounds i16, ptr %1, i64 %idxprom305  %3 = load i16, ptr %arrayidx, align 2306  %conv = sext i16 %3 to i32307  %4 = load ptr, ptr %x.addr, align 8308  %5 = load i32, ptr %i, align 4309  %idxprom1 = sext i32 %5 to i64310  %arrayidx2 = getelementptr inbounds i16, ptr %4, i64 %idxprom1311  %6 = load i16, ptr %arrayidx2, align 2312  %conv3 = sext i16 %6 to i32313  %add = add nsw i32 %conv3, %conv314  %conv4 = trunc i32 %add to i16315  store i16 %conv4, ptr %arrayidx2, align 2316  %7 = load ptr, ptr %y.addr, align 8317  %8 = load i32, ptr %i, align 4318  %add5 = add nsw i32 %8, 1319  %idxprom6 = sext i32 %add5 to i64320  %arrayidx7 = getelementptr inbounds i16, ptr %7, i64 %idxprom6321  %9 = load i16, ptr %arrayidx7, align 2322  %conv8 = sext i16 %9 to i32323  %10 = load ptr, ptr %x.addr, align 8324  %11 = load i32, ptr %i, align 4325  %add9 = add nsw i32 %11, 1326  %idxprom10 = sext i32 %add9 to i64327  %arrayidx11 = getelementptr inbounds i16, ptr %10, i64 %idxprom10328  %12 = load i16, ptr %arrayidx11, align 2329  %conv12 = sext i16 %12 to i32330  %add13 = add nsw i32 %conv12, %conv8331  %conv14 = trunc i32 %add13 to i16332  store i16 %conv14, ptr %arrayidx11, align 2333  %13 = load ptr, ptr %y.addr, align 8334  %14 = load i32, ptr %i, align 4335  %add15 = add nsw i32 %14, 2336  %idxprom16 = sext i32 %add15 to i64337  %arrayidx17 = getelementptr inbounds i16, ptr %13, i64 %idxprom16338  %15 = load i16, ptr %arrayidx17, align 2339  %conv18 = sext i16 %15 to i32340  %16 = load ptr, ptr %x.addr, align 8341  %17 = load i32, ptr %i, align 4342  %add19 = add nsw i32 %17, 2343  %idxprom20 = sext i32 %add19 to i64344  %arrayidx21 = getelementptr inbounds i16, ptr %16, i64 %idxprom20345  %18 = load i16, ptr %arrayidx21, align 2346  %conv22 = sext i16 %18 to i32347  %sub = sub nsw i32 %conv22, %conv18348  %conv23 = trunc i32 %sub to i16349  store i16 %conv23, ptr %arrayidx21, align 2350  %19 = load ptr, ptr %y.addr, align 8351  %20 = load i32, ptr %i, align 4352  %add24 = add nsw i32 %20, 3353  %idxprom25 = sext i32 %add24 to i64354  %arrayidx26 = getelementptr inbounds i16, ptr %19, i64 %idxprom25355  %21 = load i16, ptr %arrayidx26, align 2356  %conv27 = sext i16 %21 to i32357  %22 = load ptr, ptr %x.addr, align 8358  %23 = load i32, ptr %i, align 4359  %add28 = add nsw i32 %23, 3360  %idxprom29 = sext i32 %add28 to i64361  %arrayidx30 = getelementptr inbounds i16, ptr %22, i64 %idxprom29362  %24 = load i16, ptr %arrayidx30, align 2363  %conv31 = sext i16 %24 to i32364  %sub32 = sub nsw i32 %conv31, %conv27365  %conv33 = trunc i32 %sub32 to i16366  store i16 %conv33, ptr %arrayidx30, align 2367  br label %for.inc368 369for.inc:370  %25 = load i32, ptr %i, align 4371  %add34 = add nsw i32 %25, 4372  store i32 %add34, ptr %i, align 4373  br label %for.cond374 375for.end:376  ret void377}378 379; for(int i =0; i < 1024; i+=4) {380;   x[i] += y[i] * z[i];381;   x[i+1] += y[i+1] * z[i+1];382;   x[i+2] += y[i+2] * z[i+2];383;   x[i+3] += y[i+3] * z[i+3];384; }385define void @addmul(ptr noalias noundef %x, ptr noundef %y, ptr noundef %z, i32 noundef %n) {386; CHECK-LABEL: @addmul(387; CHECK-NEXT:  entry:388; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]389; CHECK:       vector.body:390; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]391; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = shl i64 [[INDEX]], 2392; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw i16, ptr [[Y:%.*]], i64 [[OFFSET_IDX]]393; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <32 x i16>, ptr [[TMP0]], align 2394; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i16, ptr [[Z:%.*]], i64 [[OFFSET_IDX]]395; CHECK-NEXT:    [[WIDE_VEC31:%.*]] = load <32 x i16>, ptr [[TMP1]], align 2396; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw i16, ptr [[X:%.*]], i64 [[OFFSET_IDX]]397; CHECK-NEXT:    [[WIDE_VEC36:%.*]] = load <32 x i16>, ptr [[TMP2]], align 2398; CHECK-NEXT:    [[TMP4:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]399; CHECK-NEXT:    [[INTERLEAVED_VEC:%.*]] = add <32 x i16> [[TMP4]], [[WIDE_VEC36]]400; CHECK-NEXT:    store <32 x i16> [[INTERLEAVED_VEC]], ptr [[TMP2]], align 2401; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8402; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT]], 256403; CHECK-NEXT:    br i1 [[TMP5]], label [[FOR_END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]404; CHECK:       for.end:405; CHECK-NEXT:    ret void406;407entry:408  %x.addr = alloca ptr, align 8409  %y.addr = alloca ptr, align 8410  %z.addr = alloca ptr, align 8411  %n.addr = alloca i32, align 4412  %i = alloca i32, align 4413  store ptr %x, ptr %x.addr, align 8414  store ptr %y, ptr %y.addr, align 8415  store ptr %z, ptr %z.addr, align 8416  store i32 %n, ptr %n.addr, align 4417  store i32 0, ptr %i, align 4418  br label %for.cond419 420for.cond:421  %0 = load i32, ptr %i, align 4422  %cmp = icmp slt i32 %0, 1024423  br i1 %cmp, label %for.body, label %for.end424 425for.body:426  %1 = load ptr, ptr %y.addr, align 8427  %2 = load i32, ptr %i, align 4428  %idxprom = sext i32 %2 to i64429  %arrayidx = getelementptr inbounds i16, ptr %1, i64 %idxprom430  %3 = load i16, ptr %arrayidx, align 2431  %conv = sext i16 %3 to i32432  %4 = load ptr, ptr %z.addr, align 8433  %5 = load i32, ptr %i, align 4434  %idxprom1 = sext i32 %5 to i64435  %arrayidx2 = getelementptr inbounds i16, ptr %4, i64 %idxprom1436  %6 = load i16, ptr %arrayidx2, align 2437  %conv3 = sext i16 %6 to i32438  %mul = mul nsw i32 %conv, %conv3439  %7 = load ptr, ptr %x.addr, align 8440  %8 = load i32, ptr %i, align 4441  %idxprom4 = sext i32 %8 to i64442  %arrayidx5 = getelementptr inbounds i16, ptr %7, i64 %idxprom4443  %9 = load i16, ptr %arrayidx5, align 2444  %conv6 = sext i16 %9 to i32445  %add = add nsw i32 %conv6, %mul446  %conv7 = trunc i32 %add to i16447  store i16 %conv7, ptr %arrayidx5, align 2448  %10 = load ptr, ptr %y.addr, align 8449  %11 = load i32, ptr %i, align 4450  %add8 = add nsw i32 %11, 1451  %idxprom9 = sext i32 %add8 to i64452  %arrayidx10 = getelementptr inbounds i16, ptr %10, i64 %idxprom9453  %12 = load i16, ptr %arrayidx10, align 2454  %conv11 = sext i16 %12 to i32455  %13 = load ptr, ptr %z.addr, align 8456  %14 = load i32, ptr %i, align 4457  %add12 = add nsw i32 %14, 1458  %idxprom13 = sext i32 %add12 to i64459  %arrayidx14 = getelementptr inbounds i16, ptr %13, i64 %idxprom13460  %15 = load i16, ptr %arrayidx14, align 2461  %conv15 = sext i16 %15 to i32462  %mul16 = mul nsw i32 %conv11, %conv15463  %16 = load ptr, ptr %x.addr, align 8464  %17 = load i32, ptr %i, align 4465  %add17 = add nsw i32 %17, 1466  %idxprom18 = sext i32 %add17 to i64467  %arrayidx19 = getelementptr inbounds i16, ptr %16, i64 %idxprom18468  %18 = load i16, ptr %arrayidx19, align 2469  %conv20 = sext i16 %18 to i32470  %add21 = add nsw i32 %conv20, %mul16471  %conv22 = trunc i32 %add21 to i16472  store i16 %conv22, ptr %arrayidx19, align 2473  %19 = load ptr, ptr %y.addr, align 8474  %20 = load i32, ptr %i, align 4475  %add23 = add nsw i32 %20, 2476  %idxprom24 = sext i32 %add23 to i64477  %arrayidx25 = getelementptr inbounds i16, ptr %19, i64 %idxprom24478  %21 = load i16, ptr %arrayidx25, align 2479  %conv26 = sext i16 %21 to i32480  %22 = load ptr, ptr %z.addr, align 8481  %23 = load i32, ptr %i, align 4482  %add27 = add nsw i32 %23, 2483  %idxprom28 = sext i32 %add27 to i64484  %arrayidx29 = getelementptr inbounds i16, ptr %22, i64 %idxprom28485  %24 = load i16, ptr %arrayidx29, align 2486  %conv30 = sext i16 %24 to i32487  %mul31 = mul nsw i32 %conv26, %conv30488  %25 = load ptr, ptr %x.addr, align 8489  %26 = load i32, ptr %i, align 4490  %add32 = add nsw i32 %26, 2491  %idxprom33 = sext i32 %add32 to i64492  %arrayidx34 = getelementptr inbounds i16, ptr %25, i64 %idxprom33493  %27 = load i16, ptr %arrayidx34, align 2494  %conv35 = sext i16 %27 to i32495  %add36 = add nsw i32 %conv35, %mul31496  %conv37 = trunc i32 %add36 to i16497  store i16 %conv37, ptr %arrayidx34, align 2498  %28 = load ptr, ptr %y.addr, align 8499  %29 = load i32, ptr %i, align 4500  %add38 = add nsw i32 %29, 3501  %idxprom39 = sext i32 %add38 to i64502  %arrayidx40 = getelementptr inbounds i16, ptr %28, i64 %idxprom39503  %30 = load i16, ptr %arrayidx40, align 2504  %conv41 = sext i16 %30 to i32505  %31 = load ptr, ptr %z.addr, align 8506  %32 = load i32, ptr %i, align 4507  %add42 = add nsw i32 %32, 3508  %idxprom43 = sext i32 %add42 to i64509  %arrayidx44 = getelementptr inbounds i16, ptr %31, i64 %idxprom43510  %33 = load i16, ptr %arrayidx44, align 2511  %conv45 = sext i16 %33 to i32512  %mul46 = mul nsw i32 %conv41, %conv45513  %34 = load ptr, ptr %x.addr, align 8514  %35 = load i32, ptr %i, align 4515  %add47 = add nsw i32 %35, 3516  %idxprom48 = sext i32 %add47 to i64517  %arrayidx49 = getelementptr inbounds i16, ptr %34, i64 %idxprom48518  %36 = load i16, ptr %arrayidx49, align 2519  %conv50 = sext i16 %36 to i32520  %add51 = add nsw i32 %conv50, %mul46521  %conv52 = trunc i32 %add51 to i16522  store i16 %conv52, ptr %arrayidx49, align 2523  br label %for.inc524 525for.inc:526  %37 = load i32, ptr %i, align 4527  %add53 = add nsw i32 %37, 4528  store i32 %add53, ptr %i, align 4529  br label %for.cond530 531for.end:532  ret void533}534 535; for(int i =0; i < 1024; i+=4) {536;   x[i] += y[i] * z[i];537;   x[i+1] -= y[i+1] * z[i+1];538;   x[i+2] += y[i+2] * z[i+2];539;   x[i+3] -= y[i+3] * z[i+3];540; }541define void @addsubsmul(ptr noalias noundef %x, ptr noundef %y, ptr noundef %z, i32 noundef %n) {542; CHECK-LABEL: @addsubsmul(543; CHECK-NEXT:  entry:544; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]545; CHECK:       vector.body:546; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]547; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = shl i64 [[INDEX]], 2548; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw i16, ptr [[Y:%.*]], i64 [[OFFSET_IDX]]549; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <32 x i16>, ptr [[TMP0]], align 2550; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i16, ptr [[Z:%.*]], i64 [[OFFSET_IDX]]551; CHECK-NEXT:    [[WIDE_VEC31:%.*]] = load <32 x i16>, ptr [[TMP1]], align 2552; CHECK-NEXT:    [[TMP2:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]553; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw i16, ptr [[X:%.*]], i64 [[OFFSET_IDX]]554; CHECK-NEXT:    [[WIDE_VEC36:%.*]] = load <32 x i16>, ptr [[TMP3]], align 2555; CHECK-NEXT:    [[TMP4:%.*]] = add <32 x i16> [[TMP2]], [[WIDE_VEC36]]556; CHECK-NEXT:    [[TMP5:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]557; CHECK-NEXT:    [[TMP6:%.*]] = sub <32 x i16> [[WIDE_VEC36]], [[TMP5]]558; CHECK-NEXT:    [[TMP7:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]559; CHECK-NEXT:    [[TMP8:%.*]] = add <32 x i16> [[TMP7]], [[WIDE_VEC36]]560; CHECK-NEXT:    [[TMP10:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]561; CHECK-NEXT:    [[TMP11:%.*]] = sub <32 x i16> [[WIDE_VEC36]], [[TMP10]]562; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <32 x i16> [[TMP4]], <32 x i16> [[TMP6]], <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28, i32 33, i32 37, i32 41, i32 45, i32 49, i32 53, i32 57, i32 61>563; CHECK-NEXT:    [[TMP13:%.*]] = shufflevector <32 x i16> [[TMP8]], <32 x i16> [[TMP11]], <16 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30, i32 35, i32 39, i32 43, i32 47, i32 51, i32 55, i32 59, i32 63>564; CHECK-NEXT:    [[INTERLEAVED_VEC:%.*]] = shufflevector <16 x i16> [[TMP12]], <16 x i16> [[TMP13]], <32 x i32> <i32 0, i32 8, i32 16, i32 24, i32 1, i32 9, i32 17, i32 25, i32 2, i32 10, i32 18, i32 26, i32 3, i32 11, i32 19, i32 27, i32 4, i32 12, i32 20, i32 28, i32 5, i32 13, i32 21, i32 29, i32 6, i32 14, i32 22, i32 30, i32 7, i32 15, i32 23, i32 31>565; CHECK-NEXT:    store <32 x i16> [[INTERLEAVED_VEC]], ptr [[TMP3]], align 2566; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8567; CHECK-NEXT:    [[TMP14:%.*]] = icmp eq i64 [[INDEX_NEXT]], 256568; CHECK-NEXT:    br i1 [[TMP14]], label [[FOR_END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]569; CHECK:       for.end:570; CHECK-NEXT:    ret void571;572entry:573  %x.addr = alloca ptr, align 8574  %y.addr = alloca ptr, align 8575  %z.addr = alloca ptr, align 8576  %n.addr = alloca i32, align 4577  %i = alloca i32, align 4578  store ptr %x, ptr %x.addr, align 8579  store ptr %y, ptr %y.addr, align 8580  store ptr %z, ptr %z.addr, align 8581  store i32 %n, ptr %n.addr, align 4582  store i32 0, ptr %i, align 4583  br label %for.cond584 585for.cond:586  %0 = load i32, ptr %i, align 4587  %cmp = icmp slt i32 %0, 1024588  br i1 %cmp, label %for.body, label %for.end589 590for.body:591  %1 = load ptr, ptr %y.addr, align 8592  %2 = load i32, ptr %i, align 4593  %idxprom = sext i32 %2 to i64594  %arrayidx = getelementptr inbounds i16, ptr %1, i64 %idxprom595  %3 = load i16, ptr %arrayidx, align 2596  %conv = sext i16 %3 to i32597  %4 = load ptr, ptr %z.addr, align 8598  %5 = load i32, ptr %i, align 4599  %idxprom1 = sext i32 %5 to i64600  %arrayidx2 = getelementptr inbounds i16, ptr %4, i64 %idxprom1601  %6 = load i16, ptr %arrayidx2, align 2602  %conv3 = sext i16 %6 to i32603  %mul = mul nsw i32 %conv, %conv3604  %7 = load ptr, ptr %x.addr, align 8605  %8 = load i32, ptr %i, align 4606  %idxprom4 = sext i32 %8 to i64607  %arrayidx5 = getelementptr inbounds i16, ptr %7, i64 %idxprom4608  %9 = load i16, ptr %arrayidx5, align 2609  %conv6 = sext i16 %9 to i32610  %add = add nsw i32 %conv6, %mul611  %conv7 = trunc i32 %add to i16612  store i16 %conv7, ptr %arrayidx5, align 2613  %10 = load ptr, ptr %y.addr, align 8614  %11 = load i32, ptr %i, align 4615  %add8 = add nsw i32 %11, 1616  %idxprom9 = sext i32 %add8 to i64617  %arrayidx10 = getelementptr inbounds i16, ptr %10, i64 %idxprom9618  %12 = load i16, ptr %arrayidx10, align 2619  %conv11 = sext i16 %12 to i32620  %13 = load ptr, ptr %z.addr, align 8621  %14 = load i32, ptr %i, align 4622  %add12 = add nsw i32 %14, 1623  %idxprom13 = sext i32 %add12 to i64624  %arrayidx14 = getelementptr inbounds i16, ptr %13, i64 %idxprom13625  %15 = load i16, ptr %arrayidx14, align 2626  %conv15 = sext i16 %15 to i32627  %mul16 = mul nsw i32 %conv11, %conv15628  %16 = load ptr, ptr %x.addr, align 8629  %17 = load i32, ptr %i, align 4630  %add17 = add nsw i32 %17, 1631  %idxprom18 = sext i32 %add17 to i64632  %arrayidx19 = getelementptr inbounds i16, ptr %16, i64 %idxprom18633  %18 = load i16, ptr %arrayidx19, align 2634  %conv20 = sext i16 %18 to i32635  %sub = sub nsw i32 %conv20, %mul16636  %conv21 = trunc i32 %sub to i16637  store i16 %conv21, ptr %arrayidx19, align 2638  %19 = load ptr, ptr %y.addr, align 8639  %20 = load i32, ptr %i, align 4640  %add22 = add nsw i32 %20, 2641  %idxprom23 = sext i32 %add22 to i64642  %arrayidx24 = getelementptr inbounds i16, ptr %19, i64 %idxprom23643  %21 = load i16, ptr %arrayidx24, align 2644  %conv25 = sext i16 %21 to i32645  %22 = load ptr, ptr %z.addr, align 8646  %23 = load i32, ptr %i, align 4647  %add26 = add nsw i32 %23, 2648  %idxprom27 = sext i32 %add26 to i64649  %arrayidx28 = getelementptr inbounds i16, ptr %22, i64 %idxprom27650  %24 = load i16, ptr %arrayidx28, align 2651  %conv29 = sext i16 %24 to i32652  %mul30 = mul nsw i32 %conv25, %conv29653  %25 = load ptr, ptr %x.addr, align 8654  %26 = load i32, ptr %i, align 4655  %add31 = add nsw i32 %26, 2656  %idxprom32 = sext i32 %add31 to i64657  %arrayidx33 = getelementptr inbounds i16, ptr %25, i64 %idxprom32658  %27 = load i16, ptr %arrayidx33, align 2659  %conv34 = sext i16 %27 to i32660  %add35 = add nsw i32 %conv34, %mul30661  %conv36 = trunc i32 %add35 to i16662  store i16 %conv36, ptr %arrayidx33, align 2663  %28 = load ptr, ptr %y.addr, align 8664  %29 = load i32, ptr %i, align 4665  %add37 = add nsw i32 %29, 3666  %idxprom38 = sext i32 %add37 to i64667  %arrayidx39 = getelementptr inbounds i16, ptr %28, i64 %idxprom38668  %30 = load i16, ptr %arrayidx39, align 2669  %conv40 = sext i16 %30 to i32670  %31 = load ptr, ptr %z.addr, align 8671  %32 = load i32, ptr %i, align 4672  %add41 = add nsw i32 %32, 3673  %idxprom42 = sext i32 %add41 to i64674  %arrayidx43 = getelementptr inbounds i16, ptr %31, i64 %idxprom42675  %33 = load i16, ptr %arrayidx43, align 2676  %conv44 = sext i16 %33 to i32677  %mul45 = mul nsw i32 %conv40, %conv44678  %34 = load ptr, ptr %x.addr, align 8679  %35 = load i32, ptr %i, align 4680  %add46 = add nsw i32 %35, 3681  %idxprom47 = sext i32 %add46 to i64682  %arrayidx48 = getelementptr inbounds i16, ptr %34, i64 %idxprom47683  %36 = load i16, ptr %arrayidx48, align 2684  %conv49 = sext i16 %36 to i32685  %sub50 = sub nsw i32 %conv49, %mul45686  %conv51 = trunc i32 %sub50 to i16687  store i16 %conv51, ptr %arrayidx48, align 2688  br label %for.inc689 690for.inc:691  %37 = load i32, ptr %i, align 4692  %add52 = add nsw i32 %37, 4693  store i32 %add52, ptr %i, align 4694  br label %for.cond695 696for.end:697  ret void698}699 700; for(int i =0; i < 1024; i+=4) {701;   x[i] += y[i] * z[i];702;   x[i+1] += y[i+1] * z[i+1];703;   x[i+2] -= y[i+2] * z[i+2];704;   x[i+3] -= y[i+3] * z[i+3];705; }706define void @add2sub2mul(ptr noalias noundef %x, ptr noundef %y, ptr noundef %z, i32 noundef %n) {707; CHECK-LABEL: @add2sub2mul(708; CHECK-NEXT:  entry:709; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]710; CHECK:       vector.body:711; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]712; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = shl i64 [[INDEX]], 2713; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw i16, ptr [[Y:%.*]], i64 [[OFFSET_IDX]]714; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <32 x i16>, ptr [[TMP0]], align 2715; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw i16, ptr [[Z:%.*]], i64 [[OFFSET_IDX]]716; CHECK-NEXT:    [[WIDE_VEC31:%.*]] = load <32 x i16>, ptr [[TMP1]], align 2717; CHECK-NEXT:    [[TMP2:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]718; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw i16, ptr [[X:%.*]], i64 [[OFFSET_IDX]]719; CHECK-NEXT:    [[WIDE_VEC36:%.*]] = load <32 x i16>, ptr [[TMP3]], align 2720; CHECK-NEXT:    [[TMP4:%.*]] = add <32 x i16> [[TMP2]], [[WIDE_VEC36]]721; CHECK-NEXT:    [[TMP5:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]722; CHECK-NEXT:    [[TMP6:%.*]] = add <32 x i16> [[TMP5]], [[WIDE_VEC36]]723; CHECK-NEXT:    [[TMP7:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]724; CHECK-NEXT:    [[TMP8:%.*]] = sub <32 x i16> [[WIDE_VEC36]], [[TMP7]]725; CHECK-NEXT:    [[TMP10:%.*]] = mul <32 x i16> [[WIDE_VEC31]], [[WIDE_VEC]]726; CHECK-NEXT:    [[TMP11:%.*]] = sub <32 x i16> [[WIDE_VEC36]], [[TMP10]]727; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <32 x i16> [[TMP4]], <32 x i16> [[TMP6]], <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28, i32 33, i32 37, i32 41, i32 45, i32 49, i32 53, i32 57, i32 61>728; CHECK-NEXT:    [[TMP13:%.*]] = shufflevector <32 x i16> [[TMP8]], <32 x i16> [[TMP11]], <16 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30, i32 35, i32 39, i32 43, i32 47, i32 51, i32 55, i32 59, i32 63>729; CHECK-NEXT:    [[INTERLEAVED_VEC:%.*]] = shufflevector <16 x i16> [[TMP12]], <16 x i16> [[TMP13]], <32 x i32> <i32 0, i32 8, i32 16, i32 24, i32 1, i32 9, i32 17, i32 25, i32 2, i32 10, i32 18, i32 26, i32 3, i32 11, i32 19, i32 27, i32 4, i32 12, i32 20, i32 28, i32 5, i32 13, i32 21, i32 29, i32 6, i32 14, i32 22, i32 30, i32 7, i32 15, i32 23, i32 31>730; CHECK-NEXT:    store <32 x i16> [[INTERLEAVED_VEC]], ptr [[TMP3]], align 2731; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8732; CHECK-NEXT:    [[TMP14:%.*]] = icmp eq i64 [[INDEX_NEXT]], 256733; CHECK-NEXT:    br i1 [[TMP14]], label [[FOR_END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]734; CHECK:       for.end:735; CHECK-NEXT:    ret void736;737entry:738  %x.addr = alloca ptr, align 8739  %y.addr = alloca ptr, align 8740  %z.addr = alloca ptr, align 8741  %n.addr = alloca i32, align 4742  %i = alloca i32, align 4743  store ptr %x, ptr %x.addr, align 8744  store ptr %y, ptr %y.addr, align 8745  store ptr %z, ptr %z.addr, align 8746  store i32 %n, ptr %n.addr, align 4747  store i32 0, ptr %i, align 4748  br label %for.cond749 750for.cond:751  %0 = load i32, ptr %i, align 4752  %cmp = icmp slt i32 %0, 1024753  br i1 %cmp, label %for.body, label %for.end754 755for.body:756  %1 = load ptr, ptr %y.addr, align 8757  %2 = load i32, ptr %i, align 4758  %idxprom = sext i32 %2 to i64759  %arrayidx = getelementptr inbounds i16, ptr %1, i64 %idxprom760  %3 = load i16, ptr %arrayidx, align 2761  %conv = sext i16 %3 to i32762  %4 = load ptr, ptr %z.addr, align 8763  %5 = load i32, ptr %i, align 4764  %idxprom1 = sext i32 %5 to i64765  %arrayidx2 = getelementptr inbounds i16, ptr %4, i64 %idxprom1766  %6 = load i16, ptr %arrayidx2, align 2767  %conv3 = sext i16 %6 to i32768  %mul = mul nsw i32 %conv, %conv3769  %7 = load ptr, ptr %x.addr, align 8770  %8 = load i32, ptr %i, align 4771  %idxprom4 = sext i32 %8 to i64772  %arrayidx5 = getelementptr inbounds i16, ptr %7, i64 %idxprom4773  %9 = load i16, ptr %arrayidx5, align 2774  %conv6 = sext i16 %9 to i32775  %add = add nsw i32 %conv6, %mul776  %conv7 = trunc i32 %add to i16777  store i16 %conv7, ptr %arrayidx5, align 2778  %10 = load ptr, ptr %y.addr, align 8779  %11 = load i32, ptr %i, align 4780  %add8 = add nsw i32 %11, 1781  %idxprom9 = sext i32 %add8 to i64782  %arrayidx10 = getelementptr inbounds i16, ptr %10, i64 %idxprom9783  %12 = load i16, ptr %arrayidx10, align 2784  %conv11 = sext i16 %12 to i32785  %13 = load ptr, ptr %z.addr, align 8786  %14 = load i32, ptr %i, align 4787  %add12 = add nsw i32 %14, 1788  %idxprom13 = sext i32 %add12 to i64789  %arrayidx14 = getelementptr inbounds i16, ptr %13, i64 %idxprom13790  %15 = load i16, ptr %arrayidx14, align 2791  %conv15 = sext i16 %15 to i32792  %mul16 = mul nsw i32 %conv11, %conv15793  %16 = load ptr, ptr %x.addr, align 8794  %17 = load i32, ptr %i, align 4795  %add17 = add nsw i32 %17, 1796  %idxprom18 = sext i32 %add17 to i64797  %arrayidx19 = getelementptr inbounds i16, ptr %16, i64 %idxprom18798  %18 = load i16, ptr %arrayidx19, align 2799  %conv20 = sext i16 %18 to i32800  %add21 = add nsw i32 %conv20, %mul16801  %conv22 = trunc i32 %add21 to i16802  store i16 %conv22, ptr %arrayidx19, align 2803  %19 = load ptr, ptr %y.addr, align 8804  %20 = load i32, ptr %i, align 4805  %add23 = add nsw i32 %20, 2806  %idxprom24 = sext i32 %add23 to i64807  %arrayidx25 = getelementptr inbounds i16, ptr %19, i64 %idxprom24808  %21 = load i16, ptr %arrayidx25, align 2809  %conv26 = sext i16 %21 to i32810  %22 = load ptr, ptr %z.addr, align 8811  %23 = load i32, ptr %i, align 4812  %add27 = add nsw i32 %23, 2813  %idxprom28 = sext i32 %add27 to i64814  %arrayidx29 = getelementptr inbounds i16, ptr %22, i64 %idxprom28815  %24 = load i16, ptr %arrayidx29, align 2816  %conv30 = sext i16 %24 to i32817  %mul31 = mul nsw i32 %conv26, %conv30818  %25 = load ptr, ptr %x.addr, align 8819  %26 = load i32, ptr %i, align 4820  %add32 = add nsw i32 %26, 2821  %idxprom33 = sext i32 %add32 to i64822  %arrayidx34 = getelementptr inbounds i16, ptr %25, i64 %idxprom33823  %27 = load i16, ptr %arrayidx34, align 2824  %conv35 = sext i16 %27 to i32825  %sub = sub nsw i32 %conv35, %mul31826  %conv36 = trunc i32 %sub to i16827  store i16 %conv36, ptr %arrayidx34, align 2828  %28 = load ptr, ptr %y.addr, align 8829  %29 = load i32, ptr %i, align 4830  %add37 = add nsw i32 %29, 3831  %idxprom38 = sext i32 %add37 to i64832  %arrayidx39 = getelementptr inbounds i16, ptr %28, i64 %idxprom38833  %30 = load i16, ptr %arrayidx39, align 2834  %conv40 = sext i16 %30 to i32835  %31 = load ptr, ptr %z.addr, align 8836  %32 = load i32, ptr %i, align 4837  %add41 = add nsw i32 %32, 3838  %idxprom42 = sext i32 %add41 to i64839  %arrayidx43 = getelementptr inbounds i16, ptr %31, i64 %idxprom42840  %33 = load i16, ptr %arrayidx43, align 2841  %conv44 = sext i16 %33 to i32842  %mul45 = mul nsw i32 %conv40, %conv44843  %34 = load ptr, ptr %x.addr, align 8844  %35 = load i32, ptr %i, align 4845  %add46 = add nsw i32 %35, 3846  %idxprom47 = sext i32 %add46 to i64847  %arrayidx48 = getelementptr inbounds i16, ptr %34, i64 %idxprom47848  %36 = load i16, ptr %arrayidx48, align 2849  %conv49 = sext i16 %36 to i32850  %sub50 = sub nsw i32 %conv49, %mul45851  %conv51 = trunc i32 %sub50 to i16852  store i16 %conv51, ptr %arrayidx48, align 2853  br label %for.inc854 855for.inc:856  %37 = load i32, ptr %i, align 4857  %add52 = add nsw i32 %37, 4858  store i32 %add52, ptr %i, align 4859  br label %for.cond860 861for.end:862  ret void863}864