Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / X86 / arith-mul-load.ll
blobc24bc54753476b724d0eff1f80bc223fac155262
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    -S | FileCheck %s --check-prefixes=CHECK,SSE
3 ; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v2 -S | FileCheck %s --check-prefixes=CHECK,SSE
4 ; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v3 -S | FileCheck %s --check-prefixes=CHECK,AVX
5 ; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown -mcpu=x86-64-v4 -S | FileCheck %s --check-prefixes=CHECK,AVX
7 ; // PR47491
8 ; void pr(char* r, char* a){
9 ;   for (int i = 0; i < 8; i++){
10 ;       r[i] *= a[i];
11 ;   }
12 ; }
14 define 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 1
18 ; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr [[R:%.*]], align 1
19 ; CHECK-NEXT:    [[TMP2:%.*]] = mul <4 x i8> [[TMP1]], [[TMP0]]
20 ; CHECK-NEXT:    store <4 x i8> [[TMP2]], ptr [[R]], align 1
21 ; CHECK-NEXT:    ret void
23 entry:
24   %0 = load i8, ptr %a, align 1
25   %1 = load i8, ptr %r, align 1
26   %mul = mul i8 %1, %0
27   store i8 %mul, 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   %mul.1 = mul i8 %3, %2
33   store i8 %mul.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   %mul.2 = mul i8 %5, %4
39   store i8 %mul.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   %mul.3 = mul i8 %7, %6
45   store i8 %mul.3, ptr %arrayidx2.3, align 1
46   ret void
49 define 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 1
53 ; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[R:%.*]], align 1
54 ; CHECK-NEXT:    [[TMP2:%.*]] = mul <8 x i8> [[TMP1]], [[TMP0]]
55 ; CHECK-NEXT:    store <8 x i8> [[TMP2]], ptr [[R]], align 1
56 ; CHECK-NEXT:    ret void
58 entry:
59   %0 = load i8, ptr %a, align 1
60   %1 = load i8, ptr %r, align 1
61   %mul = mul i8 %1, %0
62   store i8 %mul, 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   %mul.1 = mul i8 %3, %2
68   store i8 %mul.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   %mul.2 = mul i8 %5, %4
74   store i8 %mul.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   %mul.3 = mul i8 %7, %6
80   store i8 %mul.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   %mul.4 = mul i8 %9, %8
86   store i8 %mul.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   %mul.5 = mul i8 %11, %10
92   store i8 %mul.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   %mul.6 = mul i8 %13, %12
98   store i8 %mul.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   %mul.7 = mul i8 %15, %14
104   store i8 %mul.7, ptr %arrayidx2.7, align 1
105   ret void
108 define 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 1
112 ; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[R:%.*]], align 1
113 ; CHECK-NEXT:    [[TMP2:%.*]] = mul <16 x i8> [[TMP1]], [[TMP0]]
114 ; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr [[R]], align 1
115 ; CHECK-NEXT:    ret void
117 entry:
118   %0 = load i8, ptr %a, align 1
119   %1 = load i8, ptr %r, align 1
120   %mul = mul i8 %1, %0
121   store i8 %mul, 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   %mul.1 = mul i8 %3, %2
127   store i8 %mul.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   %mul.2 = mul i8 %5, %4
133   store i8 %mul.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   %mul.3 = mul i8 %7, %6
139   store i8 %mul.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   %mul.4 = mul i8 %9, %8
145   store i8 %mul.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   %mul.5 = mul i8 %11, %10
151   store i8 %mul.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   %mul.6 = mul i8 %13, %12
157   store i8 %mul.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   %mul.7 = mul i8 %15, %14
163   store i8 %mul.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   %mul.8 = mul i8 %17, %16
169   store i8 %mul.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   %mul.9 = mul i8 %19, %18
175   store i8 %mul.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   %mul.10 = mul i8 %21, %20
181   store i8 %mul.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   %mul.11 = mul i8 %23, %22
187   store i8 %mul.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   %mul.12 = mul i8 %25, %24
193   store i8 %mul.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   %mul.13 = mul i8 %27, %26
199   store i8 %mul.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   %mul.14 = mul i8 %29, %28
205   store i8 %mul.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   %mul.15 = mul i8 %31, %30
211   store i8 %mul.15, ptr %arrayidx2.15, align 1
212   ret void
215 define 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 1
219 ; SSE-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[R:%.*]], align 1
220 ; SSE-NEXT:    [[TMP2:%.*]] = mul <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:%.*]] = mul <16 x i8> [[TMP4]], [[TMP3]]
227 ; SSE-NEXT:    store <16 x i8> [[TMP5]], ptr [[ARRAYIDX2_16]], align 1
228 ; SSE-NEXT:    ret void
230 ; AVX-LABEL: @add32(
231 ; AVX-NEXT:  entry:
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:%.*]] = mul <32 x i8> [[TMP1]], [[TMP0]]
235 ; AVX-NEXT:    store <32 x i8> [[TMP2]], ptr [[R]], align 1
236 ; AVX-NEXT:    ret void
238 entry:
239   %0 = load i8, ptr %a, align 1
240   %1 = load i8, ptr %r, align 1
241   %mul = mul i8 %1, %0
242   store i8 %mul, 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   %mul.1 = mul i8 %3, %2
248   store i8 %mul.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   %mul.2 = mul i8 %5, %4
254   store i8 %mul.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   %mul.3 = mul i8 %7, %6
260   store i8 %mul.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   %mul.4 = mul i8 %9, %8
266   store i8 %mul.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   %mul.5 = mul i8 %11, %10
272   store i8 %mul.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   %mul.6 = mul i8 %13, %12
278   store i8 %mul.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   %mul.7 = mul i8 %15, %14
284   store i8 %mul.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   %mul.8 = mul i8 %17, %16
290   store i8 %mul.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   %mul.9 = mul i8 %19, %18
296   store i8 %mul.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   %mul.10 = mul i8 %21, %20
302   store i8 %mul.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   %mul.11 = mul i8 %23, %22
308   store i8 %mul.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   %mul.12 = mul i8 %25, %24
314   store i8 %mul.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   %mul.13 = mul i8 %27, %26
320   store i8 %mul.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   %mul.14 = mul i8 %29, %28
326   store i8 %mul.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   %mul.15 = mul i8 %31, %30
332   store i8 %mul.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   %mul.16 = mul i8 %33, %32
338   store i8 %mul.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   %mul.17 = mul i8 %35, %34
344   store i8 %mul.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   %mul.18 = mul i8 %37, %36
350   store i8 %mul.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   %mul.19 = mul i8 %39, %38
356   store i8 %mul.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   %mul.20 = mul i8 %41, %40
362   store i8 %mul.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   %mul.21 = mul i8 %43, %42
368   store i8 %mul.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   %mul.22 = mul i8 %45, %44
374   store i8 %mul.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   %mul.23 = mul i8 %47, %46
380   store i8 %mul.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   %mul.24 = mul i8 %49, %48
386   store i8 %mul.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   %mul.25 = mul i8 %51, %50
392   store i8 %mul.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   %mul.26 = mul i8 %53, %52
398   store i8 %mul.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   %mul.27 = mul i8 %55, %54
404   store i8 %mul.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   %mul.28 = mul i8 %57, %56
410   store i8 %mul.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   %mul.29 = mul i8 %59, %58
416   store i8 %mul.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   %mul.30 = mul i8 %61, %60
422   store i8 %mul.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   %mul.31 = mul i8 %63, %62
428   store i8 %mul.31, ptr %arrayidx2.31, align 1
429   ret void