1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -basic-aa -slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64 -basic-aa -slp-vectorizer -S | FileCheck %s --check-prefix=SSE 3; RUN: opt < %s -basic-aa -slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v2 -basic-aa -slp-vectorizer -S | FileCheck %s --check-prefix=SSE 4; RUN: opt < %s -basic-aa -slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v3 -basic-aa -slp-vectorizer -S | FileCheck %s --check-prefix=AVX 5; RUN: opt < %s -basic-aa -slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v4 -basic-aa -slp-vectorizer -S | FileCheck %s --check-prefix=AVX 6 7; // PR47491 8; 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; SSE-LABEL: @add4( 16; SSE-NEXT: entry: 17; SSE-NEXT: [[TMP0:%.*]] = load i8, ptr [[A:%.*]], align 1 18; SSE-NEXT: [[TMP1:%.*]] = load i8, ptr [[R:%.*]], align 1 19; SSE-NEXT: [[ADD:%.*]] = add i8 [[TMP1]], [[TMP0]] 20; SSE-NEXT: store i8 [[ADD]], ptr [[R]], align 1 21; SSE-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 1 22; SSE-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX_1]], align 1 23; SSE-NEXT: [[ARRAYIDX2_1:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 1 24; SSE-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX2_1]], align 1 25; SSE-NEXT: [[ADD_1:%.*]] = add i8 [[TMP3]], [[TMP2]] 26; SSE-NEXT: store i8 [[ADD_1]], ptr [[ARRAYIDX2_1]], align 1 27; SSE-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 2 28; SSE-NEXT: [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX_2]], align 1 29; SSE-NEXT: [[ARRAYIDX2_2:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 2 30; SSE-NEXT: [[TMP5:%.*]] = load i8, ptr [[ARRAYIDX2_2]], align 1 31; SSE-NEXT: [[ADD_2:%.*]] = add i8 [[TMP5]], [[TMP4]] 32; SSE-NEXT: store i8 [[ADD_2]], ptr [[ARRAYIDX2_2]], align 1 33; SSE-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 3 34; SSE-NEXT: [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX_3]], align 1 35; SSE-NEXT: [[ARRAYIDX2_3:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 3 36; SSE-NEXT: [[TMP7:%.*]] = load i8, ptr [[ARRAYIDX2_3]], align 1 37; SSE-NEXT: [[ADD_3:%.*]] = add i8 [[TMP7]], [[TMP6]] 38; SSE-NEXT: store i8 [[ADD_3]], ptr [[ARRAYIDX2_3]], align 1 39; SSE-NEXT: ret void 40; 41; AVX-LABEL: @add4( 42; AVX-NEXT: entry: 43; AVX-NEXT: [[TMP0:%.*]] = load i8, ptr [[A:%.*]], align 1 44; AVX-NEXT: [[TMP1:%.*]] = load i8, ptr [[R:%.*]], align 1 45; AVX-NEXT: [[ADD:%.*]] = add i8 [[TMP1]], [[TMP0]] 46; AVX-NEXT: store i8 [[ADD]], ptr [[R]], align 1 47; AVX-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 1 48; AVX-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX_1]], align 1 49; AVX-NEXT: [[ARRAYIDX2_1:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 1 50; AVX-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX2_1]], align 1 51; AVX-NEXT: [[ADD_1:%.*]] = add i8 [[TMP3]], [[TMP2]] 52; AVX-NEXT: store i8 [[ADD_1]], ptr [[ARRAYIDX2_1]], align 1 53; AVX-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 2 54; AVX-NEXT: [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX_2]], align 1 55; AVX-NEXT: [[ARRAYIDX2_2:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 2 56; AVX-NEXT: [[TMP5:%.*]] = load i8, ptr [[ARRAYIDX2_2]], align 1 57; AVX-NEXT: [[ADD_2:%.*]] = add i8 [[TMP5]], [[TMP4]] 58; AVX-NEXT: store i8 [[ADD_2]], ptr [[ARRAYIDX2_2]], align 1 59; AVX-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 3 60; AVX-NEXT: [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX_3]], align 1 61; AVX-NEXT: [[ARRAYIDX2_3:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 3 62; AVX-NEXT: [[TMP7:%.*]] = load i8, ptr [[ARRAYIDX2_3]], align 1 63; AVX-NEXT: [[ADD_3:%.*]] = add i8 [[TMP7]], [[TMP6]] 64; AVX-NEXT: store i8 [[ADD_3]], ptr [[ARRAYIDX2_3]], align 1 65; AVX-NEXT: ret void 66; 67entry: 68 %0 = load i8, ptr %a, align 1 69 %1 = load i8, ptr %r, align 1 70 %add = add i8 %1, %0 71 store i8 %add, ptr %r, align 1 72 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 1 73 %2 = load i8, ptr %arrayidx.1, align 1 74 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 1 75 %3 = load i8, ptr %arrayidx2.1, align 1 76 %add.1 = add i8 %3, %2 77 store i8 %add.1, ptr %arrayidx2.1, align 1 78 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 2 79 %4 = load i8, ptr %arrayidx.2, align 1 80 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 2 81 %5 = load i8, ptr %arrayidx2.2, align 1 82 %add.2 = add i8 %5, %4 83 store i8 %add.2, ptr %arrayidx2.2, align 1 84 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 3 85 %6 = load i8, ptr %arrayidx.3, align 1 86 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 3 87 %7 = load i8, ptr %arrayidx2.3, align 1 88 %add.3 = add i8 %7, %6 89 store i8 %add.3, ptr %arrayidx2.3, align 1 90 ret void 91} 92 93define void @add8(ptr noalias nocapture noundef %r, ptr noalias nocapture noundef readonly %a) { 94; SSE-LABEL: @add8( 95; SSE-NEXT: entry: 96; SSE-NEXT: [[TMP0:%.*]] = load <8 x i8>, ptr [[A:%.*]], align 1 97; SSE-NEXT: [[TMP1:%.*]] = load <8 x i8>, ptr [[R:%.*]], align 1 98; SSE-NEXT: [[TMP2:%.*]] = add <8 x i8> [[TMP1]], [[TMP0]] 99; SSE-NEXT: store <8 x i8> [[TMP2]], ptr [[R]], align 1 100; SSE-NEXT: ret void 101; 102; AVX-LABEL: @add8( 103; AVX-NEXT: entry: 104; AVX-NEXT: [[TMP0:%.*]] = load <8 x i8>, ptr [[A:%.*]], align 1 105; AVX-NEXT: [[TMP1:%.*]] = load <8 x i8>, ptr [[R:%.*]], align 1 106; AVX-NEXT: [[TMP2:%.*]] = add <8 x i8> [[TMP1]], [[TMP0]] 107; AVX-NEXT: store <8 x i8> [[TMP2]], ptr [[R]], align 1 108; AVX-NEXT: ret void 109; 110entry: 111 %0 = load i8, ptr %a, align 1 112 %1 = load i8, ptr %r, align 1 113 %add = add i8 %1, %0 114 store i8 %add, ptr %r, align 1 115 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 1 116 %2 = load i8, ptr %arrayidx.1, align 1 117 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 1 118 %3 = load i8, ptr %arrayidx2.1, align 1 119 %add.1 = add i8 %3, %2 120 store i8 %add.1, ptr %arrayidx2.1, align 1 121 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 2 122 %4 = load i8, ptr %arrayidx.2, align 1 123 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 2 124 %5 = load i8, ptr %arrayidx2.2, align 1 125 %add.2 = add i8 %5, %4 126 store i8 %add.2, ptr %arrayidx2.2, align 1 127 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 3 128 %6 = load i8, ptr %arrayidx.3, align 1 129 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 3 130 %7 = load i8, ptr %arrayidx2.3, align 1 131 %add.3 = add i8 %7, %6 132 store i8 %add.3, ptr %arrayidx2.3, align 1 133 %arrayidx.4 = getelementptr inbounds i8, ptr %a, i64 4 134 %8 = load i8, ptr %arrayidx.4, align 1 135 %arrayidx2.4 = getelementptr inbounds i8, ptr %r, i64 4 136 %9 = load i8, ptr %arrayidx2.4, align 1 137 %add.4 = add i8 %9, %8 138 store i8 %add.4, ptr %arrayidx2.4, align 1 139 %arrayidx.5 = getelementptr inbounds i8, ptr %a, i64 5 140 %10 = load i8, ptr %arrayidx.5, align 1 141 %arrayidx2.5 = getelementptr inbounds i8, ptr %r, i64 5 142 %11 = load i8, ptr %arrayidx2.5, align 1 143 %add.5 = add i8 %11, %10 144 store i8 %add.5, ptr %arrayidx2.5, align 1 145 %arrayidx.6 = getelementptr inbounds i8, ptr %a, i64 6 146 %12 = load i8, ptr %arrayidx.6, align 1 147 %arrayidx2.6 = getelementptr inbounds i8, ptr %r, i64 6 148 %13 = load i8, ptr %arrayidx2.6, align 1 149 %add.6 = add i8 %13, %12 150 store i8 %add.6, ptr %arrayidx2.6, align 1 151 %arrayidx.7 = getelementptr inbounds i8, ptr %a, i64 7 152 %14 = load i8, ptr %arrayidx.7, align 1 153 %arrayidx2.7 = getelementptr inbounds i8, ptr %r, i64 7 154 %15 = load i8, ptr %arrayidx2.7, align 1 155 %add.7 = add i8 %15, %14 156 store i8 %add.7, ptr %arrayidx2.7, align 1 157 ret void 158} 159 160define void @add16(ptr noalias nocapture noundef %r, ptr noalias nocapture noundef readonly %a) { 161; SSE-LABEL: @add16( 162; SSE-NEXT: entry: 163; SSE-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 1 164; SSE-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr [[R:%.*]], align 1 165; SSE-NEXT: [[TMP2:%.*]] = add <16 x i8> [[TMP1]], [[TMP0]] 166; SSE-NEXT: store <16 x i8> [[TMP2]], ptr [[R]], align 1 167; SSE-NEXT: ret void 168; 169; AVX-LABEL: @add16( 170; AVX-NEXT: entry: 171; AVX-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 1 172; AVX-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr [[R:%.*]], align 1 173; AVX-NEXT: [[TMP2:%.*]] = add <16 x i8> [[TMP1]], [[TMP0]] 174; AVX-NEXT: store <16 x i8> [[TMP2]], ptr [[R]], align 1 175; AVX-NEXT: ret void 176; 177entry: 178 %0 = load i8, ptr %a, align 1 179 %1 = load i8, ptr %r, align 1 180 %add = add i8 %1, %0 181 store i8 %add, ptr %r, align 1 182 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 1 183 %2 = load i8, ptr %arrayidx.1, align 1 184 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 1 185 %3 = load i8, ptr %arrayidx2.1, align 1 186 %add.1 = add i8 %3, %2 187 store i8 %add.1, ptr %arrayidx2.1, align 1 188 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 2 189 %4 = load i8, ptr %arrayidx.2, align 1 190 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 2 191 %5 = load i8, ptr %arrayidx2.2, align 1 192 %add.2 = add i8 %5, %4 193 store i8 %add.2, ptr %arrayidx2.2, align 1 194 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 3 195 %6 = load i8, ptr %arrayidx.3, align 1 196 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 3 197 %7 = load i8, ptr %arrayidx2.3, align 1 198 %add.3 = add i8 %7, %6 199 store i8 %add.3, ptr %arrayidx2.3, align 1 200 %arrayidx.4 = getelementptr inbounds i8, ptr %a, i64 4 201 %8 = load i8, ptr %arrayidx.4, align 1 202 %arrayidx2.4 = getelementptr inbounds i8, ptr %r, i64 4 203 %9 = load i8, ptr %arrayidx2.4, align 1 204 %add.4 = add i8 %9, %8 205 store i8 %add.4, ptr %arrayidx2.4, align 1 206 %arrayidx.5 = getelementptr inbounds i8, ptr %a, i64 5 207 %10 = load i8, ptr %arrayidx.5, align 1 208 %arrayidx2.5 = getelementptr inbounds i8, ptr %r, i64 5 209 %11 = load i8, ptr %arrayidx2.5, align 1 210 %add.5 = add i8 %11, %10 211 store i8 %add.5, ptr %arrayidx2.5, align 1 212 %arrayidx.6 = getelementptr inbounds i8, ptr %a, i64 6 213 %12 = load i8, ptr %arrayidx.6, align 1 214 %arrayidx2.6 = getelementptr inbounds i8, ptr %r, i64 6 215 %13 = load i8, ptr %arrayidx2.6, align 1 216 %add.6 = add i8 %13, %12 217 store i8 %add.6, ptr %arrayidx2.6, align 1 218 %arrayidx.7 = getelementptr inbounds i8, ptr %a, i64 7 219 %14 = load i8, ptr %arrayidx.7, align 1 220 %arrayidx2.7 = getelementptr inbounds i8, ptr %r, i64 7 221 %15 = load i8, ptr %arrayidx2.7, align 1 222 %add.7 = add i8 %15, %14 223 store i8 %add.7, ptr %arrayidx2.7, align 1 224 %arrayidx.8 = getelementptr inbounds i8, ptr %a, i64 8 225 %16 = load i8, ptr %arrayidx.8, align 1 226 %arrayidx2.8 = getelementptr inbounds i8, ptr %r, i64 8 227 %17 = load i8, ptr %arrayidx2.8, align 1 228 %add.8 = add i8 %17, %16 229 store i8 %add.8, ptr %arrayidx2.8, align 1 230 %arrayidx.9 = getelementptr inbounds i8, ptr %a, i64 9 231 %18 = load i8, ptr %arrayidx.9, align 1 232 %arrayidx2.9 = getelementptr inbounds i8, ptr %r, i64 9 233 %19 = load i8, ptr %arrayidx2.9, align 1 234 %add.9 = add i8 %19, %18 235 store i8 %add.9, ptr %arrayidx2.9, align 1 236 %arrayidx.10 = getelementptr inbounds i8, ptr %a, i64 10 237 %20 = load i8, ptr %arrayidx.10, align 1 238 %arrayidx2.10 = getelementptr inbounds i8, ptr %r, i64 10 239 %21 = load i8, ptr %arrayidx2.10, align 1 240 %add.10 = add i8 %21, %20 241 store i8 %add.10, ptr %arrayidx2.10, align 1 242 %arrayidx.11 = getelementptr inbounds i8, ptr %a, i64 11 243 %22 = load i8, ptr %arrayidx.11, align 1 244 %arrayidx2.11 = getelementptr inbounds i8, ptr %r, i64 11 245 %23 = load i8, ptr %arrayidx2.11, align 1 246 %add.11 = add i8 %23, %22 247 store i8 %add.11, ptr %arrayidx2.11, align 1 248 %arrayidx.12 = getelementptr inbounds i8, ptr %a, i64 12 249 %24 = load i8, ptr %arrayidx.12, align 1 250 %arrayidx2.12 = getelementptr inbounds i8, ptr %r, i64 12 251 %25 = load i8, ptr %arrayidx2.12, align 1 252 %add.12 = add i8 %25, %24 253 store i8 %add.12, ptr %arrayidx2.12, align 1 254 %arrayidx.13 = getelementptr inbounds i8, ptr %a, i64 13 255 %26 = load i8, ptr %arrayidx.13, align 1 256 %arrayidx2.13 = getelementptr inbounds i8, ptr %r, i64 13 257 %27 = load i8, ptr %arrayidx2.13, align 1 258 %add.13 = add i8 %27, %26 259 store i8 %add.13, ptr %arrayidx2.13, align 1 260 %arrayidx.14 = getelementptr inbounds i8, ptr %a, i64 14 261 %28 = load i8, ptr %arrayidx.14, align 1 262 %arrayidx2.14 = getelementptr inbounds i8, ptr %r, i64 14 263 %29 = load i8, ptr %arrayidx2.14, align 1 264 %add.14 = add i8 %29, %28 265 store i8 %add.14, ptr %arrayidx2.14, align 1 266 %arrayidx.15 = getelementptr inbounds i8, ptr %a, i64 15 267 %30 = load i8, ptr %arrayidx.15, align 1 268 %arrayidx2.15 = getelementptr inbounds i8, ptr %r, i64 15 269 %31 = load i8, ptr %arrayidx2.15, align 1 270 %add.15 = add i8 %31, %30 271 store i8 %add.15, ptr %arrayidx2.15, align 1 272 ret void 273} 274 275define void @add32(ptr noalias nocapture noundef %r, ptr noalias nocapture noundef readonly %a) { 276; SSE-LABEL: @add32( 277; SSE-NEXT: entry: 278; SSE-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[A:%.*]], align 1 279; SSE-NEXT: [[TMP1:%.*]] = load <16 x i8>, ptr [[R:%.*]], align 1 280; SSE-NEXT: [[TMP2:%.*]] = add <16 x i8> [[TMP1]], [[TMP0]] 281; SSE-NEXT: store <16 x i8> [[TMP2]], ptr [[R]], align 1 282; SSE-NEXT: [[ARRAYIDX_16:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 16 283; SSE-NEXT: [[ARRAYIDX2_16:%.*]] = getelementptr inbounds i8, ptr [[R]], i64 16 284; SSE-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr [[ARRAYIDX_16]], align 1 285; SSE-NEXT: [[TMP4:%.*]] = load <16 x i8>, ptr [[ARRAYIDX2_16]], align 1 286; SSE-NEXT: [[TMP5:%.*]] = add <16 x i8> [[TMP4]], [[TMP3]] 287; SSE-NEXT: store <16 x i8> [[TMP5]], ptr [[ARRAYIDX2_16]], align 1 288; SSE-NEXT: ret void 289; 290; AVX-LABEL: @add32( 291; AVX-NEXT: entry: 292; AVX-NEXT: [[TMP0:%.*]] = load <32 x i8>, ptr [[A:%.*]], align 1 293; AVX-NEXT: [[TMP1:%.*]] = load <32 x i8>, ptr [[R:%.*]], align 1 294; AVX-NEXT: [[TMP2:%.*]] = add <32 x i8> [[TMP1]], [[TMP0]] 295; AVX-NEXT: store <32 x i8> [[TMP2]], ptr [[R]], align 1 296; AVX-NEXT: ret void 297; 298entry: 299 %0 = load i8, ptr %a, align 1 300 %1 = load i8, ptr %r, align 1 301 %add = add i8 %1, %0 302 store i8 %add, ptr %r, align 1 303 %arrayidx.1 = getelementptr inbounds i8, ptr %a, i64 1 304 %2 = load i8, ptr %arrayidx.1, align 1 305 %arrayidx2.1 = getelementptr inbounds i8, ptr %r, i64 1 306 %3 = load i8, ptr %arrayidx2.1, align 1 307 %add.1 = add i8 %3, %2 308 store i8 %add.1, ptr %arrayidx2.1, align 1 309 %arrayidx.2 = getelementptr inbounds i8, ptr %a, i64 2 310 %4 = load i8, ptr %arrayidx.2, align 1 311 %arrayidx2.2 = getelementptr inbounds i8, ptr %r, i64 2 312 %5 = load i8, ptr %arrayidx2.2, align 1 313 %add.2 = add i8 %5, %4 314 store i8 %add.2, ptr %arrayidx2.2, align 1 315 %arrayidx.3 = getelementptr inbounds i8, ptr %a, i64 3 316 %6 = load i8, ptr %arrayidx.3, align 1 317 %arrayidx2.3 = getelementptr inbounds i8, ptr %r, i64 3 318 %7 = load i8, ptr %arrayidx2.3, align 1 319 %add.3 = add i8 %7, %6 320 store i8 %add.3, ptr %arrayidx2.3, align 1 321 %arrayidx.4 = getelementptr inbounds i8, ptr %a, i64 4 322 %8 = load i8, ptr %arrayidx.4, align 1 323 %arrayidx2.4 = getelementptr inbounds i8, ptr %r, i64 4 324 %9 = load i8, ptr %arrayidx2.4, align 1 325 %add.4 = add i8 %9, %8 326 store i8 %add.4, ptr %arrayidx2.4, align 1 327 %arrayidx.5 = getelementptr inbounds i8, ptr %a, i64 5 328 %10 = load i8, ptr %arrayidx.5, align 1 329 %arrayidx2.5 = getelementptr inbounds i8, ptr %r, i64 5 330 %11 = load i8, ptr %arrayidx2.5, align 1 331 %add.5 = add i8 %11, %10 332 store i8 %add.5, ptr %arrayidx2.5, align 1 333 %arrayidx.6 = getelementptr inbounds i8, ptr %a, i64 6 334 %12 = load i8, ptr %arrayidx.6, align 1 335 %arrayidx2.6 = getelementptr inbounds i8, ptr %r, i64 6 336 %13 = load i8, ptr %arrayidx2.6, align 1 337 %add.6 = add i8 %13, %12 338 store i8 %add.6, ptr %arrayidx2.6, align 1 339 %arrayidx.7 = getelementptr inbounds i8, ptr %a, i64 7 340 %14 = load i8, ptr %arrayidx.7, align 1 341 %arrayidx2.7 = getelementptr inbounds i8, ptr %r, i64 7 342 %15 = load i8, ptr %arrayidx2.7, align 1 343 %add.7 = add i8 %15, %14 344 store i8 %add.7, ptr %arrayidx2.7, align 1 345 %arrayidx.8 = getelementptr inbounds i8, ptr %a, i64 8 346 %16 = load i8, ptr %arrayidx.8, align 1 347 %arrayidx2.8 = getelementptr inbounds i8, ptr %r, i64 8 348 %17 = load i8, ptr %arrayidx2.8, align 1 349 %add.8 = add i8 %17, %16 350 store i8 %add.8, ptr %arrayidx2.8, align 1 351 %arrayidx.9 = getelementptr inbounds i8, ptr %a, i64 9 352 %18 = load i8, ptr %arrayidx.9, align 1 353 %arrayidx2.9 = getelementptr inbounds i8, ptr %r, i64 9 354 %19 = load i8, ptr %arrayidx2.9, align 1 355 %add.9 = add i8 %19, %18 356 store i8 %add.9, ptr %arrayidx2.9, align 1 357 %arrayidx.10 = getelementptr inbounds i8, ptr %a, i64 10 358 %20 = load i8, ptr %arrayidx.10, align 1 359 %arrayidx2.10 = getelementptr inbounds i8, ptr %r, i64 10 360 %21 = load i8, ptr %arrayidx2.10, align 1 361 %add.10 = add i8 %21, %20 362 store i8 %add.10, ptr %arrayidx2.10, align 1 363 %arrayidx.11 = getelementptr inbounds i8, ptr %a, i64 11 364 %22 = load i8, ptr %arrayidx.11, align 1 365 %arrayidx2.11 = getelementptr inbounds i8, ptr %r, i64 11 366 %23 = load i8, ptr %arrayidx2.11, align 1 367 %add.11 = add i8 %23, %22 368 store i8 %add.11, ptr %arrayidx2.11, align 1 369 %arrayidx.12 = getelementptr inbounds i8, ptr %a, i64 12 370 %24 = load i8, ptr %arrayidx.12, align 1 371 %arrayidx2.12 = getelementptr inbounds i8, ptr %r, i64 12 372 %25 = load i8, ptr %arrayidx2.12, align 1 373 %add.12 = add i8 %25, %24 374 store i8 %add.12, ptr %arrayidx2.12, align 1 375 %arrayidx.13 = getelementptr inbounds i8, ptr %a, i64 13 376 %26 = load i8, ptr %arrayidx.13, align 1 377 %arrayidx2.13 = getelementptr inbounds i8, ptr %r, i64 13 378 %27 = load i8, ptr %arrayidx2.13, align 1 379 %add.13 = add i8 %27, %26 380 store i8 %add.13, ptr %arrayidx2.13, align 1 381 %arrayidx.14 = getelementptr inbounds i8, ptr %a, i64 14 382 %28 = load i8, ptr %arrayidx.14, align 1 383 %arrayidx2.14 = getelementptr inbounds i8, ptr %r, i64 14 384 %29 = load i8, ptr %arrayidx2.14, align 1 385 %add.14 = add i8 %29, %28 386 store i8 %add.14, ptr %arrayidx2.14, align 1 387 %arrayidx.15 = getelementptr inbounds i8, ptr %a, i64 15 388 %30 = load i8, ptr %arrayidx.15, align 1 389 %arrayidx2.15 = getelementptr inbounds i8, ptr %r, i64 15 390 %31 = load i8, ptr %arrayidx2.15, align 1 391 %add.15 = add i8 %31, %30 392 store i8 %add.15, ptr %arrayidx2.15, align 1 393 %arrayidx.16 = getelementptr inbounds i8, ptr %a, i64 16 394 %32 = load i8, ptr %arrayidx.16, align 1 395 %arrayidx2.16 = getelementptr inbounds i8, ptr %r, i64 16 396 %33 = load i8, ptr %arrayidx2.16, align 1 397 %add.16 = add i8 %33, %32 398 store i8 %add.16, ptr %arrayidx2.16, align 1 399 %arrayidx.17 = getelementptr inbounds i8, ptr %a, i64 17 400 %34 = load i8, ptr %arrayidx.17, align 1 401 %arrayidx2.17 = getelementptr inbounds i8, ptr %r, i64 17 402 %35 = load i8, ptr %arrayidx2.17, align 1 403 %add.17 = add i8 %35, %34 404 store i8 %add.17, ptr %arrayidx2.17, align 1 405 %arrayidx.18 = getelementptr inbounds i8, ptr %a, i64 18 406 %36 = load i8, ptr %arrayidx.18, align 1 407 %arrayidx2.18 = getelementptr inbounds i8, ptr %r, i64 18 408 %37 = load i8, ptr %arrayidx2.18, align 1 409 %add.18 = add i8 %37, %36 410 store i8 %add.18, ptr %arrayidx2.18, align 1 411 %arrayidx.19 = getelementptr inbounds i8, ptr %a, i64 19 412 %38 = load i8, ptr %arrayidx.19, align 1 413 %arrayidx2.19 = getelementptr inbounds i8, ptr %r, i64 19 414 %39 = load i8, ptr %arrayidx2.19, align 1 415 %add.19 = add i8 %39, %38 416 store i8 %add.19, ptr %arrayidx2.19, align 1 417 %arrayidx.20 = getelementptr inbounds i8, ptr %a, i64 20 418 %40 = load i8, ptr %arrayidx.20, align 1 419 %arrayidx2.20 = getelementptr inbounds i8, ptr %r, i64 20 420 %41 = load i8, ptr %arrayidx2.20, align 1 421 %add.20 = add i8 %41, %40 422 store i8 %add.20, ptr %arrayidx2.20, align 1 423 %arrayidx.21 = getelementptr inbounds i8, ptr %a, i64 21 424 %42 = load i8, ptr %arrayidx.21, align 1 425 %arrayidx2.21 = getelementptr inbounds i8, ptr %r, i64 21 426 %43 = load i8, ptr %arrayidx2.21, align 1 427 %add.21 = add i8 %43, %42 428 store i8 %add.21, ptr %arrayidx2.21, align 1 429 %arrayidx.22 = getelementptr inbounds i8, ptr %a, i64 22 430 %44 = load i8, ptr %arrayidx.22, align 1 431 %arrayidx2.22 = getelementptr inbounds i8, ptr %r, i64 22 432 %45 = load i8, ptr %arrayidx2.22, align 1 433 %add.22 = add i8 %45, %44 434 store i8 %add.22, ptr %arrayidx2.22, align 1 435 %arrayidx.23 = getelementptr inbounds i8, ptr %a, i64 23 436 %46 = load i8, ptr %arrayidx.23, align 1 437 %arrayidx2.23 = getelementptr inbounds i8, ptr %r, i64 23 438 %47 = load i8, ptr %arrayidx2.23, align 1 439 %add.23 = add i8 %47, %46 440 store i8 %add.23, ptr %arrayidx2.23, align 1 441 %arrayidx.24 = getelementptr inbounds i8, ptr %a, i64 24 442 %48 = load i8, ptr %arrayidx.24, align 1 443 %arrayidx2.24 = getelementptr inbounds i8, ptr %r, i64 24 444 %49 = load i8, ptr %arrayidx2.24, align 1 445 %add.24 = add i8 %49, %48 446 store i8 %add.24, ptr %arrayidx2.24, align 1 447 %arrayidx.25 = getelementptr inbounds i8, ptr %a, i64 25 448 %50 = load i8, ptr %arrayidx.25, align 1 449 %arrayidx2.25 = getelementptr inbounds i8, ptr %r, i64 25 450 %51 = load i8, ptr %arrayidx2.25, align 1 451 %add.25 = add i8 %51, %50 452 store i8 %add.25, ptr %arrayidx2.25, align 1 453 %arrayidx.26 = getelementptr inbounds i8, ptr %a, i64 26 454 %52 = load i8, ptr %arrayidx.26, align 1 455 %arrayidx2.26 = getelementptr inbounds i8, ptr %r, i64 26 456 %53 = load i8, ptr %arrayidx2.26, align 1 457 %add.26 = add i8 %53, %52 458 store i8 %add.26, ptr %arrayidx2.26, align 1 459 %arrayidx.27 = getelementptr inbounds i8, ptr %a, i64 27 460 %54 = load i8, ptr %arrayidx.27, align 1 461 %arrayidx2.27 = getelementptr inbounds i8, ptr %r, i64 27 462 %55 = load i8, ptr %arrayidx2.27, align 1 463 %add.27 = add i8 %55, %54 464 store i8 %add.27, ptr %arrayidx2.27, align 1 465 %arrayidx.28 = getelementptr inbounds i8, ptr %a, i64 28 466 %56 = load i8, ptr %arrayidx.28, align 1 467 %arrayidx2.28 = getelementptr inbounds i8, ptr %r, i64 28 468 %57 = load i8, ptr %arrayidx2.28, align 1 469 %add.28 = add i8 %57, %56 470 store i8 %add.28, ptr %arrayidx2.28, align 1 471 %arrayidx.29 = getelementptr inbounds i8, ptr %a, i64 29 472 %58 = load i8, ptr %arrayidx.29, align 1 473 %arrayidx2.29 = getelementptr inbounds i8, ptr %r, i64 29 474 %59 = load i8, ptr %arrayidx2.29, align 1 475 %add.29 = add i8 %59, %58 476 store i8 %add.29, ptr %arrayidx2.29, align 1 477 %arrayidx.30 = getelementptr inbounds i8, ptr %a, i64 30 478 %60 = load i8, ptr %arrayidx.30, align 1 479 %arrayidx2.30 = getelementptr inbounds i8, ptr %r, i64 30 480 %61 = load i8, ptr %arrayidx2.30, align 1 481 %add.30 = add i8 %61, %60 482 store i8 %add.30, ptr %arrayidx2.30, align 1 483 %arrayidx.31 = getelementptr inbounds i8, ptr %a, i64 31 484 %62 = load i8, ptr %arrayidx.31, align 1 485 %arrayidx2.31 = getelementptr inbounds i8, ptr %r, i64 31 486 %63 = load i8, ptr %arrayidx2.31, align 1 487 %add.31 = add i8 %63, %62 488 store i8 %add.31, ptr %arrayidx2.31, align 1 489 ret void 490} 491