1 ; RUN: opt %loadPolly %defaultOpts -polly-codegen -enable-polly-vector -dce -S %s | FileCheck %s
2 ; Obtained from C source as:
3 ; clang -S -emit-llvm -O0 slp-6.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-6.s > slp-6.ll
7 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
8 target triple = "x86_64-unknown-linux-gnu"
10 @in = global [64 x i16] [i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 16, i16 17, i16 18, i16 19, i16 20, i16 21, i16 22, i16 23, i16 24, i16 25, i16 26, i16 27, i16 28, i16 29, i16 30, i16 31, i16 32, i16 33, i16 34, i16 35, i16 36, i16 37, i16 38, i16 39, i16 40, i16 41, i16 42, i16 43, i16 44, i16 45, i16 46, i16 47, i16 48, i16 49, i16 50, i16 51, i16 52, i16 53, i16 54, i16 55, i16 56, i16 57, i16 58, i16 59, i16 60, i16 61, i16 62, i16 63], align 16
11 @in2 = global [64 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 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63], align 16
13 define i32 @main1() nounwind uwtable {
15 %out = alloca [64 x i16], align 16
16 %out2 = alloca [64 x i32], align 16
19 for.cond: ; preds = %for.inc, %entry
20 %indvar167 = phi i64 [ %indvar.next168, %for.inc ], [ 0, %entry ]
21 %tmp170 = mul i64 %indvar167, 8
22 %tmp171 = add i64 %tmp170, 7
23 %arrayidx105 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp171
24 %arrayidx96 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp171
25 %tmp172 = add i64 %tmp170, 6
26 %arrayidx91 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp172
27 %arrayidx82 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp172
28 %tmp173 = add i64 %tmp170, 5
29 %arrayidx77 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp173
30 %arrayidx68 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp173
31 %tmp174 = add i64 %tmp170, 4
32 %arrayidx63 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp174
33 %arrayidx54 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp174
34 %tmp176 = add i64 %tmp170, 3
35 %arrayidx49 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp176
36 %arrayidx40 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp176
37 %tmp177 = add i64 %tmp170, 2
38 %arrayidx35 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp177
39 %arrayidx26 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp177
40 %tmp178 = add i64 %tmp170, 1
41 %arrayidx21 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp178
42 %arrayidx12 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp178
43 %arrayidx7 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp170
44 %arrayidx = getelementptr [64 x i16]* @in, i64 0, i64 %tmp170
45 %exitcond169 = icmp ne i64 %indvar167, 8
46 br i1 %exitcond169, label %for.body, label %for.end
48 for.body: ; preds = %for.cond
49 %tmp2 = load i16* %arrayidx, align 16
50 %add = add i16 %tmp2, 5
51 store i16 %add, i16* %arrayidx7, align 16
52 %tmp13 = load i16* %arrayidx12, align 2
53 %add15 = add i16 %tmp13, 6
54 store i16 %add15, i16* %arrayidx21, align 2
55 %tmp27 = load i16* %arrayidx26, align 4
56 %add29 = add i16 %tmp27, 7
57 store i16 %add29, i16* %arrayidx35, align 4
58 %tmp41 = load i16* %arrayidx40, align 2
59 %add43 = add i16 %tmp41, 8
60 store i16 %add43, i16* %arrayidx49, align 2
61 %tmp55 = load i16* %arrayidx54, align 8
62 %add57 = add i16 %tmp55, 9
63 store i16 %add57, i16* %arrayidx63, align 8
64 %tmp69 = load i16* %arrayidx68, align 2
65 %add71 = add i16 %tmp69, 10
66 store i16 %add71, i16* %arrayidx77, align 2
67 %tmp83 = load i16* %arrayidx82, align 4
68 %add85 = add i16 %tmp83, 11
69 store i16 %add85, i16* %arrayidx91, align 4
70 %tmp97 = load i16* %arrayidx96, align 2
71 %add99 = add i16 %tmp97, 12
72 store i16 %add99, i16* %arrayidx105, align 2
75 for.inc: ; preds = %for.body
76 %indvar.next168 = add i64 %indvar167, 1
79 for.end: ; preds = %for.cond
82 for.cond107: ; preds = %for.inc252, %for.end
83 %indvar155 = phi i64 [ %indvar.next156, %for.inc252 ], [ 0, %for.end ]
84 %tmp158 = mul i64 %indvar155, 8
85 %tmp159 = add i64 %tmp158, 7
86 %arrayidx246 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp159
87 %arrayidx239 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp159
88 %tmp160 = add i64 %tmp158, 6
89 %arrayidx228 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp160
90 %arrayidx221 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp160
91 %tmp161 = add i64 %tmp158, 5
92 %arrayidx210 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp161
93 %arrayidx203 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp161
94 %tmp162 = add i64 %tmp158, 4
95 %arrayidx192 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp162
96 %arrayidx185 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp162
97 %tmp163 = add i64 %tmp158, 3
98 %arrayidx174 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp163
99 %arrayidx167 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp163
100 %tmp164 = add i64 %tmp158, 2
101 %arrayidx156 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp164
102 %arrayidx149 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp164
103 %tmp165 = add i64 %tmp158, 1
104 %arrayidx138 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp165
105 %arrayidx131 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp165
106 %arrayidx121 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp158
107 %arrayidx115 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp158
108 %i.1 = trunc i64 %indvar155 to i32
109 %cmp109 = icmp slt i32 %i.1, 8
110 br i1 %cmp109, label %for.body111, label %for.end255
112 for.body111: ; preds = %for.cond107
113 %tmp116 = load i16* %arrayidx115, align 16
114 %conv117 = zext i16 %tmp116 to i32
115 %tmp122 = load i16* %arrayidx121, align 16
116 %conv123 = zext i16 %tmp122 to i32
117 %add124 = add nsw i32 %conv123, 5
118 %cmp125 = icmp eq i32 %conv117, %add124
119 br i1 %cmp125, label %lor.lhs.false, label %if.then
121 lor.lhs.false: ; preds = %for.body111
122 %tmp132 = load i16* %arrayidx131, align 2
123 %conv133 = zext i16 %tmp132 to i32
124 %tmp139 = load i16* %arrayidx138, align 2
125 %conv140 = zext i16 %tmp139 to i32
126 %add141 = add nsw i32 %conv140, 6
127 %cmp142 = icmp eq i32 %conv133, %add141
128 br i1 %cmp142, label %lor.lhs.false144, label %if.then
130 lor.lhs.false144: ; preds = %lor.lhs.false
131 %tmp150 = load i16* %arrayidx149, align 4
132 %conv151 = zext i16 %tmp150 to i32
133 %tmp157 = load i16* %arrayidx156, align 4
134 %conv158 = zext i16 %tmp157 to i32
135 %add159 = add nsw i32 %conv158, 7
136 %cmp160 = icmp eq i32 %conv151, %add159
137 br i1 %cmp160, label %lor.lhs.false162, label %if.then
139 lor.lhs.false162: ; preds = %lor.lhs.false144
140 %tmp168 = load i16* %arrayidx167, align 2
141 %conv169 = zext i16 %tmp168 to i32
142 %tmp175 = load i16* %arrayidx174, align 2
143 %conv176 = zext i16 %tmp175 to i32
144 %add177 = add nsw i32 %conv176, 8
145 %cmp178 = icmp eq i32 %conv169, %add177
146 br i1 %cmp178, label %lor.lhs.false180, label %if.then
148 lor.lhs.false180: ; preds = %lor.lhs.false162
149 %tmp186 = load i16* %arrayidx185, align 8
150 %conv187 = zext i16 %tmp186 to i32
151 %tmp193 = load i16* %arrayidx192, align 8
152 %conv194 = zext i16 %tmp193 to i32
153 %add195 = add nsw i32 %conv194, 9
154 %cmp196 = icmp eq i32 %conv187, %add195
155 br i1 %cmp196, label %lor.lhs.false198, label %if.then
157 lor.lhs.false198: ; preds = %lor.lhs.false180
158 %tmp204 = load i16* %arrayidx203, align 2
159 %conv205 = zext i16 %tmp204 to i32
160 %tmp211 = load i16* %arrayidx210, align 2
161 %conv212 = zext i16 %tmp211 to i32
162 %add213 = add nsw i32 %conv212, 10
163 %cmp214 = icmp eq i32 %conv205, %add213
164 br i1 %cmp214, label %lor.lhs.false216, label %if.then
166 lor.lhs.false216: ; preds = %lor.lhs.false198
167 %tmp222 = load i16* %arrayidx221, align 4
168 %conv223 = zext i16 %tmp222 to i32
169 %tmp229 = load i16* %arrayidx228, align 4
170 %conv230 = zext i16 %tmp229 to i32
171 %add231 = add nsw i32 %conv230, 11
172 %cmp232 = icmp eq i32 %conv223, %add231
173 br i1 %cmp232, label %lor.lhs.false234, label %if.then
175 lor.lhs.false234: ; preds = %lor.lhs.false216
176 %tmp240 = load i16* %arrayidx239, align 2
177 %conv241 = zext i16 %tmp240 to i32
178 %tmp247 = load i16* %arrayidx246, align 2
179 %conv248 = zext i16 %tmp247 to i32
180 %add249 = add nsw i32 %conv248, 12
181 %cmp250 = icmp eq i32 %conv241, %add249
182 br i1 %cmp250, label %if.end, label %if.then
184 if.then: ; preds = %lor.lhs.false234, %lor.lhs.false216, %lor.lhs.false198, %lor.lhs.false180, %lor.lhs.false162, %lor.lhs.false144, %lor.lhs.false, %for.body111
185 call void @abort() noreturn nounwind
188 if.end: ; preds = %lor.lhs.false234
191 for.inc252: ; preds = %if.end
192 %indvar.next156 = add i64 %indvar155, 1
193 br label %for.cond107
195 for.end255: ; preds = %for.cond107
196 br label %for.cond256
198 for.cond256: ; preds = %for.inc315, %for.end255
199 %indvar146 = phi i64 [ %indvar.next147, %for.inc315 ], [ 0, %for.end255 ]
200 %tmp149 = mul i64 %indvar146, 4
201 %tmp151 = add i64 %tmp149, 3
202 %arrayidx314 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp151
203 %arrayidx305 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp151
204 %tmp152 = add i64 %tmp149, 2
205 %arrayidx300 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp152
206 %arrayidx291 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp152
207 %tmp153 = add i64 %tmp149, 1
208 %arrayidx286 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp153
209 %arrayidx277 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp153
210 %arrayidx272 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp149
211 %arrayidx264 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp149
212 %exitcond148 = icmp ne i64 %indvar146, 16
213 br i1 %exitcond148, label %for.body260, label %for.end318
215 for.body260: ; preds = %for.cond256
216 %tmp265 = load i16* %arrayidx264, align 8
217 %add267 = add i16 %tmp265, 2
218 store i16 %add267, i16* %arrayidx272, align 8
219 %tmp278 = load i16* %arrayidx277, align 2
220 %add280 = add i16 %tmp278, 2
221 store i16 %add280, i16* %arrayidx286, align 2
222 %tmp292 = load i16* %arrayidx291, align 4
223 %add294 = add i16 %tmp292, 1
224 store i16 %add294, i16* %arrayidx300, align 4
225 %tmp306 = load i16* %arrayidx305, align 2
226 %add308 = add i16 %tmp306, 3
227 store i16 %add308, i16* %arrayidx314, align 2
230 for.inc315: ; preds = %for.body260
231 %indvar.next147 = add i64 %indvar146, 1
232 br label %for.cond256
234 for.end318: ; preds = %for.cond256
235 br label %for.cond319
237 for.cond319: ; preds = %for.inc395, %for.end318
238 %indvar139 = phi i64 [ %indvar.next140, %for.inc395 ], [ 0, %for.end318 ]
239 %tmp141 = mul i64 %indvar139, 4
240 %tmp142 = add i64 %tmp141, 3
241 %arrayidx387 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp142
242 %arrayidx380 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp142
243 %tmp143 = add i64 %tmp141, 2
244 %arrayidx369 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp143
245 %arrayidx362 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp143
246 %tmp144 = add i64 %tmp141, 1
247 %arrayidx351 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp144
248 %arrayidx344 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp144
249 %arrayidx333 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp141
250 %arrayidx327 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp141
251 %i.3 = trunc i64 %indvar139 to i32
252 %cmp321 = icmp slt i32 %i.3, 16
253 br i1 %cmp321, label %for.body323, label %for.end398
255 for.body323: ; preds = %for.cond319
256 %tmp328 = load i16* %arrayidx327, align 8
257 %conv329 = zext i16 %tmp328 to i32
258 %tmp334 = load i16* %arrayidx333, align 8
259 %conv335 = zext i16 %tmp334 to i32
260 %add336 = add nsw i32 %conv335, 2
261 %cmp337 = icmp eq i32 %conv329, %add336
262 br i1 %cmp337, label %lor.lhs.false339, label %if.then393
264 lor.lhs.false339: ; preds = %for.body323
265 %tmp345 = load i16* %arrayidx344, align 2
266 %conv346 = zext i16 %tmp345 to i32
267 %tmp352 = load i16* %arrayidx351, align 2
268 %conv353 = zext i16 %tmp352 to i32
269 %add354 = add nsw i32 %conv353, 2
270 %cmp355 = icmp eq i32 %conv346, %add354
271 br i1 %cmp355, label %lor.lhs.false357, label %if.then393
273 lor.lhs.false357: ; preds = %lor.lhs.false339
274 %tmp363 = load i16* %arrayidx362, align 4
275 %conv364 = zext i16 %tmp363 to i32
276 %tmp370 = load i16* %arrayidx369, align 4
277 %conv371 = zext i16 %tmp370 to i32
278 %add372 = add nsw i32 %conv371, 1
279 %cmp373 = icmp eq i32 %conv364, %add372
280 br i1 %cmp373, label %lor.lhs.false375, label %if.then393
282 lor.lhs.false375: ; preds = %lor.lhs.false357
283 %tmp381 = load i16* %arrayidx380, align 2
284 %conv382 = zext i16 %tmp381 to i32
285 %tmp388 = load i16* %arrayidx387, align 2
286 %conv389 = zext i16 %tmp388 to i32
287 %add390 = add nsw i32 %conv389, 3
288 %cmp391 = icmp eq i32 %conv382, %add390
289 br i1 %cmp391, label %if.end394, label %if.then393
291 if.then393: ; preds = %lor.lhs.false375, %lor.lhs.false357, %lor.lhs.false339, %for.body323
292 call void @abort() noreturn nounwind
295 if.end394: ; preds = %lor.lhs.false375
298 for.inc395: ; preds = %if.end394
299 %indvar.next140 = add i64 %indvar139, 1
300 br label %for.cond319
302 for.end398: ; preds = %for.cond319
303 br label %for.cond399
305 for.cond399: ; preds = %for.inc594, %for.end398
306 %indvar118 = phi i64 [ %indvar.next119, %for.inc594 ], [ 0, %for.end398 ]
307 %tmp120 = mul i64 %indvar118, 16
308 %tmp121 = add i64 %tmp120, 15
309 %arrayidx593 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp121
310 %arrayidx586 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp121
311 %tmp123 = add i64 %tmp120, 14
312 %arrayidx581 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp123
313 %arrayidx574 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp123
314 %tmp124 = add i64 %tmp120, 13
315 %arrayidx569 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp124
316 %arrayidx562 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp124
317 %tmp125 = add i64 %tmp120, 12
318 %arrayidx557 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp125
319 %arrayidx550 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp125
320 %tmp126 = add i64 %tmp120, 11
321 %arrayidx545 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp126
322 %arrayidx538 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp126
323 %tmp127 = add i64 %tmp120, 10
324 %arrayidx533 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp127
325 %arrayidx526 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp127
326 %tmp128 = add i64 %tmp120, 9
327 %arrayidx521 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp128
328 %arrayidx514 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp128
329 %tmp129 = add i64 %tmp120, 8
330 %arrayidx509 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp129
331 %arrayidx502 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp129
332 %tmp130 = add i64 %tmp120, 7
333 %arrayidx497 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp130
334 %arrayidx490 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp130
335 %tmp131 = add i64 %tmp120, 6
336 %arrayidx485 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp131
337 %arrayidx478 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp131
338 %tmp133 = add i64 %tmp120, 5
339 %arrayidx473 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp133
340 %arrayidx466 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp133
341 %tmp134 = add i64 %tmp120, 4
342 %arrayidx461 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp134
343 %arrayidx454 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp134
344 %tmp135 = add i64 %tmp120, 3
345 %arrayidx449 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp135
346 %arrayidx442 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp135
347 %tmp136 = add i64 %tmp120, 2
348 %arrayidx437 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp136
349 %arrayidx430 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp136
350 %tmp137 = add i64 %tmp120, 1
351 %arrayidx425 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp137
352 %arrayidx418 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp137
353 %arrayidx413 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp120
354 %arrayidx407 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp120
355 %exitcond = icmp ne i64 %indvar118, 4
356 br i1 %exitcond, label %for.body403, label %for.end597
358 for.body403: ; preds = %for.cond399
359 %tmp408 = load i32* %arrayidx407, align 16
360 %mul409 = shl i32 %tmp408, 1
361 store i32 %mul409, i32* %arrayidx413, align 16
362 %tmp419 = load i32* %arrayidx418, align 4
363 %mul420 = mul i32 %tmp419, 3
364 store i32 %mul420, i32* %arrayidx425, align 4
365 %tmp431 = load i32* %arrayidx430, align 8
366 %mul432 = shl i32 %tmp431, 2
367 store i32 %mul432, i32* %arrayidx437, align 8
368 %tmp443 = load i32* %arrayidx442, align 4
369 %mul444 = mul i32 %tmp443, 3
370 store i32 %mul444, i32* %arrayidx449, align 4
371 %tmp455 = load i32* %arrayidx454, align 16
372 %mul456 = shl i32 %tmp455, 1
373 store i32 %mul456, i32* %arrayidx461, align 16
374 %tmp467 = load i32* %arrayidx466, align 4
375 %mul468 = mul i32 %tmp467, 3
376 store i32 %mul468, i32* %arrayidx473, align 4
377 %tmp479 = load i32* %arrayidx478, align 8
378 %mul480 = shl i32 %tmp479, 1
379 store i32 %mul480, i32* %arrayidx485, align 8
380 %tmp491 = load i32* %arrayidx490, align 4
381 %mul492 = shl i32 %tmp491, 2
382 store i32 %mul492, i32* %arrayidx497, align 4
383 %tmp503 = load i32* %arrayidx502, align 16
384 %mul504 = shl i32 %tmp503, 1
385 store i32 %mul504, i32* %arrayidx509, align 16
386 %tmp515 = load i32* %arrayidx514, align 4
387 %mul516 = mul i32 %tmp515, 5
388 store i32 %mul516, i32* %arrayidx521, align 4
389 %tmp527 = load i32* %arrayidx526, align 8
390 %mul528 = shl i32 %tmp527, 1
391 store i32 %mul528, i32* %arrayidx533, align 8
392 %tmp539 = load i32* %arrayidx538, align 4
393 %mul540 = mul i32 %tmp539, 3
394 store i32 %mul540, i32* %arrayidx545, align 4
395 %tmp551 = load i32* %arrayidx550, align 16
396 %mul552 = shl i32 %tmp551, 2
397 store i32 %mul552, i32* %arrayidx557, align 16
398 %tmp563 = load i32* %arrayidx562, align 4
399 %mul564 = shl i32 %tmp563, 2
400 store i32 %mul564, i32* %arrayidx569, align 4
401 %tmp575 = load i32* %arrayidx574, align 8
402 %mul576 = mul i32 %tmp575, 3
403 store i32 %mul576, i32* %arrayidx581, align 8
404 %tmp587 = load i32* %arrayidx586, align 4
405 %mul588 = shl i32 %tmp587, 1
406 store i32 %mul588, i32* %arrayidx593, align 4
409 for.inc594: ; preds = %for.body403
410 %indvar.next119 = add i64 %indvar118, 1
411 br label %for.cond399
413 for.end597: ; preds = %for.cond399
414 br label %for.cond598
416 for.cond598: ; preds = %for.inc858, %for.end597
417 %indvar = phi i64 [ %indvar.next, %for.inc858 ], [ 0, %for.end597 ]
418 %tmp = mul i64 %indvar, 16
419 %tmp101 = add i64 %tmp, 15
420 %arrayidx851 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp101
421 %arrayidx845 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp101
422 %tmp102 = add i64 %tmp, 14
423 %arrayidx835 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp102
424 %arrayidx829 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp102
425 %tmp103 = add i64 %tmp, 13
426 %arrayidx819 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp103
427 %arrayidx813 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp103
428 %tmp104 = add i64 %tmp, 12
429 %arrayidx803 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp104
430 %arrayidx797 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp104
431 %tmp105 = add i64 %tmp, 11
432 %arrayidx787 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp105
433 %arrayidx781 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp105
434 %tmp106 = add i64 %tmp, 10
435 %arrayidx771 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp106
436 %arrayidx765 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp106
437 %tmp107 = add i64 %tmp, 9
438 %arrayidx755 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp107
439 %arrayidx749 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp107
440 %tmp108 = add i64 %tmp, 8
441 %arrayidx739 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp108
442 %arrayidx733 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp108
443 %tmp109 = add i64 %tmp, 7
444 %arrayidx723 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp109
445 %arrayidx717 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp109
446 %tmp110 = add i64 %tmp, 6
447 %arrayidx707 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp110
448 %arrayidx701 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp110
449 %tmp111 = add i64 %tmp, 5
450 %arrayidx691 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp111
451 %arrayidx685 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp111
452 %tmp112 = add i64 %tmp, 4
453 %arrayidx675 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp112
454 %arrayidx669 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp112
455 %tmp113 = add i64 %tmp, 3
456 %arrayidx659 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp113
457 %arrayidx653 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp113
458 %tmp114 = add i64 %tmp, 2
459 %arrayidx643 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp114
460 %arrayidx637 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp114
461 %tmp115 = add i64 %tmp, 1
462 %arrayidx627 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp115
463 %arrayidx621 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp115
464 %arrayidx611 = getelementptr [64 x i32]* @in2, i64 0, i64 %tmp
465 %arrayidx606 = getelementptr [64 x i32]* %out2, i64 0, i64 %tmp
466 %i.5 = trunc i64 %indvar to i32
467 %cmp600 = icmp slt i32 %i.5, 4
468 br i1 %cmp600, label %for.body602, label %for.end861
470 for.body602: ; preds = %for.cond598
471 %tmp607 = load i32* %arrayidx606, align 16
472 %tmp612 = load i32* %arrayidx611, align 16
473 %mul613 = shl i32 %tmp612, 1
474 %cmp614 = icmp eq i32 %tmp607, %mul613
475 br i1 %cmp614, label %lor.lhs.false616, label %if.then856
477 lor.lhs.false616: ; preds = %for.body602
478 %tmp622 = load i32* %arrayidx621, align 4
479 %tmp628 = load i32* %arrayidx627, align 4
480 %mul629 = mul i32 %tmp628, 3
481 %cmp630 = icmp eq i32 %tmp622, %mul629
482 br i1 %cmp630, label %lor.lhs.false632, label %if.then856
484 lor.lhs.false632: ; preds = %lor.lhs.false616
485 %tmp638 = load i32* %arrayidx637, align 8
486 %tmp644 = load i32* %arrayidx643, align 8
487 %mul645 = shl i32 %tmp644, 2
488 %cmp646 = icmp eq i32 %tmp638, %mul645
489 br i1 %cmp646, label %lor.lhs.false648, label %if.then856
491 lor.lhs.false648: ; preds = %lor.lhs.false632
492 %tmp654 = load i32* %arrayidx653, align 4
493 %tmp660 = load i32* %arrayidx659, align 4
494 %mul661 = mul i32 %tmp660, 3
495 %cmp662 = icmp eq i32 %tmp654, %mul661
496 br i1 %cmp662, label %lor.lhs.false664, label %if.then856
498 lor.lhs.false664: ; preds = %lor.lhs.false648
499 %tmp670 = load i32* %arrayidx669, align 16
500 %tmp676 = load i32* %arrayidx675, align 16
501 %mul677 = shl i32 %tmp676, 1
502 %cmp678 = icmp eq i32 %tmp670, %mul677
503 br i1 %cmp678, label %lor.lhs.false680, label %if.then856
505 lor.lhs.false680: ; preds = %lor.lhs.false664
506 %tmp686 = load i32* %arrayidx685, align 4
507 %tmp692 = load i32* %arrayidx691, align 4
508 %mul693 = mul i32 %tmp692, 3
509 %cmp694 = icmp eq i32 %tmp686, %mul693
510 br i1 %cmp694, label %lor.lhs.false696, label %if.then856
512 lor.lhs.false696: ; preds = %lor.lhs.false680
513 %tmp702 = load i32* %arrayidx701, align 8
514 %tmp708 = load i32* %arrayidx707, align 8
515 %mul709 = shl i32 %tmp708, 1
516 %cmp710 = icmp eq i32 %tmp702, %mul709
517 br i1 %cmp710, label %lor.lhs.false712, label %if.then856
519 lor.lhs.false712: ; preds = %lor.lhs.false696
520 %tmp718 = load i32* %arrayidx717, align 4
521 %tmp724 = load i32* %arrayidx723, align 4
522 %mul725 = shl i32 %tmp724, 2
523 %cmp726 = icmp eq i32 %tmp718, %mul725
524 br i1 %cmp726, label %lor.lhs.false728, label %if.then856
526 lor.lhs.false728: ; preds = %lor.lhs.false712
527 %tmp734 = load i32* %arrayidx733, align 16
528 %tmp740 = load i32* %arrayidx739, align 16
529 %mul741 = shl i32 %tmp740, 1
530 %cmp742 = icmp eq i32 %tmp734, %mul741
531 br i1 %cmp742, label %lor.lhs.false744, label %if.then856
533 lor.lhs.false744: ; preds = %lor.lhs.false728
534 %tmp750 = load i32* %arrayidx749, align 4
535 %tmp756 = load i32* %arrayidx755, align 4
536 %mul757 = mul i32 %tmp756, 5
537 %cmp758 = icmp eq i32 %tmp750, %mul757
538 br i1 %cmp758, label %lor.lhs.false760, label %if.then856
540 lor.lhs.false760: ; preds = %lor.lhs.false744
541 %tmp766 = load i32* %arrayidx765, align 8
542 %tmp772 = load i32* %arrayidx771, align 8
543 %mul773 = shl i32 %tmp772, 1
544 %cmp774 = icmp eq i32 %tmp766, %mul773
545 br i1 %cmp774, label %lor.lhs.false776, label %if.then856
547 lor.lhs.false776: ; preds = %lor.lhs.false760
548 %tmp782 = load i32* %arrayidx781, align 4
549 %tmp788 = load i32* %arrayidx787, align 4
550 %mul789 = mul i32 %tmp788, 3
551 %cmp790 = icmp eq i32 %tmp782, %mul789
552 br i1 %cmp790, label %lor.lhs.false792, label %if.then856
554 lor.lhs.false792: ; preds = %lor.lhs.false776
555 %tmp798 = load i32* %arrayidx797, align 16
556 %tmp804 = load i32* %arrayidx803, align 16
557 %mul805 = shl i32 %tmp804, 2
558 %cmp806 = icmp eq i32 %tmp798, %mul805
559 br i1 %cmp806, label %lor.lhs.false808, label %if.then856
561 lor.lhs.false808: ; preds = %lor.lhs.false792
562 %tmp814 = load i32* %arrayidx813, align 4
563 %tmp820 = load i32* %arrayidx819, align 4
564 %mul821 = shl i32 %tmp820, 2
565 %cmp822 = icmp eq i32 %tmp814, %mul821
566 br i1 %cmp822, label %lor.lhs.false824, label %if.then856
568 lor.lhs.false824: ; preds = %lor.lhs.false808
569 %tmp830 = load i32* %arrayidx829, align 8
570 %tmp836 = load i32* %arrayidx835, align 8
571 %mul837 = mul i32 %tmp836, 3
572 %cmp838 = icmp eq i32 %tmp830, %mul837
573 br i1 %cmp838, label %lor.lhs.false840, label %if.then856
575 lor.lhs.false840: ; preds = %lor.lhs.false824
576 %tmp846 = load i32* %arrayidx845, align 4
577 %tmp852 = load i32* %arrayidx851, align 4
578 %mul853 = shl i32 %tmp852, 1
579 %cmp854 = icmp eq i32 %tmp846, %mul853
580 br i1 %cmp854, label %if.end857, label %if.then856
582 if.then856: ; preds = %lor.lhs.false840, %lor.lhs.false824, %lor.lhs.false808, %lor.lhs.false792, %lor.lhs.false776, %lor.lhs.false760, %lor.lhs.false744, %lor.lhs.false728, %lor.lhs.false712, %lor.lhs.false696, %lor.lhs.false680, %lor.lhs.false664, %lor.lhs.false648, %lor.lhs.false632, %lor.lhs.false616, %for.body602
583 call void @abort() noreturn nounwind
586 if.end857: ; preds = %lor.lhs.false840
589 for.inc858: ; preds = %if.end857
590 %indvar.next = add i64 %indvar, 1
591 br label %for.cond598
593 for.end861: ; preds = %for.cond598
597 declare void @abort() noreturn
599 define i32 @main() nounwind uwtable {
601 call void @check_vect()
602 %call = call i32 @main1()
606 define internal void @check_vect() nounwind uwtable noinline {
608 %a = alloca i32, align 4
609 %b = alloca i32, align 4
610 %c = alloca i32, align 4
611 %d = alloca i32, align 4
612 %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
613 %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
614 %tobool = icmp eq i32 %call1, 0
615 br i1 %tobool, label %if.then, label %lor.lhs.false
617 lor.lhs.false: ; preds = %entry
618 %tmp4 = load i32* %d, align 4
619 %and6 = and i32 %tmp4, 67108864
620 %cmp = icmp eq i32 %and6, 0
621 br i1 %cmp, label %if.then, label %if.end
623 if.then: ; preds = %entry, %lor.lhs.false
624 call void @exit(i32 0) noreturn nounwind
627 if.end: ; preds = %lor.lhs.false
628 %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
632 declare void (i32)* @signal(i32, void (i32)*) nounwind
634 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
636 call void @exit(i32 0) noreturn nounwind
639 return: ; No predecessors!
643 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
645 %and = and i32 %__level, -2147483648
646 %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
647 %cmp = icmp ult i32 %call, %__level
648 br i1 %cmp, label %if.then, label %if.end
650 if.then: ; preds = %entry
653 if.end: ; preds = %entry
654 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
655 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
656 %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
657 %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
658 %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
659 store i32 %asmresult, i32* %__eax, align 4
660 store i32 %asmresult8, i32* %__ebx, align 4
661 store i32 %asmresult9, i32* %__ecx, align 4
662 store i32 %asmresult10, i32* %__edx, align 4
665 return: ; preds = %if.end, %if.then
666 %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
670 declare void @exit(i32) noreturn
672 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
674 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
675 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
676 %tobool = icmp eq i32* %__sig, null
677 br i1 %tobool, label %if.end, label %if.then
679 if.then: ; preds = %entry
680 %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
681 store i32 %asmresult1, i32* %__sig, align 4
684 if.end: ; preds = %entry, %if.then
688 !0 = metadata !{i32 -2147340386, i32 -2147340378}
689 !1 = metadata !{i32 -2147340509, i32 -2147340501}