1920 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=slp-vectorizer -mtriple=aarch64--linux-gnu < %s | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5target triple = "aarch64"6 7define i16 @reduce_allstrided(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, i32 noundef %stride) {8; CHECK-LABEL: @reduce_allstrided(9; CHECK-NEXT: entry:10; CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr [[X:%.*]], align 211; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i6412; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]]13; CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 214; CHECK-NEXT: [[MUL2:%.*]] = shl nsw i32 [[STRIDE]], 115; CHECK-NEXT: [[IDXPROM3:%.*]] = sext i32 [[MUL2]] to i6416; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM3]]17; CHECK-NEXT: [[TMP2:%.*]] = load i16, ptr [[ARRAYIDX4]], align 218; CHECK-NEXT: [[MUL5:%.*]] = mul nsw i32 [[STRIDE]], 319; CHECK-NEXT: [[IDXPROM6:%.*]] = sext i32 [[MUL5]] to i6420; CHECK-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM6]]21; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX7]], align 222; CHECK-NEXT: [[MUL8:%.*]] = shl nsw i32 [[STRIDE]], 223; CHECK-NEXT: [[IDXPROM9:%.*]] = sext i32 [[MUL8]] to i6424; CHECK-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM9]]25; CHECK-NEXT: [[TMP4:%.*]] = load i16, ptr [[ARRAYIDX10]], align 226; CHECK-NEXT: [[MUL11:%.*]] = mul nsw i32 [[STRIDE]], 527; CHECK-NEXT: [[IDXPROM12:%.*]] = sext i32 [[MUL11]] to i6428; CHECK-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM12]]29; CHECK-NEXT: [[TMP5:%.*]] = load i16, ptr [[ARRAYIDX13]], align 230; CHECK-NEXT: [[MUL14:%.*]] = mul nsw i32 [[STRIDE]], 631; CHECK-NEXT: [[IDXPROM15:%.*]] = sext i32 [[MUL14]] to i6432; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM15]]33; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[ARRAYIDX16]], align 234; CHECK-NEXT: [[MUL17:%.*]] = mul nsw i32 [[STRIDE]], 735; CHECK-NEXT: [[IDXPROM18:%.*]] = sext i32 [[MUL17]] to i6436; CHECK-NEXT: [[ARRAYIDX19:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM18]]37; CHECK-NEXT: [[TMP7:%.*]] = load i16, ptr [[ARRAYIDX19]], align 238; CHECK-NEXT: [[TMP8:%.*]] = load i16, ptr [[Y:%.*]], align 239; CHECK-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]]40; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[ARRAYIDX23]], align 241; CHECK-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM3]]42; CHECK-NEXT: [[TMP10:%.*]] = load i16, ptr [[ARRAYIDX26]], align 243; CHECK-NEXT: [[ARRAYIDX29:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM6]]44; CHECK-NEXT: [[TMP11:%.*]] = load i16, ptr [[ARRAYIDX29]], align 245; CHECK-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM9]]46; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[ARRAYIDX32]], align 247; CHECK-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM12]]48; CHECK-NEXT: [[TMP13:%.*]] = load i16, ptr [[ARRAYIDX35]], align 249; CHECK-NEXT: [[ARRAYIDX38:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM15]]50; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[ARRAYIDX38]], align 251; CHECK-NEXT: [[ARRAYIDX41:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM18]]52; CHECK-NEXT: [[TMP15:%.*]] = load i16, ptr [[ARRAYIDX41]], align 253; CHECK-NEXT: [[MUL43:%.*]] = mul i16 [[TMP8]], [[TMP0]]54; CHECK-NEXT: [[MUL48:%.*]] = mul i16 [[TMP9]], [[TMP1]]55; CHECK-NEXT: [[ADD49:%.*]] = add i16 [[MUL48]], [[MUL43]]56; CHECK-NEXT: [[MUL54:%.*]] = mul i16 [[TMP10]], [[TMP2]]57; CHECK-NEXT: [[ADD55:%.*]] = add i16 [[ADD49]], [[MUL54]]58; CHECK-NEXT: [[MUL60:%.*]] = mul i16 [[TMP11]], [[TMP3]]59; CHECK-NEXT: [[ADD61:%.*]] = add i16 [[ADD55]], [[MUL60]]60; CHECK-NEXT: [[MUL66:%.*]] = mul i16 [[TMP12]], [[TMP4]]61; CHECK-NEXT: [[ADD67:%.*]] = add i16 [[ADD61]], [[MUL66]]62; CHECK-NEXT: [[MUL72:%.*]] = mul i16 [[TMP13]], [[TMP5]]63; CHECK-NEXT: [[ADD73:%.*]] = add i16 [[ADD67]], [[MUL72]]64; CHECK-NEXT: [[MUL78:%.*]] = mul i16 [[TMP14]], [[TMP6]]65; CHECK-NEXT: [[ADD79:%.*]] = add i16 [[ADD73]], [[MUL78]]66; CHECK-NEXT: [[MUL84:%.*]] = mul i16 [[TMP15]], [[TMP7]]67; CHECK-NEXT: [[ADD85:%.*]] = add i16 [[ADD79]], [[MUL84]]68; CHECK-NEXT: ret i16 [[ADD85]]69;70entry:71 %0 = load i16, ptr %x, align 272 %idxprom = sext i32 %stride to i6473 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 %idxprom74 %1 = load i16, ptr %arrayidx1, align 275 %mul2 = shl nsw i32 %stride, 176 %idxprom3 = sext i32 %mul2 to i6477 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom378 %2 = load i16, ptr %arrayidx4, align 279 %mul5 = mul nsw i32 %stride, 380 %idxprom6 = sext i32 %mul5 to i6481 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom682 %3 = load i16, ptr %arrayidx7, align 283 %mul8 = shl nsw i32 %stride, 284 %idxprom9 = sext i32 %mul8 to i6485 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom986 %4 = load i16, ptr %arrayidx10, align 287 %mul11 = mul nsw i32 %stride, 588 %idxprom12 = sext i32 %mul11 to i6489 %arrayidx13 = getelementptr inbounds i16, ptr %x, i64 %idxprom1290 %5 = load i16, ptr %arrayidx13, align 291 %mul14 = mul nsw i32 %stride, 692 %idxprom15 = sext i32 %mul14 to i6493 %arrayidx16 = getelementptr inbounds i16, ptr %x, i64 %idxprom1594 %6 = load i16, ptr %arrayidx16, align 295 %mul17 = mul nsw i32 %stride, 796 %idxprom18 = sext i32 %mul17 to i6497 %arrayidx19 = getelementptr inbounds i16, ptr %x, i64 %idxprom1898 %7 = load i16, ptr %arrayidx19, align 299 %8 = load i16, ptr %y, align 2100 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom101 %9 = load i16, ptr %arrayidx23, align 2102 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom3103 %10 = load i16, ptr %arrayidx26, align 2104 %arrayidx29 = getelementptr inbounds i16, ptr %y, i64 %idxprom6105 %11 = load i16, ptr %arrayidx29, align 2106 %arrayidx32 = getelementptr inbounds i16, ptr %y, i64 %idxprom9107 %12 = load i16, ptr %arrayidx32, align 2108 %arrayidx35 = getelementptr inbounds i16, ptr %y, i64 %idxprom12109 %13 = load i16, ptr %arrayidx35, align 2110 %arrayidx38 = getelementptr inbounds i16, ptr %y, i64 %idxprom15111 %14 = load i16, ptr %arrayidx38, align 2112 %arrayidx41 = getelementptr inbounds i16, ptr %y, i64 %idxprom18113 %15 = load i16, ptr %arrayidx41, align 2114 %mul43 = mul i16 %8, %0115 %mul48 = mul i16 %9, %1116 %add49 = add i16 %mul48, %mul43117 %mul54 = mul i16 %10, %2118 %add55 = add i16 %add49, %mul54119 %mul60 = mul i16 %11, %3120 %add61 = add i16 %add55, %mul60121 %mul66 = mul i16 %12, %4122 %add67 = add i16 %add61, %mul66123 %mul72 = mul i16 %13, %5124 %add73 = add i16 %add67, %mul72125 %mul78 = mul i16 %14, %6126 %add79 = add i16 %add73, %mul78127 %mul84 = mul i16 %15, %7128 %add85 = add i16 %add79, %mul84129 ret i16 %add85130}131 132define i16 @reduce_blockstrided2(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, i32 noundef %stride) {133; CHECK-LABEL: @reduce_blockstrided2(134; CHECK-NEXT: entry:135; CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr [[X:%.*]], align 2136; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 1137; CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 2138; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64139; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]]140; CHECK-NEXT: [[TMP2:%.*]] = load i16, ptr [[ARRAYIDX2]], align 2141; CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[STRIDE]], 1142; CHECK-NEXT: [[IDXPROM4:%.*]] = sext i32 [[ADD3]] to i64143; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM4]]144; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX5]], align 2145; CHECK-NEXT: [[MUL:%.*]] = shl nsw i32 [[STRIDE]], 1146; CHECK-NEXT: [[IDXPROM7:%.*]] = sext i32 [[MUL]] to i64147; CHECK-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM7]]148; CHECK-NEXT: [[TMP4:%.*]] = load i16, ptr [[ARRAYIDX8]], align 2149; CHECK-NEXT: [[ADD10:%.*]] = or disjoint i32 [[MUL]], 1150; CHECK-NEXT: [[IDXPROM11:%.*]] = sext i32 [[ADD10]] to i64151; CHECK-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM11]]152; CHECK-NEXT: [[TMP5:%.*]] = load i16, ptr [[ARRAYIDX12]], align 2153; CHECK-NEXT: [[MUL13:%.*]] = mul nsw i32 [[STRIDE]], 3154; CHECK-NEXT: [[IDXPROM15:%.*]] = sext i32 [[MUL13]] to i64155; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM15]]156; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[ARRAYIDX16]], align 2157; CHECK-NEXT: [[ADD18:%.*]] = add nsw i32 [[MUL13]], 1158; CHECK-NEXT: [[IDXPROM19:%.*]] = sext i32 [[ADD18]] to i64159; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM19]]160; CHECK-NEXT: [[TMP7:%.*]] = load i16, ptr [[ARRAYIDX20]], align 2161; CHECK-NEXT: [[TMP8:%.*]] = load i16, ptr [[Y:%.*]], align 2162; CHECK-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]]163; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[ARRAYIDX24]], align 2164; CHECK-NEXT: [[ARRAYIDX28:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM7]]165; CHECK-NEXT: [[TMP10:%.*]] = load i16, ptr [[ARRAYIDX28]], align 2166; CHECK-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM15]]167; CHECK-NEXT: [[TMP11:%.*]] = load i16, ptr [[ARRAYIDX32]], align 2168; CHECK-NEXT: [[ARRAYIDX33:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 1169; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[ARRAYIDX33]], align 2170; CHECK-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM4]]171; CHECK-NEXT: [[TMP13:%.*]] = load i16, ptr [[ARRAYIDX36]], align 2172; CHECK-NEXT: [[ARRAYIDX40:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM11]]173; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[ARRAYIDX40]], align 2174; CHECK-NEXT: [[ARRAYIDX44:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM19]]175; CHECK-NEXT: [[TMP15:%.*]] = load i16, ptr [[ARRAYIDX44]], align 2176; CHECK-NEXT: [[MUL46:%.*]] = mul i16 [[TMP8]], [[TMP0]]177; CHECK-NEXT: [[MUL52:%.*]] = mul i16 [[TMP12]], [[TMP1]]178; CHECK-NEXT: [[MUL58:%.*]] = mul i16 [[TMP9]], [[TMP2]]179; CHECK-NEXT: [[MUL64:%.*]] = mul i16 [[TMP13]], [[TMP3]]180; CHECK-NEXT: [[MUL70:%.*]] = mul i16 [[TMP10]], [[TMP4]]181; CHECK-NEXT: [[MUL76:%.*]] = mul i16 [[TMP14]], [[TMP5]]182; CHECK-NEXT: [[MUL82:%.*]] = mul i16 [[TMP11]], [[TMP6]]183; CHECK-NEXT: [[MUL88:%.*]] = mul i16 [[TMP15]], [[TMP7]]184; CHECK-NEXT: [[ADD53:%.*]] = add i16 [[MUL58]], [[MUL46]]185; CHECK-NEXT: [[ADD59:%.*]] = add i16 [[ADD53]], [[MUL70]]186; CHECK-NEXT: [[ADD65:%.*]] = add i16 [[ADD59]], [[MUL82]]187; CHECK-NEXT: [[ADD71:%.*]] = add i16 [[ADD65]], [[MUL52]]188; CHECK-NEXT: [[ADD77:%.*]] = add i16 [[ADD71]], [[MUL64]]189; CHECK-NEXT: [[ADD83:%.*]] = add i16 [[ADD77]], [[MUL76]]190; CHECK-NEXT: [[ADD89:%.*]] = add i16 [[ADD83]], [[MUL88]]191; CHECK-NEXT: ret i16 [[ADD89]]192;193entry:194 %0 = load i16, ptr %x, align 2195 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1196 %1 = load i16, ptr %arrayidx1, align 2197 %idxprom = sext i32 %stride to i64198 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 %idxprom199 %2 = load i16, ptr %arrayidx2, align 2200 %add3 = add nsw i32 %stride, 1201 %idxprom4 = sext i32 %add3 to i64202 %arrayidx5 = getelementptr inbounds i16, ptr %x, i64 %idxprom4203 %3 = load i16, ptr %arrayidx5, align 2204 %mul = shl nsw i32 %stride, 1205 %idxprom7 = sext i32 %mul to i64206 %arrayidx8 = getelementptr inbounds i16, ptr %x, i64 %idxprom7207 %4 = load i16, ptr %arrayidx8, align 2208 %add10 = or disjoint i32 %mul, 1209 %idxprom11 = sext i32 %add10 to i64210 %arrayidx12 = getelementptr inbounds i16, ptr %x, i64 %idxprom11211 %5 = load i16, ptr %arrayidx12, align 2212 %mul13 = mul nsw i32 %stride, 3213 %idxprom15 = sext i32 %mul13 to i64214 %arrayidx16 = getelementptr inbounds i16, ptr %x, i64 %idxprom15215 %6 = load i16, ptr %arrayidx16, align 2216 %add18 = add nsw i32 %mul13, 1217 %idxprom19 = sext i32 %add18 to i64218 %arrayidx20 = getelementptr inbounds i16, ptr %x, i64 %idxprom19219 %7 = load i16, ptr %arrayidx20, align 2220 %8 = load i16, ptr %y, align 2221 %arrayidx24 = getelementptr inbounds i16, ptr %y, i64 %idxprom222 %9 = load i16, ptr %arrayidx24, align 2223 %arrayidx28 = getelementptr inbounds i16, ptr %y, i64 %idxprom7224 %10 = load i16, ptr %arrayidx28, align 2225 %arrayidx32 = getelementptr inbounds i16, ptr %y, i64 %idxprom15226 %11 = load i16, ptr %arrayidx32, align 2227 %arrayidx33 = getelementptr inbounds i16, ptr %y, i64 1228 %12 = load i16, ptr %arrayidx33, align 2229 %arrayidx36 = getelementptr inbounds i16, ptr %y, i64 %idxprom4230 %13 = load i16, ptr %arrayidx36, align 2231 %arrayidx40 = getelementptr inbounds i16, ptr %y, i64 %idxprom11232 %14 = load i16, ptr %arrayidx40, align 2233 %arrayidx44 = getelementptr inbounds i16, ptr %y, i64 %idxprom19234 %15 = load i16, ptr %arrayidx44, align 2235 %mul46 = mul i16 %8, %0236 %mul52 = mul i16 %12, %1237 %mul58 = mul i16 %9, %2238 %mul64 = mul i16 %13, %3239 %mul70 = mul i16 %10, %4240 %mul76 = mul i16 %14, %5241 %mul82 = mul i16 %11, %6242 %mul88 = mul i16 %15, %7243 %add53 = add i16 %mul58, %mul46244 %add59 = add i16 %add53, %mul70245 %add65 = add i16 %add59, %mul82246 %add71 = add i16 %add65, %mul52247 %add77 = add i16 %add71, %mul64248 %add83 = add i16 %add77, %mul76249 %add89 = add i16 %add83, %mul88250 ret i16 %add89251}252 253define i16 @reduce_blockstrided3(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, i32 noundef %stride) {254; CHECK-LABEL: @reduce_blockstrided3(255; CHECK-NEXT: entry:256; CHECK-NEXT: [[L0:%.*]] = load i16, ptr [[X:%.*]], align 2257; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 1258; CHECK-NEXT: [[L1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 2259; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 2260; CHECK-NEXT: [[L2:%.*]] = load i16, ptr [[ARRAYIDX2]], align 2261; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64262; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]]263; CHECK-NEXT: [[L4:%.*]] = load i16, ptr [[ARRAYIDX4]], align 2264; CHECK-NEXT: [[ADD5:%.*]] = add nsw i32 [[STRIDE]], 1265; CHECK-NEXT: [[IDXPROM6:%.*]] = sext i32 [[ADD5]] to i64266; CHECK-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM6]]267; CHECK-NEXT: [[L5:%.*]] = load i16, ptr [[ARRAYIDX7]], align 2268; CHECK-NEXT: [[ADD8:%.*]] = add nsw i32 [[STRIDE]], 2269; CHECK-NEXT: [[IDXPROM9:%.*]] = sext i32 [[ADD8]] to i64270; CHECK-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM9]]271; CHECK-NEXT: [[L6:%.*]] = load i16, ptr [[ARRAYIDX10]], align 2272; CHECK-NEXT: [[ADD11:%.*]] = add nsw i32 [[STRIDE]], 3273; CHECK-NEXT: [[IDXPROM12:%.*]] = sext i32 [[ADD11]] to i64274; CHECK-NEXT: [[L8:%.*]] = load i16, ptr [[Y:%.*]], align 2275; CHECK-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 1276; CHECK-NEXT: [[L9:%.*]] = load i16, ptr [[ARRAYIDX15]], align 2277; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 2278; CHECK-NEXT: [[L10:%.*]] = load i16, ptr [[ARRAYIDX16]], align 2279; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]]280; CHECK-NEXT: [[L12:%.*]] = load i16, ptr [[ARRAYIDX20]], align 2281; CHECK-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM6]]282; CHECK-NEXT: [[L13:%.*]] = load i16, ptr [[ARRAYIDX23]], align 2283; CHECK-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM9]]284; CHECK-NEXT: [[L14:%.*]] = load i16, ptr [[ARRAYIDX26]], align 2285; CHECK-NEXT: [[MUL:%.*]] = mul i16 [[L8]], [[L0]]286; CHECK-NEXT: [[MUL36:%.*]] = mul i16 [[L9]], [[L1]]287; CHECK-NEXT: [[ADD37:%.*]] = add i16 [[MUL36]], [[MUL]]288; CHECK-NEXT: [[MUL48:%.*]] = mul i16 [[L10]], [[L2]]289; CHECK-NEXT: [[ADD49:%.*]] = add i16 [[ADD37]], [[MUL48]]290; CHECK-NEXT: [[MUL54:%.*]] = mul i16 [[L13]], [[L5]]291; CHECK-NEXT: [[ADD55:%.*]] = add i16 [[ADD49]], [[MUL54]]292; CHECK-NEXT: [[MUL60:%.*]] = mul i16 [[L12]], [[L4]]293; CHECK-NEXT: [[ADD61:%.*]] = add i16 [[ADD55]], [[MUL60]]294; CHECK-NEXT: [[MUL72:%.*]] = mul i16 [[L14]], [[L6]]295; CHECK-NEXT: [[ADD73:%.*]] = add i16 [[ADD61]], [[MUL72]]296; CHECK-NEXT: ret i16 [[ADD73]]297;298entry:299 %l0 = load i16, ptr %x, align 2300 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1301 %l1 = load i16, ptr %arrayidx1, align 2302 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 2303 %l2 = load i16, ptr %arrayidx2, align 2304 %idxprom = sext i32 %stride to i64305 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom306 %l4 = load i16, ptr %arrayidx4, align 2307 %add5 = add nsw i32 %stride, 1308 %idxprom6 = sext i32 %add5 to i64309 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom6310 %l5 = load i16, ptr %arrayidx7, align 2311 %add8 = add nsw i32 %stride, 2312 %idxprom9 = sext i32 %add8 to i64313 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom9314 %l6 = load i16, ptr %arrayidx10, align 2315 %add11 = add nsw i32 %stride, 3316 %idxprom12 = sext i32 %add11 to i64317 %l8 = load i16, ptr %y, align 2318 %arrayidx15 = getelementptr inbounds i16, ptr %y, i64 1319 %l9 = load i16, ptr %arrayidx15, align 2320 %arrayidx16 = getelementptr inbounds i16, ptr %y, i64 2321 %l10 = load i16, ptr %arrayidx16, align 2322 %arrayidx20 = getelementptr inbounds i16, ptr %y, i64 %idxprom323 %l12 = load i16, ptr %arrayidx20, align 2324 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom6325 %l13 = load i16, ptr %arrayidx23, align 2326 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom9327 %l14 = load i16, ptr %arrayidx26, align 2328 %mul = mul i16 %l8, %l0329 %mul36 = mul i16 %l9, %l1330 %add37 = add i16 %mul36, %mul331 %mul48 = mul i16 %l10, %l2332 %add49 = add i16 %add37, %mul48333 %mul54 = mul i16 %l13, %l5334 %add55 = add i16 %add49, %mul54335 %mul60 = mul i16 %l12, %l4336 %add61 = add i16 %add55, %mul60337 %mul72 = mul i16 %l14, %l6338 %add73 = add i16 %add61, %mul72339 ret i16 %add73340}341 342define i16 @reduce_blockstrided4(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, i32 noundef %stride) {343; CHECK-LABEL: @reduce_blockstrided4(344; CHECK-NEXT: entry:345; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64346; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X:%.*]], i64 [[IDXPROM]]347; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y:%.*]], i64 [[IDXPROM]]348; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i16>, ptr [[X]], align 2349; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i16>, ptr [[ARRAYIDX4]], align 2350; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr [[Y]], align 2351; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr [[ARRAYIDX20]], align 2352; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x i16> [[TMP2]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>353; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x i16> [[TMP0]], <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>354; CHECK-NEXT: [[TMP6:%.*]] = mul <8 x i16> [[TMP4]], [[TMP5]]355; CHECK-NEXT: [[TMP7:%.*]] = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> [[TMP6]])356; CHECK-NEXT: ret i16 [[TMP7]]357;358entry:359 %0 = load i16, ptr %x, align 2360 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1361 %1 = load i16, ptr %arrayidx1, align 2362 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 2363 %2 = load i16, ptr %arrayidx2, align 2364 %arrayidx3 = getelementptr inbounds i16, ptr %x, i64 3365 %3 = load i16, ptr %arrayidx3, align 2366 %idxprom = sext i32 %stride to i64367 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom368 %4 = load i16, ptr %arrayidx4, align 2369 %add5 = add nsw i32 %stride, 1370 %idxprom6 = sext i32 %add5 to i64371 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom6372 %5 = load i16, ptr %arrayidx7, align 2373 %add8 = add nsw i32 %stride, 2374 %idxprom9 = sext i32 %add8 to i64375 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom9376 %6 = load i16, ptr %arrayidx10, align 2377 %add11 = add nsw i32 %stride, 3378 %idxprom12 = sext i32 %add11 to i64379 %arrayidx13 = getelementptr inbounds i16, ptr %x, i64 %idxprom12380 %7 = load i16, ptr %arrayidx13, align 2381 %8 = load i16, ptr %y, align 2382 %arrayidx15 = getelementptr inbounds i16, ptr %y, i64 1383 %9 = load i16, ptr %arrayidx15, align 2384 %arrayidx16 = getelementptr inbounds i16, ptr %y, i64 2385 %10 = load i16, ptr %arrayidx16, align 2386 %arrayidx17 = getelementptr inbounds i16, ptr %y, i64 3387 %11 = load i16, ptr %arrayidx17, align 2388 %arrayidx20 = getelementptr inbounds i16, ptr %y, i64 %idxprom389 %12 = load i16, ptr %arrayidx20, align 2390 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom6391 %13 = load i16, ptr %arrayidx23, align 2392 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom9393 %14 = load i16, ptr %arrayidx26, align 2394 %arrayidx29 = getelementptr inbounds i16, ptr %y, i64 %idxprom12395 %15 = load i16, ptr %arrayidx29, align 2396 %mul = mul i16 %8, %0397 %mul36 = mul i16 %9, %1398 %add37 = add i16 %mul36, %mul399 %mul42 = mul i16 %11, %3400 %add43 = add i16 %add37, %mul42401 %mul48 = mul i16 %10, %2402 %add49 = add i16 %add43, %mul48403 %mul54 = mul i16 %13, %5404 %add55 = add i16 %add49, %mul54405 %mul60 = mul i16 %12, %4406 %add61 = add i16 %add55, %mul60407 %mul66 = mul i16 %15, %7408 %add67 = add i16 %add61, %mul66409 %mul72 = mul i16 %14, %6410 %add73 = add i16 %add67, %mul72411 ret i16 %add73412}413 414define i32 @reduce_blockstrided4x4(ptr nocapture noundef readonly %p1, i32 noundef %off1, ptr nocapture noundef readonly %p2, i32 noundef %off2) {415; CHECK-LABEL: @reduce_blockstrided4x4(416; CHECK-NEXT: entry:417; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[OFF1:%.*]] to i64418; CHECK-NEXT: [[IDX_EXT63:%.*]] = sext i32 [[OFF2:%.*]] to i64419; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i8, ptr [[P1:%.*]], i64 4420; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i8, ptr [[P2:%.*]], i64 4421; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]]422; CHECK-NEXT: [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]]423; CHECK-NEXT: [[ARRAYIDX3_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 4424; CHECK-NEXT: [[ARRAYIDX5_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 4425; CHECK-NEXT: [[ADD_PTR_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 [[IDX_EXT]]426; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[ADD_PTR_1]], align 1427; CHECK-NEXT: [[CONV_2:%.*]] = zext i8 [[TMP0]] to i32428; CHECK-NEXT: [[ADD_PTR64_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 [[IDX_EXT63]]429; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[ADD_PTR64_1]], align 1430; CHECK-NEXT: [[CONV2_2:%.*]] = zext i8 [[TMP1]] to i32431; CHECK-NEXT: [[ARRAYIDX3_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 4432; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX3_2]], align 1433; CHECK-NEXT: [[CONV4_2:%.*]] = zext i8 [[TMP2]] to i32434; CHECK-NEXT: [[ARRAYIDX5_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 4435; CHECK-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX5_2]], align 1436; CHECK-NEXT: [[CONV6_2:%.*]] = zext i8 [[TMP3]] to i32437; CHECK-NEXT: [[ARRAYIDX8_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 1438; CHECK-NEXT: [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX8_2]], align 1439; CHECK-NEXT: [[CONV9_2:%.*]] = zext i8 [[TMP4]] to i32440; CHECK-NEXT: [[ARRAYIDX10_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 1441; CHECK-NEXT: [[TMP5:%.*]] = load i8, ptr [[ARRAYIDX10_2]], align 1442; CHECK-NEXT: [[CONV11_2:%.*]] = zext i8 [[TMP5]] to i32443; CHECK-NEXT: [[ARRAYIDX13_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 5444; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX13_2]], align 1445; CHECK-NEXT: [[CONV14_2:%.*]] = zext i8 [[TMP6]] to i32446; CHECK-NEXT: [[ARRAYIDX15_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 5447; CHECK-NEXT: [[TMP7:%.*]] = load i8, ptr [[ARRAYIDX15_2]], align 1448; CHECK-NEXT: [[CONV16_2:%.*]] = zext i8 [[TMP7]] to i32449; CHECK-NEXT: [[ARRAYIDX20_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 2450; CHECK-NEXT: [[TMP8:%.*]] = load i8, ptr [[ARRAYIDX20_2]], align 1451; CHECK-NEXT: [[CONV21_2:%.*]] = zext i8 [[TMP8]] to i32452; CHECK-NEXT: [[ARRAYIDX22_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 2453; CHECK-NEXT: [[TMP9:%.*]] = load i8, ptr [[ARRAYIDX22_2]], align 1454; CHECK-NEXT: [[CONV23_2:%.*]] = zext i8 [[TMP9]] to i32455; CHECK-NEXT: [[ARRAYIDX25_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 6456; CHECK-NEXT: [[TMP10:%.*]] = load i8, ptr [[ARRAYIDX25_2]], align 1457; CHECK-NEXT: [[CONV26_2:%.*]] = zext i8 [[TMP10]] to i32458; CHECK-NEXT: [[ARRAYIDX27_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 6459; CHECK-NEXT: [[TMP11:%.*]] = load i8, ptr [[ARRAYIDX27_2]], align 1460; CHECK-NEXT: [[CONV28_2:%.*]] = zext i8 [[TMP11]] to i32461; CHECK-NEXT: [[ARRAYIDX32_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 3462; CHECK-NEXT: [[TMP12:%.*]] = load i8, ptr [[ARRAYIDX32_2]], align 1463; CHECK-NEXT: [[CONV33_2:%.*]] = zext i8 [[TMP12]] to i32464; CHECK-NEXT: [[ARRAYIDX34_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 3465; CHECK-NEXT: [[TMP13:%.*]] = load i8, ptr [[ARRAYIDX34_2]], align 1466; CHECK-NEXT: [[CONV35_2:%.*]] = zext i8 [[TMP13]] to i32467; CHECK-NEXT: [[ARRAYIDX37_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 7468; CHECK-NEXT: [[TMP14:%.*]] = load i8, ptr [[ARRAYIDX37_2]], align 1469; CHECK-NEXT: [[CONV38_2:%.*]] = zext i8 [[TMP14]] to i32470; CHECK-NEXT: [[ARRAYIDX39_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 7471; CHECK-NEXT: [[TMP15:%.*]] = load i8, ptr [[ARRAYIDX39_2]], align 1472; CHECK-NEXT: [[CONV40_2:%.*]] = zext i8 [[TMP15]] to i32473; CHECK-NEXT: [[ADD_PTR_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 [[IDX_EXT]]474; CHECK-NEXT: [[TMP16:%.*]] = load i8, ptr [[ADD_PTR_2]], align 1475; CHECK-NEXT: [[CONV_3:%.*]] = zext i8 [[TMP16]] to i32476; CHECK-NEXT: [[ADD_PTR64_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 [[IDX_EXT63]]477; CHECK-NEXT: [[TMP17:%.*]] = load i8, ptr [[ADD_PTR64_2]], align 1478; CHECK-NEXT: [[CONV2_3:%.*]] = zext i8 [[TMP17]] to i32479; CHECK-NEXT: [[ARRAYIDX3_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 4480; CHECK-NEXT: [[TMP18:%.*]] = load i8, ptr [[ARRAYIDX3_3]], align 1481; CHECK-NEXT: [[CONV4_3:%.*]] = zext i8 [[TMP18]] to i32482; CHECK-NEXT: [[ARRAYIDX5_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 4483; CHECK-NEXT: [[TMP19:%.*]] = load i8, ptr [[ARRAYIDX5_3]], align 1484; CHECK-NEXT: [[CONV6_3:%.*]] = zext i8 [[TMP19]] to i32485; CHECK-NEXT: [[ARRAYIDX8_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 1486; CHECK-NEXT: [[TMP20:%.*]] = load i8, ptr [[ARRAYIDX8_3]], align 1487; CHECK-NEXT: [[CONV9_3:%.*]] = zext i8 [[TMP20]] to i32488; CHECK-NEXT: [[ARRAYIDX10_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 1489; CHECK-NEXT: [[TMP21:%.*]] = load i8, ptr [[ARRAYIDX10_3]], align 1490; CHECK-NEXT: [[CONV11_3:%.*]] = zext i8 [[TMP21]] to i32491; CHECK-NEXT: [[ARRAYIDX13_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 5492; CHECK-NEXT: [[TMP22:%.*]] = load i8, ptr [[ARRAYIDX13_3]], align 1493; CHECK-NEXT: [[CONV14_3:%.*]] = zext i8 [[TMP22]] to i32494; CHECK-NEXT: [[ARRAYIDX15_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 5495; CHECK-NEXT: [[TMP23:%.*]] = load i8, ptr [[ARRAYIDX15_3]], align 1496; CHECK-NEXT: [[CONV16_3:%.*]] = zext i8 [[TMP23]] to i32497; CHECK-NEXT: [[ARRAYIDX20_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 2498; CHECK-NEXT: [[TMP24:%.*]] = load i8, ptr [[ARRAYIDX20_3]], align 1499; CHECK-NEXT: [[CONV21_3:%.*]] = zext i8 [[TMP24]] to i32500; CHECK-NEXT: [[ARRAYIDX22_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 2501; CHECK-NEXT: [[TMP25:%.*]] = load i8, ptr [[ARRAYIDX22_3]], align 1502; CHECK-NEXT: [[CONV23_3:%.*]] = zext i8 [[TMP25]] to i32503; CHECK-NEXT: [[ARRAYIDX25_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 6504; CHECK-NEXT: [[TMP26:%.*]] = load i8, ptr [[ARRAYIDX25_3]], align 1505; CHECK-NEXT: [[CONV26_3:%.*]] = zext i8 [[TMP26]] to i32506; CHECK-NEXT: [[ARRAYIDX27_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 6507; CHECK-NEXT: [[TMP27:%.*]] = load i8, ptr [[ARRAYIDX27_3]], align 1508; CHECK-NEXT: [[CONV28_3:%.*]] = zext i8 [[TMP27]] to i32509; CHECK-NEXT: [[ARRAYIDX32_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 3510; CHECK-NEXT: [[TMP28:%.*]] = load i8, ptr [[ARRAYIDX32_3]], align 1511; CHECK-NEXT: [[CONV33_3:%.*]] = zext i8 [[TMP28]] to i32512; CHECK-NEXT: [[ARRAYIDX34_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 3513; CHECK-NEXT: [[TMP29:%.*]] = load i8, ptr [[ARRAYIDX34_3]], align 1514; CHECK-NEXT: [[CONV35_3:%.*]] = zext i8 [[TMP29]] to i32515; CHECK-NEXT: [[ARRAYIDX37_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 7516; CHECK-NEXT: [[TMP30:%.*]] = load i8, ptr [[ARRAYIDX37_3]], align 1517; CHECK-NEXT: [[CONV38_3:%.*]] = zext i8 [[TMP30]] to i32518; CHECK-NEXT: [[ARRAYIDX39_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 7519; CHECK-NEXT: [[TMP31:%.*]] = load i8, ptr [[ARRAYIDX39_3]], align 1520; CHECK-NEXT: [[CONV40_3:%.*]] = zext i8 [[TMP31]] to i32521; CHECK-NEXT: [[TMP32:%.*]] = load <4 x i8>, ptr [[P1]], align 1522; CHECK-NEXT: [[TMP33:%.*]] = load <4 x i8>, ptr [[P2]], align 1523; CHECK-NEXT: [[TMP34:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 1524; CHECK-NEXT: [[TMP35:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 1525; CHECK-NEXT: [[TMP36:%.*]] = load <4 x i8>, ptr [[ADD_PTR]], align 1526; CHECK-NEXT: [[TMP37:%.*]] = load <4 x i8>, ptr [[ADD_PTR64]], align 1527; CHECK-NEXT: [[TMP38:%.*]] = shufflevector <4 x i8> [[TMP32]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>528; CHECK-NEXT: [[TMP39:%.*]] = shufflevector <4 x i8> [[TMP36]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>529; CHECK-NEXT: [[TMP40:%.*]] = shufflevector <4 x i8> [[TMP32]], <4 x i8> [[TMP36]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>530; CHECK-NEXT: [[TMP41:%.*]] = shufflevector <4 x i8> [[TMP33]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>531; CHECK-NEXT: [[TMP42:%.*]] = shufflevector <16 x i8> [[TMP40]], <16 x i8> [[TMP41]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>532; CHECK-NEXT: [[TMP43:%.*]] = shufflevector <4 x i8> [[TMP37]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>533; CHECK-NEXT: [[TMP44:%.*]] = shufflevector <16 x i8> [[TMP42]], <16 x i8> [[TMP43]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>534; CHECK-NEXT: [[TMP45:%.*]] = zext <16 x i8> [[TMP44]] to <16 x i32>535; CHECK-NEXT: [[TMP46:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 1536; CHECK-NEXT: [[TMP47:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 1537; CHECK-NEXT: [[TMP48:%.*]] = shufflevector <4 x i8> [[TMP34]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>538; CHECK-NEXT: [[TMP49:%.*]] = shufflevector <4 x i8> [[TMP46]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>539; CHECK-NEXT: [[TMP50:%.*]] = shufflevector <4 x i8> [[TMP34]], <4 x i8> [[TMP46]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>540; CHECK-NEXT: [[TMP51:%.*]] = shufflevector <4 x i8> [[TMP35]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>541; CHECK-NEXT: [[TMP52:%.*]] = shufflevector <16 x i8> [[TMP50]], <16 x i8> [[TMP51]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>542; CHECK-NEXT: [[TMP53:%.*]] = shufflevector <4 x i8> [[TMP47]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>543; CHECK-NEXT: [[TMP54:%.*]] = shufflevector <16 x i8> [[TMP52]], <16 x i8> [[TMP53]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>544; CHECK-NEXT: [[TMP55:%.*]] = zext <16 x i8> [[TMP54]] to <16 x i32>545; CHECK-NEXT: [[TMP56:%.*]] = mul <16 x i32> [[TMP45]], [[TMP55]]546; CHECK-NEXT: [[TMP57:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP56]])547; CHECK-NEXT: ret i32 [[TMP57]]548;549; TODO: Dead code must be removed below.550entry:551 %idx.ext = sext i32 %off1 to i64552 %idx.ext63 = sext i32 %off2 to i64553 554 %0 = load i8, ptr %p1, align 1555 %conv = zext i8 %0 to i32556 %1 = load i8, ptr %p2, align 1557 %conv2 = zext i8 %1 to i32558 %arrayidx3 = getelementptr inbounds i8, ptr %p1, i64 4559 %2 = load i8, ptr %arrayidx3, align 1560 %conv4 = zext i8 %2 to i32561 %arrayidx5 = getelementptr inbounds i8, ptr %p2, i64 4562 %3 = load i8, ptr %arrayidx5, align 1563 %conv6 = zext i8 %3 to i32564 %arrayidx8 = getelementptr inbounds i8, ptr %p1, i64 1565 %4 = load i8, ptr %arrayidx8, align 1566 %conv9 = zext i8 %4 to i32567 %arrayidx10 = getelementptr inbounds i8, ptr %p2, i64 1568 %5 = load i8, ptr %arrayidx10, align 1569 %conv11 = zext i8 %5 to i32570 %arrayidx13 = getelementptr inbounds i8, ptr %p1, i64 5571 %6 = load i8, ptr %arrayidx13, align 1572 %conv14 = zext i8 %6 to i32573 %arrayidx15 = getelementptr inbounds i8, ptr %p2, i64 5574 %7 = load i8, ptr %arrayidx15, align 1575 %conv16 = zext i8 %7 to i32576 %arrayidx20 = getelementptr inbounds i8, ptr %p1, i64 2577 %8 = load i8, ptr %arrayidx20, align 1578 %conv21 = zext i8 %8 to i32579 %arrayidx22 = getelementptr inbounds i8, ptr %p2, i64 2580 %9 = load i8, ptr %arrayidx22, align 1581 %conv23 = zext i8 %9 to i32582 %arrayidx25 = getelementptr inbounds i8, ptr %p1, i64 6583 %10 = load i8, ptr %arrayidx25, align 1584 %conv26 = zext i8 %10 to i32585 %arrayidx27 = getelementptr inbounds i8, ptr %p2, i64 6586 %11 = load i8, ptr %arrayidx27, align 1587 %conv28 = zext i8 %11 to i32588 %arrayidx32 = getelementptr inbounds i8, ptr %p1, i64 3589 %12 = load i8, ptr %arrayidx32, align 1590 %conv33 = zext i8 %12 to i32591 %arrayidx34 = getelementptr inbounds i8, ptr %p2, i64 3592 %13 = load i8, ptr %arrayidx34, align 1593 %conv35 = zext i8 %13 to i32594 %arrayidx37 = getelementptr inbounds i8, ptr %p1, i64 7595 %14 = load i8, ptr %arrayidx37, align 1596 %conv38 = zext i8 %14 to i32597 %arrayidx39 = getelementptr inbounds i8, ptr %p2, i64 7598 %15 = load i8, ptr %arrayidx39, align 1599 %conv40 = zext i8 %15 to i32600 %add.ptr = getelementptr inbounds i8, ptr %p1, i64 %idx.ext601 %16 = load i8, ptr %add.ptr, align 1602 %conv.1 = zext i8 %16 to i32603 %add.ptr64 = getelementptr inbounds i8, ptr %p2, i64 %idx.ext63604 %17 = load i8, ptr %add.ptr64, align 1605 %conv2.1 = zext i8 %17 to i32606 %arrayidx3.1 = getelementptr inbounds i8, ptr %add.ptr, i64 4607 %18 = load i8, ptr %arrayidx3.1, align 1608 %conv4.1 = zext i8 %18 to i32609 %arrayidx5.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 4610 %19 = load i8, ptr %arrayidx5.1, align 1611 %conv6.1 = zext i8 %19 to i32612 %arrayidx8.1 = getelementptr inbounds i8, ptr %add.ptr, i64 1613 %20 = load i8, ptr %arrayidx8.1, align 1614 %conv9.1 = zext i8 %20 to i32615 %arrayidx10.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 1616 %21 = load i8, ptr %arrayidx10.1, align 1617 %conv11.1 = zext i8 %21 to i32618 %arrayidx13.1 = getelementptr inbounds i8, ptr %add.ptr, i64 5619 %22 = load i8, ptr %arrayidx13.1, align 1620 %conv14.1 = zext i8 %22 to i32621 %arrayidx15.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 5622 %23 = load i8, ptr %arrayidx15.1, align 1623 %conv16.1 = zext i8 %23 to i32624 %arrayidx20.1 = getelementptr inbounds i8, ptr %add.ptr, i64 2625 %24 = load i8, ptr %arrayidx20.1, align 1626 %conv21.1 = zext i8 %24 to i32627 %arrayidx22.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 2628 %25 = load i8, ptr %arrayidx22.1, align 1629 %conv23.1 = zext i8 %25 to i32630 %arrayidx25.1 = getelementptr inbounds i8, ptr %add.ptr, i64 6631 %26 = load i8, ptr %arrayidx25.1, align 1632 %conv26.1 = zext i8 %26 to i32633 %arrayidx27.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 6634 %27 = load i8, ptr %arrayidx27.1, align 1635 %conv28.1 = zext i8 %27 to i32636 %arrayidx32.1 = getelementptr inbounds i8, ptr %add.ptr, i64 3637 %28 = load i8, ptr %arrayidx32.1, align 1638 %conv33.1 = zext i8 %28 to i32639 %arrayidx34.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 3640 %29 = load i8, ptr %arrayidx34.1, align 1641 %conv35.1 = zext i8 %29 to i32642 %arrayidx37.1 = getelementptr inbounds i8, ptr %add.ptr, i64 7643 %30 = load i8, ptr %arrayidx37.1, align 1644 %conv38.1 = zext i8 %30 to i32645 %arrayidx39.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 7646 %31 = load i8, ptr %arrayidx39.1, align 1647 %conv40.1 = zext i8 %31 to i32648 %add.ptr.1 = getelementptr inbounds i8, ptr %add.ptr, i64 %idx.ext649 %32 = load i8, ptr %add.ptr.1, align 1650 %conv.2 = zext i8 %32 to i32651 %add.ptr64.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 %idx.ext63652 %33 = load i8, ptr %add.ptr64.1, align 1653 %conv2.2 = zext i8 %33 to i32654 %arrayidx3.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 4655 %34 = load i8, ptr %arrayidx3.2, align 1656 %conv4.2 = zext i8 %34 to i32657 %arrayidx5.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 4658 %35 = load i8, ptr %arrayidx5.2, align 1659 %conv6.2 = zext i8 %35 to i32660 %arrayidx8.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 1661 %36 = load i8, ptr %arrayidx8.2, align 1662 %conv9.2 = zext i8 %36 to i32663 %arrayidx10.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 1664 %37 = load i8, ptr %arrayidx10.2, align 1665 %conv11.2 = zext i8 %37 to i32666 %arrayidx13.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 5667 %38 = load i8, ptr %arrayidx13.2, align 1668 %conv14.2 = zext i8 %38 to i32669 %arrayidx15.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 5670 %39 = load i8, ptr %arrayidx15.2, align 1671 %conv16.2 = zext i8 %39 to i32672 %arrayidx20.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 2673 %40 = load i8, ptr %arrayidx20.2, align 1674 %conv21.2 = zext i8 %40 to i32675 %arrayidx22.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 2676 %41 = load i8, ptr %arrayidx22.2, align 1677 %conv23.2 = zext i8 %41 to i32678 %arrayidx25.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 6679 %42 = load i8, ptr %arrayidx25.2, align 1680 %conv26.2 = zext i8 %42 to i32681 %arrayidx27.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 6682 %43 = load i8, ptr %arrayidx27.2, align 1683 %conv28.2 = zext i8 %43 to i32684 %arrayidx32.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 3685 %44 = load i8, ptr %arrayidx32.2, align 1686 %conv33.2 = zext i8 %44 to i32687 %arrayidx34.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 3688 %45 = load i8, ptr %arrayidx34.2, align 1689 %conv35.2 = zext i8 %45 to i32690 %arrayidx37.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 7691 %46 = load i8, ptr %arrayidx37.2, align 1692 %conv38.2 = zext i8 %46 to i32693 %arrayidx39.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 7694 %47 = load i8, ptr %arrayidx39.2, align 1695 %conv40.2 = zext i8 %47 to i32696 %add.ptr.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 %idx.ext697 %48 = load i8, ptr %add.ptr.2, align 1698 %conv.3 = zext i8 %48 to i32699 %add.ptr64.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 %idx.ext63700 %49 = load i8, ptr %add.ptr64.2, align 1701 %conv2.3 = zext i8 %49 to i32702 %arrayidx3.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 4703 %50 = load i8, ptr %arrayidx3.3, align 1704 %conv4.3 = zext i8 %50 to i32705 %arrayidx5.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 4706 %51 = load i8, ptr %arrayidx5.3, align 1707 %conv6.3 = zext i8 %51 to i32708 %arrayidx8.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 1709 %52 = load i8, ptr %arrayidx8.3, align 1710 %conv9.3 = zext i8 %52 to i32711 %arrayidx10.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 1712 %53 = load i8, ptr %arrayidx10.3, align 1713 %conv11.3 = zext i8 %53 to i32714 %arrayidx13.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 5715 %54 = load i8, ptr %arrayidx13.3, align 1716 %conv14.3 = zext i8 %54 to i32717 %arrayidx15.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 5718 %55 = load i8, ptr %arrayidx15.3, align 1719 %conv16.3 = zext i8 %55 to i32720 %arrayidx20.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 2721 %56 = load i8, ptr %arrayidx20.3, align 1722 %conv21.3 = zext i8 %56 to i32723 %arrayidx22.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 2724 %57 = load i8, ptr %arrayidx22.3, align 1725 %conv23.3 = zext i8 %57 to i32726 %arrayidx25.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 6727 %58 = load i8, ptr %arrayidx25.3, align 1728 %conv26.3 = zext i8 %58 to i32729 %arrayidx27.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 6730 %59 = load i8, ptr %arrayidx27.3, align 1731 %conv28.3 = zext i8 %59 to i32732 %arrayidx32.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 3733 %60 = load i8, ptr %arrayidx32.3, align 1734 %conv33.3 = zext i8 %60 to i32735 %arrayidx34.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 3736 %61 = load i8, ptr %arrayidx34.3, align 1737 %conv35.3 = zext i8 %61 to i32738 %arrayidx37.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 7739 %62 = load i8, ptr %arrayidx37.3, align 1740 %conv38.3 = zext i8 %62 to i32741 %arrayidx39.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 7742 %63 = load i8, ptr %arrayidx39.3, align 1743 %conv40.3 = zext i8 %63 to i32744 745 %m1 = mul i32 %conv, %conv4746 %m2 = mul i32 %conv9, %conv14747 %m3 = mul i32 %conv21, %conv26748 %m4 = mul i32 %conv33, %conv38749 %m8 = mul i32 %conv2, %conv6750 %m7 = mul i32 %conv11, %conv16751 %m6 = mul i32 %conv23, %conv28752 %m5 = mul i32 %conv35, %conv40753 %m9 = mul i32 %conv.1, %conv4.1754 %m10 = mul i32 %conv9.1, %conv14.1755 %m11 = mul i32 %conv21.1, %conv26.1756 %m12 = mul i32 %conv33.1, %conv38.1757 %m16 = mul i32 %conv2.1, %conv6.1758 %m15 = mul i32 %conv11.1, %conv16.1759 %m14 = mul i32 %conv23.1, %conv28.1760 %m13 = mul i32 %conv35.1, %conv40.1761 762 %a2 = add i32 %m1, %m2763 %a3 = add i32 %a2, %m3764 %a4 = add i32 %a3, %m4765 %a5 = add i32 %a4, %m5766 %a6 = add i32 %a5, %m6767 %a7 = add i32 %a6, %m7768 %a8 = add i32 %a7, %m8769 %a9 = add i32 %a8, %m9770 %a10 = add i32 %a9, %m10771 %a11 = add i32 %a10, %m11772 %a12 = add i32 %a11, %m12773 %a13 = add i32 %a12, %m13774 %a14 = add i32 %a13, %m14775 %a15 = add i32 %a14, %m15776 %a16 = add i32 %a15, %m16777 ret i32 %a16778}779 780define void @store_blockstrided3(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, ptr nocapture noundef writeonly %z, i32 noundef %stride) {781; CHECK-LABEL: @store_blockstrided3(782; CHECK-NEXT: entry:783; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i32, ptr [[X:%.*]], i64 2784; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4785; CHECK-NEXT: [[ADD4:%.*]] = add nsw i32 [[STRIDE:%.*]], 1786; CHECK-NEXT: [[IDXPROM5:%.*]] = sext i32 [[ADD4]] to i64787; CHECK-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM5]]788; CHECK-NEXT: [[MUL:%.*]] = shl nsw i32 [[STRIDE]], 1789; CHECK-NEXT: [[IDXPROM11:%.*]] = sext i32 [[MUL]] to i64790; CHECK-NEXT: [[ARRAYIDX28:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM11]]791; CHECK-NEXT: [[ADD14:%.*]] = add nsw i32 [[MUL]], 2792; CHECK-NEXT: [[IDXPROM15:%.*]] = sext i32 [[ADD14]] to i64793; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM15]]794; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX16]], align 4795; CHECK-NEXT: [[MUL21:%.*]] = mul nsw i32 [[STRIDE]], 3796; CHECK-NEXT: [[IDXPROM23:%.*]] = sext i32 [[MUL21]] to i64797; CHECK-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM23]]798; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX24]], align 4799; CHECK-NEXT: [[ADD26:%.*]] = add nsw i32 [[MUL21]], 1800; CHECK-NEXT: [[IDXPROM27:%.*]] = sext i32 [[ADD26]] to i64801; CHECK-NEXT: [[ARRAYIDX64:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM27]]802; CHECK-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds i32, ptr [[Y:%.*]], i64 2803; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX35]], align 4804; CHECK-NEXT: [[ARRAYIDX41:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM5]]805; CHECK-NEXT: [[ARRAYIDX49:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM11]]806; CHECK-NEXT: [[ARRAYIDX48:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM15]]807; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX48]], align 4808; CHECK-NEXT: [[ARRAYIDX60:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM23]]809; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX60]], align 4810; CHECK-NEXT: [[ARRAYIDX65:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM27]]811; CHECK-NEXT: [[ARRAYIDX72:%.*]] = getelementptr inbounds i32, ptr [[Z:%.*]], i64 1812; CHECK-NEXT: [[MUL73:%.*]] = mul nsw i32 [[TMP3]], [[TMP0]]813; CHECK-NEXT: [[ARRAYIDX76:%.*]] = getelementptr inbounds i32, ptr [[Z]], i64 6814; CHECK-NEXT: [[TMP6:%.*]] = load <2 x i32>, ptr [[X]], align 4815; CHECK-NEXT: [[TMP7:%.*]] = load <2 x i32>, ptr [[ARRAYIDX6]], align 4816; CHECK-NEXT: [[TMP8:%.*]] = load <2 x i32>, ptr [[Y]], align 4817; CHECK-NEXT: [[TMP9:%.*]] = load <2 x i32>, ptr [[ARRAYIDX41]], align 4818; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x i32> [[TMP8]], <2 x i32> [[TMP9]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>819; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <2 x i32> [[TMP6]], <2 x i32> [[TMP7]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>820; CHECK-NEXT: [[TMP13:%.*]] = mul nsw <4 x i32> [[TMP10]], [[TMP11]]821; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP13]], <4 x i32> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>822; CHECK-NEXT: [[ARRAYIDX84:%.*]] = getelementptr inbounds i32, ptr [[Z]], i64 7823; CHECK-NEXT: [[MUL81:%.*]] = mul nsw i32 [[TMP4]], [[TMP1]]824; CHECK-NEXT: [[MUL87:%.*]] = mul nsw i32 [[TMP5]], [[TMP2]]825; CHECK-NEXT: [[ARRAYIDX88:%.*]] = getelementptr inbounds i32, ptr [[Z]], i64 11826; CHECK-NEXT: [[TMP17:%.*]] = load <2 x i32>, ptr [[ARRAYIDX28]], align 4827; CHECK-NEXT: [[TMP18:%.*]] = load <2 x i32>, ptr [[ARRAYIDX64]], align 4828; CHECK-NEXT: [[TMP15:%.*]] = load <2 x i32>, ptr [[ARRAYIDX49]], align 4829; CHECK-NEXT: [[TMP16:%.*]] = load <2 x i32>, ptr [[ARRAYIDX65]], align 4830; CHECK-NEXT: store i32 [[MUL73]], ptr [[Z]], align 4831; CHECK-NEXT: store <4 x i32> [[TMP12]], ptr [[ARRAYIDX72]], align 4832; CHECK-NEXT: store i32 [[MUL81]], ptr [[ARRAYIDX76]], align 4833; CHECK-NEXT: store i32 [[MUL87]], ptr [[ARRAYIDX88]], align 4834; CHECK-NEXT: [[TMP21:%.*]] = shufflevector <2 x i32> [[TMP15]], <2 x i32> [[TMP16]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>835; CHECK-NEXT: [[TMP22:%.*]] = shufflevector <2 x i32> [[TMP17]], <2 x i32> [[TMP18]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>836; CHECK-NEXT: [[TMP20:%.*]] = mul nsw <4 x i32> [[TMP21]], [[TMP22]]837; CHECK-NEXT: [[TMP19:%.*]] = shufflevector <4 x i32> [[TMP20]], <4 x i32> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>838; CHECK-NEXT: store <4 x i32> [[TMP19]], ptr [[ARRAYIDX84]], align 4839; CHECK-NEXT: ret void840;841entry:842 %0 = load i32, ptr %x, align 4843 %arrayidx1 = getelementptr inbounds i32, ptr %x, i64 1844 %1 = load i32, ptr %arrayidx1, align 4845 %arrayidx2 = getelementptr inbounds i32, ptr %x, i64 2846 %2 = load i32, ptr %arrayidx2, align 4847 %add4 = add nsw i32 %stride, 1848 %idxprom5 = sext i32 %add4 to i64849 %arrayidx6 = getelementptr inbounds i32, ptr %x, i64 %idxprom5850 %3 = load i32, ptr %arrayidx6, align 4851 %add7 = add nsw i32 %stride, 2852 %idxprom8 = sext i32 %add7 to i64853 %arrayidx9 = getelementptr inbounds i32, ptr %x, i64 %idxprom8854 %4 = load i32, ptr %arrayidx9, align 4855 %mul = shl nsw i32 %stride, 1856 %idxprom11 = sext i32 %mul to i64857 %arrayidx12 = getelementptr inbounds i32, ptr %x, i64 %idxprom11858 %5 = load i32, ptr %arrayidx12, align 4859 %add14 = or disjoint i32 %mul, 1860 %idxprom15 = sext i32 %add14 to i64861 %arrayidx16 = getelementptr inbounds i32, ptr %x, i64 %idxprom15862 %6 = load i32, ptr %arrayidx16, align 4863 %add18 = add nsw i32 %mul, 2864 %idxprom19 = sext i32 %add18 to i64865 %arrayidx20 = getelementptr inbounds i32, ptr %x, i64 %idxprom19866 %7 = load i32, ptr %arrayidx20, align 4867 %mul21 = mul nsw i32 %stride, 3868 %idxprom23 = sext i32 %mul21 to i64869 %arrayidx24 = getelementptr inbounds i32, ptr %x, i64 %idxprom23870 %8 = load i32, ptr %arrayidx24, align 4871 %add26 = add nsw i32 %mul21, 1872 %idxprom27 = sext i32 %add26 to i64873 %arrayidx28 = getelementptr inbounds i32, ptr %x, i64 %idxprom27874 %9 = load i32, ptr %arrayidx28, align 4875 %add30 = add nsw i32 %mul21, 2876 %idxprom31 = sext i32 %add30 to i64877 %arrayidx32 = getelementptr inbounds i32, ptr %x, i64 %idxprom31878 %10 = load i32, ptr %arrayidx32, align 4879 %11 = load i32, ptr %y, align 4880 %arrayidx34 = getelementptr inbounds i32, ptr %y, i64 1881 %12 = load i32, ptr %arrayidx34, align 4882 %arrayidx35 = getelementptr inbounds i32, ptr %y, i64 2883 %13 = load i32, ptr %arrayidx35, align 4884 %arrayidx41 = getelementptr inbounds i32, ptr %y, i64 %idxprom5885 %14 = load i32, ptr %arrayidx41, align 4886 %arrayidx44 = getelementptr inbounds i32, ptr %y, i64 %idxprom8887 %15 = load i32, ptr %arrayidx44, align 4888 %arrayidx48 = getelementptr inbounds i32, ptr %y, i64 %idxprom11889 %16 = load i32, ptr %arrayidx48, align 4890 %arrayidx52 = getelementptr inbounds i32, ptr %y, i64 %idxprom15891 %17 = load i32, ptr %arrayidx52, align 4892 %arrayidx56 = getelementptr inbounds i32, ptr %y, i64 %idxprom19893 %18 = load i32, ptr %arrayidx56, align 4894 %arrayidx60 = getelementptr inbounds i32, ptr %y, i64 %idxprom23895 %19 = load i32, ptr %arrayidx60, align 4896 %arrayidx64 = getelementptr inbounds i32, ptr %y, i64 %idxprom27897 %20 = load i32, ptr %arrayidx64, align 4898 %arrayidx68 = getelementptr inbounds i32, ptr %y, i64 %idxprom31899 %21 = load i32, ptr %arrayidx68, align 4900 %mul69 = mul nsw i32 %11, %0901 %arrayidx70 = getelementptr inbounds i32, ptr %z, i64 2902 store i32 %mul69, ptr %arrayidx70, align 4903 %mul71 = mul nsw i32 %12, %1904 %arrayidx72 = getelementptr inbounds i32, ptr %z, i64 1905 store i32 %mul71, ptr %arrayidx72, align 4906 %mul73 = mul nsw i32 %13, %2907 store i32 %mul73, ptr %z, align 4908 %arrayidx76 = getelementptr inbounds i32, ptr %z, i64 6909 %mul77 = mul nsw i32 %14, %3910 %arrayidx78 = getelementptr inbounds i32, ptr %z, i64 4911 store i32 %mul77, ptr %arrayidx78, align 4912 %mul79 = mul nsw i32 %15, %4913 %arrayidx80 = getelementptr inbounds i32, ptr %z, i64 3914 store i32 %mul79, ptr %arrayidx80, align 4915 %mul81 = mul nsw i32 %16, %5916 %arrayidx82 = getelementptr inbounds i32, ptr %z, i64 8917 store i32 %mul81, ptr %arrayidx82, align 4918 %mul83 = mul nsw i32 %17, %6919 %arrayidx84 = getelementptr inbounds i32, ptr %z, i64 7920 store i32 %mul83, ptr %arrayidx84, align 4921 %mul85 = mul nsw i32 %18, %7922 store i32 %mul85, ptr %arrayidx76, align 4923 %mul87 = mul nsw i32 %19, %8924 %arrayidx88 = getelementptr inbounds i32, ptr %z, i64 11925 store i32 %mul87, ptr %arrayidx88, align 4926 %mul89 = mul nsw i32 %20, %9927 %arrayidx90 = getelementptr inbounds i32, ptr %z, i64 10928 store i32 %mul89, ptr %arrayidx90, align 4929 %mul91 = mul nsw i32 %21, %10930 %arrayidx92 = getelementptr inbounds i32, ptr %z, i64 9931 store i32 %mul91, ptr %arrayidx92, align 4932 ret void933}934 935define void @store_blockstrided4(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, i32 noundef %stride, ptr %dst0) {936; CHECK-LABEL: @store_blockstrided4(937; CHECK-NEXT: entry:938; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64939; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X:%.*]], i64 [[IDXPROM]]940; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y:%.*]], i64 [[IDXPROM]]941; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i16>, ptr [[X]], align 2942; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i16>, ptr [[ARRAYIDX4]], align 2943; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr [[Y]], align 2944; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr [[ARRAYIDX20]], align 2945; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x i16> [[TMP2]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>946; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x i16> [[TMP0]], <4 x i16> [[TMP1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>947; CHECK-NEXT: [[TMP7:%.*]] = mul <8 x i16> [[TMP4]], [[TMP5]]948; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <8 x i16> [[TMP7]], <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>949; CHECK-NEXT: store <8 x i16> [[TMP6]], ptr [[DST0:%.*]], align 2950; CHECK-NEXT: ret void951;952entry:953 %0 = load i16, ptr %x, align 2954 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1955 %1 = load i16, ptr %arrayidx1, align 2956 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 2957 %2 = load i16, ptr %arrayidx2, align 2958 %arrayidx3 = getelementptr inbounds i16, ptr %x, i64 3959 %3 = load i16, ptr %arrayidx3, align 2960 %idxprom = sext i32 %stride to i64961 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom962 %4 = load i16, ptr %arrayidx4, align 2963 %add5 = add nsw i32 %stride, 1964 %idxprom6 = sext i32 %add5 to i64965 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom6966 %5 = load i16, ptr %arrayidx7, align 2967 %add8 = add nsw i32 %stride, 2968 %idxprom9 = sext i32 %add8 to i64969 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom9970 %6 = load i16, ptr %arrayidx10, align 2971 %add11 = add nsw i32 %stride, 3972 %idxprom12 = sext i32 %add11 to i64973 %arrayidx13 = getelementptr inbounds i16, ptr %x, i64 %idxprom12974 %7 = load i16, ptr %arrayidx13, align 2975 %8 = load i16, ptr %y, align 2976 %arrayidx15 = getelementptr inbounds i16, ptr %y, i64 1977 %9 = load i16, ptr %arrayidx15, align 2978 %arrayidx16 = getelementptr inbounds i16, ptr %y, i64 2979 %10 = load i16, ptr %arrayidx16, align 2980 %arrayidx17 = getelementptr inbounds i16, ptr %y, i64 3981 %11 = load i16, ptr %arrayidx17, align 2982 %arrayidx20 = getelementptr inbounds i16, ptr %y, i64 %idxprom983 %12 = load i16, ptr %arrayidx20, align 2984 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom6985 %13 = load i16, ptr %arrayidx23, align 2986 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom9987 %14 = load i16, ptr %arrayidx26, align 2988 %arrayidx29 = getelementptr inbounds i16, ptr %y, i64 %idxprom12989 %15 = load i16, ptr %arrayidx29, align 2990 %mul = mul i16 %8, %0991 %mul36 = mul i16 %9, %1992 %mul42 = mul i16 %11, %3993 %mul48 = mul i16 %10, %2994 %mul54 = mul i16 %13, %5995 %mul60 = mul i16 %12, %4996 %mul66 = mul i16 %15, %7997 %mul72 = mul i16 %14, %6998 %dst1 = getelementptr inbounds i16, ptr %dst0, i64 1999 %dst2 = getelementptr inbounds i16, ptr %dst0, i64 21000 %dst3 = getelementptr inbounds i16, ptr %dst0, i64 31001 %dst4 = getelementptr inbounds i16, ptr %dst0, i64 41002 %dst5 = getelementptr inbounds i16, ptr %dst0, i64 51003 %dst6 = getelementptr inbounds i16, ptr %dst0, i64 61004 %dst7 = getelementptr inbounds i16, ptr %dst0, i64 71005 store i16 %mul, ptr %dst01006 store i16 %mul36, ptr %dst11007 store i16 %mul42, ptr %dst21008 store i16 %mul48, ptr %dst31009 store i16 %mul54, ptr %dst41010 store i16 %mul60, ptr %dst51011 store i16 %mul66, ptr %dst61012 store i16 %mul72, ptr %dst71013 ret void1014}1015 1016define void @store_blockstrided4x4(ptr nocapture noundef readonly %p1, i32 noundef %off1, ptr nocapture noundef readonly %p2, i32 noundef %off2, ptr %dst0) {1017; CHECK-LABEL: @store_blockstrided4x4(1018; CHECK-NEXT: entry:1019; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[OFF1:%.*]] to i641020; CHECK-NEXT: [[IDX_EXT63:%.*]] = sext i32 [[OFF2:%.*]] to i641021; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i8, ptr [[P1:%.*]], i64 41022; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i8, ptr [[P2:%.*]], i64 41023; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]]1024; CHECK-NEXT: [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]]1025; CHECK-NEXT: [[ARRAYIDX3_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 41026; CHECK-NEXT: [[ARRAYIDX5_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 41027; CHECK-NEXT: [[ADD_PTR_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 [[IDX_EXT]]1028; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[ADD_PTR_1]], align 11029; CHECK-NEXT: [[CONV_2:%.*]] = zext i8 [[TMP0]] to i321030; CHECK-NEXT: [[ADD_PTR64_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 [[IDX_EXT63]]1031; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[ADD_PTR64_1]], align 11032; CHECK-NEXT: [[CONV2_2:%.*]] = zext i8 [[TMP1]] to i321033; CHECK-NEXT: [[ARRAYIDX3_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 41034; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX3_2]], align 11035; CHECK-NEXT: [[CONV4_2:%.*]] = zext i8 [[TMP2]] to i321036; CHECK-NEXT: [[ARRAYIDX5_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 41037; CHECK-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX5_2]], align 11038; CHECK-NEXT: [[CONV6_2:%.*]] = zext i8 [[TMP3]] to i321039; CHECK-NEXT: [[ARRAYIDX8_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 11040; CHECK-NEXT: [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX8_2]], align 11041; CHECK-NEXT: [[CONV9_2:%.*]] = zext i8 [[TMP4]] to i321042; CHECK-NEXT: [[ARRAYIDX10_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 11043; CHECK-NEXT: [[TMP5:%.*]] = load i8, ptr [[ARRAYIDX10_2]], align 11044; CHECK-NEXT: [[CONV11_2:%.*]] = zext i8 [[TMP5]] to i321045; CHECK-NEXT: [[ARRAYIDX13_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 51046; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX13_2]], align 11047; CHECK-NEXT: [[CONV14_2:%.*]] = zext i8 [[TMP6]] to i321048; CHECK-NEXT: [[ARRAYIDX15_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 51049; CHECK-NEXT: [[TMP7:%.*]] = load i8, ptr [[ARRAYIDX15_2]], align 11050; CHECK-NEXT: [[CONV16_2:%.*]] = zext i8 [[TMP7]] to i321051; CHECK-NEXT: [[ARRAYIDX20_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 21052; CHECK-NEXT: [[TMP8:%.*]] = load i8, ptr [[ARRAYIDX20_2]], align 11053; CHECK-NEXT: [[CONV21_2:%.*]] = zext i8 [[TMP8]] to i321054; CHECK-NEXT: [[ARRAYIDX22_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 21055; CHECK-NEXT: [[TMP9:%.*]] = load i8, ptr [[ARRAYIDX22_2]], align 11056; CHECK-NEXT: [[CONV23_2:%.*]] = zext i8 [[TMP9]] to i321057; CHECK-NEXT: [[ARRAYIDX25_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 61058; CHECK-NEXT: [[TMP10:%.*]] = load i8, ptr [[ARRAYIDX25_2]], align 11059; CHECK-NEXT: [[CONV26_2:%.*]] = zext i8 [[TMP10]] to i321060; CHECK-NEXT: [[ARRAYIDX27_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 61061; CHECK-NEXT: [[TMP11:%.*]] = load i8, ptr [[ARRAYIDX27_2]], align 11062; CHECK-NEXT: [[CONV28_2:%.*]] = zext i8 [[TMP11]] to i321063; CHECK-NEXT: [[ARRAYIDX32_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 31064; CHECK-NEXT: [[TMP12:%.*]] = load i8, ptr [[ARRAYIDX32_2]], align 11065; CHECK-NEXT: [[CONV33_2:%.*]] = zext i8 [[TMP12]] to i321066; CHECK-NEXT: [[ARRAYIDX34_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 31067; CHECK-NEXT: [[TMP13:%.*]] = load i8, ptr [[ARRAYIDX34_2]], align 11068; CHECK-NEXT: [[CONV35_2:%.*]] = zext i8 [[TMP13]] to i321069; CHECK-NEXT: [[ARRAYIDX37_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 71070; CHECK-NEXT: [[TMP14:%.*]] = load i8, ptr [[ARRAYIDX37_2]], align 11071; CHECK-NEXT: [[CONV38_2:%.*]] = zext i8 [[TMP14]] to i321072; CHECK-NEXT: [[ARRAYIDX39_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 71073; CHECK-NEXT: [[TMP15:%.*]] = load i8, ptr [[ARRAYIDX39_2]], align 11074; CHECK-NEXT: [[CONV40_2:%.*]] = zext i8 [[TMP15]] to i321075; CHECK-NEXT: [[ADD_PTR_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 [[IDX_EXT]]1076; CHECK-NEXT: [[TMP16:%.*]] = load i8, ptr [[ADD_PTR_2]], align 11077; CHECK-NEXT: [[CONV_3:%.*]] = zext i8 [[TMP16]] to i321078; CHECK-NEXT: [[ADD_PTR64_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 [[IDX_EXT63]]1079; CHECK-NEXT: [[TMP17:%.*]] = load i8, ptr [[ADD_PTR64_2]], align 11080; CHECK-NEXT: [[CONV2_3:%.*]] = zext i8 [[TMP17]] to i321081; CHECK-NEXT: [[ARRAYIDX3_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 41082; CHECK-NEXT: [[TMP18:%.*]] = load i8, ptr [[ARRAYIDX3_3]], align 11083; CHECK-NEXT: [[CONV4_3:%.*]] = zext i8 [[TMP18]] to i321084; CHECK-NEXT: [[ARRAYIDX5_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 41085; CHECK-NEXT: [[TMP19:%.*]] = load i8, ptr [[ARRAYIDX5_3]], align 11086; CHECK-NEXT: [[CONV6_3:%.*]] = zext i8 [[TMP19]] to i321087; CHECK-NEXT: [[ARRAYIDX8_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 11088; CHECK-NEXT: [[TMP20:%.*]] = load i8, ptr [[ARRAYIDX8_3]], align 11089; CHECK-NEXT: [[CONV9_3:%.*]] = zext i8 [[TMP20]] to i321090; CHECK-NEXT: [[ARRAYIDX10_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 11091; CHECK-NEXT: [[TMP21:%.*]] = load i8, ptr [[ARRAYIDX10_3]], align 11092; CHECK-NEXT: [[CONV11_3:%.*]] = zext i8 [[TMP21]] to i321093; CHECK-NEXT: [[ARRAYIDX13_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 51094; CHECK-NEXT: [[TMP22:%.*]] = load i8, ptr [[ARRAYIDX13_3]], align 11095; CHECK-NEXT: [[CONV14_3:%.*]] = zext i8 [[TMP22]] to i321096; CHECK-NEXT: [[ARRAYIDX15_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 51097; CHECK-NEXT: [[TMP23:%.*]] = load i8, ptr [[ARRAYIDX15_3]], align 11098; CHECK-NEXT: [[CONV16_3:%.*]] = zext i8 [[TMP23]] to i321099; CHECK-NEXT: [[ARRAYIDX20_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 21100; CHECK-NEXT: [[TMP24:%.*]] = load i8, ptr [[ARRAYIDX20_3]], align 11101; CHECK-NEXT: [[CONV21_3:%.*]] = zext i8 [[TMP24]] to i321102; CHECK-NEXT: [[ARRAYIDX22_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 21103; CHECK-NEXT: [[TMP25:%.*]] = load i8, ptr [[ARRAYIDX22_3]], align 11104; CHECK-NEXT: [[CONV23_3:%.*]] = zext i8 [[TMP25]] to i321105; CHECK-NEXT: [[ARRAYIDX25_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 61106; CHECK-NEXT: [[TMP26:%.*]] = load i8, ptr [[ARRAYIDX25_3]], align 11107; CHECK-NEXT: [[CONV26_3:%.*]] = zext i8 [[TMP26]] to i321108; CHECK-NEXT: [[ARRAYIDX27_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 61109; CHECK-NEXT: [[TMP27:%.*]] = load i8, ptr [[ARRAYIDX27_3]], align 11110; CHECK-NEXT: [[CONV28_3:%.*]] = zext i8 [[TMP27]] to i321111; CHECK-NEXT: [[ARRAYIDX32_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 31112; CHECK-NEXT: [[TMP28:%.*]] = load i8, ptr [[ARRAYIDX32_3]], align 11113; CHECK-NEXT: [[CONV33_3:%.*]] = zext i8 [[TMP28]] to i321114; CHECK-NEXT: [[ARRAYIDX34_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 31115; CHECK-NEXT: [[TMP29:%.*]] = load i8, ptr [[ARRAYIDX34_3]], align 11116; CHECK-NEXT: [[CONV35_3:%.*]] = zext i8 [[TMP29]] to i321117; CHECK-NEXT: [[ARRAYIDX37_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 71118; CHECK-NEXT: [[TMP30:%.*]] = load i8, ptr [[ARRAYIDX37_3]], align 11119; CHECK-NEXT: [[CONV38_3:%.*]] = zext i8 [[TMP30]] to i321120; CHECK-NEXT: [[ARRAYIDX39_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 71121; CHECK-NEXT: [[TMP31:%.*]] = load i8, ptr [[ARRAYIDX39_3]], align 11122; CHECK-NEXT: [[CONV40_3:%.*]] = zext i8 [[TMP31]] to i321123; CHECK-NEXT: [[DST4:%.*]] = getelementptr inbounds i32, ptr [[DST0:%.*]], i64 41124; CHECK-NEXT: [[DST8:%.*]] = getelementptr inbounds i32, ptr [[DST0]], i64 81125; CHECK-NEXT: [[DST12:%.*]] = getelementptr inbounds i32, ptr [[DST0]], i64 121126; CHECK-NEXT: [[TMP32:%.*]] = load <4 x i8>, ptr [[P1]], align 11127; CHECK-NEXT: [[TMP33:%.*]] = zext <4 x i8> [[TMP32]] to <4 x i32>1128; CHECK-NEXT: [[TMP34:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 11129; CHECK-NEXT: [[TMP35:%.*]] = zext <4 x i8> [[TMP34]] to <4 x i32>1130; CHECK-NEXT: [[TMP36:%.*]] = mul <4 x i32> [[TMP33]], [[TMP35]]1131; CHECK-NEXT: [[TMP37:%.*]] = load <4 x i8>, ptr [[P2]], align 11132; CHECK-NEXT: [[TMP38:%.*]] = zext <4 x i8> [[TMP37]] to <4 x i32>1133; CHECK-NEXT: [[TMP39:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 11134; CHECK-NEXT: [[TMP40:%.*]] = zext <4 x i8> [[TMP39]] to <4 x i32>1135; CHECK-NEXT: [[TMP41:%.*]] = mul <4 x i32> [[TMP38]], [[TMP40]]1136; CHECK-NEXT: [[TMP42:%.*]] = load <4 x i8>, ptr [[ADD_PTR]], align 11137; CHECK-NEXT: [[TMP43:%.*]] = zext <4 x i8> [[TMP42]] to <4 x i32>1138; CHECK-NEXT: [[TMP44:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 11139; CHECK-NEXT: [[TMP45:%.*]] = zext <4 x i8> [[TMP44]] to <4 x i32>1140; CHECK-NEXT: [[TMP46:%.*]] = mul <4 x i32> [[TMP43]], [[TMP45]]1141; CHECK-NEXT: [[TMP47:%.*]] = load <4 x i8>, ptr [[ADD_PTR64]], align 11142; CHECK-NEXT: [[TMP48:%.*]] = zext <4 x i8> [[TMP47]] to <4 x i32>1143; CHECK-NEXT: [[TMP49:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 11144; CHECK-NEXT: [[TMP50:%.*]] = zext <4 x i8> [[TMP49]] to <4 x i32>1145; CHECK-NEXT: [[TMP51:%.*]] = mul <4 x i32> [[TMP48]], [[TMP50]]1146; CHECK-NEXT: store <4 x i32> [[TMP36]], ptr [[DST0]], align 41147; CHECK-NEXT: store <4 x i32> [[TMP41]], ptr [[DST4]], align 41148; CHECK-NEXT: store <4 x i32> [[TMP46]], ptr [[DST8]], align 41149; CHECK-NEXT: store <4 x i32> [[TMP51]], ptr [[DST12]], align 41150; CHECK-NEXT: ret void1151;1152; TODO: Dead code must be removed below.1153entry:1154 %idx.ext = sext i32 %off1 to i641155 %idx.ext63 = sext i32 %off2 to i641156 1157 %0 = load i8, ptr %p1, align 11158 %conv = zext i8 %0 to i321159 %1 = load i8, ptr %p2, align 11160 %conv2 = zext i8 %1 to i321161 %arrayidx3 = getelementptr inbounds i8, ptr %p1, i64 41162 %2 = load i8, ptr %arrayidx3, align 11163 %conv4 = zext i8 %2 to i321164 %arrayidx5 = getelementptr inbounds i8, ptr %p2, i64 41165 %3 = load i8, ptr %arrayidx5, align 11166 %conv6 = zext i8 %3 to i321167 %arrayidx8 = getelementptr inbounds i8, ptr %p1, i64 11168 %4 = load i8, ptr %arrayidx8, align 11169 %conv9 = zext i8 %4 to i321170 %arrayidx10 = getelementptr inbounds i8, ptr %p2, i64 11171 %5 = load i8, ptr %arrayidx10, align 11172 %conv11 = zext i8 %5 to i321173 %arrayidx13 = getelementptr inbounds i8, ptr %p1, i64 51174 %6 = load i8, ptr %arrayidx13, align 11175 %conv14 = zext i8 %6 to i321176 %arrayidx15 = getelementptr inbounds i8, ptr %p2, i64 51177 %7 = load i8, ptr %arrayidx15, align 11178 %conv16 = zext i8 %7 to i321179 %arrayidx20 = getelementptr inbounds i8, ptr %p1, i64 21180 %8 = load i8, ptr %arrayidx20, align 11181 %conv21 = zext i8 %8 to i321182 %arrayidx22 = getelementptr inbounds i8, ptr %p2, i64 21183 %9 = load i8, ptr %arrayidx22, align 11184 %conv23 = zext i8 %9 to i321185 %arrayidx25 = getelementptr inbounds i8, ptr %p1, i64 61186 %10 = load i8, ptr %arrayidx25, align 11187 %conv26 = zext i8 %10 to i321188 %arrayidx27 = getelementptr inbounds i8, ptr %p2, i64 61189 %11 = load i8, ptr %arrayidx27, align 11190 %conv28 = zext i8 %11 to i321191 %arrayidx32 = getelementptr inbounds i8, ptr %p1, i64 31192 %12 = load i8, ptr %arrayidx32, align 11193 %conv33 = zext i8 %12 to i321194 %arrayidx34 = getelementptr inbounds i8, ptr %p2, i64 31195 %13 = load i8, ptr %arrayidx34, align 11196 %conv35 = zext i8 %13 to i321197 %arrayidx37 = getelementptr inbounds i8, ptr %p1, i64 71198 %14 = load i8, ptr %arrayidx37, align 11199 %conv38 = zext i8 %14 to i321200 %arrayidx39 = getelementptr inbounds i8, ptr %p2, i64 71201 %15 = load i8, ptr %arrayidx39, align 11202 %conv40 = zext i8 %15 to i321203 %add.ptr = getelementptr inbounds i8, ptr %p1, i64 %idx.ext1204 %16 = load i8, ptr %add.ptr, align 11205 %conv.1 = zext i8 %16 to i321206 %add.ptr64 = getelementptr inbounds i8, ptr %p2, i64 %idx.ext631207 %17 = load i8, ptr %add.ptr64, align 11208 %conv2.1 = zext i8 %17 to i321209 %arrayidx3.1 = getelementptr inbounds i8, ptr %add.ptr, i64 41210 %18 = load i8, ptr %arrayidx3.1, align 11211 %conv4.1 = zext i8 %18 to i321212 %arrayidx5.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 41213 %19 = load i8, ptr %arrayidx5.1, align 11214 %conv6.1 = zext i8 %19 to i321215 %arrayidx8.1 = getelementptr inbounds i8, ptr %add.ptr, i64 11216 %20 = load i8, ptr %arrayidx8.1, align 11217 %conv9.1 = zext i8 %20 to i321218 %arrayidx10.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 11219 %21 = load i8, ptr %arrayidx10.1, align 11220 %conv11.1 = zext i8 %21 to i321221 %arrayidx13.1 = getelementptr inbounds i8, ptr %add.ptr, i64 51222 %22 = load i8, ptr %arrayidx13.1, align 11223 %conv14.1 = zext i8 %22 to i321224 %arrayidx15.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 51225 %23 = load i8, ptr %arrayidx15.1, align 11226 %conv16.1 = zext i8 %23 to i321227 %arrayidx20.1 = getelementptr inbounds i8, ptr %add.ptr, i64 21228 %24 = load i8, ptr %arrayidx20.1, align 11229 %conv21.1 = zext i8 %24 to i321230 %arrayidx22.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 21231 %25 = load i8, ptr %arrayidx22.1, align 11232 %conv23.1 = zext i8 %25 to i321233 %arrayidx25.1 = getelementptr inbounds i8, ptr %add.ptr, i64 61234 %26 = load i8, ptr %arrayidx25.1, align 11235 %conv26.1 = zext i8 %26 to i321236 %arrayidx27.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 61237 %27 = load i8, ptr %arrayidx27.1, align 11238 %conv28.1 = zext i8 %27 to i321239 %arrayidx32.1 = getelementptr inbounds i8, ptr %add.ptr, i64 31240 %28 = load i8, ptr %arrayidx32.1, align 11241 %conv33.1 = zext i8 %28 to i321242 %arrayidx34.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 31243 %29 = load i8, ptr %arrayidx34.1, align 11244 %conv35.1 = zext i8 %29 to i321245 %arrayidx37.1 = getelementptr inbounds i8, ptr %add.ptr, i64 71246 %30 = load i8, ptr %arrayidx37.1, align 11247 %conv38.1 = zext i8 %30 to i321248 %arrayidx39.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 71249 %31 = load i8, ptr %arrayidx39.1, align 11250 %conv40.1 = zext i8 %31 to i321251 %add.ptr.1 = getelementptr inbounds i8, ptr %add.ptr, i64 %idx.ext1252 %32 = load i8, ptr %add.ptr.1, align 11253 %conv.2 = zext i8 %32 to i321254 %add.ptr64.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 %idx.ext631255 %33 = load i8, ptr %add.ptr64.1, align 11256 %conv2.2 = zext i8 %33 to i321257 %arrayidx3.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 41258 %34 = load i8, ptr %arrayidx3.2, align 11259 %conv4.2 = zext i8 %34 to i321260 %arrayidx5.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 41261 %35 = load i8, ptr %arrayidx5.2, align 11262 %conv6.2 = zext i8 %35 to i321263 %arrayidx8.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 11264 %36 = load i8, ptr %arrayidx8.2, align 11265 %conv9.2 = zext i8 %36 to i321266 %arrayidx10.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 11267 %37 = load i8, ptr %arrayidx10.2, align 11268 %conv11.2 = zext i8 %37 to i321269 %arrayidx13.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 51270 %38 = load i8, ptr %arrayidx13.2, align 11271 %conv14.2 = zext i8 %38 to i321272 %arrayidx15.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 51273 %39 = load i8, ptr %arrayidx15.2, align 11274 %conv16.2 = zext i8 %39 to i321275 %arrayidx20.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 21276 %40 = load i8, ptr %arrayidx20.2, align 11277 %conv21.2 = zext i8 %40 to i321278 %arrayidx22.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 21279 %41 = load i8, ptr %arrayidx22.2, align 11280 %conv23.2 = zext i8 %41 to i321281 %arrayidx25.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 61282 %42 = load i8, ptr %arrayidx25.2, align 11283 %conv26.2 = zext i8 %42 to i321284 %arrayidx27.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 61285 %43 = load i8, ptr %arrayidx27.2, align 11286 %conv28.2 = zext i8 %43 to i321287 %arrayidx32.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 31288 %44 = load i8, ptr %arrayidx32.2, align 11289 %conv33.2 = zext i8 %44 to i321290 %arrayidx34.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 31291 %45 = load i8, ptr %arrayidx34.2, align 11292 %conv35.2 = zext i8 %45 to i321293 %arrayidx37.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 71294 %46 = load i8, ptr %arrayidx37.2, align 11295 %conv38.2 = zext i8 %46 to i321296 %arrayidx39.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 71297 %47 = load i8, ptr %arrayidx39.2, align 11298 %conv40.2 = zext i8 %47 to i321299 %add.ptr.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 %idx.ext1300 %48 = load i8, ptr %add.ptr.2, align 11301 %conv.3 = zext i8 %48 to i321302 %add.ptr64.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 %idx.ext631303 %49 = load i8, ptr %add.ptr64.2, align 11304 %conv2.3 = zext i8 %49 to i321305 %arrayidx3.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 41306 %50 = load i8, ptr %arrayidx3.3, align 11307 %conv4.3 = zext i8 %50 to i321308 %arrayidx5.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 41309 %51 = load i8, ptr %arrayidx5.3, align 11310 %conv6.3 = zext i8 %51 to i321311 %arrayidx8.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 11312 %52 = load i8, ptr %arrayidx8.3, align 11313 %conv9.3 = zext i8 %52 to i321314 %arrayidx10.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 11315 %53 = load i8, ptr %arrayidx10.3, align 11316 %conv11.3 = zext i8 %53 to i321317 %arrayidx13.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 51318 %54 = load i8, ptr %arrayidx13.3, align 11319 %conv14.3 = zext i8 %54 to i321320 %arrayidx15.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 51321 %55 = load i8, ptr %arrayidx15.3, align 11322 %conv16.3 = zext i8 %55 to i321323 %arrayidx20.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 21324 %56 = load i8, ptr %arrayidx20.3, align 11325 %conv21.3 = zext i8 %56 to i321326 %arrayidx22.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 21327 %57 = load i8, ptr %arrayidx22.3, align 11328 %conv23.3 = zext i8 %57 to i321329 %arrayidx25.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 61330 %58 = load i8, ptr %arrayidx25.3, align 11331 %conv26.3 = zext i8 %58 to i321332 %arrayidx27.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 61333 %59 = load i8, ptr %arrayidx27.3, align 11334 %conv28.3 = zext i8 %59 to i321335 %arrayidx32.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 31336 %60 = load i8, ptr %arrayidx32.3, align 11337 %conv33.3 = zext i8 %60 to i321338 %arrayidx34.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 31339 %61 = load i8, ptr %arrayidx34.3, align 11340 %conv35.3 = zext i8 %61 to i321341 %arrayidx37.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 71342 %62 = load i8, ptr %arrayidx37.3, align 11343 %conv38.3 = zext i8 %62 to i321344 %arrayidx39.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 71345 %63 = load i8, ptr %arrayidx39.3, align 11346 %conv40.3 = zext i8 %63 to i321347 1348 %m1 = mul i32 %conv, %conv41349 %m2 = mul i32 %conv9, %conv141350 %m3 = mul i32 %conv21, %conv261351 %m4 = mul i32 %conv33, %conv381352 %m5 = mul i32 %conv2, %conv61353 %m6 = mul i32 %conv11, %conv161354 %m7 = mul i32 %conv23, %conv281355 %m8 = mul i32 %conv35, %conv401356 %m9 = mul i32 %conv.1, %conv4.11357 %m10 = mul i32 %conv9.1, %conv14.11358 %m11 = mul i32 %conv21.1, %conv26.11359 %m12 = mul i32 %conv33.1, %conv38.11360 %m13 = mul i32 %conv2.1, %conv6.11361 %m14 = mul i32 %conv11.1, %conv16.11362 %m15 = mul i32 %conv23.1, %conv28.11363 %m16 = mul i32 %conv35.1, %conv40.11364 1365 %dst1 = getelementptr inbounds i32, ptr %dst0, i64 11366 %dst2 = getelementptr inbounds i32, ptr %dst0, i64 21367 %dst3 = getelementptr inbounds i32, ptr %dst0, i64 31368 %dst4 = getelementptr inbounds i32, ptr %dst0, i64 41369 %dst5 = getelementptr inbounds i32, ptr %dst0, i64 51370 %dst6 = getelementptr inbounds i32, ptr %dst0, i64 61371 %dst7 = getelementptr inbounds i32, ptr %dst0, i64 71372 %dst8 = getelementptr inbounds i32, ptr %dst0, i64 81373 %dst9 = getelementptr inbounds i32, ptr %dst0, i64 91374 %dst10 = getelementptr inbounds i32, ptr %dst0, i64 101375 %dst11 = getelementptr inbounds i32, ptr %dst0, i64 111376 %dst12 = getelementptr inbounds i32, ptr %dst0, i64 121377 %dst13 = getelementptr inbounds i32, ptr %dst0, i64 131378 %dst14 = getelementptr inbounds i32, ptr %dst0, i64 141379 %dst15 = getelementptr inbounds i32, ptr %dst0, i64 151380 store i32 %m1, ptr %dst01381 store i32 %m2, ptr %dst11382 store i32 %m3, ptr %dst21383 store i32 %m4, ptr %dst31384 store i32 %m5, ptr %dst41385 store i32 %m6, ptr %dst51386 store i32 %m7, ptr %dst61387 store i32 %m8, ptr %dst71388 store i32 %m9, ptr %dst81389 store i32 %m10, ptr %dst91390 store i32 %m11, ptr %dst101391 store i32 %m12, ptr %dst111392 store i32 %m13, ptr %dst121393 store i32 %m14, ptr %dst131394 store i32 %m15, ptr %dst141395 store i32 %m16, ptr %dst151396 ret void1397}1398 1399define dso_local i32 @full(ptr nocapture noundef readonly %p1, i32 noundef %st1, ptr nocapture noundef readonly %p2, i32 noundef %st2) {1400; CHECK-LABEL: @full(1401; CHECK-NEXT: entry:1402; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[ST1:%.*]] to i641403; CHECK-NEXT: [[IDX_EXT63:%.*]] = sext i32 [[ST2:%.*]] to i641404; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i8, ptr [[P1:%.*]], i64 41405; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i8, ptr [[P2:%.*]], i64 41406; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]]1407; CHECK-NEXT: [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]]1408; CHECK-NEXT: [[ARRAYIDX3_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 41409; CHECK-NEXT: [[ARRAYIDX5_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 41410; CHECK-NEXT: [[ADD_PTR_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 [[IDX_EXT]]1411; CHECK-NEXT: [[ADD_PTR64_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 [[IDX_EXT63]]1412; CHECK-NEXT: [[ARRAYIDX3_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 41413; CHECK-NEXT: [[ARRAYIDX5_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 41414; CHECK-NEXT: [[ADD_PTR_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 [[IDX_EXT]]1415; CHECK-NEXT: [[ADD_PTR64_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 [[IDX_EXT63]]1416; CHECK-NEXT: [[ARRAYIDX3_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 41417; CHECK-NEXT: [[ARRAYIDX5_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 41418; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i8>, ptr [[P1]], align 11419; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i8>, ptr [[P2]], align 11420; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 11421; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 11422; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i8>, ptr [[ADD_PTR]], align 11423; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i8>, ptr [[ADD_PTR64]], align 11424; CHECK-NEXT: [[TMP6:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 11425; CHECK-NEXT: [[TMP7:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 11426; CHECK-NEXT: [[TMP8:%.*]] = load <4 x i8>, ptr [[ADD_PTR_1]], align 11427; CHECK-NEXT: [[TMP9:%.*]] = load <4 x i8>, ptr [[ADD_PTR64_1]], align 11428; CHECK-NEXT: [[TMP10:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_2]], align 11429; CHECK-NEXT: [[TMP11:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_2]], align 11430; CHECK-NEXT: [[TMP12:%.*]] = load <4 x i8>, ptr [[ADD_PTR_2]], align 11431; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <4 x i8> [[TMP0]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1432; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <4 x i8> [[TMP4]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1433; CHECK-NEXT: [[TMP15:%.*]] = shufflevector <4 x i8> [[TMP0]], <4 x i8> [[TMP4]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1434; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <4 x i8> [[TMP8]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1435; CHECK-NEXT: [[TMP20:%.*]] = shufflevector <16 x i8> [[TMP15]], <16 x i8> [[TMP16]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1436; CHECK-NEXT: [[TMP21:%.*]] = shufflevector <4 x i8> [[TMP12]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1437; CHECK-NEXT: [[TMP17:%.*]] = shufflevector <16 x i8> [[TMP20]], <16 x i8> [[TMP21]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1438; CHECK-NEXT: [[TMP18:%.*]] = zext <16 x i8> [[TMP17]] to <16 x i32>1439; CHECK-NEXT: [[TMP19:%.*]] = load <4 x i8>, ptr [[ADD_PTR64_2]], align 11440; CHECK-NEXT: [[TMP22:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1441; CHECK-NEXT: [[TMP23:%.*]] = shufflevector <4 x i8> [[TMP5]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1442; CHECK-NEXT: [[TMP28:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> [[TMP5]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1443; CHECK-NEXT: [[TMP29:%.*]] = shufflevector <4 x i8> [[TMP9]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1444; CHECK-NEXT: [[TMP30:%.*]] = shufflevector <16 x i8> [[TMP28]], <16 x i8> [[TMP29]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1445; CHECK-NEXT: [[TMP31:%.*]] = shufflevector <4 x i8> [[TMP19]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1446; CHECK-NEXT: [[TMP24:%.*]] = shufflevector <16 x i8> [[TMP30]], <16 x i8> [[TMP31]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1447; CHECK-NEXT: [[TMP25:%.*]] = zext <16 x i8> [[TMP24]] to <16 x i32>1448; CHECK-NEXT: [[TMP26:%.*]] = sub nsw <16 x i32> [[TMP18]], [[TMP25]]1449; CHECK-NEXT: [[TMP27:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_3]], align 11450; CHECK-NEXT: [[TMP38:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1451; CHECK-NEXT: [[TMP66:%.*]] = shufflevector <4 x i8> [[TMP6]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1452; CHECK-NEXT: [[TMP67:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> [[TMP6]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1453; CHECK-NEXT: [[TMP35:%.*]] = shufflevector <4 x i8> [[TMP10]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1454; CHECK-NEXT: [[TMP36:%.*]] = shufflevector <16 x i8> [[TMP67]], <16 x i8> [[TMP35]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1455; CHECK-NEXT: [[TMP37:%.*]] = shufflevector <4 x i8> [[TMP27]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1456; CHECK-NEXT: [[TMP32:%.*]] = shufflevector <16 x i8> [[TMP36]], <16 x i8> [[TMP37]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1457; CHECK-NEXT: [[TMP33:%.*]] = zext <16 x i8> [[TMP32]] to <16 x i32>1458; CHECK-NEXT: [[TMP34:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_3]], align 11459; CHECK-NEXT: [[TMP68:%.*]] = shufflevector <4 x i8> [[TMP3]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1460; CHECK-NEXT: [[TMP69:%.*]] = shufflevector <4 x i8> [[TMP7]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1461; CHECK-NEXT: [[TMP70:%.*]] = shufflevector <4 x i8> [[TMP3]], <4 x i8> [[TMP7]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1462; CHECK-NEXT: [[TMP71:%.*]] = shufflevector <4 x i8> [[TMP11]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1463; CHECK-NEXT: [[TMP72:%.*]] = shufflevector <16 x i8> [[TMP70]], <16 x i8> [[TMP71]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>1464; CHECK-NEXT: [[TMP73:%.*]] = shufflevector <4 x i8> [[TMP34]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1465; CHECK-NEXT: [[TMP39:%.*]] = shufflevector <16 x i8> [[TMP72]], <16 x i8> [[TMP73]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>1466; CHECK-NEXT: [[TMP40:%.*]] = zext <16 x i8> [[TMP39]] to <16 x i32>1467; CHECK-NEXT: [[TMP41:%.*]] = sub nsw <16 x i32> [[TMP33]], [[TMP40]]1468; CHECK-NEXT: [[TMP42:%.*]] = shl nsw <16 x i32> [[TMP41]], splat (i32 16)1469; CHECK-NEXT: [[TMP43:%.*]] = add nsw <16 x i32> [[TMP42]], [[TMP26]]1470; CHECK-NEXT: [[TMP44:%.*]] = shufflevector <16 x i32> [[TMP43]], <16 x i32> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>1471; CHECK-NEXT: [[TMP45:%.*]] = add nsw <16 x i32> [[TMP43]], [[TMP44]]1472; CHECK-NEXT: [[TMP46:%.*]] = sub nsw <16 x i32> [[TMP43]], [[TMP44]]1473; CHECK-NEXT: [[TMP47:%.*]] = shufflevector <16 x i32> [[TMP45]], <16 x i32> [[TMP46]], <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>1474; CHECK-NEXT: [[TMP48:%.*]] = shufflevector <16 x i32> [[TMP47]], <16 x i32> poison, <16 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9, i32 14, i32 15, i32 12, i32 13>1475; CHECK-NEXT: [[TMP49:%.*]] = add nsw <16 x i32> [[TMP47]], [[TMP48]]1476; CHECK-NEXT: [[TMP50:%.*]] = sub nsw <16 x i32> [[TMP47]], [[TMP48]]1477; CHECK-NEXT: [[TMP51:%.*]] = shufflevector <16 x i32> [[TMP49]], <16 x i32> [[TMP50]], <16 x i32> <i32 16, i32 17, i32 2, i32 3, i32 20, i32 21, i32 6, i32 7, i32 24, i32 25, i32 10, i32 11, i32 28, i32 29, i32 14, i32 15>1478; CHECK-NEXT: [[TMP52:%.*]] = shufflevector <16 x i32> [[TMP51]], <16 x i32> poison, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11>1479; CHECK-NEXT: [[TMP53:%.*]] = sub nsw <16 x i32> [[TMP51]], [[TMP52]]1480; CHECK-NEXT: [[TMP54:%.*]] = add nsw <16 x i32> [[TMP51]], [[TMP52]]1481; CHECK-NEXT: [[TMP55:%.*]] = shufflevector <16 x i32> [[TMP53]], <16 x i32> [[TMP54]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 20, i32 21, i32 22, i32 23, i32 8, i32 9, i32 10, i32 11, i32 28, i32 29, i32 30, i32 31>1482; CHECK-NEXT: [[TMP56:%.*]] = shufflevector <16 x i32> [[TMP55]], <16 x i32> poison, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1483; CHECK-NEXT: [[TMP57:%.*]] = add nsw <16 x i32> [[TMP55]], [[TMP56]]1484; CHECK-NEXT: [[TMP58:%.*]] = sub nsw <16 x i32> [[TMP55]], [[TMP56]]1485; CHECK-NEXT: [[TMP59:%.*]] = shufflevector <16 x i32> [[TMP57]], <16 x i32> [[TMP58]], <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1486; CHECK-NEXT: [[TMP60:%.*]] = lshr <16 x i32> [[TMP59]], splat (i32 15)1487; CHECK-NEXT: [[TMP61:%.*]] = and <16 x i32> [[TMP60]], splat (i32 65537)1488; CHECK-NEXT: [[TMP62:%.*]] = mul nuw <16 x i32> [[TMP61]], splat (i32 65535)1489; CHECK-NEXT: [[TMP63:%.*]] = add <16 x i32> [[TMP62]], [[TMP59]]1490; CHECK-NEXT: [[TMP64:%.*]] = xor <16 x i32> [[TMP63]], [[TMP62]]1491; CHECK-NEXT: [[TMP65:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP64]])1492; CHECK-NEXT: [[CONV118:%.*]] = and i32 [[TMP65]], 655351493; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[TMP65]], 161494; CHECK-NEXT: [[ADD119:%.*]] = add nuw nsw i32 [[CONV118]], [[SHR]]1495; CHECK-NEXT: [[SHR120:%.*]] = lshr i32 [[ADD119]], 11496; CHECK-NEXT: ret i32 [[SHR120]]1497;1498entry:1499 %idx.ext = sext i32 %st1 to i641500 %idx.ext63 = sext i32 %st2 to i641501 %0 = load i8, ptr %p1, align 11502 %conv = zext i8 %0 to i321503 %1 = load i8, ptr %p2, align 11504 %conv2 = zext i8 %1 to i321505 %sub = sub nsw i32 %conv, %conv21506 %arrayidx3 = getelementptr inbounds i8, ptr %p1, i64 41507 %2 = load i8, ptr %arrayidx3, align 11508 %conv4 = zext i8 %2 to i321509 %arrayidx5 = getelementptr inbounds i8, ptr %p2, i64 41510 %3 = load i8, ptr %arrayidx5, align 11511 %conv6 = zext i8 %3 to i321512 %sub7 = sub nsw i32 %conv4, %conv61513 %shl = shl nsw i32 %sub7, 161514 %add = add nsw i32 %shl, %sub1515 %arrayidx8 = getelementptr inbounds i8, ptr %p1, i64 11516 %4 = load i8, ptr %arrayidx8, align 11517 %conv9 = zext i8 %4 to i321518 %arrayidx10 = getelementptr inbounds i8, ptr %p2, i64 11519 %5 = load i8, ptr %arrayidx10, align 11520 %conv11 = zext i8 %5 to i321521 %sub12 = sub nsw i32 %conv9, %conv111522 %arrayidx13 = getelementptr inbounds i8, ptr %p1, i64 51523 %6 = load i8, ptr %arrayidx13, align 11524 %conv14 = zext i8 %6 to i321525 %arrayidx15 = getelementptr inbounds i8, ptr %p2, i64 51526 %7 = load i8, ptr %arrayidx15, align 11527 %conv16 = zext i8 %7 to i321528 %sub17 = sub nsw i32 %conv14, %conv161529 %shl18 = shl nsw i32 %sub17, 161530 %add19 = add nsw i32 %shl18, %sub121531 %arrayidx20 = getelementptr inbounds i8, ptr %p1, i64 21532 %8 = load i8, ptr %arrayidx20, align 11533 %conv21 = zext i8 %8 to i321534 %arrayidx22 = getelementptr inbounds i8, ptr %p2, i64 21535 %9 = load i8, ptr %arrayidx22, align 11536 %conv23 = zext i8 %9 to i321537 %sub24 = sub nsw i32 %conv21, %conv231538 %arrayidx25 = getelementptr inbounds i8, ptr %p1, i64 61539 %10 = load i8, ptr %arrayidx25, align 11540 %conv26 = zext i8 %10 to i321541 %arrayidx27 = getelementptr inbounds i8, ptr %p2, i64 61542 %11 = load i8, ptr %arrayidx27, align 11543 %conv28 = zext i8 %11 to i321544 %sub29 = sub nsw i32 %conv26, %conv281545 %shl30 = shl nsw i32 %sub29, 161546 %add31 = add nsw i32 %shl30, %sub241547 %arrayidx32 = getelementptr inbounds i8, ptr %p1, i64 31548 %12 = load i8, ptr %arrayidx32, align 11549 %conv33 = zext i8 %12 to i321550 %arrayidx34 = getelementptr inbounds i8, ptr %p2, i64 31551 %13 = load i8, ptr %arrayidx34, align 11552 %conv35 = zext i8 %13 to i321553 %sub36 = sub nsw i32 %conv33, %conv351554 %arrayidx37 = getelementptr inbounds i8, ptr %p1, i64 71555 %14 = load i8, ptr %arrayidx37, align 11556 %conv38 = zext i8 %14 to i321557 %arrayidx39 = getelementptr inbounds i8, ptr %p2, i64 71558 %15 = load i8, ptr %arrayidx39, align 11559 %conv40 = zext i8 %15 to i321560 %sub41 = sub nsw i32 %conv38, %conv401561 %shl42 = shl nsw i32 %sub41, 161562 %add43 = add nsw i32 %shl42, %sub361563 %add44 = add nsw i32 %add19, %add1564 %sub45 = sub nsw i32 %add, %add191565 %add46 = add nsw i32 %add43, %add311566 %sub47 = sub nsw i32 %add31, %add431567 %add48 = add nsw i32 %add46, %add441568 %sub51 = sub nsw i32 %add44, %add461569 %add55 = add nsw i32 %sub47, %sub451570 %sub59 = sub nsw i32 %sub45, %sub471571 %add.ptr = getelementptr inbounds i8, ptr %p1, i64 %idx.ext1572 %add.ptr64 = getelementptr inbounds i8, ptr %p2, i64 %idx.ext631573 %16 = load i8, ptr %add.ptr, align 11574 %conv.1 = zext i8 %16 to i321575 %17 = load i8, ptr %add.ptr64, align 11576 %conv2.1 = zext i8 %17 to i321577 %sub.1 = sub nsw i32 %conv.1, %conv2.11578 %arrayidx3.1 = getelementptr inbounds i8, ptr %add.ptr, i64 41579 %18 = load i8, ptr %arrayidx3.1, align 11580 %conv4.1 = zext i8 %18 to i321581 %arrayidx5.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 41582 %19 = load i8, ptr %arrayidx5.1, align 11583 %conv6.1 = zext i8 %19 to i321584 %sub7.1 = sub nsw i32 %conv4.1, %conv6.11585 %shl.1 = shl nsw i32 %sub7.1, 161586 %add.1 = add nsw i32 %shl.1, %sub.11587 %arrayidx8.1 = getelementptr inbounds i8, ptr %add.ptr, i64 11588 %20 = load i8, ptr %arrayidx8.1, align 11589 %conv9.1 = zext i8 %20 to i321590 %arrayidx10.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 11591 %21 = load i8, ptr %arrayidx10.1, align 11592 %conv11.1 = zext i8 %21 to i321593 %sub12.1 = sub nsw i32 %conv9.1, %conv11.11594 %arrayidx13.1 = getelementptr inbounds i8, ptr %add.ptr, i64 51595 %22 = load i8, ptr %arrayidx13.1, align 11596 %conv14.1 = zext i8 %22 to i321597 %arrayidx15.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 51598 %23 = load i8, ptr %arrayidx15.1, align 11599 %conv16.1 = zext i8 %23 to i321600 %sub17.1 = sub nsw i32 %conv14.1, %conv16.11601 %shl18.1 = shl nsw i32 %sub17.1, 161602 %add19.1 = add nsw i32 %shl18.1, %sub12.11603 %arrayidx20.1 = getelementptr inbounds i8, ptr %add.ptr, i64 21604 %24 = load i8, ptr %arrayidx20.1, align 11605 %conv21.1 = zext i8 %24 to i321606 %arrayidx22.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 21607 %25 = load i8, ptr %arrayidx22.1, align 11608 %conv23.1 = zext i8 %25 to i321609 %sub24.1 = sub nsw i32 %conv21.1, %conv23.11610 %arrayidx25.1 = getelementptr inbounds i8, ptr %add.ptr, i64 61611 %26 = load i8, ptr %arrayidx25.1, align 11612 %conv26.1 = zext i8 %26 to i321613 %arrayidx27.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 61614 %27 = load i8, ptr %arrayidx27.1, align 11615 %conv28.1 = zext i8 %27 to i321616 %sub29.1 = sub nsw i32 %conv26.1, %conv28.11617 %shl30.1 = shl nsw i32 %sub29.1, 161618 %add31.1 = add nsw i32 %shl30.1, %sub24.11619 %arrayidx32.1 = getelementptr inbounds i8, ptr %add.ptr, i64 31620 %28 = load i8, ptr %arrayidx32.1, align 11621 %conv33.1 = zext i8 %28 to i321622 %arrayidx34.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 31623 %29 = load i8, ptr %arrayidx34.1, align 11624 %conv35.1 = zext i8 %29 to i321625 %sub36.1 = sub nsw i32 %conv33.1, %conv35.11626 %arrayidx37.1 = getelementptr inbounds i8, ptr %add.ptr, i64 71627 %30 = load i8, ptr %arrayidx37.1, align 11628 %conv38.1 = zext i8 %30 to i321629 %arrayidx39.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 71630 %31 = load i8, ptr %arrayidx39.1, align 11631 %conv40.1 = zext i8 %31 to i321632 %sub41.1 = sub nsw i32 %conv38.1, %conv40.11633 %shl42.1 = shl nsw i32 %sub41.1, 161634 %add43.1 = add nsw i32 %shl42.1, %sub36.11635 %add44.1 = add nsw i32 %add19.1, %add.11636 %sub45.1 = sub nsw i32 %add.1, %add19.11637 %add46.1 = add nsw i32 %add43.1, %add31.11638 %sub47.1 = sub nsw i32 %add31.1, %add43.11639 %add48.1 = add nsw i32 %add46.1, %add44.11640 %sub51.1 = sub nsw i32 %add44.1, %add46.11641 %add55.1 = add nsw i32 %sub47.1, %sub45.11642 %sub59.1 = sub nsw i32 %sub45.1, %sub47.11643 %add.ptr.1 = getelementptr inbounds i8, ptr %add.ptr, i64 %idx.ext1644 %add.ptr64.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 %idx.ext631645 %32 = load i8, ptr %add.ptr.1, align 11646 %conv.2 = zext i8 %32 to i321647 %33 = load i8, ptr %add.ptr64.1, align 11648 %conv2.2 = zext i8 %33 to i321649 %sub.2 = sub nsw i32 %conv.2, %conv2.21650 %arrayidx3.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 41651 %34 = load i8, ptr %arrayidx3.2, align 11652 %conv4.2 = zext i8 %34 to i321653 %arrayidx5.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 41654 %35 = load i8, ptr %arrayidx5.2, align 11655 %conv6.2 = zext i8 %35 to i321656 %sub7.2 = sub nsw i32 %conv4.2, %conv6.21657 %shl.2 = shl nsw i32 %sub7.2, 161658 %add.2 = add nsw i32 %shl.2, %sub.21659 %arrayidx8.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 11660 %36 = load i8, ptr %arrayidx8.2, align 11661 %conv9.2 = zext i8 %36 to i321662 %arrayidx10.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 11663 %37 = load i8, ptr %arrayidx10.2, align 11664 %conv11.2 = zext i8 %37 to i321665 %sub12.2 = sub nsw i32 %conv9.2, %conv11.21666 %arrayidx13.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 51667 %38 = load i8, ptr %arrayidx13.2, align 11668 %conv14.2 = zext i8 %38 to i321669 %arrayidx15.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 51670 %39 = load i8, ptr %arrayidx15.2, align 11671 %conv16.2 = zext i8 %39 to i321672 %sub17.2 = sub nsw i32 %conv14.2, %conv16.21673 %shl18.2 = shl nsw i32 %sub17.2, 161674 %add19.2 = add nsw i32 %shl18.2, %sub12.21675 %arrayidx20.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 21676 %40 = load i8, ptr %arrayidx20.2, align 11677 %conv21.2 = zext i8 %40 to i321678 %arrayidx22.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 21679 %41 = load i8, ptr %arrayidx22.2, align 11680 %conv23.2 = zext i8 %41 to i321681 %sub24.2 = sub nsw i32 %conv21.2, %conv23.21682 %arrayidx25.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 61683 %42 = load i8, ptr %arrayidx25.2, align 11684 %conv26.2 = zext i8 %42 to i321685 %arrayidx27.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 61686 %43 = load i8, ptr %arrayidx27.2, align 11687 %conv28.2 = zext i8 %43 to i321688 %sub29.2 = sub nsw i32 %conv26.2, %conv28.21689 %shl30.2 = shl nsw i32 %sub29.2, 161690 %add31.2 = add nsw i32 %shl30.2, %sub24.21691 %arrayidx32.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 31692 %44 = load i8, ptr %arrayidx32.2, align 11693 %conv33.2 = zext i8 %44 to i321694 %arrayidx34.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 31695 %45 = load i8, ptr %arrayidx34.2, align 11696 %conv35.2 = zext i8 %45 to i321697 %sub36.2 = sub nsw i32 %conv33.2, %conv35.21698 %arrayidx37.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 71699 %46 = load i8, ptr %arrayidx37.2, align 11700 %conv38.2 = zext i8 %46 to i321701 %arrayidx39.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 71702 %47 = load i8, ptr %arrayidx39.2, align 11703 %conv40.2 = zext i8 %47 to i321704 %sub41.2 = sub nsw i32 %conv38.2, %conv40.21705 %shl42.2 = shl nsw i32 %sub41.2, 161706 %add43.2 = add nsw i32 %shl42.2, %sub36.21707 %add44.2 = add nsw i32 %add19.2, %add.21708 %sub45.2 = sub nsw i32 %add.2, %add19.21709 %add46.2 = add nsw i32 %add43.2, %add31.21710 %sub47.2 = sub nsw i32 %add31.2, %add43.21711 %add48.2 = add nsw i32 %add46.2, %add44.21712 %sub51.2 = sub nsw i32 %add44.2, %add46.21713 %add55.2 = add nsw i32 %sub47.2, %sub45.21714 %sub59.2 = sub nsw i32 %sub45.2, %sub47.21715 %add.ptr.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 %idx.ext1716 %add.ptr64.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 %idx.ext631717 %48 = load i8, ptr %add.ptr.2, align 11718 %conv.3 = zext i8 %48 to i321719 %49 = load i8, ptr %add.ptr64.2, align 11720 %conv2.3 = zext i8 %49 to i321721 %sub.3 = sub nsw i32 %conv.3, %conv2.31722 %arrayidx3.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 41723 %50 = load i8, ptr %arrayidx3.3, align 11724 %conv4.3 = zext i8 %50 to i321725 %arrayidx5.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 41726 %51 = load i8, ptr %arrayidx5.3, align 11727 %conv6.3 = zext i8 %51 to i321728 %sub7.3 = sub nsw i32 %conv4.3, %conv6.31729 %shl.3 = shl nsw i32 %sub7.3, 161730 %add.3 = add nsw i32 %shl.3, %sub.31731 %arrayidx8.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 11732 %52 = load i8, ptr %arrayidx8.3, align 11733 %conv9.3 = zext i8 %52 to i321734 %arrayidx10.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 11735 %53 = load i8, ptr %arrayidx10.3, align 11736 %conv11.3 = zext i8 %53 to i321737 %sub12.3 = sub nsw i32 %conv9.3, %conv11.31738 %arrayidx13.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 51739 %54 = load i8, ptr %arrayidx13.3, align 11740 %conv14.3 = zext i8 %54 to i321741 %arrayidx15.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 51742 %55 = load i8, ptr %arrayidx15.3, align 11743 %conv16.3 = zext i8 %55 to i321744 %sub17.3 = sub nsw i32 %conv14.3, %conv16.31745 %shl18.3 = shl nsw i32 %sub17.3, 161746 %add19.3 = add nsw i32 %shl18.3, %sub12.31747 %arrayidx20.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 21748 %56 = load i8, ptr %arrayidx20.3, align 11749 %conv21.3 = zext i8 %56 to i321750 %arrayidx22.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 21751 %57 = load i8, ptr %arrayidx22.3, align 11752 %conv23.3 = zext i8 %57 to i321753 %sub24.3 = sub nsw i32 %conv21.3, %conv23.31754 %arrayidx25.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 61755 %58 = load i8, ptr %arrayidx25.3, align 11756 %conv26.3 = zext i8 %58 to i321757 %arrayidx27.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 61758 %59 = load i8, ptr %arrayidx27.3, align 11759 %conv28.3 = zext i8 %59 to i321760 %sub29.3 = sub nsw i32 %conv26.3, %conv28.31761 %shl30.3 = shl nsw i32 %sub29.3, 161762 %add31.3 = add nsw i32 %shl30.3, %sub24.31763 %arrayidx32.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 31764 %60 = load i8, ptr %arrayidx32.3, align 11765 %conv33.3 = zext i8 %60 to i321766 %arrayidx34.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 31767 %61 = load i8, ptr %arrayidx34.3, align 11768 %conv35.3 = zext i8 %61 to i321769 %sub36.3 = sub nsw i32 %conv33.3, %conv35.31770 %arrayidx37.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 71771 %62 = load i8, ptr %arrayidx37.3, align 11772 %conv38.3 = zext i8 %62 to i321773 %arrayidx39.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 71774 %63 = load i8, ptr %arrayidx39.3, align 11775 %conv40.3 = zext i8 %63 to i321776 %sub41.3 = sub nsw i32 %conv38.3, %conv40.31777 %shl42.3 = shl nsw i32 %sub41.3, 161778 %add43.3 = add nsw i32 %shl42.3, %sub36.31779 %add44.3 = add nsw i32 %add19.3, %add.31780 %sub45.3 = sub nsw i32 %add.3, %add19.31781 %add46.3 = add nsw i32 %add43.3, %add31.31782 %sub47.3 = sub nsw i32 %add31.3, %add43.31783 %add48.3 = add nsw i32 %add46.3, %add44.31784 %sub51.3 = sub nsw i32 %add44.3, %add46.31785 %add55.3 = add nsw i32 %sub47.3, %sub45.31786 %sub59.3 = sub nsw i32 %sub45.3, %sub47.31787 %add78 = add nsw i32 %add48.1, %add481788 %sub86 = sub nsw i32 %add48, %add48.11789 %add94 = add nsw i32 %add48.3, %add48.21790 %sub102 = sub nsw i32 %add48.2, %add48.31791 %add103 = add nsw i32 %add94, %add781792 %sub104 = sub nsw i32 %add78, %add941793 %add105 = add nsw i32 %sub102, %sub861794 %sub106 = sub nsw i32 %sub86, %sub1021795 %shr.i = lshr i32 %add103, 151796 %and.i = and i32 %shr.i, 655371797 %mul.i = mul nuw i32 %and.i, 655351798 %add.i = add i32 %mul.i, %add1031799 %xor.i = xor i32 %add.i, %mul.i1800 %shr.i184 = lshr i32 %add105, 151801 %and.i185 = and i32 %shr.i184, 655371802 %mul.i186 = mul nuw i32 %and.i185, 655351803 %add.i187 = add i32 %mul.i186, %add1051804 %xor.i188 = xor i32 %add.i187, %mul.i1861805 %shr.i189 = lshr i32 %sub104, 151806 %and.i190 = and i32 %shr.i189, 655371807 %mul.i191 = mul nuw i32 %and.i190, 655351808 %add.i192 = add i32 %mul.i191, %sub1041809 %xor.i193 = xor i32 %add.i192, %mul.i1911810 %shr.i194 = lshr i32 %sub106, 151811 %and.i195 = and i32 %shr.i194, 655371812 %mul.i196 = mul nuw i32 %and.i195, 655351813 %add.i197 = add i32 %mul.i196, %sub1061814 %xor.i198 = xor i32 %add.i197, %mul.i1961815 %add110 = add i32 %xor.i188, %xor.i1816 %add112 = add i32 %add110, %xor.i1931817 %add113 = add i32 %add112, %xor.i1981818 %add78.1 = add nsw i32 %add55.1, %add551819 %sub86.1 = sub nsw i32 %add55, %add55.11820 %add94.1 = add nsw i32 %add55.3, %add55.21821 %sub102.1 = sub nsw i32 %add55.2, %add55.31822 %add103.1 = add nsw i32 %add94.1, %add78.11823 %sub104.1 = sub nsw i32 %add78.1, %add94.11824 %add105.1 = add nsw i32 %sub102.1, %sub86.11825 %sub106.1 = sub nsw i32 %sub86.1, %sub102.11826 %shr.i.1 = lshr i32 %add103.1, 151827 %and.i.1 = and i32 %shr.i.1, 655371828 %mul.i.1 = mul nuw i32 %and.i.1, 655351829 %add.i.1 = add i32 %mul.i.1, %add103.11830 %xor.i.1 = xor i32 %add.i.1, %mul.i.11831 %shr.i184.1 = lshr i32 %add105.1, 151832 %and.i185.1 = and i32 %shr.i184.1, 655371833 %mul.i186.1 = mul nuw i32 %and.i185.1, 655351834 %add.i187.1 = add i32 %mul.i186.1, %add105.11835 %xor.i188.1 = xor i32 %add.i187.1, %mul.i186.11836 %shr.i189.1 = lshr i32 %sub104.1, 151837 %and.i190.1 = and i32 %shr.i189.1, 655371838 %mul.i191.1 = mul nuw i32 %and.i190.1, 655351839 %add.i192.1 = add i32 %mul.i191.1, %sub104.11840 %xor.i193.1 = xor i32 %add.i192.1, %mul.i191.11841 %shr.i194.1 = lshr i32 %sub106.1, 151842 %and.i195.1 = and i32 %shr.i194.1, 655371843 %mul.i196.1 = mul nuw i32 %and.i195.1, 655351844 %add.i197.1 = add i32 %mul.i196.1, %sub106.11845 %xor.i198.1 = xor i32 %add.i197.1, %mul.i196.11846 %add108.1 = add i32 %xor.i188.1, %add1131847 %add110.1 = add i32 %add108.1, %xor.i.11848 %add112.1 = add i32 %add110.1, %xor.i193.11849 %add113.1 = add i32 %add112.1, %xor.i198.11850 %add78.2 = add nsw i32 %sub51.1, %sub511851 %sub86.2 = sub nsw i32 %sub51, %sub51.11852 %add94.2 = add nsw i32 %sub51.3, %sub51.21853 %sub102.2 = sub nsw i32 %sub51.2, %sub51.31854 %add103.2 = add nsw i32 %add94.2, %add78.21855 %sub104.2 = sub nsw i32 %add78.2, %add94.21856 %add105.2 = add nsw i32 %sub102.2, %sub86.21857 %sub106.2 = sub nsw i32 %sub86.2, %sub102.21858 %shr.i.2 = lshr i32 %add103.2, 151859 %and.i.2 = and i32 %shr.i.2, 655371860 %mul.i.2 = mul nuw i32 %and.i.2, 655351861 %add.i.2 = add i32 %mul.i.2, %add103.21862 %xor.i.2 = xor i32 %add.i.2, %mul.i.21863 %shr.i184.2 = lshr i32 %add105.2, 151864 %and.i185.2 = and i32 %shr.i184.2, 655371865 %mul.i186.2 = mul nuw i32 %and.i185.2, 655351866 %add.i187.2 = add i32 %mul.i186.2, %add105.21867 %xor.i188.2 = xor i32 %add.i187.2, %mul.i186.21868 %shr.i189.2 = lshr i32 %sub104.2, 151869 %and.i190.2 = and i32 %shr.i189.2, 655371870 %mul.i191.2 = mul nuw i32 %and.i190.2, 655351871 %add.i192.2 = add i32 %mul.i191.2, %sub104.21872 %xor.i193.2 = xor i32 %add.i192.2, %mul.i191.21873 %shr.i194.2 = lshr i32 %sub106.2, 151874 %and.i195.2 = and i32 %shr.i194.2, 655371875 %mul.i196.2 = mul nuw i32 %and.i195.2, 655351876 %add.i197.2 = add i32 %mul.i196.2, %sub106.21877 %xor.i198.2 = xor i32 %add.i197.2, %mul.i196.21878 %add108.2 = add i32 %xor.i188.2, %add113.11879 %add110.2 = add i32 %add108.2, %xor.i.21880 %add112.2 = add i32 %add110.2, %xor.i193.21881 %add113.2 = add i32 %add112.2, %xor.i198.21882 %add78.3 = add nsw i32 %sub59.1, %sub591883 %sub86.3 = sub nsw i32 %sub59, %sub59.11884 %add94.3 = add nsw i32 %sub59.3, %sub59.21885 %sub102.3 = sub nsw i32 %sub59.2, %sub59.31886 %add103.3 = add nsw i32 %add94.3, %add78.31887 %sub104.3 = sub nsw i32 %add78.3, %add94.31888 %add105.3 = add nsw i32 %sub102.3, %sub86.31889 %sub106.3 = sub nsw i32 %sub86.3, %sub102.31890 %shr.i.3 = lshr i32 %add103.3, 151891 %and.i.3 = and i32 %shr.i.3, 655371892 %mul.i.3 = mul nuw i32 %and.i.3, 655351893 %add.i.3 = add i32 %mul.i.3, %add103.31894 %xor.i.3 = xor i32 %add.i.3, %mul.i.31895 %shr.i184.3 = lshr i32 %add105.3, 151896 %and.i185.3 = and i32 %shr.i184.3, 655371897 %mul.i186.3 = mul nuw i32 %and.i185.3, 655351898 %add.i187.3 = add i32 %mul.i186.3, %add105.31899 %xor.i188.3 = xor i32 %add.i187.3, %mul.i186.31900 %shr.i189.3 = lshr i32 %sub104.3, 151901 %and.i190.3 = and i32 %shr.i189.3, 655371902 %mul.i191.3 = mul nuw i32 %and.i190.3, 655351903 %add.i192.3 = add i32 %mul.i191.3, %sub104.31904 %xor.i193.3 = xor i32 %add.i192.3, %mul.i191.31905 %shr.i194.3 = lshr i32 %sub106.3, 151906 %and.i195.3 = and i32 %shr.i194.3, 655371907 %mul.i196.3 = mul nuw i32 %and.i195.3, 655351908 %add.i197.3 = add i32 %mul.i196.3, %sub106.31909 %xor.i198.3 = xor i32 %add.i197.3, %mul.i196.31910 %add108.3 = add i32 %xor.i188.3, %add113.21911 %add110.3 = add i32 %add108.3, %xor.i.31912 %add112.3 = add i32 %add110.3, %xor.i193.31913 %add113.3 = add i32 %add112.3, %xor.i198.31914 %conv118 = and i32 %add113.3, 655351915 %shr = lshr i32 %add113.3, 161916 %add119 = add nuw nsw i32 %conv118, %shr1917 %shr120 = lshr i32 %add119, 11918 ret i32 %shr1201919}1920