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