431 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64 -S | FileCheck %s --check-prefixes=CHECK,SSE3; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v2 -S | FileCheck %s --check-prefixes=CHECK,SSE4; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v3 -S | FileCheck %s --check-prefixes=CHECK,AVX5; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v4 -S | FileCheck %s --check-prefixes=CHECK,AVX6 7; // PR474918; void pr(char* r, char* a){9; for (int i = 0; i < 8; i++){10; r[i] *= a[i];11; }12; }13 14define void @add4(ptr noalias nocapture noundef %r, ptr noalias nocapture noundef readonly %a) {15; CHECK-LABEL: @add4(16; CHECK-NEXT: entry:17; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i8>, ptr [[A:%.*]], align 118; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i8>, ptr [[R:%.*]], align 119; CHECK-NEXT: [[TMP2:%.*]] = mul <4 x i8> [[TMP1]], [[TMP0]]20; CHECK-NEXT: store <4 x i8> [[TMP2]], ptr [[R]], align 121; CHECK-NEXT: ret void22;23entry:24 %0 = load i8, ptr %a, align 125 %1 = load i8, ptr %r, align 126 %mul = mul i8 %1, %027 store i8 %mul, ptr %r, align 128 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 129 %2 = load i8, ptr %arrayidx.1, align 130 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 131 %3 = load i8, ptr %arrayidx2.1, align 132 %mul.1 = mul i8 %3, %233 store i8 %mul.1, ptr %arrayidx2.1, align 134 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 235 %4 = load i8, ptr %arrayidx.2, align 136 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 237 %5 = load i8, ptr %arrayidx2.2, align 138 %mul.2 = mul i8 %5, %439 store i8 %mul.2, ptr %arrayidx2.2, align 140 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 341 %6 = load i8, ptr %arrayidx.3, align 142 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 343 %7 = load i8, ptr %arrayidx2.3, align 144 %mul.3 = mul i8 %7, %645 store i8 %mul.3, ptr %arrayidx2.3, align 146 ret void47}48 49define void @add8(ptr noalias nocapture noundef %r, ptr noalias nocapture noundef readonly %a) {50; CHECK-LABEL: @add8(51; CHECK-NEXT: entry:52; CHECK-NEXT: [[TMP0:%.*]] = load <8 x i8>, ptr [[A:%.*]], align 153; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i8>, ptr [[R:%.*]], align 154; CHECK-NEXT: [[TMP2:%.*]] = mul <8 x i8> [[TMP1]], [[TMP0]]55; CHECK-NEXT: store <8 x i8> [[TMP2]], ptr [[R]], align 156; CHECK-NEXT: ret void57;58entry:59 %0 = load i8, ptr %a, align 160 %1 = load i8, ptr %r, align 161 %mul = mul i8 %1, %062 store i8 %mul, ptr %r, align 163 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 164 %2 = load i8, ptr %arrayidx.1, align 165 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 166 %3 = load i8, ptr %arrayidx2.1, align 167 %mul.1 = mul i8 %3, %268 store i8 %mul.1, ptr %arrayidx2.1, align 169 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 270 %4 = load i8, ptr %arrayidx.2, align 171 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 272 %5 = load i8, ptr %arrayidx2.2, align 173 %mul.2 = mul i8 %5, %474 store i8 %mul.2, ptr %arrayidx2.2, align 175 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 376 %6 = load i8, ptr %arrayidx.3, align 177 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 378 %7 = load i8, ptr %arrayidx2.3, align 179 %mul.3 = mul i8 %7, %680 store i8 %mul.3, ptr %arrayidx2.3, align 181 %arrayidx.4 = getelementptr inbounds i8, ptr %a, i64 482 %8 = load i8, ptr %arrayidx.4, align 183 %arrayidx2.4 = getelementptr inbounds i8, ptr %r, i64 484 %9 = load i8, ptr %arrayidx2.4, align 185 %mul.4 = mul i8 %9, %886 store i8 %mul.4, ptr %arrayidx2.4, align 187 %arrayidx.5 = getelementptr inbounds i8, ptr %a, i64 588 %10 = load i8, ptr %arrayidx.5, align 189 %arrayidx2.5 = getelementptr inbounds i8, ptr %r, i64 590 %11 = load i8, ptr %arrayidx2.5, align 191 %mul.5 = mul i8 %11, %1092 store i8 %mul.5, ptr %arrayidx2.5, align 193 %arrayidx.6 = getelementptr inbounds i8, ptr %a, i64 694 %12 = load i8, ptr %arrayidx.6, align 195 %arrayidx2.6 = getelementptr inbounds i8, ptr %r, i64 696 %13 = load i8, ptr %arrayidx2.6, align 197 %mul.6 = mul i8 %13, %1298 store i8 %mul.6, ptr %arrayidx2.6, align 199 %arrayidx.7 = getelementptr inbounds i8, ptr %a, i64 7100 %14 = load i8, ptr %arrayidx.7, align 1101 %arrayidx2.7 = getelementptr inbounds i8, ptr %r, i64 7102 %15 = load i8, ptr %arrayidx2.7, align 1103 %mul.7 = mul i8 %15, %14104 store i8 %mul.7, ptr %arrayidx2.7, align 1105 ret void106}107 108define void @add16(ptr noalias nocapture noundef %r, ptr noalias nocapture noundef readonly %a) {109; CHECK-LABEL: @add16(110; CHECK-NEXT: entry:111; CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 1112; CHECK-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr [[R:%.*]], align 1113; CHECK-NEXT: [[TMP2:%.*]] = mul <16 x i8> [[TMP1]], [[TMP0]]114; CHECK-NEXT: store <16 x i8> [[TMP2]], ptr [[R]], align 1115; CHECK-NEXT: ret void116;117entry:118 %0 = load i8, ptr %a, align 1119 %1 = load i8, ptr %r, align 1120 %mul = mul i8 %1, %0121 store i8 %mul, ptr %r, align 1122 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 1123 %2 = load i8, ptr %arrayidx.1, align 1124 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 1125 %3 = load i8, ptr %arrayidx2.1, align 1126 %mul.1 = mul i8 %3, %2127 store i8 %mul.1, ptr %arrayidx2.1, align 1128 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 2129 %4 = load i8, ptr %arrayidx.2, align 1130 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 2131 %5 = load i8, ptr %arrayidx2.2, align 1132 %mul.2 = mul i8 %5, %4133 store i8 %mul.2, ptr %arrayidx2.2, align 1134 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 3135 %6 = load i8, ptr %arrayidx.3, align 1136 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 3137 %7 = load i8, ptr %arrayidx2.3, align 1138 %mul.3 = mul i8 %7, %6139 store i8 %mul.3, ptr %arrayidx2.3, align 1140 %arrayidx.4 = getelementptr inbounds i8, ptr %a, i64 4141 %8 = load i8, ptr %arrayidx.4, align 1142 %arrayidx2.4 = getelementptr inbounds i8, ptr %r, i64 4143 %9 = load i8, ptr %arrayidx2.4, align 1144 %mul.4 = mul i8 %9, %8145 store i8 %mul.4, ptr %arrayidx2.4, align 1146 %arrayidx.5 = getelementptr inbounds i8, ptr %a, i64 5147 %10 = load i8, ptr %arrayidx.5, align 1148 %arrayidx2.5 = getelementptr inbounds i8, ptr %r, i64 5149 %11 = load i8, ptr %arrayidx2.5, align 1150 %mul.5 = mul i8 %11, %10151 store i8 %mul.5, ptr %arrayidx2.5, align 1152 %arrayidx.6 = getelementptr inbounds i8, ptr %a, i64 6153 %12 = load i8, ptr %arrayidx.6, align 1154 %arrayidx2.6 = getelementptr inbounds i8, ptr %r, i64 6155 %13 = load i8, ptr %arrayidx2.6, align 1156 %mul.6 = mul i8 %13, %12157 store i8 %mul.6, ptr %arrayidx2.6, align 1158 %arrayidx.7 = getelementptr inbounds i8, ptr %a, i64 7159 %14 = load i8, ptr %arrayidx.7, align 1160 %arrayidx2.7 = getelementptr inbounds i8, ptr %r, i64 7161 %15 = load i8, ptr %arrayidx2.7, align 1162 %mul.7 = mul i8 %15, %14163 store i8 %mul.7, ptr %arrayidx2.7, align 1164 %arrayidx.8 = getelementptr inbounds i8, ptr %a, i64 8165 %16 = load i8, ptr %arrayidx.8, align 1166 %arrayidx2.8 = getelementptr inbounds i8, ptr %r, i64 8167 %17 = load i8, ptr %arrayidx2.8, align 1168 %mul.8 = mul i8 %17, %16169 store i8 %mul.8, ptr %arrayidx2.8, align 1170 %arrayidx.9 = getelementptr inbounds i8, ptr %a, i64 9171 %18 = load i8, ptr %arrayidx.9, align 1172 %arrayidx2.9 = getelementptr inbounds i8, ptr %r, i64 9173 %19 = load i8, ptr %arrayidx2.9, align 1174 %mul.9 = mul i8 %19, %18175 store i8 %mul.9, ptr %arrayidx2.9, align 1176 %arrayidx.10 = getelementptr inbounds i8, ptr %a, i64 10177 %20 = load i8, ptr %arrayidx.10, align 1178 %arrayidx2.10 = getelementptr inbounds i8, ptr %r, i64 10179 %21 = load i8, ptr %arrayidx2.10, align 1180 %mul.10 = mul i8 %21, %20181 store i8 %mul.10, ptr %arrayidx2.10, align 1182 %arrayidx.11 = getelementptr inbounds i8, ptr %a, i64 11183 %22 = load i8, ptr %arrayidx.11, align 1184 %arrayidx2.11 = getelementptr inbounds i8, ptr %r, i64 11185 %23 = load i8, ptr %arrayidx2.11, align 1186 %mul.11 = mul i8 %23, %22187 store i8 %mul.11, ptr %arrayidx2.11, align 1188 %arrayidx.12 = getelementptr inbounds i8, ptr %a, i64 12189 %24 = load i8, ptr %arrayidx.12, align 1190 %arrayidx2.12 = getelementptr inbounds i8, ptr %r, i64 12191 %25 = load i8, ptr %arrayidx2.12, align 1192 %mul.12 = mul i8 %25, %24193 store i8 %mul.12, ptr %arrayidx2.12, align 1194 %arrayidx.13 = getelementptr inbounds i8, ptr %a, i64 13195 %26 = load i8, ptr %arrayidx.13, align 1196 %arrayidx2.13 = getelementptr inbounds i8, ptr %r, i64 13197 %27 = load i8, ptr %arrayidx2.13, align 1198 %mul.13 = mul i8 %27, %26199 store i8 %mul.13, ptr %arrayidx2.13, align 1200 %arrayidx.14 = getelementptr inbounds i8, ptr %a, i64 14201 %28 = load i8, ptr %arrayidx.14, align 1202 %arrayidx2.14 = getelementptr inbounds i8, ptr %r, i64 14203 %29 = load i8, ptr %arrayidx2.14, align 1204 %mul.14 = mul i8 %29, %28205 store i8 %mul.14, ptr %arrayidx2.14, align 1206 %arrayidx.15 = getelementptr inbounds i8, ptr %a, i64 15207 %30 = load i8, ptr %arrayidx.15, align 1208 %arrayidx2.15 = getelementptr inbounds i8, ptr %r, i64 15209 %31 = load i8, ptr %arrayidx2.15, align 1210 %mul.15 = mul i8 %31, %30211 store i8 %mul.15, ptr %arrayidx2.15, align 1212 ret void213}214 215define void @add32(ptr noalias nocapture noundef %r, ptr noalias nocapture noundef readonly %a) {216; SSE-LABEL: @add32(217; SSE-NEXT: entry:218; SSE-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 1219; SSE-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr [[R:%.*]], align 1220; SSE-NEXT: [[TMP2:%.*]] = mul <16 x i8> [[TMP1]], [[TMP0]]221; SSE-NEXT: store <16 x i8> [[TMP2]], ptr [[R]], align 1222; SSE-NEXT: [[ARRAYIDX_16:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 16223; SSE-NEXT: [[ARRAYIDX2_16:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 16224; SSE-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr [[ARRAYIDX_16]], align 1225; SSE-NEXT: [[TMP4:%.*]] = load <16 x i8>, ptr [[ARRAYIDX2_16]], align 1226; SSE-NEXT: [[TMP5:%.*]] = mul <16 x i8> [[TMP4]], [[TMP3]]227; SSE-NEXT: store <16 x i8> [[TMP5]], ptr [[ARRAYIDX2_16]], align 1228; SSE-NEXT: ret void229;230; AVX-LABEL: @add32(231; AVX-NEXT: entry:232; AVX-NEXT: [[TMP0:%.*]] = load <32 x i8>, ptr [[A:%.*]], align 1233; AVX-NEXT: [[TMP1:%.*]] = load <32 x i8>, ptr [[R:%.*]], align 1234; AVX-NEXT: [[TMP2:%.*]] = mul <32 x i8> [[TMP1]], [[TMP0]]235; AVX-NEXT: store <32 x i8> [[TMP2]], ptr [[R]], align 1236; AVX-NEXT: ret void237;238entry:239 %0 = load i8, ptr %a, align 1240 %1 = load i8, ptr %r, align 1241 %mul = mul i8 %1, %0242 store i8 %mul, ptr %r, align 1243 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 1244 %2 = load i8, ptr %arrayidx.1, align 1245 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 1246 %3 = load i8, ptr %arrayidx2.1, align 1247 %mul.1 = mul i8 %3, %2248 store i8 %mul.1, ptr %arrayidx2.1, align 1249 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 2250 %4 = load i8, ptr %arrayidx.2, align 1251 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 2252 %5 = load i8, ptr %arrayidx2.2, align 1253 %mul.2 = mul i8 %5, %4254 store i8 %mul.2, ptr %arrayidx2.2, align 1255 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 3256 %6 = load i8, ptr %arrayidx.3, align 1257 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 3258 %7 = load i8, ptr %arrayidx2.3, align 1259 %mul.3 = mul i8 %7, %6260 store i8 %mul.3, ptr %arrayidx2.3, align 1261 %arrayidx.4 = getelementptr inbounds i8, ptr %a, i64 4262 %8 = load i8, ptr %arrayidx.4, align 1263 %arrayidx2.4 = getelementptr inbounds i8, ptr %r, i64 4264 %9 = load i8, ptr %arrayidx2.4, align 1265 %mul.4 = mul i8 %9, %8266 store i8 %mul.4, ptr %arrayidx2.4, align 1267 %arrayidx.5 = getelementptr inbounds i8, ptr %a, i64 5268 %10 = load i8, ptr %arrayidx.5, align 1269 %arrayidx2.5 = getelementptr inbounds i8, ptr %r, i64 5270 %11 = load i8, ptr %arrayidx2.5, align 1271 %mul.5 = mul i8 %11, %10272 store i8 %mul.5, ptr %arrayidx2.5, align 1273 %arrayidx.6 = getelementptr inbounds i8, ptr %a, i64 6274 %12 = load i8, ptr %arrayidx.6, align 1275 %arrayidx2.6 = getelementptr inbounds i8, ptr %r, i64 6276 %13 = load i8, ptr %arrayidx2.6, align 1277 %mul.6 = mul i8 %13, %12278 store i8 %mul.6, ptr %arrayidx2.6, align 1279 %arrayidx.7 = getelementptr inbounds i8, ptr %a, i64 7280 %14 = load i8, ptr %arrayidx.7, align 1281 %arrayidx2.7 = getelementptr inbounds i8, ptr %r, i64 7282 %15 = load i8, ptr %arrayidx2.7, align 1283 %mul.7 = mul i8 %15, %14284 store i8 %mul.7, ptr %arrayidx2.7, align 1285 %arrayidx.8 = getelementptr inbounds i8, ptr %a, i64 8286 %16 = load i8, ptr %arrayidx.8, align 1287 %arrayidx2.8 = getelementptr inbounds i8, ptr %r, i64 8288 %17 = load i8, ptr %arrayidx2.8, align 1289 %mul.8 = mul i8 %17, %16290 store i8 %mul.8, ptr %arrayidx2.8, align 1291 %arrayidx.9 = getelementptr inbounds i8, ptr %a, i64 9292 %18 = load i8, ptr %arrayidx.9, align 1293 %arrayidx2.9 = getelementptr inbounds i8, ptr %r, i64 9294 %19 = load i8, ptr %arrayidx2.9, align 1295 %mul.9 = mul i8 %19, %18296 store i8 %mul.9, ptr %arrayidx2.9, align 1297 %arrayidx.10 = getelementptr inbounds i8, ptr %a, i64 10298 %20 = load i8, ptr %arrayidx.10, align 1299 %arrayidx2.10 = getelementptr inbounds i8, ptr %r, i64 10300 %21 = load i8, ptr %arrayidx2.10, align 1301 %mul.10 = mul i8 %21, %20302 store i8 %mul.10, ptr %arrayidx2.10, align 1303 %arrayidx.11 = getelementptr inbounds i8, ptr %a, i64 11304 %22 = load i8, ptr %arrayidx.11, align 1305 %arrayidx2.11 = getelementptr inbounds i8, ptr %r, i64 11306 %23 = load i8, ptr %arrayidx2.11, align 1307 %mul.11 = mul i8 %23, %22308 store i8 %mul.11, ptr %arrayidx2.11, align 1309 %arrayidx.12 = getelementptr inbounds i8, ptr %a, i64 12310 %24 = load i8, ptr %arrayidx.12, align 1311 %arrayidx2.12 = getelementptr inbounds i8, ptr %r, i64 12312 %25 = load i8, ptr %arrayidx2.12, align 1313 %mul.12 = mul i8 %25, %24314 store i8 %mul.12, ptr %arrayidx2.12, align 1315 %arrayidx.13 = getelementptr inbounds i8, ptr %a, i64 13316 %26 = load i8, ptr %arrayidx.13, align 1317 %arrayidx2.13 = getelementptr inbounds i8, ptr %r, i64 13318 %27 = load i8, ptr %arrayidx2.13, align 1319 %mul.13 = mul i8 %27, %26320 store i8 %mul.13, ptr %arrayidx2.13, align 1321 %arrayidx.14 = getelementptr inbounds i8, ptr %a, i64 14322 %28 = load i8, ptr %arrayidx.14, align 1323 %arrayidx2.14 = getelementptr inbounds i8, ptr %r, i64 14324 %29 = load i8, ptr %arrayidx2.14, align 1325 %mul.14 = mul i8 %29, %28326 store i8 %mul.14, ptr %arrayidx2.14, align 1327 %arrayidx.15 = getelementptr inbounds i8, ptr %a, i64 15328 %30 = load i8, ptr %arrayidx.15, align 1329 %arrayidx2.15 = getelementptr inbounds i8, ptr %r, i64 15330 %31 = load i8, ptr %arrayidx2.15, align 1331 %mul.15 = mul i8 %31, %30332 store i8 %mul.15, ptr %arrayidx2.15, align 1333 %arrayidx.16 = getelementptr inbounds i8, ptr %a, i64 16334 %32 = load i8, ptr %arrayidx.16, align 1335 %arrayidx2.16 = getelementptr inbounds i8, ptr %r, i64 16336 %33 = load i8, ptr %arrayidx2.16, align 1337 %mul.16 = mul i8 %33, %32338 store i8 %mul.16, ptr %arrayidx2.16, align 1339 %arrayidx.17 = getelementptr inbounds i8, ptr %a, i64 17340 %34 = load i8, ptr %arrayidx.17, align 1341 %arrayidx2.17 = getelementptr inbounds i8, ptr %r, i64 17342 %35 = load i8, ptr %arrayidx2.17, align 1343 %mul.17 = mul i8 %35, %34344 store i8 %mul.17, ptr %arrayidx2.17, align 1345 %arrayidx.18 = getelementptr inbounds i8, ptr %a, i64 18346 %36 = load i8, ptr %arrayidx.18, align 1347 %arrayidx2.18 = getelementptr inbounds i8, ptr %r, i64 18348 %37 = load i8, ptr %arrayidx2.18, align 1349 %mul.18 = mul i8 %37, %36350 store i8 %mul.18, ptr %arrayidx2.18, align 1351 %arrayidx.19 = getelementptr inbounds i8, ptr %a, i64 19352 %38 = load i8, ptr %arrayidx.19, align 1353 %arrayidx2.19 = getelementptr inbounds i8, ptr %r, i64 19354 %39 = load i8, ptr %arrayidx2.19, align 1355 %mul.19 = mul i8 %39, %38356 store i8 %mul.19, ptr %arrayidx2.19, align 1357 %arrayidx.20 = getelementptr inbounds i8, ptr %a, i64 20358 %40 = load i8, ptr %arrayidx.20, align 1359 %arrayidx2.20 = getelementptr inbounds i8, ptr %r, i64 20360 %41 = load i8, ptr %arrayidx2.20, align 1361 %mul.20 = mul i8 %41, %40362 store i8 %mul.20, ptr %arrayidx2.20, align 1363 %arrayidx.21 = getelementptr inbounds i8, ptr %a, i64 21364 %42 = load i8, ptr %arrayidx.21, align 1365 %arrayidx2.21 = getelementptr inbounds i8, ptr %r, i64 21366 %43 = load i8, ptr %arrayidx2.21, align 1367 %mul.21 = mul i8 %43, %42368 store i8 %mul.21, ptr %arrayidx2.21, align 1369 %arrayidx.22 = getelementptr inbounds i8, ptr %a, i64 22370 %44 = load i8, ptr %arrayidx.22, align 1371 %arrayidx2.22 = getelementptr inbounds i8, ptr %r, i64 22372 %45 = load i8, ptr %arrayidx2.22, align 1373 %mul.22 = mul i8 %45, %44374 store i8 %mul.22, ptr %arrayidx2.22, align 1375 %arrayidx.23 = getelementptr inbounds i8, ptr %a, i64 23376 %46 = load i8, ptr %arrayidx.23, align 1377 %arrayidx2.23 = getelementptr inbounds i8, ptr %r, i64 23378 %47 = load i8, ptr %arrayidx2.23, align 1379 %mul.23 = mul i8 %47, %46380 store i8 %mul.23, ptr %arrayidx2.23, align 1381 %arrayidx.24 = getelementptr inbounds i8, ptr %a, i64 24382 %48 = load i8, ptr %arrayidx.24, align 1383 %arrayidx2.24 = getelementptr inbounds i8, ptr %r, i64 24384 %49 = load i8, ptr %arrayidx2.24, align 1385 %mul.24 = mul i8 %49, %48386 store i8 %mul.24, ptr %arrayidx2.24, align 1387 %arrayidx.25 = getelementptr inbounds i8, ptr %a, i64 25388 %50 = load i8, ptr %arrayidx.25, align 1389 %arrayidx2.25 = getelementptr inbounds i8, ptr %r, i64 25390 %51 = load i8, ptr %arrayidx2.25, align 1391 %mul.25 = mul i8 %51, %50392 store i8 %mul.25, ptr %arrayidx2.25, align 1393 %arrayidx.26 = getelementptr inbounds i8, ptr %a, i64 26394 %52 = load i8, ptr %arrayidx.26, align 1395 %arrayidx2.26 = getelementptr inbounds i8, ptr %r, i64 26396 %53 = load i8, ptr %arrayidx2.26, align 1397 %mul.26 = mul i8 %53, %52398 store i8 %mul.26, ptr %arrayidx2.26, align 1399 %arrayidx.27 = getelementptr inbounds i8, ptr %a, i64 27400 %54 = load i8, ptr %arrayidx.27, align 1401 %arrayidx2.27 = getelementptr inbounds i8, ptr %r, i64 27402 %55 = load i8, ptr %arrayidx2.27, align 1403 %mul.27 = mul i8 %55, %54404 store i8 %mul.27, ptr %arrayidx2.27, align 1405 %arrayidx.28 = getelementptr inbounds i8, ptr %a, i64 28406 %56 = load i8, ptr %arrayidx.28, align 1407 %arrayidx2.28 = getelementptr inbounds i8, ptr %r, i64 28408 %57 = load i8, ptr %arrayidx2.28, align 1409 %mul.28 = mul i8 %57, %56410 store i8 %mul.28, ptr %arrayidx2.28, align 1411 %arrayidx.29 = getelementptr inbounds i8, ptr %a, i64 29412 %58 = load i8, ptr %arrayidx.29, align 1413 %arrayidx2.29 = getelementptr inbounds i8, ptr %r, i64 29414 %59 = load i8, ptr %arrayidx2.29, align 1415 %mul.29 = mul i8 %59, %58416 store i8 %mul.29, ptr %arrayidx2.29, align 1417 %arrayidx.30 = getelementptr inbounds i8, ptr %a, i64 30418 %60 = load i8, ptr %arrayidx.30, align 1419 %arrayidx2.30 = getelementptr inbounds i8, ptr %r, i64 30420 %61 = load i8, ptr %arrayidx2.30, align 1421 %mul.30 = mul i8 %61, %60422 store i8 %mul.30, ptr %arrayidx2.30, align 1423 %arrayidx.31 = getelementptr inbounds i8, ptr %a, i64 31424 %62 = load i8, ptr %arrayidx.31, align 1425 %arrayidx2.31 = getelementptr inbounds i8, ptr %r, i64 31426 %63 = load i8, ptr %arrayidx2.31, align 1427 %mul.31 = mul i8 %63, %62428 store i8 %mul.31, ptr %arrayidx2.31, align 1429 ret void430}431