Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / AArch64 / loadorder.ll
blobefe8bd9e610bb3c2ad94f61666155df521bac7f9
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
4 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5 target triple = "aarch64"
7 define 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]]
70 entry:
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
132 define 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 i16, ptr [[X]], i64 1
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 i16, ptr [[Y]], i64 1
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]]
193 entry:
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
253 define 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 i16, ptr [[X]], i64 1
258 ; CHECK-NEXT:    [[L1:%.*]] = load i16, ptr [[ARRAYIDX1]], align 2
259 ; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 2
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 i16, ptr [[Y]], i64 1
274 ; CHECK-NEXT:    [[L9:%.*]] = load i16, ptr [[ARRAYIDX15]], align 2
275 ; CHECK-NEXT:    [[ARRAYIDX16:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 2
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]]
296 entry:
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
340 define 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:    [[TMP0:%.*]] = load <4 x i16>, ptr [[X:%.*]], align 2
344 ; CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64
345 ; CHECK-NEXT:    [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]]
346 ; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[ARRAYIDX4]], align 2
347 ; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[Y:%.*]], align 2
348 ; CHECK-NEXT:    [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]]
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]]
356 entry:
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
412 define 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 i8, ptr [[P1:%.*]], i64 4
418 ; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i8, ptr [[P2:%.*]], i64 4
419 ; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i8>, ptr [[P1]], align 1
420 ; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr [[P2]], align 1
421 ; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 1
422 ; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 1
423 ; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]]
424 ; CHECK-NEXT:    [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]]
425 ; CHECK-NEXT:    [[ARRAYIDX3_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 4
426 ; CHECK-NEXT:    [[ARRAYIDX5_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 4
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:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 1
430 ; CHECK-NEXT:    [[TMP7:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 1
431 ; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <4 x i8> [[TMP0]], <4 x i8> [[TMP1]], <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>
432 ; CHECK-NEXT:    [[TMP9:%.*]] = shufflevector <4 x i8> [[TMP4]], <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 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>
434 ; CHECK-NEXT:    [[TMP11:%.*]] = 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>
435 ; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <16 x i8> [[TMP10]], <16 x i8> [[TMP11]], <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>
436 ; CHECK-NEXT:    [[TMP13:%.*]] = zext <16 x i8> [[TMP12]] to <16 x i32>
437 ; CHECK-NEXT:    [[TMP14:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> [[TMP3]], <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> [[TMP6]], <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> [[TMP7]], <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> [[TMP13]], [[TMP19]]
444 ; CHECK-NEXT:    [[TMP21:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP20]])
445 ; CHECK-NEXT:    ret i32 [[TMP21]]
447 entry:
448   %idx.ext = sext i32 %off1 to i64
449   %idx.ext63 = sext i32 %off2 to i64
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
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
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
677 define 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:    [[TMP0:%.*]] = load <2 x i32>, ptr [[X:%.*]], align 4
681 ; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 2
682 ; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
683 ; CHECK-NEXT:    [[ADD4:%.*]] = add nsw i32 [[STRIDE:%.*]], 1
684 ; CHECK-NEXT:    [[IDXPROM5:%.*]] = sext i32 [[ADD4]] to i64
685 ; CHECK-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM5]]
686 ; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[ARRAYIDX6]], align 4
687 ; CHECK-NEXT:    [[MUL:%.*]] = shl nsw i32 [[STRIDE]], 1
688 ; CHECK-NEXT:    [[IDXPROM11:%.*]] = sext i32 [[MUL]] to i64
689 ; CHECK-NEXT:    [[ARRAYIDX12:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM11]]
690 ; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX12]], align 4
691 ; CHECK-NEXT:    [[ADD14:%.*]] = or disjoint i32 [[MUL]], 1
692 ; CHECK-NEXT:    [[IDXPROM15:%.*]] = sext i32 [[ADD14]] to i64
693 ; CHECK-NEXT:    [[ARRAYIDX16:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM15]]
694 ; CHECK-NEXT:    [[MUL21:%.*]] = mul nsw i32 [[STRIDE]], 3
695 ; CHECK-NEXT:    [[IDXPROM23:%.*]] = sext i32 [[MUL21]] to i64
696 ; CHECK-NEXT:    [[ARRAYIDX24:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM23]]
697 ; CHECK-NEXT:    [[ADD30:%.*]] = add nsw i32 [[MUL21]], 2
698 ; CHECK-NEXT:    [[IDXPROM31:%.*]] = sext i32 [[ADD30]] to i64
699 ; CHECK-NEXT:    [[ARRAYIDX32:%.*]] = getelementptr inbounds i32, ptr [[X]], i64 [[IDXPROM31]]
700 ; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX32]], align 4
701 ; CHECK-NEXT:    [[TMP5:%.*]] = load <2 x i32>, ptr [[Y:%.*]], align 4
702 ; CHECK-NEXT:    [[ARRAYIDX35:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 2
703 ; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[ARRAYIDX35]], align 4
704 ; CHECK-NEXT:    [[ARRAYIDX41:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM5]]
705 ; CHECK-NEXT:    [[TMP7:%.*]] = load <2 x i32>, ptr [[ARRAYIDX41]], align 4
706 ; CHECK-NEXT:    [[ARRAYIDX48:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM11]]
707 ; CHECK-NEXT:    [[TMP8:%.*]] = load i32, ptr [[ARRAYIDX48]], align 4
708 ; CHECK-NEXT:    [[ARRAYIDX52:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM15]]
709 ; CHECK-NEXT:    [[ARRAYIDX60:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM23]]
710 ; CHECK-NEXT:    [[ARRAYIDX68:%.*]] = getelementptr inbounds i32, ptr [[Y]], i64 [[IDXPROM31]]
711 ; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[ARRAYIDX68]], align 4
712 ; CHECK-NEXT:    [[ARRAYIDX72:%.*]] = getelementptr inbounds i32, ptr [[Z:%.*]], i64 1
713 ; CHECK-NEXT:    [[MUL73:%.*]] = mul nsw i32 [[TMP6]], [[TMP1]]
714 ; CHECK-NEXT:    [[ARRAYIDX76:%.*]] = getelementptr inbounds i32, ptr [[Z]], i64 6
715 ; CHECK-NEXT:    [[TMP10:%.*]] = mul nsw <2 x i32> [[TMP5]], [[TMP0]]
716 ; CHECK-NEXT:    [[TMP11:%.*]] = mul nsw <2 x i32> [[TMP7]], [[TMP2]]
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 [[TMP8]], [[TMP3]]
719 ; CHECK-NEXT:    [[ARRAYIDX82:%.*]] = getelementptr inbounds i32, ptr [[Z]], i64 8
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:    [[ARRAYIDX90:%.*]] = getelementptr inbounds i32, ptr [[Z]], i64 10
725 ; CHECK-NEXT:    [[TMP17:%.*]] = load <2 x i32>, ptr [[ARRAYIDX24]], align 4
726 ; CHECK-NEXT:    [[TMP18:%.*]] = load <2 x i32>, ptr [[ARRAYIDX60]], align 4
727 ; CHECK-NEXT:    store i32 [[MUL73]], ptr [[Z]], align 4
728 ; CHECK-NEXT:    store <4 x i32> [[TMP12]], ptr [[ARRAYIDX72]], align 4
729 ; CHECK-NEXT:    store i32 [[MUL81]], ptr [[ARRAYIDX82]], align 4
730 ; CHECK-NEXT:    store <2 x i32> [[TMP16]], ptr [[ARRAYIDX76]], align 4
731 ; CHECK-NEXT:    [[TMP19:%.*]] = mul nsw <2 x i32> [[TMP18]], [[TMP17]]
732 ; CHECK-NEXT:    [[TMP20:%.*]] = shufflevector <2 x i32> [[TMP19]], <2 x i32> poison, <2 x i32> <i32 1, i32 0>
733 ; CHECK-NEXT:    store <2 x i32> [[TMP20]], ptr [[ARRAYIDX90]], align 4
734 ; CHECK-NEXT:    [[MUL91:%.*]] = mul nsw i32 [[TMP9]], [[TMP4]]
735 ; CHECK-NEXT:    [[ARRAYIDX92:%.*]] = getelementptr inbounds i32, ptr [[Z]], i64 9
736 ; CHECK-NEXT:    store i32 [[MUL91]], ptr [[ARRAYIDX92]], align 4
737 ; CHECK-NEXT:    ret void
739 entry:
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
833 define 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:    [[TMP0:%.*]] = load <4 x i16>, ptr [[X:%.*]], align 2
837 ; CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[STRIDE:%.*]] to i64
838 ; CHECK-NEXT:    [[ARRAYIDX4:%.*]] = getelementptr inbounds i16, ptr [[X]], i64 [[IDXPROM]]
839 ; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[ARRAYIDX4]], align 2
840 ; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[Y:%.*]], align 2
841 ; CHECK-NEXT:    [[ARRAYIDX20:%.*]] = getelementptr inbounds i16, ptr [[Y]], i64 [[IDXPROM]]
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
849 entry:
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
913 define 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 i8, ptr [[P1:%.*]], i64 4
919 ; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds 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 i8, ptr [[ADD_PTR]], i64 4
923 ; CHECK-NEXT:    [[ARRAYIDX5_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 4
924 ; CHECK-NEXT:    [[DST4:%.*]] = getelementptr inbounds i32, ptr [[DST0:%.*]], i64 4
925 ; CHECK-NEXT:    [[DST8:%.*]] = getelementptr inbounds i32, ptr [[DST0]], i64 8
926 ; CHECK-NEXT:    [[DST12:%.*]] = getelementptr inbounds i32, ptr [[DST0]], i64 12
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
953 entry:
954   %idx.ext = sext i32 %off1 to i64
955   %idx.ext63 = sext i32 %off2 to i64
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
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
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
1199 define 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 i8, ptr [[P1:%.*]], i64 4
1205 ; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i8, ptr [[P2:%.*]], i64 4
1206 ; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i8>, ptr [[P1]], align 1
1207 ; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr [[P2]], align 1
1208 ; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3]], align 1
1209 ; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5]], align 1
1210 ; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[IDX_EXT]]
1211 ; CHECK-NEXT:    [[ADD_PTR64:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[IDX_EXT63]]
1212 ; CHECK-NEXT:    [[ARRAYIDX3_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 4
1213 ; CHECK-NEXT:    [[ARRAYIDX5_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 4
1214 ; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i8>, ptr [[ADD_PTR]], align 1
1215 ; CHECK-NEXT:    [[TMP5:%.*]] = load <4 x i8>, ptr [[ADD_PTR64]], align 1
1216 ; CHECK-NEXT:    [[TMP6:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_1]], align 1
1217 ; CHECK-NEXT:    [[TMP7:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_1]], align 1
1218 ; CHECK-NEXT:    [[ADD_PTR_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR]], i64 [[IDX_EXT]]
1219 ; CHECK-NEXT:    [[ADD_PTR64_1:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64]], i64 [[IDX_EXT63]]
1220 ; CHECK-NEXT:    [[ARRAYIDX3_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 4
1221 ; CHECK-NEXT:    [[ARRAYIDX5_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 4
1222 ; CHECK-NEXT:    [[TMP8:%.*]] = load <4 x i8>, ptr [[ADD_PTR_1]], align 1
1223 ; CHECK-NEXT:    [[TMP9:%.*]] = load <4 x i8>, ptr [[ADD_PTR64_1]], align 1
1224 ; CHECK-NEXT:    [[TMP10:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_2]], align 1
1225 ; CHECK-NEXT:    [[TMP11:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_2]], align 1
1226 ; CHECK-NEXT:    [[ADD_PTR_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_1]], i64 [[IDX_EXT]]
1227 ; CHECK-NEXT:    [[ADD_PTR64_2:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_1]], i64 [[IDX_EXT63]]
1228 ; CHECK-NEXT:    [[ARRAYIDX3_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR_2]], i64 4
1229 ; CHECK-NEXT:    [[ARRAYIDX5_3:%.*]] = getelementptr inbounds i8, ptr [[ADD_PTR64_2]], i64 4
1230 ; CHECK-NEXT:    [[TMP12:%.*]] = load <4 x i8>, ptr [[ADD_PTR_2]], align 1
1231 ; CHECK-NEXT:    [[TMP13:%.*]] = load <4 x i8>, ptr [[ADD_PTR64_2]], align 1
1232 ; CHECK-NEXT:    [[TMP14:%.*]] = load <4 x i8>, ptr [[ARRAYIDX3_3]], align 1
1233 ; CHECK-NEXT:    [[TMP15:%.*]] = load <4 x i8>, ptr [[ARRAYIDX5_3]], align 1
1234 ; CHECK-NEXT:    [[TMP16:%.*]] = shufflevector <4 x i8> [[TMP12]], <4 x i8> [[TMP8]], <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>
1235 ; CHECK-NEXT:    [[TMP17:%.*]] = shufflevector <4 x i8> [[TMP4]], <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>
1236 ; 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 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>
1237 ; CHECK-NEXT:    [[TMP19:%.*]] = shufflevector <4 x i8> [[TMP0]], <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>
1238 ; CHECK-NEXT:    [[TMP20:%.*]] = shufflevector <16 x i8> [[TMP18]], <16 x i8> [[TMP19]], <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>
1239 ; CHECK-NEXT:    [[TMP21:%.*]] = zext <16 x i8> [[TMP20]] to <16 x i32>
1240 ; CHECK-NEXT:    [[TMP22:%.*]] = shufflevector <4 x i8> [[TMP13]], <4 x i8> [[TMP9]], <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>
1241 ; CHECK-NEXT:    [[TMP23:%.*]] = 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>
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 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>
1243 ; CHECK-NEXT:    [[TMP25:%.*]] = 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>
1244 ; CHECK-NEXT:    [[TMP26:%.*]] = shufflevector <16 x i8> [[TMP24]], <16 x i8> [[TMP25]], <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>
1245 ; CHECK-NEXT:    [[TMP27:%.*]] = zext <16 x i8> [[TMP26]] to <16 x i32>
1246 ; CHECK-NEXT:    [[TMP28:%.*]] = sub nsw <16 x i32> [[TMP21]], [[TMP27]]
1247 ; CHECK-NEXT:    [[TMP29:%.*]] = shufflevector <4 x i8> [[TMP14]], <4 x i8> [[TMP10]], <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>
1248 ; CHECK-NEXT:    [[TMP30:%.*]] = shufflevector <4 x i8> [[TMP6]], <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>
1249 ; CHECK-NEXT:    [[TMP31:%.*]] = shufflevector <16 x i8> [[TMP29]], <16 x i8> [[TMP30]], <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>
1250 ; CHECK-NEXT:    [[TMP32:%.*]] = shufflevector <4 x i8> [[TMP2]], <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>
1251 ; CHECK-NEXT:    [[TMP33:%.*]] = shufflevector <16 x i8> [[TMP31]], <16 x i8> [[TMP32]], <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>
1252 ; CHECK-NEXT:    [[TMP34:%.*]] = zext <16 x i8> [[TMP33]] to <16 x i32>
1253 ; CHECK-NEXT:    [[TMP35:%.*]] = shufflevector <4 x i8> [[TMP15]], <4 x i8> [[TMP11]], <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> [[TMP7]], <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> [[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>
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> [[TMP34]], [[TMP40]]
1260 ; CHECK-NEXT:    [[TMP42:%.*]] = shl nsw <16 x i32> [[TMP41]], <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1261 ; CHECK-NEXT:    [[TMP43:%.*]] = add nsw <16 x i32> [[TMP42]], [[TMP28]]
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 3, i32 7, i32 11, i32 15, i32 22, i32 18, i32 26, i32 30, i32 5, i32 1, i32 9, i32 13, i32 20, i32 16, i32 24, i32 28>
1266 ; CHECK-NEXT:    [[TMP48:%.*]] = shufflevector <16 x i32> [[TMP47]], <16 x i32> poison, <16 x i32> <i32 9, i32 8, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 1, i32 0, 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:%.*]] = add nsw <16 x i32> [[TMP51]], [[TMP52]]
1272 ; CHECK-NEXT:    [[TMP54:%.*]] = sub 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 2, i32 19, i32 20, i32 5, i32 6, i32 23, i32 24, i32 9, i32 10, i32 27, i32 28, i32 13, i32 14, i32 31>
1274 ; CHECK-NEXT:    [[TMP56:%.*]] = shufflevector <16 x i32> [[TMP55]], <16 x i32> poison, <16 x i32> <i32 2, i32 3, i32 0, i32 1, 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]], <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
1279 ; CHECK-NEXT:    [[TMP61:%.*]] = and <16 x i32> [[TMP60]], <i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537, i32 65537>
1280 ; CHECK-NEXT:    [[TMP62:%.*]] = mul nuw <16 x i32> [[TMP61]], <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, 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]]
1290 entry:
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