1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes=slp-vectorizer,instcombine -mtriple=aarch64--linux-gnu < %s | FileCheck %s 3 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 2 11; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64 12; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]] 13; CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 2 14; CHECK-NEXT: [[MUL2:%.*]] = shl nsw i32 [[STRIDE]], 1 15; CHECK-NEXT: [[IDXPROM3:%.*]] = sext i32 [[MUL2]] to i64 16; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM3]] 17; CHECK-NEXT: [[TMP2:%.*]] = load i16, ptr [[ARRAYIDX4]], align 2 18; CHECK-NEXT: [[MUL5:%.*]] = mul nsw i32 [[STRIDE]], 3 19; CHECK-NEXT: [[IDXPROM6:%.*]] = sext i32 [[MUL5]] to i64 20; CHECK-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM6]] 21; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX7]], align 2 22; CHECK-NEXT: [[MUL8:%.*]] = shl nsw i32 [[STRIDE]], 2 23; CHECK-NEXT: [[IDXPROM9:%.*]] = sext i32 [[MUL8]] to i64 24; CHECK-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM9]] 25; CHECK-NEXT: [[TMP4:%.*]] = load i16, ptr [[ARRAYIDX10]], align 2 26; CHECK-NEXT: [[MUL11:%.*]] = mul nsw i32 [[STRIDE]], 5 27; CHECK-NEXT: [[IDXPROM12:%.*]] = sext i32 [[MUL11]] to i64 28; CHECK-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM12]] 29; CHECK-NEXT: [[TMP5:%.*]] = load i16, ptr [[ARRAYIDX13]], align 2 30; CHECK-NEXT: [[MUL14:%.*]] = mul nsw i32 [[STRIDE]], 6 31; CHECK-NEXT: [[IDXPROM15:%.*]] = sext i32 [[MUL14]] to i64 32; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM15]] 33; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[ARRAYIDX16]], align 2 34; CHECK-NEXT: [[MUL17:%.*]] = mul nsw i32 [[STRIDE]], 7 35; CHECK-NEXT: [[IDXPROM18:%.*]] = sext i32 [[MUL17]] to i64 36; CHECK-NEXT: [[ARRAYIDX19:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM18]] 37; CHECK-NEXT: [[TMP7:%.*]] = load i16, ptr [[ARRAYIDX19]], align 2 38; CHECK-NEXT: [[TMP8:%.*]] = load i16, ptr [[Y:%.*]], align 2 39; CHECK-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]] 40; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[ARRAYIDX23]], align 2 41; CHECK-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM3]] 42; CHECK-NEXT: [[TMP10:%.*]] = load i16, ptr [[ARRAYIDX26]], align 2 43; CHECK-NEXT: [[ARRAYIDX29:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM6]] 44; CHECK-NEXT: [[TMP11:%.*]] = load i16, ptr [[ARRAYIDX29]], align 2 45; CHECK-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM9]] 46; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[ARRAYIDX32]], align 2 47; CHECK-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM12]] 48; CHECK-NEXT: [[TMP13:%.*]] = load i16, ptr [[ARRAYIDX35]], align 2 49; CHECK-NEXT: [[ARRAYIDX38:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM15]] 50; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[ARRAYIDX38]], align 2 51; CHECK-NEXT: [[ARRAYIDX41:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM18]] 52; CHECK-NEXT: [[TMP15:%.*]] = load i16, ptr [[ARRAYIDX41]], align 2 53; 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 2 72 %idxprom = sext i32 %stride to i64 73 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 %idxprom 74 %1 = load i16, ptr %arrayidx1, align 2 75 %mul2 = shl nsw i32 %stride, 1 76 %idxprom3 = sext i32 %mul2 to i64 77 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom3 78 %2 = load i16, ptr %arrayidx4, align 2 79 %mul5 = mul nsw i32 %stride, 3 80 %idxprom6 = sext i32 %mul5 to i64 81 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom6 82 %3 = load i16, ptr %arrayidx7, align 2 83 %mul8 = shl nsw i32 %stride, 2 84 %idxprom9 = sext i32 %mul8 to i64 85 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom9 86 %4 = load i16, ptr %arrayidx10, align 2 87 %mul11 = mul nsw i32 %stride, 5 88 %idxprom12 = sext i32 %mul11 to i64 89 %arrayidx13 = getelementptr inbounds i16, ptr %x, i64 %idxprom12 90 %5 = load i16, ptr %arrayidx13, align 2 91 %mul14 = mul nsw i32 %stride, 6 92 %idxprom15 = sext i32 %mul14 to i64 93 %arrayidx16 = getelementptr inbounds i16, ptr %x, i64 %idxprom15 94 %6 = load i16, ptr %arrayidx16, align 2 95 %mul17 = mul nsw i32 %stride, 7 96 %idxprom18 = sext i32 %mul17 to i64 97 %arrayidx19 = getelementptr inbounds i16, ptr %x, i64 %idxprom18 98 %7 = load i16, ptr %arrayidx19, align 2 99 %8 = load i16, ptr %y, align 2 100 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom 101 %9 = load i16, ptr %arrayidx23, align 2 102 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom3 103 %10 = load i16, ptr %arrayidx26, align 2 104 %arrayidx29 = getelementptr inbounds i16, ptr %y, i64 %idxprom6 105 %11 = load i16, ptr %arrayidx29, align 2 106 %arrayidx32 = getelementptr inbounds i16, ptr %y, i64 %idxprom9 107 %12 = load i16, ptr %arrayidx32, align 2 108 %arrayidx35 = getelementptr inbounds i16, ptr %y, i64 %idxprom12 109 %13 = load i16, ptr %arrayidx35, align 2 110 %arrayidx38 = getelementptr inbounds i16, ptr %y, i64 %idxprom15 111 %14 = load i16, ptr %arrayidx38, align 2 112 %arrayidx41 = getelementptr inbounds i16, ptr %y, i64 %idxprom18 113 %15 = load i16, ptr %arrayidx41, align 2 114 %mul43 = mul i16 %8, %0 115 %mul48 = mul i16 %9, %1 116 %add49 = add i16 %mul48, %mul43 117 %mul54 = mul i16 %10, %2 118 %add55 = add i16 %add49, %mul54 119 %mul60 = mul i16 %11, %3 120 %add61 = add i16 %add55, %mul60 121 %mul66 = mul i16 %12, %4 122 %add67 = add i16 %add61, %mul66 123 %mul72 = mul i16 %13, %5 124 %add73 = add i16 %add67, %mul72 125 %mul78 = mul i16 %14, %6 126 %add79 = add i16 %add73, %mul78 127 %mul84 = mul i16 %15, %7 128 %add85 = add i16 %add79, %mul84 129 ret i16 %add85 130} 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 2 136; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 2 137; CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 2 138; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64 139; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]] 140; CHECK-NEXT: [[TMP2:%.*]] = load i16, ptr [[ARRAYIDX2]], align 2 141; CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[STRIDE]], 1 142; CHECK-NEXT: [[IDXPROM4:%.*]] = sext i32 [[ADD3]] to i64 143; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM4]] 144; CHECK-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX5]], align 2 145; CHECK-NEXT: [[MUL:%.*]] = shl nsw i32 [[STRIDE]], 1 146; CHECK-NEXT: [[IDXPROM7:%.*]] = sext i32 [[MUL]] to i64 147; CHECK-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM7]] 148; CHECK-NEXT: [[TMP4:%.*]] = load i16, ptr [[ARRAYIDX8]], align 2 149; CHECK-NEXT: [[ADD10:%.*]] = or disjoint i32 [[MUL]], 1 150; CHECK-NEXT: [[IDXPROM11:%.*]] = sext i32 [[ADD10]] to i64 151; CHECK-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM11]] 152; CHECK-NEXT: [[TMP5:%.*]] = load i16, ptr [[ARRAYIDX12]], align 2 153; CHECK-NEXT: [[MUL13:%.*]] = mul nsw i32 [[STRIDE]], 3 154; CHECK-NEXT: [[IDXPROM15:%.*]] = sext i32 [[MUL13]] to i64 155; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM15]] 156; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[ARRAYIDX16]], align 2 157; CHECK-NEXT: [[ADD18:%.*]] = add nsw i32 [[MUL13]], 1 158; CHECK-NEXT: [[IDXPROM19:%.*]] = sext i32 [[ADD18]] to i64 159; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM19]] 160; CHECK-NEXT: [[TMP7:%.*]] = load i16, ptr [[ARRAYIDX20]], align 2 161; CHECK-NEXT: [[TMP8:%.*]] = load i16, ptr [[Y:%.*]], align 2 162; CHECK-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]] 163; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[ARRAYIDX24]], align 2 164; CHECK-NEXT: [[ARRAYIDX28:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM7]] 165; CHECK-NEXT: [[TMP10:%.*]] = load i16, ptr [[ARRAYIDX28]], align 2 166; CHECK-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM15]] 167; CHECK-NEXT: [[TMP11:%.*]] = load i16, ptr [[ARRAYIDX32]], align 2 168; CHECK-NEXT: [[ARRAYIDX33:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 2 169; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[ARRAYIDX33]], align 2 170; CHECK-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM4]] 171; CHECK-NEXT: [[TMP13:%.*]] = load i16, ptr [[ARRAYIDX36]], align 2 172; CHECK-NEXT: [[ARRAYIDX40:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM11]] 173; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[ARRAYIDX40]], align 2 174; CHECK-NEXT: [[ARRAYIDX44:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM19]] 175; CHECK-NEXT: [[TMP15:%.*]] = load i16, ptr [[ARRAYIDX44]], align 2 176; 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 2 195 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1 196 %1 = load i16, ptr %arrayidx1, align 2 197 %idxprom = sext i32 %stride to i64 198 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 %idxprom 199 %2 = load i16, ptr %arrayidx2, align 2 200 %add3 = add nsw i32 %stride, 1 201 %idxprom4 = sext i32 %add3 to i64 202 %arrayidx5 = getelementptr inbounds i16, ptr %x, i64 %idxprom4 203 %3 = load i16, ptr %arrayidx5, align 2 204 %mul = shl nsw i32 %stride, 1 205 %idxprom7 = sext i32 %mul to i64 206 %arrayidx8 = getelementptr inbounds i16, ptr %x, i64 %idxprom7 207 %4 = load i16, ptr %arrayidx8, align 2 208 %add10 = or disjoint i32 %mul, 1 209 %idxprom11 = sext i32 %add10 to i64 210 %arrayidx12 = getelementptr inbounds i16, ptr %x, i64 %idxprom11 211 %5 = load i16, ptr %arrayidx12, align 2 212 %mul13 = mul nsw i32 %stride, 3 213 %idxprom15 = sext i32 %mul13 to i64 214 %arrayidx16 = getelementptr inbounds i16, ptr %x, i64 %idxprom15 215 %6 = load i16, ptr %arrayidx16, align 2 216 %add18 = add nsw i32 %mul13, 1 217 %idxprom19 = sext i32 %add18 to i64 218 %arrayidx20 = getelementptr inbounds i16, ptr %x, i64 %idxprom19 219 %7 = load i16, ptr %arrayidx20, align 2 220 %8 = load i16, ptr %y, align 2 221 %arrayidx24 = getelementptr inbounds i16, ptr %y, i64 %idxprom 222 %9 = load i16, ptr %arrayidx24, align 2 223 %arrayidx28 = getelementptr inbounds i16, ptr %y, i64 %idxprom7 224 %10 = load i16, ptr %arrayidx28, align 2 225 %arrayidx32 = getelementptr inbounds i16, ptr %y, i64 %idxprom15 226 %11 = load i16, ptr %arrayidx32, align 2 227 %arrayidx33 = getelementptr inbounds i16, ptr %y, i64 1 228 %12 = load i16, ptr %arrayidx33, align 2 229 %arrayidx36 = getelementptr inbounds i16, ptr %y, i64 %idxprom4 230 %13 = load i16, ptr %arrayidx36, align 2 231 %arrayidx40 = getelementptr inbounds i16, ptr %y, i64 %idxprom11 232 %14 = load i16, ptr %arrayidx40, align 2 233 %arrayidx44 = getelementptr inbounds i16, ptr %y, i64 %idxprom19 234 %15 = load i16, ptr %arrayidx44, align 2 235 %mul46 = mul i16 %8, %0 236 %mul52 = mul i16 %12, %1 237 %mul58 = mul i16 %9, %2 238 %mul64 = mul i16 %13, %3 239 %mul70 = mul i16 %10, %4 240 %mul76 = mul i16 %14, %5 241 %mul82 = mul i16 %11, %6 242 %mul88 = mul i16 %15, %7 243 %add53 = add i16 %mul58, %mul46 244 %add59 = add i16 %add53, %mul70 245 %add65 = add i16 %add59, %mul82 246 %add71 = add i16 %add65, %mul52 247 %add77 = add i16 %add71, %mul64 248 %add83 = add i16 %add77, %mul76 249 %add89 = add i16 %add83, %mul88 250 ret i16 %add89 251} 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 2 257; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 2 258; CHECK-NEXT: [[L1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 2 259; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 4 260; CHECK-NEXT: [[L2:%.*]] = load i16, ptr [[ARRAYIDX2]], align 2 261; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64 262; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]] 263; CHECK-NEXT: [[L4:%.*]] = load i16, ptr [[ARRAYIDX4]], align 2 264; CHECK-NEXT: [[ADD5:%.*]] = add nsw i32 [[STRIDE]], 1 265; CHECK-NEXT: [[IDXPROM6:%.*]] = sext i32 [[ADD5]] to i64 266; CHECK-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM6]] 267; CHECK-NEXT: [[L5:%.*]] = load i16, ptr [[ARRAYIDX7]], align 2 268; CHECK-NEXT: [[ADD8:%.*]] = add nsw i32 [[STRIDE]], 2 269; CHECK-NEXT: [[IDXPROM9:%.*]] = sext i32 [[ADD8]] to i64 270; CHECK-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM9]] 271; CHECK-NEXT: [[L6:%.*]] = load i16, ptr [[ARRAYIDX10]], align 2 272; CHECK-NEXT: [[L8:%.*]] = load i16, ptr [[Y:%.*]], align 2 273; CHECK-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 2 274; CHECK-NEXT: [[L9:%.*]] = load i16, ptr [[ARRAYIDX15]], align 2 275; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 4 276; CHECK-NEXT: [[L10:%.*]] = load i16, ptr [[ARRAYIDX16]], align 2 277; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]] 278; CHECK-NEXT: [[L12:%.*]] = load i16, ptr [[ARRAYIDX20]], align 2 279; CHECK-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM6]] 280; CHECK-NEXT: [[L13:%.*]] = load i16, ptr [[ARRAYIDX23]], align 2 281; CHECK-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM9]] 282; CHECK-NEXT: [[L14:%.*]] = load i16, ptr [[ARRAYIDX26]], align 2 283; CHECK-NEXT: [[MUL:%.*]] = mul i16 [[L8]], [[L0]] 284; CHECK-NEXT: [[MUL36:%.*]] = mul i16 [[L9]], [[L1]] 285; CHECK-NEXT: [[ADD37:%.*]] = add i16 [[MUL36]], [[MUL]] 286; CHECK-NEXT: [[MUL48:%.*]] = mul i16 [[L10]], [[L2]] 287; CHECK-NEXT: [[ADD49:%.*]] = add i16 [[ADD37]], [[MUL48]] 288; CHECK-NEXT: [[MUL54:%.*]] = mul i16 [[L13]], [[L5]] 289; CHECK-NEXT: [[ADD55:%.*]] = add i16 [[ADD49]], [[MUL54]] 290; CHECK-NEXT: [[MUL60:%.*]] = mul i16 [[L12]], [[L4]] 291; CHECK-NEXT: [[ADD61:%.*]] = add i16 [[ADD55]], [[MUL60]] 292; CHECK-NEXT: [[MUL72:%.*]] = mul i16 [[L14]], [[L6]] 293; CHECK-NEXT: [[ADD73:%.*]] = add i16 [[ADD61]], [[MUL72]] 294; CHECK-NEXT: ret i16 [[ADD73]] 295; 296entry: 297 %l0 = load i16, ptr %x, align 2 298 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1 299 %l1 = load i16, ptr %arrayidx1, align 2 300 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 2 301 %l2 = load i16, ptr %arrayidx2, align 2 302 %idxprom = sext i32 %stride to i64 303 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom 304 %l4 = load i16, ptr %arrayidx4, align 2 305 %add5 = add nsw i32 %stride, 1 306 %idxprom6 = sext i32 %add5 to i64 307 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom6 308 %l5 = load i16, ptr %arrayidx7, align 2 309 %add8 = add nsw i32 %stride, 2 310 %idxprom9 = sext i32 %add8 to i64 311 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom9 312 %l6 = load i16, ptr %arrayidx10, align 2 313 %add11 = add nsw i32 %stride, 3 314 %idxprom12 = sext i32 %add11 to i64 315 %l8 = load i16, ptr %y, align 2 316 %arrayidx15 = getelementptr inbounds i16, ptr %y, i64 1 317 %l9 = load i16, ptr %arrayidx15, align 2 318 %arrayidx16 = getelementptr inbounds i16, ptr %y, i64 2 319 %l10 = load i16, ptr %arrayidx16, align 2 320 %arrayidx20 = getelementptr inbounds i16, ptr %y, i64 %idxprom 321 %l12 = load i16, ptr %arrayidx20, align 2 322 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom6 323 %l13 = load i16, ptr %arrayidx23, align 2 324 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom9 325 %l14 = load i16, ptr %arrayidx26, align 2 326 %mul = mul i16 %l8, %l0 327 %mul36 = mul i16 %l9, %l1 328 %add37 = add i16 %mul36, %mul 329 %mul48 = mul i16 %l10, %l2 330 %add49 = add i16 %add37, %mul48 331 %mul54 = mul i16 %l13, %l5 332 %add55 = add i16 %add49, %mul54 333 %mul60 = mul i16 %l12, %l4 334 %add61 = add i16 %add55, %mul60 335 %mul72 = mul i16 %l14, %l6 336 %add73 = add i16 %add61, %mul72 337 ret i16 %add73 338} 339 340define i16 @reduce_blockstrided4(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, i32 noundef %stride) { 341; CHECK-LABEL: @reduce_blockstrided4( 342; CHECK-NEXT: entry: 343; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64 344; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X:%.*]], i64 [[IDXPROM]] 345; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y:%.*]], i64 [[IDXPROM]] 346; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i16>, ptr [[X]], align 2 347; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i16>, ptr [[ARRAYIDX4]], align 2 348; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr [[Y]], align 2 349; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr [[ARRAYIDX20]], align 2 350; CHECK-NEXT: [[TMP4:%.*]] = mul <4 x i16> [[TMP2]], [[TMP0]] 351; CHECK-NEXT: [[TMP5:%.*]] = mul <4 x i16> [[TMP3]], [[TMP1]] 352; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x i16> [[TMP4]], <4 x i16> [[TMP5]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 353; CHECK-NEXT: [[TMP7:%.*]] = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> [[TMP6]]) 354; CHECK-NEXT: ret i16 [[TMP7]] 355; 356entry: 357 %0 = load i16, ptr %x, align 2 358 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1 359 %1 = load i16, ptr %arrayidx1, align 2 360 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 2 361 %2 = load i16, ptr %arrayidx2, align 2 362 %arrayidx3 = getelementptr inbounds i16, ptr %x, i64 3 363 %3 = load i16, ptr %arrayidx3, align 2 364 %idxprom = sext i32 %stride to i64 365 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom 366 %4 = load i16, ptr %arrayidx4, align 2 367 %add5 = add nsw i32 %stride, 1 368 %idxprom6 = sext i32 %add5 to i64 369 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom6 370 %5 = load i16, ptr %arrayidx7, align 2 371 %add8 = add nsw i32 %stride, 2 372 %idxprom9 = sext i32 %add8 to i64 373 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom9 374 %6 = load i16, ptr %arrayidx10, align 2 375 %add11 = add nsw i32 %stride, 3 376 %idxprom12 = sext i32 %add11 to i64 377 %arrayidx13 = getelementptr inbounds i16, ptr %x, i64 %idxprom12 378 %7 = load i16, ptr %arrayidx13, align 2 379 %8 = load i16, ptr %y, align 2 380 %arrayidx15 = getelementptr inbounds i16, ptr %y, i64 1 381 %9 = load i16, ptr %arrayidx15, align 2 382 %arrayidx16 = getelementptr inbounds i16, ptr %y, i64 2 383 %10 = load i16, ptr %arrayidx16, align 2 384 %arrayidx17 = getelementptr inbounds i16, ptr %y, i64 3 385 %11 = load i16, ptr %arrayidx17, align 2 386 %arrayidx20 = getelementptr inbounds i16, ptr %y, i64 %idxprom 387 %12 = load i16, ptr %arrayidx20, align 2 388 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom6 389 %13 = load i16, ptr %arrayidx23, align 2 390 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom9 391 %14 = load i16, ptr %arrayidx26, align 2 392 %arrayidx29 = getelementptr inbounds i16, ptr %y, i64 %idxprom12 393 %15 = load i16, ptr %arrayidx29, align 2 394 %mul = mul i16 %8, %0 395 %mul36 = mul i16 %9, %1 396 %add37 = add i16 %mul36, %mul 397 %mul42 = mul i16 %11, %3 398 %add43 = add i16 %add37, %mul42 399 %mul48 = mul i16 %10, %2 400 %add49 = add i16 %add43, %mul48 401 %mul54 = mul i16 %13, %5 402 %add55 = add i16 %add49, %mul54 403 %mul60 = mul i16 %12, %4 404 %add61 = add i16 %add55, %mul60 405 %mul66 = mul i16 %15, %7 406 %add67 = add i16 %add61, %mul66 407 %mul72 = mul i16 %14, %6 408 %add73 = add i16 %add67, %mul72 409 ret i16 %add73 410} 411 412define i32 @reduce_blockstrided4x4(ptr nocapture noundef readonly %p1, i32 noundef %off1, ptr nocapture noundef readonly %p2, i32 noundef %off2) { 413; CHECK-LABEL: @reduce_blockstrided4x4( 414; CHECK-NEXT: entry: 415; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[OFF1:%.*]] to i64 416; CHECK-NEXT: [[IDX_EXT63:%.*]] = sext i32 [[OFF2:%.*]] to i64 417; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds nuw i8, ptr [[P1:%.*]], i64 4 418; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds nuw i8, ptr [[P2:%.*]], i64 4 419; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]] 420; CHECK-NEXT: [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]] 421; CHECK-NEXT: [[ARRAYIDX3_1:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR]], i64 4 422; CHECK-NEXT: [[ARRAYIDX5_1:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR64]], i64 4 423; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i8>, ptr [[P1]], align 1 424; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i8>, ptr [[P2]], align 1 425; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 1 426; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 1 427; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i8>, ptr [[ADD_PTR]], align 1 428; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i8>, ptr [[ADD_PTR64]], align 1 429; CHECK-NEXT: [[TMP6:%.*]] = 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> 430; CHECK-NEXT: [[TMP7:%.*]] = 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> 431; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <16 x i8> [[TMP6]], <16 x i8> [[TMP7]], <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> 432; CHECK-NEXT: [[TMP9:%.*]] = 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> 433; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <16 x i8> [[TMP8]], <16 x i8> [[TMP9]], <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> 434; CHECK-NEXT: [[TMP11:%.*]] = zext <16 x i8> [[TMP10]] to <16 x i32> 435; CHECK-NEXT: [[TMP12:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 1 436; CHECK-NEXT: [[TMP13:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 1 437; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> [[TMP12]], <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> 438; CHECK-NEXT: [[TMP15:%.*]] = 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> 439; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <16 x i8> [[TMP14]], <16 x i8> [[TMP15]], <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> 440; CHECK-NEXT: [[TMP17:%.*]] = shufflevector <4 x i8> [[TMP13]], <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> 441; CHECK-NEXT: [[TMP18:%.*]] = shufflevector <16 x i8> [[TMP16]], <16 x i8> [[TMP17]], <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> 442; CHECK-NEXT: [[TMP19:%.*]] = zext <16 x i8> [[TMP18]] to <16 x i32> 443; CHECK-NEXT: [[TMP20:%.*]] = mul nuw nsw <16 x i32> [[TMP11]], [[TMP19]] 444; CHECK-NEXT: [[TMP21:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP20]]) 445; CHECK-NEXT: ret i32 [[TMP21]] 446; 447entry: 448 %idx.ext = sext i32 %off1 to i64 449 %idx.ext63 = sext i32 %off2 to i64 450 451 %0 = load i8, ptr %p1, align 1 452 %conv = zext i8 %0 to i32 453 %1 = load i8, ptr %p2, align 1 454 %conv2 = zext i8 %1 to i32 455 %arrayidx3 = getelementptr inbounds i8, ptr %p1, i64 4 456 %2 = load i8, ptr %arrayidx3, align 1 457 %conv4 = zext i8 %2 to i32 458 %arrayidx5 = getelementptr inbounds i8, ptr %p2, i64 4 459 %3 = load i8, ptr %arrayidx5, align 1 460 %conv6 = zext i8 %3 to i32 461 %arrayidx8 = getelementptr inbounds i8, ptr %p1, i64 1 462 %4 = load i8, ptr %arrayidx8, align 1 463 %conv9 = zext i8 %4 to i32 464 %arrayidx10 = getelementptr inbounds i8, ptr %p2, i64 1 465 %5 = load i8, ptr %arrayidx10, align 1 466 %conv11 = zext i8 %5 to i32 467 %arrayidx13 = getelementptr inbounds i8, ptr %p1, i64 5 468 %6 = load i8, ptr %arrayidx13, align 1 469 %conv14 = zext i8 %6 to i32 470 %arrayidx15 = getelementptr inbounds i8, ptr %p2, i64 5 471 %7 = load i8, ptr %arrayidx15, align 1 472 %conv16 = zext i8 %7 to i32 473 %arrayidx20 = getelementptr inbounds i8, ptr %p1, i64 2 474 %8 = load i8, ptr %arrayidx20, align 1 475 %conv21 = zext i8 %8 to i32 476 %arrayidx22 = getelementptr inbounds i8, ptr %p2, i64 2 477 %9 = load i8, ptr %arrayidx22, align 1 478 %conv23 = zext i8 %9 to i32 479 %arrayidx25 = getelementptr inbounds i8, ptr %p1, i64 6 480 %10 = load i8, ptr %arrayidx25, align 1 481 %conv26 = zext i8 %10 to i32 482 %arrayidx27 = getelementptr inbounds i8, ptr %p2, i64 6 483 %11 = load i8, ptr %arrayidx27, align 1 484 %conv28 = zext i8 %11 to i32 485 %arrayidx32 = getelementptr inbounds i8, ptr %p1, i64 3 486 %12 = load i8, ptr %arrayidx32, align 1 487 %conv33 = zext i8 %12 to i32 488 %arrayidx34 = getelementptr inbounds i8, ptr %p2, i64 3 489 %13 = load i8, ptr %arrayidx34, align 1 490 %conv35 = zext i8 %13 to i32 491 %arrayidx37 = getelementptr inbounds i8, ptr %p1, i64 7 492 %14 = load i8, ptr %arrayidx37, align 1 493 %conv38 = zext i8 %14 to i32 494 %arrayidx39 = getelementptr inbounds i8, ptr %p2, i64 7 495 %15 = load i8, ptr %arrayidx39, align 1 496 %conv40 = zext i8 %15 to i32 497 %add.ptr = getelementptr inbounds i8, ptr %p1, i64 %idx.ext 498 %16 = load i8, ptr %add.ptr, align 1 499 %conv.1 = zext i8 %16 to i32 500 %add.ptr64 = getelementptr inbounds i8, ptr %p2, i64 %idx.ext63 501 %17 = load i8, ptr %add.ptr64, align 1 502 %conv2.1 = zext i8 %17 to i32 503 %arrayidx3.1 = getelementptr inbounds i8, ptr %add.ptr, i64 4 504 %18 = load i8, ptr %arrayidx3.1, align 1 505 %conv4.1 = zext i8 %18 to i32 506 %arrayidx5.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 4 507 %19 = load i8, ptr %arrayidx5.1, align 1 508 %conv6.1 = zext i8 %19 to i32 509 %arrayidx8.1 = getelementptr inbounds i8, ptr %add.ptr, i64 1 510 %20 = load i8, ptr %arrayidx8.1, align 1 511 %conv9.1 = zext i8 %20 to i32 512 %arrayidx10.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 1 513 %21 = load i8, ptr %arrayidx10.1, align 1 514 %conv11.1 = zext i8 %21 to i32 515 %arrayidx13.1 = getelementptr inbounds i8, ptr %add.ptr, i64 5 516 %22 = load i8, ptr %arrayidx13.1, align 1 517 %conv14.1 = zext i8 %22 to i32 518 %arrayidx15.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 5 519 %23 = load i8, ptr %arrayidx15.1, align 1 520 %conv16.1 = zext i8 %23 to i32 521 %arrayidx20.1 = getelementptr inbounds i8, ptr %add.ptr, i64 2 522 %24 = load i8, ptr %arrayidx20.1, align 1 523 %conv21.1 = zext i8 %24 to i32 524 %arrayidx22.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 2 525 %25 = load i8, ptr %arrayidx22.1, align 1 526 %conv23.1 = zext i8 %25 to i32 527 %arrayidx25.1 = getelementptr inbounds i8, ptr %add.ptr, i64 6 528 %26 = load i8, ptr %arrayidx25.1, align 1 529 %conv26.1 = zext i8 %26 to i32 530 %arrayidx27.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 6 531 %27 = load i8, ptr %arrayidx27.1, align 1 532 %conv28.1 = zext i8 %27 to i32 533 %arrayidx32.1 = getelementptr inbounds i8, ptr %add.ptr, i64 3 534 %28 = load i8, ptr %arrayidx32.1, align 1 535 %conv33.1 = zext i8 %28 to i32 536 %arrayidx34.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 3 537 %29 = load i8, ptr %arrayidx34.1, align 1 538 %conv35.1 = zext i8 %29 to i32 539 %arrayidx37.1 = getelementptr inbounds i8, ptr %add.ptr, i64 7 540 %30 = load i8, ptr %arrayidx37.1, align 1 541 %conv38.1 = zext i8 %30 to i32 542 %arrayidx39.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 7 543 %31 = load i8, ptr %arrayidx39.1, align 1 544 %conv40.1 = zext i8 %31 to i32 545 %add.ptr.1 = getelementptr inbounds i8, ptr %add.ptr, i64 %idx.ext 546 %32 = load i8, ptr %add.ptr.1, align 1 547 %conv.2 = zext i8 %32 to i32 548 %add.ptr64.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 %idx.ext63 549 %33 = load i8, ptr %add.ptr64.1, align 1 550 %conv2.2 = zext i8 %33 to i32 551 %arrayidx3.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 4 552 %34 = load i8, ptr %arrayidx3.2, align 1 553 %conv4.2 = zext i8 %34 to i32 554 %arrayidx5.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 4 555 %35 = load i8, ptr %arrayidx5.2, align 1 556 %conv6.2 = zext i8 %35 to i32 557 %arrayidx8.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 1 558 %36 = load i8, ptr %arrayidx8.2, align 1 559 %conv9.2 = zext i8 %36 to i32 560 %arrayidx10.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 1 561 %37 = load i8, ptr %arrayidx10.2, align 1 562 %conv11.2 = zext i8 %37 to i32 563 %arrayidx13.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 5 564 %38 = load i8, ptr %arrayidx13.2, align 1 565 %conv14.2 = zext i8 %38 to i32 566 %arrayidx15.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 5 567 %39 = load i8, ptr %arrayidx15.2, align 1 568 %conv16.2 = zext i8 %39 to i32 569 %arrayidx20.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 2 570 %40 = load i8, ptr %arrayidx20.2, align 1 571 %conv21.2 = zext i8 %40 to i32 572 %arrayidx22.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 2 573 %41 = load i8, ptr %arrayidx22.2, align 1 574 %conv23.2 = zext i8 %41 to i32 575 %arrayidx25.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 6 576 %42 = load i8, ptr %arrayidx25.2, align 1 577 %conv26.2 = zext i8 %42 to i32 578 %arrayidx27.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 6 579 %43 = load i8, ptr %arrayidx27.2, align 1 580 %conv28.2 = zext i8 %43 to i32 581 %arrayidx32.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 3 582 %44 = load i8, ptr %arrayidx32.2, align 1 583 %conv33.2 = zext i8 %44 to i32 584 %arrayidx34.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 3 585 %45 = load i8, ptr %arrayidx34.2, align 1 586 %conv35.2 = zext i8 %45 to i32 587 %arrayidx37.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 7 588 %46 = load i8, ptr %arrayidx37.2, align 1 589 %conv38.2 = zext i8 %46 to i32 590 %arrayidx39.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 7 591 %47 = load i8, ptr %arrayidx39.2, align 1 592 %conv40.2 = zext i8 %47 to i32 593 %add.ptr.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 %idx.ext 594 %48 = load i8, ptr %add.ptr.2, align 1 595 %conv.3 = zext i8 %48 to i32 596 %add.ptr64.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 %idx.ext63 597 %49 = load i8, ptr %add.ptr64.2, align 1 598 %conv2.3 = zext i8 %49 to i32 599 %arrayidx3.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 4 600 %50 = load i8, ptr %arrayidx3.3, align 1 601 %conv4.3 = zext i8 %50 to i32 602 %arrayidx5.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 4 603 %51 = load i8, ptr %arrayidx5.3, align 1 604 %conv6.3 = zext i8 %51 to i32 605 %arrayidx8.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 1 606 %52 = load i8, ptr %arrayidx8.3, align 1 607 %conv9.3 = zext i8 %52 to i32 608 %arrayidx10.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 1 609 %53 = load i8, ptr %arrayidx10.3, align 1 610 %conv11.3 = zext i8 %53 to i32 611 %arrayidx13.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 5 612 %54 = load i8, ptr %arrayidx13.3, align 1 613 %conv14.3 = zext i8 %54 to i32 614 %arrayidx15.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 5 615 %55 = load i8, ptr %arrayidx15.3, align 1 616 %conv16.3 = zext i8 %55 to i32 617 %arrayidx20.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 2 618 %56 = load i8, ptr %arrayidx20.3, align 1 619 %conv21.3 = zext i8 %56 to i32 620 %arrayidx22.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 2 621 %57 = load i8, ptr %arrayidx22.3, align 1 622 %conv23.3 = zext i8 %57 to i32 623 %arrayidx25.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 6 624 %58 = load i8, ptr %arrayidx25.3, align 1 625 %conv26.3 = zext i8 %58 to i32 626 %arrayidx27.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 6 627 %59 = load i8, ptr %arrayidx27.3, align 1 628 %conv28.3 = zext i8 %59 to i32 629 %arrayidx32.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 3 630 %60 = load i8, ptr %arrayidx32.3, align 1 631 %conv33.3 = zext i8 %60 to i32 632 %arrayidx34.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 3 633 %61 = load i8, ptr %arrayidx34.3, align 1 634 %conv35.3 = zext i8 %61 to i32 635 %arrayidx37.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 7 636 %62 = load i8, ptr %arrayidx37.3, align 1 637 %conv38.3 = zext i8 %62 to i32 638 %arrayidx39.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 7 639 %63 = load i8, ptr %arrayidx39.3, align 1 640 %conv40.3 = zext i8 %63 to i32 641 642 %m1 = mul i32 %conv, %conv4 643 %m2 = mul i32 %conv9, %conv14 644 %m3 = mul i32 %conv21, %conv26 645 %m4 = mul i32 %conv33, %conv38 646 %m8 = mul i32 %conv2, %conv6 647 %m7 = mul i32 %conv11, %conv16 648 %m6 = mul i32 %conv23, %conv28 649 %m5 = mul i32 %conv35, %conv40 650 %m9 = mul i32 %conv.1, %conv4.1 651 %m10 = mul i32 %conv9.1, %conv14.1 652 %m11 = mul i32 %conv21.1, %conv26.1 653 %m12 = mul i32 %conv33.1, %conv38.1 654 %m16 = mul i32 %conv2.1, %conv6.1 655 %m15 = mul i32 %conv11.1, %conv16.1 656 %m14 = mul i32 %conv23.1, %conv28.1 657 %m13 = mul i32 %conv35.1, %conv40.1 658 659 %a2 = add i32 %m1, %m2 660 %a3 = add i32 %a2, %m3 661 %a4 = add i32 %a3, %m4 662 %a5 = add i32 %a4, %m5 663 %a6 = add i32 %a5, %m6 664 %a7 = add i32 %a6, %m7 665 %a8 = add i32 %a7, %m8 666 %a9 = add i32 %a8, %m9 667 %a10 = add i32 %a9, %m10 668 %a11 = add i32 %a10, %m11 669 %a12 = add i32 %a11, %m12 670 %a13 = add i32 %a12, %m13 671 %a14 = add i32 %a13, %m14 672 %a15 = add i32 %a14, %m15 673 %a16 = add i32 %a15, %m16 674 ret i32 %a16 675} 676 677define void @store_blockstrided3(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, ptr nocapture noundef writeonly %z, i32 noundef %stride) { 678; CHECK-LABEL: @store_blockstrided3( 679; CHECK-NEXT: entry: 680; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i8, ptr [[X:%.*]], i64 8 681; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4 682; CHECK-NEXT: [[ADD4:%.*]] = add nsw i32 [[STRIDE:%.*]], 1 683; CHECK-NEXT: [[IDXPROM5:%.*]] = sext i32 [[ADD4]] to i64 684; CHECK-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM5]] 685; CHECK-NEXT: [[MUL:%.*]] = shl nsw i32 [[STRIDE]], 1 686; CHECK-NEXT: [[IDXPROM11:%.*]] = sext i32 [[MUL]] to i64 687; CHECK-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM11]] 688; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX12]], align 4 689; CHECK-NEXT: [[ADD14:%.*]] = or disjoint i32 [[MUL]], 1 690; CHECK-NEXT: [[IDXPROM15:%.*]] = sext i32 [[ADD14]] to i64 691; CHECK-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM15]] 692; CHECK-NEXT: [[MUL21:%.*]] = mul nsw i32 [[STRIDE]], 3 693; CHECK-NEXT: [[IDXPROM23:%.*]] = sext i32 [[MUL21]] to i64 694; CHECK-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM23]] 695; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX24]], align 4 696; CHECK-NEXT: [[ADD26:%.*]] = add nsw i32 [[MUL21]], 1 697; CHECK-NEXT: [[IDXPROM27:%.*]] = sext i32 [[ADD26]] to i64 698; CHECK-NEXT: [[ARRAYIDX28:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM27]] 699; CHECK-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i8, ptr [[Y:%.*]], i64 8 700; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX35]], align 4 701; CHECK-NEXT: [[ARRAYIDX41:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM5]] 702; CHECK-NEXT: [[ARRAYIDX48:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM11]] 703; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX48]], align 4 704; CHECK-NEXT: [[ARRAYIDX52:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM15]] 705; CHECK-NEXT: [[ARRAYIDX60:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM23]] 706; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX60]], align 4 707; CHECK-NEXT: [[ARRAYIDX64:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM27]] 708; CHECK-NEXT: [[ARRAYIDX72:%.*]] = getelementptr inbounds nuw i8, ptr [[Z:%.*]], i64 4 709; CHECK-NEXT: [[MUL73:%.*]] = mul nsw i32 [[TMP3]], [[TMP0]] 710; CHECK-NEXT: [[ARRAYIDX76:%.*]] = getelementptr inbounds nuw i8, ptr [[Z]], i64 24 711; CHECK-NEXT: [[TMP6:%.*]] = load <2 x i32>, ptr [[X]], align 4 712; CHECK-NEXT: [[TMP7:%.*]] = load <2 x i32>, ptr [[ARRAYIDX6]], align 4 713; CHECK-NEXT: [[TMP8:%.*]] = load <2 x i32>, ptr [[Y]], align 4 714; CHECK-NEXT: [[TMP9:%.*]] = load <2 x i32>, ptr [[ARRAYIDX41]], align 4 715; CHECK-NEXT: [[TMP10:%.*]] = mul nsw <2 x i32> [[TMP8]], [[TMP6]] 716; CHECK-NEXT: [[TMP11:%.*]] = mul nsw <2 x i32> [[TMP9]], [[TMP7]] 717; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <2 x i32> [[TMP10]], <2 x i32> [[TMP11]], <4 x i32> <i32 1, i32 0, i32 3, i32 2> 718; CHECK-NEXT: [[MUL81:%.*]] = mul nsw i32 [[TMP4]], [[TMP1]] 719; CHECK-NEXT: [[ARRAYIDX82:%.*]] = getelementptr inbounds nuw i8, ptr [[Z]], i64 32 720; CHECK-NEXT: [[TMP13:%.*]] = load <2 x i32>, ptr [[ARRAYIDX16]], align 4 721; CHECK-NEXT: [[TMP14:%.*]] = load <2 x i32>, ptr [[ARRAYIDX52]], align 4 722; CHECK-NEXT: [[TMP15:%.*]] = mul nsw <2 x i32> [[TMP14]], [[TMP13]] 723; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <2 x i32> [[TMP15]], <2 x i32> poison, <2 x i32> <i32 1, i32 0> 724; CHECK-NEXT: [[MUL87:%.*]] = mul nsw i32 [[TMP5]], [[TMP2]] 725; CHECK-NEXT: [[ARRAYIDX88:%.*]] = getelementptr inbounds nuw i8, ptr [[Z]], i64 44 726; CHECK-NEXT: [[ARRAYIDX92:%.*]] = getelementptr inbounds nuw i8, ptr [[Z]], i64 36 727; CHECK-NEXT: [[TMP17:%.*]] = load <2 x i32>, ptr [[ARRAYIDX28]], align 4 728; CHECK-NEXT: [[TMP18:%.*]] = load <2 x i32>, ptr [[ARRAYIDX64]], align 4 729; CHECK-NEXT: store i32 [[MUL73]], ptr [[Z]], align 4 730; CHECK-NEXT: store <4 x i32> [[TMP12]], ptr [[ARRAYIDX72]], align 4 731; CHECK-NEXT: store i32 [[MUL81]], ptr [[ARRAYIDX82]], align 4 732; CHECK-NEXT: store <2 x i32> [[TMP16]], ptr [[ARRAYIDX76]], align 4 733; CHECK-NEXT: store i32 [[MUL87]], ptr [[ARRAYIDX88]], align 4 734; CHECK-NEXT: [[TMP19:%.*]] = mul nsw <2 x i32> [[TMP18]], [[TMP17]] 735; CHECK-NEXT: [[TMP20:%.*]] = shufflevector <2 x i32> [[TMP19]], <2 x i32> poison, <2 x i32> <i32 1, i32 0> 736; CHECK-NEXT: store <2 x i32> [[TMP20]], ptr [[ARRAYIDX92]], align 4 737; CHECK-NEXT: ret void 738; 739entry: 740 %0 = load i32, ptr %x, align 4 741 %arrayidx1 = getelementptr inbounds i32, ptr %x, i64 1 742 %1 = load i32, ptr %arrayidx1, align 4 743 %arrayidx2 = getelementptr inbounds i32, ptr %x, i64 2 744 %2 = load i32, ptr %arrayidx2, align 4 745 %add4 = add nsw i32 %stride, 1 746 %idxprom5 = sext i32 %add4 to i64 747 %arrayidx6 = getelementptr inbounds i32, ptr %x, i64 %idxprom5 748 %3 = load i32, ptr %arrayidx6, align 4 749 %add7 = add nsw i32 %stride, 2 750 %idxprom8 = sext i32 %add7 to i64 751 %arrayidx9 = getelementptr inbounds i32, ptr %x, i64 %idxprom8 752 %4 = load i32, ptr %arrayidx9, align 4 753 %mul = shl nsw i32 %stride, 1 754 %idxprom11 = sext i32 %mul to i64 755 %arrayidx12 = getelementptr inbounds i32, ptr %x, i64 %idxprom11 756 %5 = load i32, ptr %arrayidx12, align 4 757 %add14 = or disjoint i32 %mul, 1 758 %idxprom15 = sext i32 %add14 to i64 759 %arrayidx16 = getelementptr inbounds i32, ptr %x, i64 %idxprom15 760 %6 = load i32, ptr %arrayidx16, align 4 761 %add18 = add nsw i32 %mul, 2 762 %idxprom19 = sext i32 %add18 to i64 763 %arrayidx20 = getelementptr inbounds i32, ptr %x, i64 %idxprom19 764 %7 = load i32, ptr %arrayidx20, align 4 765 %mul21 = mul nsw i32 %stride, 3 766 %idxprom23 = sext i32 %mul21 to i64 767 %arrayidx24 = getelementptr inbounds i32, ptr %x, i64 %idxprom23 768 %8 = load i32, ptr %arrayidx24, align 4 769 %add26 = add nsw i32 %mul21, 1 770 %idxprom27 = sext i32 %add26 to i64 771 %arrayidx28 = getelementptr inbounds i32, ptr %x, i64 %idxprom27 772 %9 = load i32, ptr %arrayidx28, align 4 773 %add30 = add nsw i32 %mul21, 2 774 %idxprom31 = sext i32 %add30 to i64 775 %arrayidx32 = getelementptr inbounds i32, ptr %x, i64 %idxprom31 776 %10 = load i32, ptr %arrayidx32, align 4 777 %11 = load i32, ptr %y, align 4 778 %arrayidx34 = getelementptr inbounds i32, ptr %y, i64 1 779 %12 = load i32, ptr %arrayidx34, align 4 780 %arrayidx35 = getelementptr inbounds i32, ptr %y, i64 2 781 %13 = load i32, ptr %arrayidx35, align 4 782 %arrayidx41 = getelementptr inbounds i32, ptr %y, i64 %idxprom5 783 %14 = load i32, ptr %arrayidx41, align 4 784 %arrayidx44 = getelementptr inbounds i32, ptr %y, i64 %idxprom8 785 %15 = load i32, ptr %arrayidx44, align 4 786 %arrayidx48 = getelementptr inbounds i32, ptr %y, i64 %idxprom11 787 %16 = load i32, ptr %arrayidx48, align 4 788 %arrayidx52 = getelementptr inbounds i32, ptr %y, i64 %idxprom15 789 %17 = load i32, ptr %arrayidx52, align 4 790 %arrayidx56 = getelementptr inbounds i32, ptr %y, i64 %idxprom19 791 %18 = load i32, ptr %arrayidx56, align 4 792 %arrayidx60 = getelementptr inbounds i32, ptr %y, i64 %idxprom23 793 %19 = load i32, ptr %arrayidx60, align 4 794 %arrayidx64 = getelementptr inbounds i32, ptr %y, i64 %idxprom27 795 %20 = load i32, ptr %arrayidx64, align 4 796 %arrayidx68 = getelementptr inbounds i32, ptr %y, i64 %idxprom31 797 %21 = load i32, ptr %arrayidx68, align 4 798 %mul69 = mul nsw i32 %11, %0 799 %arrayidx70 = getelementptr inbounds i32, ptr %z, i64 2 800 store i32 %mul69, ptr %arrayidx70, align 4 801 %mul71 = mul nsw i32 %12, %1 802 %arrayidx72 = getelementptr inbounds i32, ptr %z, i64 1 803 store i32 %mul71, ptr %arrayidx72, align 4 804 %mul73 = mul nsw i32 %13, %2 805 store i32 %mul73, ptr %z, align 4 806 %arrayidx76 = getelementptr inbounds i32, ptr %z, i64 6 807 %mul77 = mul nsw i32 %14, %3 808 %arrayidx78 = getelementptr inbounds i32, ptr %z, i64 4 809 store i32 %mul77, ptr %arrayidx78, align 4 810 %mul79 = mul nsw i32 %15, %4 811 %arrayidx80 = getelementptr inbounds i32, ptr %z, i64 3 812 store i32 %mul79, ptr %arrayidx80, align 4 813 %mul81 = mul nsw i32 %16, %5 814 %arrayidx82 = getelementptr inbounds i32, ptr %z, i64 8 815 store i32 %mul81, ptr %arrayidx82, align 4 816 %mul83 = mul nsw i32 %17, %6 817 %arrayidx84 = getelementptr inbounds i32, ptr %z, i64 7 818 store i32 %mul83, ptr %arrayidx84, align 4 819 %mul85 = mul nsw i32 %18, %7 820 store i32 %mul85, ptr %arrayidx76, align 4 821 %mul87 = mul nsw i32 %19, %8 822 %arrayidx88 = getelementptr inbounds i32, ptr %z, i64 11 823 store i32 %mul87, ptr %arrayidx88, align 4 824 %mul89 = mul nsw i32 %20, %9 825 %arrayidx90 = getelementptr inbounds i32, ptr %z, i64 10 826 store i32 %mul89, ptr %arrayidx90, align 4 827 %mul91 = mul nsw i32 %21, %10 828 %arrayidx92 = getelementptr inbounds i32, ptr %z, i64 9 829 store i32 %mul91, ptr %arrayidx92, align 4 830 ret void 831} 832 833define void @store_blockstrided4(ptr nocapture noundef readonly %x, ptr nocapture noundef readonly %y, i32 noundef %stride, ptr %dst0) { 834; CHECK-LABEL: @store_blockstrided4( 835; CHECK-NEXT: entry: 836; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64 837; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X:%.*]], i64 [[IDXPROM]] 838; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y:%.*]], i64 [[IDXPROM]] 839; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i16>, ptr [[X]], align 2 840; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i16>, ptr [[ARRAYIDX4]], align 2 841; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr [[Y]], align 2 842; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr [[ARRAYIDX20]], align 2 843; CHECK-NEXT: [[TMP4:%.*]] = mul <4 x i16> [[TMP2]], [[TMP0]] 844; CHECK-NEXT: [[TMP5:%.*]] = mul <4 x i16> [[TMP3]], [[TMP1]] 845; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x i16> [[TMP4]], <4 x i16> [[TMP5]], <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6> 846; CHECK-NEXT: store <8 x i16> [[TMP6]], ptr [[DST0:%.*]], align 2 847; CHECK-NEXT: ret void 848; 849entry: 850 %0 = load i16, ptr %x, align 2 851 %arrayidx1 = getelementptr inbounds i16, ptr %x, i64 1 852 %1 = load i16, ptr %arrayidx1, align 2 853 %arrayidx2 = getelementptr inbounds i16, ptr %x, i64 2 854 %2 = load i16, ptr %arrayidx2, align 2 855 %arrayidx3 = getelementptr inbounds i16, ptr %x, i64 3 856 %3 = load i16, ptr %arrayidx3, align 2 857 %idxprom = sext i32 %stride to i64 858 %arrayidx4 = getelementptr inbounds i16, ptr %x, i64 %idxprom 859 %4 = load i16, ptr %arrayidx4, align 2 860 %add5 = add nsw i32 %stride, 1 861 %idxprom6 = sext i32 %add5 to i64 862 %arrayidx7 = getelementptr inbounds i16, ptr %x, i64 %idxprom6 863 %5 = load i16, ptr %arrayidx7, align 2 864 %add8 = add nsw i32 %stride, 2 865 %idxprom9 = sext i32 %add8 to i64 866 %arrayidx10 = getelementptr inbounds i16, ptr %x, i64 %idxprom9 867 %6 = load i16, ptr %arrayidx10, align 2 868 %add11 = add nsw i32 %stride, 3 869 %idxprom12 = sext i32 %add11 to i64 870 %arrayidx13 = getelementptr inbounds i16, ptr %x, i64 %idxprom12 871 %7 = load i16, ptr %arrayidx13, align 2 872 %8 = load i16, ptr %y, align 2 873 %arrayidx15 = getelementptr inbounds i16, ptr %y, i64 1 874 %9 = load i16, ptr %arrayidx15, align 2 875 %arrayidx16 = getelementptr inbounds i16, ptr %y, i64 2 876 %10 = load i16, ptr %arrayidx16, align 2 877 %arrayidx17 = getelementptr inbounds i16, ptr %y, i64 3 878 %11 = load i16, ptr %arrayidx17, align 2 879 %arrayidx20 = getelementptr inbounds i16, ptr %y, i64 %idxprom 880 %12 = load i16, ptr %arrayidx20, align 2 881 %arrayidx23 = getelementptr inbounds i16, ptr %y, i64 %idxprom6 882 %13 = load i16, ptr %arrayidx23, align 2 883 %arrayidx26 = getelementptr inbounds i16, ptr %y, i64 %idxprom9 884 %14 = load i16, ptr %arrayidx26, align 2 885 %arrayidx29 = getelementptr inbounds i16, ptr %y, i64 %idxprom12 886 %15 = load i16, ptr %arrayidx29, align 2 887 %mul = mul i16 %8, %0 888 %mul36 = mul i16 %9, %1 889 %mul42 = mul i16 %11, %3 890 %mul48 = mul i16 %10, %2 891 %mul54 = mul i16 %13, %5 892 %mul60 = mul i16 %12, %4 893 %mul66 = mul i16 %15, %7 894 %mul72 = mul i16 %14, %6 895 %dst1 = getelementptr inbounds i16, ptr %dst0, i64 1 896 %dst2 = getelementptr inbounds i16, ptr %dst0, i64 2 897 %dst3 = getelementptr inbounds i16, ptr %dst0, i64 3 898 %dst4 = getelementptr inbounds i16, ptr %dst0, i64 4 899 %dst5 = getelementptr inbounds i16, ptr %dst0, i64 5 900 %dst6 = getelementptr inbounds i16, ptr %dst0, i64 6 901 %dst7 = getelementptr inbounds i16, ptr %dst0, i64 7 902 store i16 %mul, ptr %dst0 903 store i16 %mul36, ptr %dst1 904 store i16 %mul42, ptr %dst2 905 store i16 %mul48, ptr %dst3 906 store i16 %mul54, ptr %dst4 907 store i16 %mul60, ptr %dst5 908 store i16 %mul66, ptr %dst6 909 store i16 %mul72, ptr %dst7 910 ret void 911} 912 913define void @store_blockstrided4x4(ptr nocapture noundef readonly %p1, i32 noundef %off1, ptr nocapture noundef readonly %p2, i32 noundef %off2, ptr %dst0) { 914; CHECK-LABEL: @store_blockstrided4x4( 915; CHECK-NEXT: entry: 916; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[OFF1:%.*]] to i64 917; CHECK-NEXT: [[IDX_EXT63:%.*]] = sext i32 [[OFF2:%.*]] to i64 918; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds nuw i8, ptr [[P1:%.*]], i64 4 919; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds nuw i8, ptr [[P2:%.*]], i64 4 920; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]] 921; CHECK-NEXT: [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]] 922; CHECK-NEXT: [[ARRAYIDX3_1:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR]], i64 4 923; CHECK-NEXT: [[ARRAYIDX5_1:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR64]], i64 4 924; CHECK-NEXT: [[DST4:%.*]] = getelementptr inbounds nuw i8, ptr [[DST0:%.*]], i64 16 925; CHECK-NEXT: [[DST8:%.*]] = getelementptr inbounds nuw i8, ptr [[DST0]], i64 32 926; CHECK-NEXT: [[DST12:%.*]] = getelementptr inbounds nuw i8, ptr [[DST0]], i64 48 927; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i8>, ptr [[P1]], align 1 928; CHECK-NEXT: [[TMP1:%.*]] = zext <4 x i8> [[TMP0]] to <4 x i32> 929; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 1 930; CHECK-NEXT: [[TMP3:%.*]] = zext <4 x i8> [[TMP2]] to <4 x i32> 931; CHECK-NEXT: [[TMP4:%.*]] = mul nuw nsw <4 x i32> [[TMP1]], [[TMP3]] 932; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i8>, ptr [[P2]], align 1 933; CHECK-NEXT: [[TMP6:%.*]] = zext <4 x i8> [[TMP5]] to <4 x i32> 934; CHECK-NEXT: [[TMP7:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 1 935; CHECK-NEXT: [[TMP8:%.*]] = zext <4 x i8> [[TMP7]] to <4 x i32> 936; CHECK-NEXT: [[TMP9:%.*]] = mul nuw nsw <4 x i32> [[TMP6]], [[TMP8]] 937; CHECK-NEXT: [[TMP10:%.*]] = load <4 x i8>, ptr [[ADD_PTR]], align 1 938; CHECK-NEXT: [[TMP11:%.*]] = zext <4 x i8> [[TMP10]] to <4 x i32> 939; CHECK-NEXT: [[TMP12:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 1 940; CHECK-NEXT: [[TMP13:%.*]] = zext <4 x i8> [[TMP12]] to <4 x i32> 941; CHECK-NEXT: [[TMP14:%.*]] = mul nuw nsw <4 x i32> [[TMP11]], [[TMP13]] 942; CHECK-NEXT: [[TMP15:%.*]] = load <4 x i8>, ptr [[ADD_PTR64]], align 1 943; CHECK-NEXT: [[TMP16:%.*]] = zext <4 x i8> [[TMP15]] to <4 x i32> 944; CHECK-NEXT: [[TMP17:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 1 945; CHECK-NEXT: [[TMP18:%.*]] = zext <4 x i8> [[TMP17]] to <4 x i32> 946; CHECK-NEXT: [[TMP19:%.*]] = mul nuw nsw <4 x i32> [[TMP16]], [[TMP18]] 947; CHECK-NEXT: store <4 x i32> [[TMP4]], ptr [[DST0]], align 4 948; CHECK-NEXT: store <4 x i32> [[TMP9]], ptr [[DST4]], align 4 949; CHECK-NEXT: store <4 x i32> [[TMP14]], ptr [[DST8]], align 4 950; CHECK-NEXT: store <4 x i32> [[TMP19]], ptr [[DST12]], align 4 951; CHECK-NEXT: ret void 952; 953entry: 954 %idx.ext = sext i32 %off1 to i64 955 %idx.ext63 = sext i32 %off2 to i64 956 957 %0 = load i8, ptr %p1, align 1 958 %conv = zext i8 %0 to i32 959 %1 = load i8, ptr %p2, align 1 960 %conv2 = zext i8 %1 to i32 961 %arrayidx3 = getelementptr inbounds i8, ptr %p1, i64 4 962 %2 = load i8, ptr %arrayidx3, align 1 963 %conv4 = zext i8 %2 to i32 964 %arrayidx5 = getelementptr inbounds i8, ptr %p2, i64 4 965 %3 = load i8, ptr %arrayidx5, align 1 966 %conv6 = zext i8 %3 to i32 967 %arrayidx8 = getelementptr inbounds i8, ptr %p1, i64 1 968 %4 = load i8, ptr %arrayidx8, align 1 969 %conv9 = zext i8 %4 to i32 970 %arrayidx10 = getelementptr inbounds i8, ptr %p2, i64 1 971 %5 = load i8, ptr %arrayidx10, align 1 972 %conv11 = zext i8 %5 to i32 973 %arrayidx13 = getelementptr inbounds i8, ptr %p1, i64 5 974 %6 = load i8, ptr %arrayidx13, align 1 975 %conv14 = zext i8 %6 to i32 976 %arrayidx15 = getelementptr inbounds i8, ptr %p2, i64 5 977 %7 = load i8, ptr %arrayidx15, align 1 978 %conv16 = zext i8 %7 to i32 979 %arrayidx20 = getelementptr inbounds i8, ptr %p1, i64 2 980 %8 = load i8, ptr %arrayidx20, align 1 981 %conv21 = zext i8 %8 to i32 982 %arrayidx22 = getelementptr inbounds i8, ptr %p2, i64 2 983 %9 = load i8, ptr %arrayidx22, align 1 984 %conv23 = zext i8 %9 to i32 985 %arrayidx25 = getelementptr inbounds i8, ptr %p1, i64 6 986 %10 = load i8, ptr %arrayidx25, align 1 987 %conv26 = zext i8 %10 to i32 988 %arrayidx27 = getelementptr inbounds i8, ptr %p2, i64 6 989 %11 = load i8, ptr %arrayidx27, align 1 990 %conv28 = zext i8 %11 to i32 991 %arrayidx32 = getelementptr inbounds i8, ptr %p1, i64 3 992 %12 = load i8, ptr %arrayidx32, align 1 993 %conv33 = zext i8 %12 to i32 994 %arrayidx34 = getelementptr inbounds i8, ptr %p2, i64 3 995 %13 = load i8, ptr %arrayidx34, align 1 996 %conv35 = zext i8 %13 to i32 997 %arrayidx37 = getelementptr inbounds i8, ptr %p1, i64 7 998 %14 = load i8, ptr %arrayidx37, align 1 999 %conv38 = zext i8 %14 to i32 1000 %arrayidx39 = getelementptr inbounds i8, ptr %p2, i64 7 1001 %15 = load i8, ptr %arrayidx39, align 1 1002 %conv40 = zext i8 %15 to i32 1003 %add.ptr = getelementptr inbounds i8, ptr %p1, i64 %idx.ext 1004 %16 = load i8, ptr %add.ptr, align 1 1005 %conv.1 = zext i8 %16 to i32 1006 %add.ptr64 = getelementptr inbounds i8, ptr %p2, i64 %idx.ext63 1007 %17 = load i8, ptr %add.ptr64, align 1 1008 %conv2.1 = zext i8 %17 to i32 1009 %arrayidx3.1 = getelementptr inbounds i8, ptr %add.ptr, i64 4 1010 %18 = load i8, ptr %arrayidx3.1, align 1 1011 %conv4.1 = zext i8 %18 to i32 1012 %arrayidx5.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 4 1013 %19 = load i8, ptr %arrayidx5.1, align 1 1014 %conv6.1 = zext i8 %19 to i32 1015 %arrayidx8.1 = getelementptr inbounds i8, ptr %add.ptr, i64 1 1016 %20 = load i8, ptr %arrayidx8.1, align 1 1017 %conv9.1 = zext i8 %20 to i32 1018 %arrayidx10.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 1 1019 %21 = load i8, ptr %arrayidx10.1, align 1 1020 %conv11.1 = zext i8 %21 to i32 1021 %arrayidx13.1 = getelementptr inbounds i8, ptr %add.ptr, i64 5 1022 %22 = load i8, ptr %arrayidx13.1, align 1 1023 %conv14.1 = zext i8 %22 to i32 1024 %arrayidx15.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 5 1025 %23 = load i8, ptr %arrayidx15.1, align 1 1026 %conv16.1 = zext i8 %23 to i32 1027 %arrayidx20.1 = getelementptr inbounds i8, ptr %add.ptr, i64 2 1028 %24 = load i8, ptr %arrayidx20.1, align 1 1029 %conv21.1 = zext i8 %24 to i32 1030 %arrayidx22.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 2 1031 %25 = load i8, ptr %arrayidx22.1, align 1 1032 %conv23.1 = zext i8 %25 to i32 1033 %arrayidx25.1 = getelementptr inbounds i8, ptr %add.ptr, i64 6 1034 %26 = load i8, ptr %arrayidx25.1, align 1 1035 %conv26.1 = zext i8 %26 to i32 1036 %arrayidx27.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 6 1037 %27 = load i8, ptr %arrayidx27.1, align 1 1038 %conv28.1 = zext i8 %27 to i32 1039 %arrayidx32.1 = getelementptr inbounds i8, ptr %add.ptr, i64 3 1040 %28 = load i8, ptr %arrayidx32.1, align 1 1041 %conv33.1 = zext i8 %28 to i32 1042 %arrayidx34.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 3 1043 %29 = load i8, ptr %arrayidx34.1, align 1 1044 %conv35.1 = zext i8 %29 to i32 1045 %arrayidx37.1 = getelementptr inbounds i8, ptr %add.ptr, i64 7 1046 %30 = load i8, ptr %arrayidx37.1, align 1 1047 %conv38.1 = zext i8 %30 to i32 1048 %arrayidx39.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 7 1049 %31 = load i8, ptr %arrayidx39.1, align 1 1050 %conv40.1 = zext i8 %31 to i32 1051 %add.ptr.1 = getelementptr inbounds i8, ptr %add.ptr, i64 %idx.ext 1052 %32 = load i8, ptr %add.ptr.1, align 1 1053 %conv.2 = zext i8 %32 to i32 1054 %add.ptr64.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 %idx.ext63 1055 %33 = load i8, ptr %add.ptr64.1, align 1 1056 %conv2.2 = zext i8 %33 to i32 1057 %arrayidx3.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 4 1058 %34 = load i8, ptr %arrayidx3.2, align 1 1059 %conv4.2 = zext i8 %34 to i32 1060 %arrayidx5.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 4 1061 %35 = load i8, ptr %arrayidx5.2, align 1 1062 %conv6.2 = zext i8 %35 to i32 1063 %arrayidx8.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 1 1064 %36 = load i8, ptr %arrayidx8.2, align 1 1065 %conv9.2 = zext i8 %36 to i32 1066 %arrayidx10.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 1 1067 %37 = load i8, ptr %arrayidx10.2, align 1 1068 %conv11.2 = zext i8 %37 to i32 1069 %arrayidx13.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 5 1070 %38 = load i8, ptr %arrayidx13.2, align 1 1071 %conv14.2 = zext i8 %38 to i32 1072 %arrayidx15.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 5 1073 %39 = load i8, ptr %arrayidx15.2, align 1 1074 %conv16.2 = zext i8 %39 to i32 1075 %arrayidx20.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 2 1076 %40 = load i8, ptr %arrayidx20.2, align 1 1077 %conv21.2 = zext i8 %40 to i32 1078 %arrayidx22.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 2 1079 %41 = load i8, ptr %arrayidx22.2, align 1 1080 %conv23.2 = zext i8 %41 to i32 1081 %arrayidx25.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 6 1082 %42 = load i8, ptr %arrayidx25.2, align 1 1083 %conv26.2 = zext i8 %42 to i32 1084 %arrayidx27.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 6 1085 %43 = load i8, ptr %arrayidx27.2, align 1 1086 %conv28.2 = zext i8 %43 to i32 1087 %arrayidx32.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 3 1088 %44 = load i8, ptr %arrayidx32.2, align 1 1089 %conv33.2 = zext i8 %44 to i32 1090 %arrayidx34.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 3 1091 %45 = load i8, ptr %arrayidx34.2, align 1 1092 %conv35.2 = zext i8 %45 to i32 1093 %arrayidx37.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 7 1094 %46 = load i8, ptr %arrayidx37.2, align 1 1095 %conv38.2 = zext i8 %46 to i32 1096 %arrayidx39.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 7 1097 %47 = load i8, ptr %arrayidx39.2, align 1 1098 %conv40.2 = zext i8 %47 to i32 1099 %add.ptr.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 %idx.ext 1100 %48 = load i8, ptr %add.ptr.2, align 1 1101 %conv.3 = zext i8 %48 to i32 1102 %add.ptr64.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 %idx.ext63 1103 %49 = load i8, ptr %add.ptr64.2, align 1 1104 %conv2.3 = zext i8 %49 to i32 1105 %arrayidx3.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 4 1106 %50 = load i8, ptr %arrayidx3.3, align 1 1107 %conv4.3 = zext i8 %50 to i32 1108 %arrayidx5.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 4 1109 %51 = load i8, ptr %arrayidx5.3, align 1 1110 %conv6.3 = zext i8 %51 to i32 1111 %arrayidx8.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 1 1112 %52 = load i8, ptr %arrayidx8.3, align 1 1113 %conv9.3 = zext i8 %52 to i32 1114 %arrayidx10.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 1 1115 %53 = load i8, ptr %arrayidx10.3, align 1 1116 %conv11.3 = zext i8 %53 to i32 1117 %arrayidx13.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 5 1118 %54 = load i8, ptr %arrayidx13.3, align 1 1119 %conv14.3 = zext i8 %54 to i32 1120 %arrayidx15.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 5 1121 %55 = load i8, ptr %arrayidx15.3, align 1 1122 %conv16.3 = zext i8 %55 to i32 1123 %arrayidx20.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 2 1124 %56 = load i8, ptr %arrayidx20.3, align 1 1125 %conv21.3 = zext i8 %56 to i32 1126 %arrayidx22.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 2 1127 %57 = load i8, ptr %arrayidx22.3, align 1 1128 %conv23.3 = zext i8 %57 to i32 1129 %arrayidx25.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 6 1130 %58 = load i8, ptr %arrayidx25.3, align 1 1131 %conv26.3 = zext i8 %58 to i32 1132 %arrayidx27.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 6 1133 %59 = load i8, ptr %arrayidx27.3, align 1 1134 %conv28.3 = zext i8 %59 to i32 1135 %arrayidx32.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 3 1136 %60 = load i8, ptr %arrayidx32.3, align 1 1137 %conv33.3 = zext i8 %60 to i32 1138 %arrayidx34.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 3 1139 %61 = load i8, ptr %arrayidx34.3, align 1 1140 %conv35.3 = zext i8 %61 to i32 1141 %arrayidx37.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 7 1142 %62 = load i8, ptr %arrayidx37.3, align 1 1143 %conv38.3 = zext i8 %62 to i32 1144 %arrayidx39.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 7 1145 %63 = load i8, ptr %arrayidx39.3, align 1 1146 %conv40.3 = zext i8 %63 to i32 1147 1148 %m1 = mul i32 %conv, %conv4 1149 %m2 = mul i32 %conv9, %conv14 1150 %m3 = mul i32 %conv21, %conv26 1151 %m4 = mul i32 %conv33, %conv38 1152 %m5 = mul i32 %conv2, %conv6 1153 %m6 = mul i32 %conv11, %conv16 1154 %m7 = mul i32 %conv23, %conv28 1155 %m8 = mul i32 %conv35, %conv40 1156 %m9 = mul i32 %conv.1, %conv4.1 1157 %m10 = mul i32 %conv9.1, %conv14.1 1158 %m11 = mul i32 %conv21.1, %conv26.1 1159 %m12 = mul i32 %conv33.1, %conv38.1 1160 %m13 = mul i32 %conv2.1, %conv6.1 1161 %m14 = mul i32 %conv11.1, %conv16.1 1162 %m15 = mul i32 %conv23.1, %conv28.1 1163 %m16 = mul i32 %conv35.1, %conv40.1 1164 1165 %dst1 = getelementptr inbounds i32, ptr %dst0, i64 1 1166 %dst2 = getelementptr inbounds i32, ptr %dst0, i64 2 1167 %dst3 = getelementptr inbounds i32, ptr %dst0, i64 3 1168 %dst4 = getelementptr inbounds i32, ptr %dst0, i64 4 1169 %dst5 = getelementptr inbounds i32, ptr %dst0, i64 5 1170 %dst6 = getelementptr inbounds i32, ptr %dst0, i64 6 1171 %dst7 = getelementptr inbounds i32, ptr %dst0, i64 7 1172 %dst8 = getelementptr inbounds i32, ptr %dst0, i64 8 1173 %dst9 = getelementptr inbounds i32, ptr %dst0, i64 9 1174 %dst10 = getelementptr inbounds i32, ptr %dst0, i64 10 1175 %dst11 = getelementptr inbounds i32, ptr %dst0, i64 11 1176 %dst12 = getelementptr inbounds i32, ptr %dst0, i64 12 1177 %dst13 = getelementptr inbounds i32, ptr %dst0, i64 13 1178 %dst14 = getelementptr inbounds i32, ptr %dst0, i64 14 1179 %dst15 = getelementptr inbounds i32, ptr %dst0, i64 15 1180 store i32 %m1, ptr %dst0 1181 store i32 %m2, ptr %dst1 1182 store i32 %m3, ptr %dst2 1183 store i32 %m4, ptr %dst3 1184 store i32 %m5, ptr %dst4 1185 store i32 %m6, ptr %dst5 1186 store i32 %m7, ptr %dst6 1187 store i32 %m8, ptr %dst7 1188 store i32 %m9, ptr %dst8 1189 store i32 %m10, ptr %dst9 1190 store i32 %m11, ptr %dst10 1191 store i32 %m12, ptr %dst11 1192 store i32 %m13, ptr %dst12 1193 store i32 %m14, ptr %dst13 1194 store i32 %m15, ptr %dst14 1195 store i32 %m16, ptr %dst15 1196 ret void 1197} 1198 1199define dso_local i32 @full(ptr nocapture noundef readonly %p1, i32 noundef %st1, ptr nocapture noundef readonly %p2, i32 noundef %st2) { 1200; CHECK-LABEL: @full( 1201; CHECK-NEXT: entry: 1202; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[ST1:%.*]] to i64 1203; CHECK-NEXT: [[IDX_EXT63:%.*]] = sext i32 [[ST2:%.*]] to i64 1204; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds nuw i8, ptr [[P1:%.*]], i64 4 1205; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds nuw i8, ptr [[P2:%.*]], i64 4 1206; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]] 1207; CHECK-NEXT: [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]] 1208; CHECK-NEXT: [[ARRAYIDX3_1:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR]], i64 4 1209; CHECK-NEXT: [[ARRAYIDX5_1:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR64]], i64 4 1210; CHECK-NEXT: [[ADD_PTR_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 [[IDX_EXT]] 1211; CHECK-NEXT: [[ADD_PTR64_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 [[IDX_EXT63]] 1212; CHECK-NEXT: [[ARRAYIDX3_2:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR_1]], i64 4 1213; CHECK-NEXT: [[ARRAYIDX5_2:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR64_1]], i64 4 1214; CHECK-NEXT: [[ADD_PTR_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 [[IDX_EXT]] 1215; CHECK-NEXT: [[ADD_PTR64_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 [[IDX_EXT63]] 1216; CHECK-NEXT: [[ARRAYIDX3_3:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR_2]], i64 4 1217; CHECK-NEXT: [[ARRAYIDX5_3:%.*]] = getelementptr inbounds nuw i8, ptr [[ADD_PTR64_2]], i64 4 1218; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i8>, ptr [[P1]], align 1 1219; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i8>, ptr [[P2]], align 1 1220; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 1 1221; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 1 1222; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i8>, ptr [[ADD_PTR]], align 1 1223; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i8>, ptr [[ADD_PTR64]], align 1 1224; CHECK-NEXT: [[TMP6:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 1 1225; CHECK-NEXT: [[TMP7:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 1 1226; CHECK-NEXT: [[TMP8:%.*]] = load <4 x i8>, ptr [[ADD_PTR_1]], align 1 1227; CHECK-NEXT: [[TMP9:%.*]] = load <4 x i8>, ptr [[ADD_PTR64_1]], align 1 1228; CHECK-NEXT: [[TMP10:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_2]], align 1 1229; CHECK-NEXT: [[TMP11:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_2]], align 1 1230; CHECK-NEXT: [[TMP12:%.*]] = load <4 x i8>, ptr [[ADD_PTR_2]], align 1 1231; CHECK-NEXT: [[TMP13:%.*]] = 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> 1232; CHECK-NEXT: [[TMP14:%.*]] = 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> 1233; CHECK-NEXT: [[TMP15:%.*]] = shufflevector <16 x i8> [[TMP13]], <16 x i8> [[TMP14]], <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> 1234; CHECK-NEXT: [[TMP16:%.*]] = 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> 1235; CHECK-NEXT: [[TMP17:%.*]] = 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 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19> 1236; CHECK-NEXT: [[TMP18:%.*]] = zext <16 x i8> [[TMP17]] to <16 x i32> 1237; CHECK-NEXT: [[TMP19:%.*]] = load <4 x i8>, ptr [[ADD_PTR64_2]], align 1 1238; CHECK-NEXT: [[TMP20:%.*]] = 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> 1239; CHECK-NEXT: [[TMP21:%.*]] = 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> 1240; CHECK-NEXT: [[TMP22:%.*]] = 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 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison> 1241; CHECK-NEXT: [[TMP23:%.*]] = 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> 1242; CHECK-NEXT: [[TMP24:%.*]] = shufflevector <16 x i8> [[TMP22]], <16 x i8> [[TMP23]], <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> 1243; CHECK-NEXT: [[TMP25:%.*]] = zext <16 x i8> [[TMP24]] to <16 x i32> 1244; CHECK-NEXT: [[TMP26:%.*]] = sub nsw <16 x i32> [[TMP18]], [[TMP25]] 1245; CHECK-NEXT: [[TMP27:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_3]], align 1 1246; CHECK-NEXT: [[TMP28:%.*]] = 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> 1247; CHECK-NEXT: [[TMP29:%.*]] = 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> 1248; 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> 1249; CHECK-NEXT: [[TMP31:%.*]] = 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> 1250; CHECK-NEXT: [[TMP32:%.*]] = 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> 1251; CHECK-NEXT: [[TMP33:%.*]] = zext <16 x i8> [[TMP32]] to <16 x i32> 1252; CHECK-NEXT: [[TMP34:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_3]], align 1 1253; CHECK-NEXT: [[TMP35:%.*]] = 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> 1254; CHECK-NEXT: [[TMP36:%.*]] = 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> 1255; CHECK-NEXT: [[TMP37:%.*]] = shufflevector <16 x i8> [[TMP35]], <16 x i8> [[TMP36]], <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> 1256; CHECK-NEXT: [[TMP38:%.*]] = 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> 1257; CHECK-NEXT: [[TMP39:%.*]] = shufflevector <16 x i8> [[TMP37]], <16 x i8> [[TMP38]], <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> 1258; CHECK-NEXT: [[TMP40:%.*]] = zext <16 x i8> [[TMP39]] to <16 x i32> 1259; CHECK-NEXT: [[TMP41:%.*]] = sub nsw <16 x i32> [[TMP33]], [[TMP40]] 1260; CHECK-NEXT: [[TMP42:%.*]] = shl nsw <16 x i32> [[TMP41]], splat (i32 16) 1261; CHECK-NEXT: [[TMP43:%.*]] = add nsw <16 x i32> [[TMP42]], [[TMP26]] 1262; 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> 1263; CHECK-NEXT: [[TMP45:%.*]] = add nsw <16 x i32> [[TMP43]], [[TMP44]] 1264; CHECK-NEXT: [[TMP46:%.*]] = sub nsw <16 x i32> [[TMP43]], [[TMP44]] 1265; CHECK-NEXT: [[TMP47:%.*]] = shufflevector <16 x i32> [[TMP45]], <16 x i32> [[TMP46]], <16 x i32> <i32 11, i32 15, i32 7, i32 3, i32 26, i32 30, i32 22, i32 18, i32 9, i32 13, i32 5, i32 1, i32 24, i32 28, i32 20, i32 16> 1266; CHECK-NEXT: [[TMP48:%.*]] = shufflevector <16 x i32> [[TMP47]], <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> 1267; CHECK-NEXT: [[TMP49:%.*]] = add nsw <16 x i32> [[TMP47]], [[TMP48]] 1268; CHECK-NEXT: [[TMP50:%.*]] = sub nsw <16 x i32> [[TMP47]], [[TMP48]] 1269; CHECK-NEXT: [[TMP51:%.*]] = shufflevector <16 x i32> [[TMP49]], <16 x i32> [[TMP50]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31> 1270; CHECK-NEXT: [[TMP52:%.*]] = shufflevector <16 x i32> [[TMP51]], <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> 1271; CHECK-NEXT: [[TMP53:%.*]] = sub nsw <16 x i32> [[TMP51]], [[TMP52]] 1272; CHECK-NEXT: [[TMP54:%.*]] = add nsw <16 x i32> [[TMP51]], [[TMP52]] 1273; CHECK-NEXT: [[TMP55:%.*]] = shufflevector <16 x i32> [[TMP53]], <16 x i32> [[TMP54]], <16 x i32> <i32 0, i32 17, i32 18, i32 3, i32 4, i32 21, i32 22, i32 7, i32 8, i32 25, i32 26, i32 11, i32 12, i32 29, i32 30, i32 15> 1274; CHECK-NEXT: [[TMP56:%.*]] = shufflevector <16 x i32> [[TMP55]], <16 x i32> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12> 1275; CHECK-NEXT: [[TMP57:%.*]] = add nsw <16 x i32> [[TMP55]], [[TMP56]] 1276; CHECK-NEXT: [[TMP58:%.*]] = sub nsw <16 x i32> [[TMP55]], [[TMP56]] 1277; CHECK-NEXT: [[TMP59:%.*]] = shufflevector <16 x i32> [[TMP57]], <16 x i32> [[TMP58]], <16 x i32> <i32 0, i32 1, i32 18, i32 19, i32 4, i32 5, i32 22, i32 23, i32 8, i32 9, i32 26, i32 27, i32 12, i32 13, i32 30, i32 31> 1278; CHECK-NEXT: [[TMP60:%.*]] = lshr <16 x i32> [[TMP59]], splat (i32 15) 1279; CHECK-NEXT: [[TMP61:%.*]] = and <16 x i32> [[TMP60]], splat (i32 65537) 1280; CHECK-NEXT: [[TMP62:%.*]] = mul nuw <16 x i32> [[TMP61]], splat (i32 65535) 1281; CHECK-NEXT: [[TMP63:%.*]] = add <16 x i32> [[TMP62]], [[TMP59]] 1282; CHECK-NEXT: [[TMP64:%.*]] = xor <16 x i32> [[TMP63]], [[TMP62]] 1283; CHECK-NEXT: [[TMP65:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP64]]) 1284; CHECK-NEXT: [[CONV118:%.*]] = and i32 [[TMP65]], 65535 1285; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[TMP65]], 16 1286; CHECK-NEXT: [[ADD119:%.*]] = add nuw nsw i32 [[CONV118]], [[SHR]] 1287; CHECK-NEXT: [[SHR120:%.*]] = lshr i32 [[ADD119]], 1 1288; CHECK-NEXT: ret i32 [[SHR120]] 1289; 1290entry: 1291 %idx.ext = sext i32 %st1 to i64 1292 %idx.ext63 = sext i32 %st2 to i64 1293 %0 = load i8, ptr %p1, align 1 1294 %conv = zext i8 %0 to i32 1295 %1 = load i8, ptr %p2, align 1 1296 %conv2 = zext i8 %1 to i32 1297 %sub = sub nsw i32 %conv, %conv2 1298 %arrayidx3 = getelementptr inbounds i8, ptr %p1, i64 4 1299 %2 = load i8, ptr %arrayidx3, align 1 1300 %conv4 = zext i8 %2 to i32 1301 %arrayidx5 = getelementptr inbounds i8, ptr %p2, i64 4 1302 %3 = load i8, ptr %arrayidx5, align 1 1303 %conv6 = zext i8 %3 to i32 1304 %sub7 = sub nsw i32 %conv4, %conv6 1305 %shl = shl nsw i32 %sub7, 16 1306 %add = add nsw i32 %shl, %sub 1307 %arrayidx8 = getelementptr inbounds i8, ptr %p1, i64 1 1308 %4 = load i8, ptr %arrayidx8, align 1 1309 %conv9 = zext i8 %4 to i32 1310 %arrayidx10 = getelementptr inbounds i8, ptr %p2, i64 1 1311 %5 = load i8, ptr %arrayidx10, align 1 1312 %conv11 = zext i8 %5 to i32 1313 %sub12 = sub nsw i32 %conv9, %conv11 1314 %arrayidx13 = getelementptr inbounds i8, ptr %p1, i64 5 1315 %6 = load i8, ptr %arrayidx13, align 1 1316 %conv14 = zext i8 %6 to i32 1317 %arrayidx15 = getelementptr inbounds i8, ptr %p2, i64 5 1318 %7 = load i8, ptr %arrayidx15, align 1 1319 %conv16 = zext i8 %7 to i32 1320 %sub17 = sub nsw i32 %conv14, %conv16 1321 %shl18 = shl nsw i32 %sub17, 16 1322 %add19 = add nsw i32 %shl18, %sub12 1323 %arrayidx20 = getelementptr inbounds i8, ptr %p1, i64 2 1324 %8 = load i8, ptr %arrayidx20, align 1 1325 %conv21 = zext i8 %8 to i32 1326 %arrayidx22 = getelementptr inbounds i8, ptr %p2, i64 2 1327 %9 = load i8, ptr %arrayidx22, align 1 1328 %conv23 = zext i8 %9 to i32 1329 %sub24 = sub nsw i32 %conv21, %conv23 1330 %arrayidx25 = getelementptr inbounds i8, ptr %p1, i64 6 1331 %10 = load i8, ptr %arrayidx25, align 1 1332 %conv26 = zext i8 %10 to i32 1333 %arrayidx27 = getelementptr inbounds i8, ptr %p2, i64 6 1334 %11 = load i8, ptr %arrayidx27, align 1 1335 %conv28 = zext i8 %11 to i32 1336 %sub29 = sub nsw i32 %conv26, %conv28 1337 %shl30 = shl nsw i32 %sub29, 16 1338 %add31 = add nsw i32 %shl30, %sub24 1339 %arrayidx32 = getelementptr inbounds i8, ptr %p1, i64 3 1340 %12 = load i8, ptr %arrayidx32, align 1 1341 %conv33 = zext i8 %12 to i32 1342 %arrayidx34 = getelementptr inbounds i8, ptr %p2, i64 3 1343 %13 = load i8, ptr %arrayidx34, align 1 1344 %conv35 = zext i8 %13 to i32 1345 %sub36 = sub nsw i32 %conv33, %conv35 1346 %arrayidx37 = getelementptr inbounds i8, ptr %p1, i64 7 1347 %14 = load i8, ptr %arrayidx37, align 1 1348 %conv38 = zext i8 %14 to i32 1349 %arrayidx39 = getelementptr inbounds i8, ptr %p2, i64 7 1350 %15 = load i8, ptr %arrayidx39, align 1 1351 %conv40 = zext i8 %15 to i32 1352 %sub41 = sub nsw i32 %conv38, %conv40 1353 %shl42 = shl nsw i32 %sub41, 16 1354 %add43 = add nsw i32 %shl42, %sub36 1355 %add44 = add nsw i32 %add19, %add 1356 %sub45 = sub nsw i32 %add, %add19 1357 %add46 = add nsw i32 %add43, %add31 1358 %sub47 = sub nsw i32 %add31, %add43 1359 %add48 = add nsw i32 %add46, %add44 1360 %sub51 = sub nsw i32 %add44, %add46 1361 %add55 = add nsw i32 %sub47, %sub45 1362 %sub59 = sub nsw i32 %sub45, %sub47 1363 %add.ptr = getelementptr inbounds i8, ptr %p1, i64 %idx.ext 1364 %add.ptr64 = getelementptr inbounds i8, ptr %p2, i64 %idx.ext63 1365 %16 = load i8, ptr %add.ptr, align 1 1366 %conv.1 = zext i8 %16 to i32 1367 %17 = load i8, ptr %add.ptr64, align 1 1368 %conv2.1 = zext i8 %17 to i32 1369 %sub.1 = sub nsw i32 %conv.1, %conv2.1 1370 %arrayidx3.1 = getelementptr inbounds i8, ptr %add.ptr, i64 4 1371 %18 = load i8, ptr %arrayidx3.1, align 1 1372 %conv4.1 = zext i8 %18 to i32 1373 %arrayidx5.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 4 1374 %19 = load i8, ptr %arrayidx5.1, align 1 1375 %conv6.1 = zext i8 %19 to i32 1376 %sub7.1 = sub nsw i32 %conv4.1, %conv6.1 1377 %shl.1 = shl nsw i32 %sub7.1, 16 1378 %add.1 = add nsw i32 %shl.1, %sub.1 1379 %arrayidx8.1 = getelementptr inbounds i8, ptr %add.ptr, i64 1 1380 %20 = load i8, ptr %arrayidx8.1, align 1 1381 %conv9.1 = zext i8 %20 to i32 1382 %arrayidx10.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 1 1383 %21 = load i8, ptr %arrayidx10.1, align 1 1384 %conv11.1 = zext i8 %21 to i32 1385 %sub12.1 = sub nsw i32 %conv9.1, %conv11.1 1386 %arrayidx13.1 = getelementptr inbounds i8, ptr %add.ptr, i64 5 1387 %22 = load i8, ptr %arrayidx13.1, align 1 1388 %conv14.1 = zext i8 %22 to i32 1389 %arrayidx15.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 5 1390 %23 = load i8, ptr %arrayidx15.1, align 1 1391 %conv16.1 = zext i8 %23 to i32 1392 %sub17.1 = sub nsw i32 %conv14.1, %conv16.1 1393 %shl18.1 = shl nsw i32 %sub17.1, 16 1394 %add19.1 = add nsw i32 %shl18.1, %sub12.1 1395 %arrayidx20.1 = getelementptr inbounds i8, ptr %add.ptr, i64 2 1396 %24 = load i8, ptr %arrayidx20.1, align 1 1397 %conv21.1 = zext i8 %24 to i32 1398 %arrayidx22.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 2 1399 %25 = load i8, ptr %arrayidx22.1, align 1 1400 %conv23.1 = zext i8 %25 to i32 1401 %sub24.1 = sub nsw i32 %conv21.1, %conv23.1 1402 %arrayidx25.1 = getelementptr inbounds i8, ptr %add.ptr, i64 6 1403 %26 = load i8, ptr %arrayidx25.1, align 1 1404 %conv26.1 = zext i8 %26 to i32 1405 %arrayidx27.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 6 1406 %27 = load i8, ptr %arrayidx27.1, align 1 1407 %conv28.1 = zext i8 %27 to i32 1408 %sub29.1 = sub nsw i32 %conv26.1, %conv28.1 1409 %shl30.1 = shl nsw i32 %sub29.1, 16 1410 %add31.1 = add nsw i32 %shl30.1, %sub24.1 1411 %arrayidx32.1 = getelementptr inbounds i8, ptr %add.ptr, i64 3 1412 %28 = load i8, ptr %arrayidx32.1, align 1 1413 %conv33.1 = zext i8 %28 to i32 1414 %arrayidx34.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 3 1415 %29 = load i8, ptr %arrayidx34.1, align 1 1416 %conv35.1 = zext i8 %29 to i32 1417 %sub36.1 = sub nsw i32 %conv33.1, %conv35.1 1418 %arrayidx37.1 = getelementptr inbounds i8, ptr %add.ptr, i64 7 1419 %30 = load i8, ptr %arrayidx37.1, align 1 1420 %conv38.1 = zext i8 %30 to i32 1421 %arrayidx39.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 7 1422 %31 = load i8, ptr %arrayidx39.1, align 1 1423 %conv40.1 = zext i8 %31 to i32 1424 %sub41.1 = sub nsw i32 %conv38.1, %conv40.1 1425 %shl42.1 = shl nsw i32 %sub41.1, 16 1426 %add43.1 = add nsw i32 %shl42.1, %sub36.1 1427 %add44.1 = add nsw i32 %add19.1, %add.1 1428 %sub45.1 = sub nsw i32 %add.1, %add19.1 1429 %add46.1 = add nsw i32 %add43.1, %add31.1 1430 %sub47.1 = sub nsw i32 %add31.1, %add43.1 1431 %add48.1 = add nsw i32 %add46.1, %add44.1 1432 %sub51.1 = sub nsw i32 %add44.1, %add46.1 1433 %add55.1 = add nsw i32 %sub47.1, %sub45.1 1434 %sub59.1 = sub nsw i32 %sub45.1, %sub47.1 1435 %add.ptr.1 = getelementptr inbounds i8, ptr %add.ptr, i64 %idx.ext 1436 %add.ptr64.1 = getelementptr inbounds i8, ptr %add.ptr64, i64 %idx.ext63 1437 %32 = load i8, ptr %add.ptr.1, align 1 1438 %conv.2 = zext i8 %32 to i32 1439 %33 = load i8, ptr %add.ptr64.1, align 1 1440 %conv2.2 = zext i8 %33 to i32 1441 %sub.2 = sub nsw i32 %conv.2, %conv2.2 1442 %arrayidx3.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 4 1443 %34 = load i8, ptr %arrayidx3.2, align 1 1444 %conv4.2 = zext i8 %34 to i32 1445 %arrayidx5.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 4 1446 %35 = load i8, ptr %arrayidx5.2, align 1 1447 %conv6.2 = zext i8 %35 to i32 1448 %sub7.2 = sub nsw i32 %conv4.2, %conv6.2 1449 %shl.2 = shl nsw i32 %sub7.2, 16 1450 %add.2 = add nsw i32 %shl.2, %sub.2 1451 %arrayidx8.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 1 1452 %36 = load i8, ptr %arrayidx8.2, align 1 1453 %conv9.2 = zext i8 %36 to i32 1454 %arrayidx10.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 1 1455 %37 = load i8, ptr %arrayidx10.2, align 1 1456 %conv11.2 = zext i8 %37 to i32 1457 %sub12.2 = sub nsw i32 %conv9.2, %conv11.2 1458 %arrayidx13.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 5 1459 %38 = load i8, ptr %arrayidx13.2, align 1 1460 %conv14.2 = zext i8 %38 to i32 1461 %arrayidx15.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 5 1462 %39 = load i8, ptr %arrayidx15.2, align 1 1463 %conv16.2 = zext i8 %39 to i32 1464 %sub17.2 = sub nsw i32 %conv14.2, %conv16.2 1465 %shl18.2 = shl nsw i32 %sub17.2, 16 1466 %add19.2 = add nsw i32 %shl18.2, %sub12.2 1467 %arrayidx20.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 2 1468 %40 = load i8, ptr %arrayidx20.2, align 1 1469 %conv21.2 = zext i8 %40 to i32 1470 %arrayidx22.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 2 1471 %41 = load i8, ptr %arrayidx22.2, align 1 1472 %conv23.2 = zext i8 %41 to i32 1473 %sub24.2 = sub nsw i32 %conv21.2, %conv23.2 1474 %arrayidx25.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 6 1475 %42 = load i8, ptr %arrayidx25.2, align 1 1476 %conv26.2 = zext i8 %42 to i32 1477 %arrayidx27.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 6 1478 %43 = load i8, ptr %arrayidx27.2, align 1 1479 %conv28.2 = zext i8 %43 to i32 1480 %sub29.2 = sub nsw i32 %conv26.2, %conv28.2 1481 %shl30.2 = shl nsw i32 %sub29.2, 16 1482 %add31.2 = add nsw i32 %shl30.2, %sub24.2 1483 %arrayidx32.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 3 1484 %44 = load i8, ptr %arrayidx32.2, align 1 1485 %conv33.2 = zext i8 %44 to i32 1486 %arrayidx34.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 3 1487 %45 = load i8, ptr %arrayidx34.2, align 1 1488 %conv35.2 = zext i8 %45 to i32 1489 %sub36.2 = sub nsw i32 %conv33.2, %conv35.2 1490 %arrayidx37.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 7 1491 %46 = load i8, ptr %arrayidx37.2, align 1 1492 %conv38.2 = zext i8 %46 to i32 1493 %arrayidx39.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 7 1494 %47 = load i8, ptr %arrayidx39.2, align 1 1495 %conv40.2 = zext i8 %47 to i32 1496 %sub41.2 = sub nsw i32 %conv38.2, %conv40.2 1497 %shl42.2 = shl nsw i32 %sub41.2, 16 1498 %add43.2 = add nsw i32 %shl42.2, %sub36.2 1499 %add44.2 = add nsw i32 %add19.2, %add.2 1500 %sub45.2 = sub nsw i32 %add.2, %add19.2 1501 %add46.2 = add nsw i32 %add43.2, %add31.2 1502 %sub47.2 = sub nsw i32 %add31.2, %add43.2 1503 %add48.2 = add nsw i32 %add46.2, %add44.2 1504 %sub51.2 = sub nsw i32 %add44.2, %add46.2 1505 %add55.2 = add nsw i32 %sub47.2, %sub45.2 1506 %sub59.2 = sub nsw i32 %sub45.2, %sub47.2 1507 %add.ptr.2 = getelementptr inbounds i8, ptr %add.ptr.1, i64 %idx.ext 1508 %add.ptr64.2 = getelementptr inbounds i8, ptr %add.ptr64.1, i64 %idx.ext63 1509 %48 = load i8, ptr %add.ptr.2, align 1 1510 %conv.3 = zext i8 %48 to i32 1511 %49 = load i8, ptr %add.ptr64.2, align 1 1512 %conv2.3 = zext i8 %49 to i32 1513 %sub.3 = sub nsw i32 %conv.3, %conv2.3 1514 %arrayidx3.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 4 1515 %50 = load i8, ptr %arrayidx3.3, align 1 1516 %conv4.3 = zext i8 %50 to i32 1517 %arrayidx5.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 4 1518 %51 = load i8, ptr %arrayidx5.3, align 1 1519 %conv6.3 = zext i8 %51 to i32 1520 %sub7.3 = sub nsw i32 %conv4.3, %conv6.3 1521 %shl.3 = shl nsw i32 %sub7.3, 16 1522 %add.3 = add nsw i32 %shl.3, %sub.3 1523 %arrayidx8.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 1 1524 %52 = load i8, ptr %arrayidx8.3, align 1 1525 %conv9.3 = zext i8 %52 to i32 1526 %arrayidx10.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 1 1527 %53 = load i8, ptr %arrayidx10.3, align 1 1528 %conv11.3 = zext i8 %53 to i32 1529 %sub12.3 = sub nsw i32 %conv9.3, %conv11.3 1530 %arrayidx13.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 5 1531 %54 = load i8, ptr %arrayidx13.3, align 1 1532 %conv14.3 = zext i8 %54 to i32 1533 %arrayidx15.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 5 1534 %55 = load i8, ptr %arrayidx15.3, align 1 1535 %conv16.3 = zext i8 %55 to i32 1536 %sub17.3 = sub nsw i32 %conv14.3, %conv16.3 1537 %shl18.3 = shl nsw i32 %sub17.3, 16 1538 %add19.3 = add nsw i32 %shl18.3, %sub12.3 1539 %arrayidx20.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 2 1540 %56 = load i8, ptr %arrayidx20.3, align 1 1541 %conv21.3 = zext i8 %56 to i32 1542 %arrayidx22.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 2 1543 %57 = load i8, ptr %arrayidx22.3, align 1 1544 %conv23.3 = zext i8 %57 to i32 1545 %sub24.3 = sub nsw i32 %conv21.3, %conv23.3 1546 %arrayidx25.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 6 1547 %58 = load i8, ptr %arrayidx25.3, align 1 1548 %conv26.3 = zext i8 %58 to i32 1549 %arrayidx27.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 6 1550 %59 = load i8, ptr %arrayidx27.3, align 1 1551 %conv28.3 = zext i8 %59 to i32 1552 %sub29.3 = sub nsw i32 %conv26.3, %conv28.3 1553 %shl30.3 = shl nsw i32 %sub29.3, 16 1554 %add31.3 = add nsw i32 %shl30.3, %sub24.3 1555 %arrayidx32.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 3 1556 %60 = load i8, ptr %arrayidx32.3, align 1 1557 %conv33.3 = zext i8 %60 to i32 1558 %arrayidx34.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 3 1559 %61 = load i8, ptr %arrayidx34.3, align 1 1560 %conv35.3 = zext i8 %61 to i32 1561 %sub36.3 = sub nsw i32 %conv33.3, %conv35.3 1562 %arrayidx37.3 = getelementptr inbounds i8, ptr %add.ptr.2, i64 7 1563 %62 = load i8, ptr %arrayidx37.3, align 1 1564 %conv38.3 = zext i8 %62 to i32 1565 %arrayidx39.3 = getelementptr inbounds i8, ptr %add.ptr64.2, i64 7 1566 %63 = load i8, ptr %arrayidx39.3, align 1 1567 %conv40.3 = zext i8 %63 to i32 1568 %sub41.3 = sub nsw i32 %conv38.3, %conv40.3 1569 %shl42.3 = shl nsw i32 %sub41.3, 16 1570 %add43.3 = add nsw i32 %shl42.3, %sub36.3 1571 %add44.3 = add nsw i32 %add19.3, %add.3 1572 %sub45.3 = sub nsw i32 %add.3, %add19.3 1573 %add46.3 = add nsw i32 %add43.3, %add31.3 1574 %sub47.3 = sub nsw i32 %add31.3, %add43.3 1575 %add48.3 = add nsw i32 %add46.3, %add44.3 1576 %sub51.3 = sub nsw i32 %add44.3, %add46.3 1577 %add55.3 = add nsw i32 %sub47.3, %sub45.3 1578 %sub59.3 = sub nsw i32 %sub45.3, %sub47.3 1579 %add78 = add nsw i32 %add48.1, %add48 1580 %sub86 = sub nsw i32 %add48, %add48.1 1581 %add94 = add nsw i32 %add48.3, %add48.2 1582 %sub102 = sub nsw i32 %add48.2, %add48.3 1583 %add103 = add nsw i32 %add94, %add78 1584 %sub104 = sub nsw i32 %add78, %add94 1585 %add105 = add nsw i32 %sub102, %sub86 1586 %sub106 = sub nsw i32 %sub86, %sub102 1587 %shr.i = lshr i32 %add103, 15 1588 %and.i = and i32 %shr.i, 65537 1589 %mul.i = mul nuw i32 %and.i, 65535 1590 %add.i = add i32 %mul.i, %add103 1591 %xor.i = xor i32 %add.i, %mul.i 1592 %shr.i184 = lshr i32 %add105, 15 1593 %and.i185 = and i32 %shr.i184, 65537 1594 %mul.i186 = mul nuw i32 %and.i185, 65535 1595 %add.i187 = add i32 %mul.i186, %add105 1596 %xor.i188 = xor i32 %add.i187, %mul.i186 1597 %shr.i189 = lshr i32 %sub104, 15 1598 %and.i190 = and i32 %shr.i189, 65537 1599 %mul.i191 = mul nuw i32 %and.i190, 65535 1600 %add.i192 = add i32 %mul.i191, %sub104 1601 %xor.i193 = xor i32 %add.i192, %mul.i191 1602 %shr.i194 = lshr i32 %sub106, 15 1603 %and.i195 = and i32 %shr.i194, 65537 1604 %mul.i196 = mul nuw i32 %and.i195, 65535 1605 %add.i197 = add i32 %mul.i196, %sub106 1606 %xor.i198 = xor i32 %add.i197, %mul.i196 1607 %add110 = add i32 %xor.i188, %xor.i 1608 %add112 = add i32 %add110, %xor.i193 1609 %add113 = add i32 %add112, %xor.i198 1610 %add78.1 = add nsw i32 %add55.1, %add55 1611 %sub86.1 = sub nsw i32 %add55, %add55.1 1612 %add94.1 = add nsw i32 %add55.3, %add55.2 1613 %sub102.1 = sub nsw i32 %add55.2, %add55.3 1614 %add103.1 = add nsw i32 %add94.1, %add78.1 1615 %sub104.1 = sub nsw i32 %add78.1, %add94.1 1616 %add105.1 = add nsw i32 %sub102.1, %sub86.1 1617 %sub106.1 = sub nsw i32 %sub86.1, %sub102.1 1618 %shr.i.1 = lshr i32 %add103.1, 15 1619 %and.i.1 = and i32 %shr.i.1, 65537 1620 %mul.i.1 = mul nuw i32 %and.i.1, 65535 1621 %add.i.1 = add i32 %mul.i.1, %add103.1 1622 %xor.i.1 = xor i32 %add.i.1, %mul.i.1 1623 %shr.i184.1 = lshr i32 %add105.1, 15 1624 %and.i185.1 = and i32 %shr.i184.1, 65537 1625 %mul.i186.1 = mul nuw i32 %and.i185.1, 65535 1626 %add.i187.1 = add i32 %mul.i186.1, %add105.1 1627 %xor.i188.1 = xor i32 %add.i187.1, %mul.i186.1 1628 %shr.i189.1 = lshr i32 %sub104.1, 15 1629 %and.i190.1 = and i32 %shr.i189.1, 65537 1630 %mul.i191.1 = mul nuw i32 %and.i190.1, 65535 1631 %add.i192.1 = add i32 %mul.i191.1, %sub104.1 1632 %xor.i193.1 = xor i32 %add.i192.1, %mul.i191.1 1633 %shr.i194.1 = lshr i32 %sub106.1, 15 1634 %and.i195.1 = and i32 %shr.i194.1, 65537 1635 %mul.i196.1 = mul nuw i32 %and.i195.1, 65535 1636 %add.i197.1 = add i32 %mul.i196.1, %sub106.1 1637 %xor.i198.1 = xor i32 %add.i197.1, %mul.i196.1 1638 %add108.1 = add i32 %xor.i188.1, %add113 1639 %add110.1 = add i32 %add108.1, %xor.i.1 1640 %add112.1 = add i32 %add110.1, %xor.i193.1 1641 %add113.1 = add i32 %add112.1, %xor.i198.1 1642 %add78.2 = add nsw i32 %sub51.1, %sub51 1643 %sub86.2 = sub nsw i32 %sub51, %sub51.1 1644 %add94.2 = add nsw i32 %sub51.3, %sub51.2 1645 %sub102.2 = sub nsw i32 %sub51.2, %sub51.3 1646 %add103.2 = add nsw i32 %add94.2, %add78.2 1647 %sub104.2 = sub nsw i32 %add78.2, %add94.2 1648 %add105.2 = add nsw i32 %sub102.2, %sub86.2 1649 %sub106.2 = sub nsw i32 %sub86.2, %sub102.2 1650 %shr.i.2 = lshr i32 %add103.2, 15 1651 %and.i.2 = and i32 %shr.i.2, 65537 1652 %mul.i.2 = mul nuw i32 %and.i.2, 65535 1653 %add.i.2 = add i32 %mul.i.2, %add103.2 1654 %xor.i.2 = xor i32 %add.i.2, %mul.i.2 1655 %shr.i184.2 = lshr i32 %add105.2, 15 1656 %and.i185.2 = and i32 %shr.i184.2, 65537 1657 %mul.i186.2 = mul nuw i32 %and.i185.2, 65535 1658 %add.i187.2 = add i32 %mul.i186.2, %add105.2 1659 %xor.i188.2 = xor i32 %add.i187.2, %mul.i186.2 1660 %shr.i189.2 = lshr i32 %sub104.2, 15 1661 %and.i190.2 = and i32 %shr.i189.2, 65537 1662 %mul.i191.2 = mul nuw i32 %and.i190.2, 65535 1663 %add.i192.2 = add i32 %mul.i191.2, %sub104.2 1664 %xor.i193.2 = xor i32 %add.i192.2, %mul.i191.2 1665 %shr.i194.2 = lshr i32 %sub106.2, 15 1666 %and.i195.2 = and i32 %shr.i194.2, 65537 1667 %mul.i196.2 = mul nuw i32 %and.i195.2, 65535 1668 %add.i197.2 = add i32 %mul.i196.2, %sub106.2 1669 %xor.i198.2 = xor i32 %add.i197.2, %mul.i196.2 1670 %add108.2 = add i32 %xor.i188.2, %add113.1 1671 %add110.2 = add i32 %add108.2, %xor.i.2 1672 %add112.2 = add i32 %add110.2, %xor.i193.2 1673 %add113.2 = add i32 %add112.2, %xor.i198.2 1674 %add78.3 = add nsw i32 %sub59.1, %sub59 1675 %sub86.3 = sub nsw i32 %sub59, %sub59.1 1676 %add94.3 = add nsw i32 %sub59.3, %sub59.2 1677 %sub102.3 = sub nsw i32 %sub59.2, %sub59.3 1678 %add103.3 = add nsw i32 %add94.3, %add78.3 1679 %sub104.3 = sub nsw i32 %add78.3, %add94.3 1680 %add105.3 = add nsw i32 %sub102.3, %sub86.3 1681 %sub106.3 = sub nsw i32 %sub86.3, %sub102.3 1682 %shr.i.3 = lshr i32 %add103.3, 15 1683 %and.i.3 = and i32 %shr.i.3, 65537 1684 %mul.i.3 = mul nuw i32 %and.i.3, 65535 1685 %add.i.3 = add i32 %mul.i.3, %add103.3 1686 %xor.i.3 = xor i32 %add.i.3, %mul.i.3 1687 %shr.i184.3 = lshr i32 %add105.3, 15 1688 %and.i185.3 = and i32 %shr.i184.3, 65537 1689 %mul.i186.3 = mul nuw i32 %and.i185.3, 65535 1690 %add.i187.3 = add i32 %mul.i186.3, %add105.3 1691 %xor.i188.3 = xor i32 %add.i187.3, %mul.i186.3 1692 %shr.i189.3 = lshr i32 %sub104.3, 15 1693 %and.i190.3 = and i32 %shr.i189.3, 65537 1694 %mul.i191.3 = mul nuw i32 %and.i190.3, 65535 1695 %add.i192.3 = add i32 %mul.i191.3, %sub104.3 1696 %xor.i193.3 = xor i32 %add.i192.3, %mul.i191.3 1697 %shr.i194.3 = lshr i32 %sub106.3, 15 1698 %and.i195.3 = and i32 %shr.i194.3, 65537 1699 %mul.i196.3 = mul nuw i32 %and.i195.3, 65535 1700 %add.i197.3 = add i32 %mul.i196.3, %sub106.3 1701 %xor.i198.3 = xor i32 %add.i197.3, %mul.i196.3 1702 %add108.3 = add i32 %xor.i188.3, %add113.2 1703 %add110.3 = add i32 %add108.3, %xor.i.3 1704 %add112.3 = add i32 %add110.3, %xor.i193.3 1705 %add113.3 = add i32 %add112.3, %xor.i198.3 1706 %conv118 = and i32 %add113.3, 65535 1707 %shr = lshr i32 %add113.3, 16 1708 %add119 = add nuw nsw i32 %conv118, %shr 1709 %shr120 = lshr i32 %add119, 1 1710 ret i32 %shr120 1711} 1712