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-21.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-21.s > slp-21.ll
6 ; ModuleID = 'slp-21.s'
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 define i32 @main1() nounwind uwtable {
12 %out = alloca [1024 x i16], align 16
13 %out2 = alloca [1024 x i16], align 16
14 %in = alloca [1024 x i16], align 16
17 for.cond: ; preds = %for.inc, %entry
18 %indvar171 = phi i64 [ %indvar.next172, %for.inc ], [ 0, %entry ]
19 %i.0 = trunc i64 %indvar171 to i16
20 %arrayidx = getelementptr [1024 x i16]* %in, i64 0, i64 %indvar171
21 %exitcond173 = icmp ne i64 %indvar171, 1024
22 br i1 %exitcond173, label %for.body, label %for.end
24 for.body: ; preds = %for.cond
25 store i16 %i.0, i16* %arrayidx, align 2
28 for.inc: ; preds = %for.body
29 %indvar.next172 = add i64 %indvar171, 1
32 for.end: ; preds = %for.cond
35 for.cond5: ; preds = %for.inc114, %for.end
36 %indvar163 = phi i64 [ %indvar.next164, %for.inc114 ], [ 0, %for.end ]
37 %tmp166 = mul i64 %indvar163, 4
38 %tmp167 = add i64 %tmp166, 3
39 %arrayidx113 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp167
40 %tmp168 = add i64 %tmp166, 2
41 %arrayidx106 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp168
42 %tmp169 = add i64 %tmp166, 1
43 %arrayidx99 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp169
44 %arrayidx92 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp166
45 %arrayidx86 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp167
46 %arrayidx79 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp168
47 %arrayidx72 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp169
48 %arrayidx65 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp166
49 %arrayidx34 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp167
50 %arrayidx27 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp168
51 %arrayidx20 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp169
52 %arrayidx14 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp166
53 %exitcond165 = icmp ne i64 %indvar163, 128
54 br i1 %exitcond165, label %for.body10, label %for.end117
56 for.body10: ; preds = %for.cond5
57 %tmp15 = load i16* %arrayidx14, align 8
58 %tmp21 = load i16* %arrayidx20, align 2
59 %tmp28 = load i16* %arrayidx27, align 4
60 %tmp35 = load i16* %arrayidx34, align 2
61 %mul38 = shl i16 %tmp15, 3
62 %add42 = add i16 %tmp21, 7
63 %add46 = add i16 %tmp28, 6
64 %mul50 = mul i16 %tmp35, 5
65 %add54 = add i16 %tmp28, 4
66 %add58 = add i16 %tmp35, 3
67 store i16 %mul38, i16* %arrayidx65, align 8
68 store i16 %add42, i16* %arrayidx72, align 2
69 store i16 %add46, i16* %arrayidx79, align 4
70 store i16 %mul50, i16* %arrayidx86, align 2
71 store i16 %mul38, i16* %arrayidx92, align 8
72 store i16 %add42, i16* %arrayidx99, align 2
73 store i16 %add54, i16* %arrayidx106, align 4
74 store i16 %add58, i16* %arrayidx113, align 2
77 for.inc114: ; preds = %for.body10
78 %indvar.next164 = add i64 %indvar163, 1
81 for.end117: ; preds = %for.cond5
84 for.cond118: ; preds = %for.inc276, %for.end117
85 %indvar156 = phi i64 [ %indvar.next157, %for.inc276 ], [ 0, %for.end117 ]
86 %tmp158 = mul i64 %indvar156, 4
87 %tmp159 = add i64 %tmp158, 3
88 %arrayidx267 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp159
89 %tmp160 = add i64 %tmp158, 2
90 %arrayidx254 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp160
91 %tmp161 = add i64 %tmp158, 1
92 %arrayidx241 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp161
93 %arrayidx228 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp158
94 %arrayidx217 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp159
95 %arrayidx204 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp160
96 %arrayidx191 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp161
97 %arrayidx179 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp158
98 %arrayidx149 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp159
99 %arrayidx142 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp160
100 %arrayidx135 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp161
101 %arrayidx128 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp158
102 %i.2 = trunc i64 %indvar156 to i16
103 %cmp121 = icmp ult i16 %i.2, 128
104 br i1 %cmp121, label %for.body123, label %for.end279
106 for.body123: ; preds = %for.cond118
107 %tmp129 = load i16* %arrayidx128, align 8
108 %tmp136 = load i16* %arrayidx135, align 2
109 %tmp143 = load i16* %arrayidx142, align 4
110 %tmp150 = load i16* %arrayidx149, align 2
111 %mul153 = shl i16 %tmp129, 3
112 %add157 = add i16 %tmp136, 7
113 %add161 = add i16 %tmp143, 6
114 %mul165 = mul i16 %tmp150, 5
115 %add169 = add i16 %tmp143, 4
116 %add173 = add i16 %tmp150, 3
117 %tmp180 = load i16* %arrayidx179, align 8
118 %cmp184 = icmp eq i16 %tmp180, %mul153
119 br i1 %cmp184, label %lor.lhs.false, label %if.then
121 lor.lhs.false: ; preds = %for.body123
122 %tmp192 = load i16* %arrayidx191, align 2
123 %cmp196 = icmp eq i16 %tmp192, %add157
124 br i1 %cmp196, label %lor.lhs.false198, label %if.then
126 lor.lhs.false198: ; preds = %lor.lhs.false
127 %tmp205 = load i16* %arrayidx204, align 4
128 %cmp209 = icmp eq i16 %tmp205, %add161
129 br i1 %cmp209, label %lor.lhs.false211, label %if.then
131 lor.lhs.false211: ; preds = %lor.lhs.false198
132 %tmp218 = load i16* %arrayidx217, align 2
133 %cmp222 = icmp eq i16 %tmp218, %mul165
134 br i1 %cmp222, label %if.end, label %if.then
136 if.then: ; preds = %lor.lhs.false211, %lor.lhs.false198, %lor.lhs.false, %for.body123
137 call void @abort() noreturn nounwind
140 if.end: ; preds = %lor.lhs.false211
141 %tmp229 = load i16* %arrayidx228, align 8
142 %cmp233 = icmp eq i16 %tmp229, %mul153
143 br i1 %cmp233, label %lor.lhs.false235, label %if.then274
145 lor.lhs.false235: ; preds = %if.end
146 %tmp242 = load i16* %arrayidx241, align 2
147 %cmp246 = icmp eq i16 %tmp242, %add157
148 br i1 %cmp246, label %lor.lhs.false248, label %if.then274
150 lor.lhs.false248: ; preds = %lor.lhs.false235
151 %tmp255 = load i16* %arrayidx254, align 4
152 %cmp259 = icmp eq i16 %tmp255, %add169
153 br i1 %cmp259, label %lor.lhs.false261, label %if.then274
155 lor.lhs.false261: ; preds = %lor.lhs.false248
156 %tmp268 = load i16* %arrayidx267, align 2
157 %cmp272 = icmp eq i16 %tmp268, %add173
158 br i1 %cmp272, label %if.end275, label %if.then274
160 if.then274: ; preds = %lor.lhs.false261, %lor.lhs.false248, %lor.lhs.false235, %if.end
161 call void @abort() noreturn nounwind
164 if.end275: ; preds = %lor.lhs.false261
167 for.inc276: ; preds = %if.end275
168 %indvar.next157 = add i64 %indvar156, 1
169 br label %for.cond118
171 for.end279: ; preds = %for.cond118
172 br label %for.cond280
174 for.cond280: ; preds = %for.inc391, %for.end279
175 %indvar148 = phi i64 [ %indvar.next149, %for.inc391 ], [ 0, %for.end279 ]
176 %tmp151 = mul i64 %indvar148, 4
177 %tmp152 = add i64 %tmp151, 3
178 %arrayidx390 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp152
179 %tmp153 = add i64 %tmp151, 2
180 %arrayidx383 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp153
181 %tmp154 = add i64 %tmp151, 1
182 %arrayidx376 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp154
183 %arrayidx369 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp151
184 %arrayidx363 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp152
185 %arrayidx356 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp153
186 %arrayidx349 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp154
187 %arrayidx342 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp151
188 %arrayidx311 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp152
189 %arrayidx304 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp153
190 %arrayidx297 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp154
191 %arrayidx290 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp151
192 %exitcond150 = icmp ne i64 %indvar148, 128
193 br i1 %exitcond150, label %for.body285, label %for.end394
195 for.body285: ; preds = %for.cond280
196 %tmp291 = load i16* %arrayidx290, align 8
197 %tmp298 = load i16* %arrayidx297, align 2
198 %tmp305 = load i16* %arrayidx304, align 4
199 %tmp312 = load i16* %arrayidx311, align 2
200 %add315 = add i16 %tmp291, 8
201 %add319 = add i16 %tmp298, 7
202 %add323 = add i16 %tmp305, 6
203 %mul327 = mul i16 %tmp312, 5
204 %add331 = add i16 %tmp305, 4
205 %add335 = add i16 %tmp312, 3
206 store i16 %add315, i16* %arrayidx342, align 8
207 store i16 %add319, i16* %arrayidx349, align 2
208 store i16 %add323, i16* %arrayidx356, align 4
209 store i16 %mul327, i16* %arrayidx363, align 2
210 store i16 %add315, i16* %arrayidx369, align 8
211 store i16 %add319, i16* %arrayidx376, align 2
212 store i16 %add331, i16* %arrayidx383, align 4
213 store i16 %add335, i16* %arrayidx390, align 2
216 for.inc391: ; preds = %for.body285
217 %indvar.next149 = add i64 %indvar148, 1
218 br label %for.cond280
220 for.end394: ; preds = %for.cond280
221 br label %for.cond395
223 for.cond395: ; preds = %for.inc556, %for.end394
224 %indvar140 = phi i64 [ %indvar.next141, %for.inc556 ], [ 0, %for.end394 ]
225 %tmp142 = mul i64 %indvar140, 4
226 %tmp144 = add i64 %tmp142, 3
227 %arrayidx547 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp144
228 %tmp145 = add i64 %tmp142, 2
229 %arrayidx534 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp145
230 %tmp146 = add i64 %tmp142, 1
231 %arrayidx521 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp146
232 %arrayidx508 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp142
233 %arrayidx495 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp144
234 %arrayidx482 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp145
235 %arrayidx469 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp146
236 %arrayidx456 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp142
237 %arrayidx426 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp144
238 %arrayidx419 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp145
239 %arrayidx412 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp146
240 %arrayidx405 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp142
241 %i.4 = trunc i64 %indvar140 to i16
242 %cmp398 = icmp ult i16 %i.4, 128
243 br i1 %cmp398, label %for.body400, label %for.end559
245 for.body400: ; preds = %for.cond395
246 %tmp406 = load i16* %arrayidx405, align 8
247 %tmp413 = load i16* %arrayidx412, align 2
248 %tmp420 = load i16* %arrayidx419, align 4
249 %tmp427 = load i16* %arrayidx426, align 2
250 %add430 = add i16 %tmp406, 8
251 %add434 = add i16 %tmp413, 7
252 %add438 = add i16 %tmp420, 6
253 %mul442 = mul i16 %tmp427, 5
254 %add446 = add i16 %tmp420, 4
255 %add450 = add i16 %tmp427, 3
256 %tmp457 = load i16* %arrayidx456, align 8
257 %cmp461 = icmp eq i16 %tmp457, %add430
258 br i1 %cmp461, label %lor.lhs.false463, label %if.then502
260 lor.lhs.false463: ; preds = %for.body400
261 %tmp470 = load i16* %arrayidx469, align 2
262 %cmp474 = icmp eq i16 %tmp470, %add434
263 br i1 %cmp474, label %lor.lhs.false476, label %if.then502
265 lor.lhs.false476: ; preds = %lor.lhs.false463
266 %tmp483 = load i16* %arrayidx482, align 4
267 %cmp487 = icmp eq i16 %tmp483, %add438
268 br i1 %cmp487, label %lor.lhs.false489, label %if.then502
270 lor.lhs.false489: ; preds = %lor.lhs.false476
271 %tmp496 = load i16* %arrayidx495, align 2
272 %cmp500 = icmp eq i16 %tmp496, %mul442
273 br i1 %cmp500, label %if.end503, label %if.then502
275 if.then502: ; preds = %lor.lhs.false489, %lor.lhs.false476, %lor.lhs.false463, %for.body400
276 call void @abort() noreturn nounwind
279 if.end503: ; preds = %lor.lhs.false489
280 %tmp509 = load i16* %arrayidx508, align 8
281 %cmp513 = icmp eq i16 %tmp509, %add430
282 br i1 %cmp513, label %lor.lhs.false515, label %if.then554
284 lor.lhs.false515: ; preds = %if.end503
285 %tmp522 = load i16* %arrayidx521, align 2
286 %cmp526 = icmp eq i16 %tmp522, %add434
287 br i1 %cmp526, label %lor.lhs.false528, label %if.then554
289 lor.lhs.false528: ; preds = %lor.lhs.false515
290 %tmp535 = load i16* %arrayidx534, align 4
291 %cmp539 = icmp eq i16 %tmp535, %add446
292 br i1 %cmp539, label %lor.lhs.false541, label %if.then554
294 lor.lhs.false541: ; preds = %lor.lhs.false528
295 %tmp548 = load i16* %arrayidx547, align 2
296 %cmp552 = icmp eq i16 %tmp548, %add450
297 br i1 %cmp552, label %if.end555, label %if.then554
299 if.then554: ; preds = %lor.lhs.false541, %lor.lhs.false528, %lor.lhs.false515, %if.end503
300 call void @abort() noreturn nounwind
303 if.end555: ; preds = %lor.lhs.false541
306 for.inc556: ; preds = %if.end555
307 %indvar.next141 = add i64 %indvar140, 1
308 br label %for.cond395
310 for.end559: ; preds = %for.cond395
311 br label %for.cond560
313 for.cond560: ; preds = %for.inc671, %for.end559
314 %indvar132 = phi i64 [ %indvar.next133, %for.inc671 ], [ 0, %for.end559 ]
315 %tmp134 = mul i64 %indvar132, 4
316 %tmp135 = add i64 %tmp134, 3
317 %arrayidx670 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp135
318 %tmp137 = add i64 %tmp134, 2
319 %arrayidx663 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp137
320 %tmp138 = add i64 %tmp134, 1
321 %arrayidx656 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp138
322 %arrayidx649 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp134
323 %arrayidx643 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp135
324 %arrayidx636 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp137
325 %arrayidx629 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp138
326 %arrayidx622 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp134
327 %arrayidx591 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp135
328 %arrayidx584 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp137
329 %arrayidx577 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp138
330 %arrayidx570 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp134
331 %exitcond = icmp ne i64 %indvar132, 128
332 br i1 %exitcond, label %for.body565, label %for.end674
334 for.body565: ; preds = %for.cond560
335 %tmp571 = load i16* %arrayidx570, align 8
336 %tmp578 = load i16* %arrayidx577, align 2
337 %tmp585 = load i16* %arrayidx584, align 4
338 %tmp592 = load i16* %arrayidx591, align 2
339 %add595 = add i16 %tmp571, 8
340 %add599 = add i16 %tmp578, 7
341 %add603 = add i16 %tmp585, 6
342 %add607 = add i16 %tmp592, 5
343 %mul611 = shl i16 %tmp585, 2
344 %add615 = add i16 %tmp592, 3
345 store i16 %add595, i16* %arrayidx622, align 8
346 store i16 %add599, i16* %arrayidx629, align 2
347 store i16 %add603, i16* %arrayidx636, align 4
348 store i16 %add607, i16* %arrayidx643, align 2
349 store i16 %add595, i16* %arrayidx649, align 8
350 store i16 %add599, i16* %arrayidx656, align 2
351 store i16 %mul611, i16* %arrayidx663, align 4
352 store i16 %add615, i16* %arrayidx670, align 2
355 for.inc671: ; preds = %for.body565
356 %indvar.next133 = add i64 %indvar132, 1
357 br label %for.cond560
359 for.end674: ; preds = %for.cond560
360 br label %for.cond675
362 for.cond675: ; preds = %for.inc836, %for.end674
363 %indvar = phi i64 [ %indvar.next, %for.inc836 ], [ 0, %for.end674 ]
364 %tmp = mul i64 %indvar, 4
365 %tmp127 = add i64 %tmp, 3
366 %arrayidx827 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp127
367 %tmp128 = add i64 %tmp, 2
368 %arrayidx814 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp128
369 %tmp130 = add i64 %tmp, 1
370 %arrayidx801 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp130
371 %arrayidx788 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp
372 %arrayidx775 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp127
373 %arrayidx762 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp128
374 %arrayidx749 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp130
375 %arrayidx736 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp
376 %arrayidx706 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp127
377 %arrayidx699 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp128
378 %arrayidx692 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp130
379 %arrayidx685 = getelementptr [1024 x i16]* %in, i64 0, i64 %tmp
380 %i.6 = trunc i64 %indvar to i16
381 %cmp678 = icmp ult i16 %i.6, 128
382 br i1 %cmp678, label %for.body680, label %for.end839
384 for.body680: ; preds = %for.cond675
385 %tmp686 = load i16* %arrayidx685, align 8
386 %tmp693 = load i16* %arrayidx692, align 2
387 %tmp700 = load i16* %arrayidx699, align 4
388 %tmp707 = load i16* %arrayidx706, align 2
389 %add710 = add i16 %tmp686, 8
390 %add714 = add i16 %tmp693, 7
391 %add718 = add i16 %tmp700, 6
392 %add722 = add i16 %tmp707, 5
393 %mul726 = shl i16 %tmp700, 2
394 %add730 = add i16 %tmp707, 3
395 %tmp737 = load i16* %arrayidx736, align 8
396 %cmp741 = icmp eq i16 %tmp737, %add710
397 br i1 %cmp741, label %lor.lhs.false743, label %if.then782
399 lor.lhs.false743: ; preds = %for.body680
400 %tmp750 = load i16* %arrayidx749, align 2
401 %cmp754 = icmp eq i16 %tmp750, %add714
402 br i1 %cmp754, label %lor.lhs.false756, label %if.then782
404 lor.lhs.false756: ; preds = %lor.lhs.false743
405 %tmp763 = load i16* %arrayidx762, align 4
406 %cmp767 = icmp eq i16 %tmp763, %add718
407 br i1 %cmp767, label %lor.lhs.false769, label %if.then782
409 lor.lhs.false769: ; preds = %lor.lhs.false756
410 %tmp776 = load i16* %arrayidx775, align 2
411 %cmp780 = icmp eq i16 %tmp776, %add722
412 br i1 %cmp780, label %if.end783, label %if.then782
414 if.then782: ; preds = %lor.lhs.false769, %lor.lhs.false756, %lor.lhs.false743, %for.body680
415 call void @abort() noreturn nounwind
418 if.end783: ; preds = %lor.lhs.false769
419 %tmp789 = load i16* %arrayidx788, align 8
420 %cmp793 = icmp eq i16 %tmp789, %add710
421 br i1 %cmp793, label %lor.lhs.false795, label %if.then834
423 lor.lhs.false795: ; preds = %if.end783
424 %tmp802 = load i16* %arrayidx801, align 2
425 %cmp806 = icmp eq i16 %tmp802, %add714
426 br i1 %cmp806, label %lor.lhs.false808, label %if.then834
428 lor.lhs.false808: ; preds = %lor.lhs.false795
429 %tmp815 = load i16* %arrayidx814, align 4
430 %cmp819 = icmp eq i16 %tmp815, %mul726
431 br i1 %cmp819, label %lor.lhs.false821, label %if.then834
433 lor.lhs.false821: ; preds = %lor.lhs.false808
434 %tmp828 = load i16* %arrayidx827, align 2
435 %cmp832 = icmp eq i16 %tmp828, %add730
436 br i1 %cmp832, label %if.end835, label %if.then834
438 if.then834: ; preds = %lor.lhs.false821, %lor.lhs.false808, %lor.lhs.false795, %if.end783
439 call void @abort() noreturn nounwind
442 if.end835: ; preds = %lor.lhs.false821
445 for.inc836: ; preds = %if.end835
446 %indvar.next = add i64 %indvar, 1
447 br label %for.cond675
449 for.end839: ; preds = %for.cond675
453 declare void @abort() noreturn
455 define i32 @main() nounwind uwtable {
457 call void @check_vect()
458 %call = call i32 @main1()
462 define internal void @check_vect() nounwind uwtable noinline {
464 %a = alloca i32, align 4
465 %b = alloca i32, align 4
466 %c = alloca i32, align 4
467 %d = alloca i32, align 4
468 %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
469 %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
470 %tobool = icmp eq i32 %call1, 0
471 br i1 %tobool, label %if.then, label %lor.lhs.false
473 lor.lhs.false: ; preds = %entry
474 %tmp4 = load i32* %d, align 4
475 %and6 = and i32 %tmp4, 67108864
476 %cmp = icmp eq i32 %and6, 0
477 br i1 %cmp, label %if.then, label %if.end
479 if.then: ; preds = %entry, %lor.lhs.false
480 call void @exit(i32 0) noreturn nounwind
483 if.end: ; preds = %lor.lhs.false
484 %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
488 declare void (i32)* @signal(i32, void (i32)*) nounwind
490 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
492 call void @exit(i32 0) noreturn nounwind
495 return: ; No predecessors!
499 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
501 %and = and i32 %__level, -2147483648
502 %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
503 %cmp = icmp ult i32 %call, %__level
504 br i1 %cmp, label %if.then, label %if.end
506 if.then: ; preds = %entry
509 if.end: ; preds = %entry
510 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
511 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
512 %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
513 %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
514 %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
515 store i32 %asmresult, i32* %__eax, align 4
516 store i32 %asmresult8, i32* %__ebx, align 4
517 store i32 %asmresult9, i32* %__ecx, align 4
518 store i32 %asmresult10, i32* %__edx, align 4
521 return: ; preds = %if.end, %if.then
522 %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
526 declare void @exit(i32) noreturn
528 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
530 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
531 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
532 %tobool = icmp eq i32* %__sig, null
533 br i1 %tobool, label %if.end, label %if.then
535 if.then: ; preds = %entry
536 %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
537 store i32 %asmresult1, i32* %__sig, align 4
540 if.end: ; preds = %entry, %if.then
544 !0 = metadata !{i32 -2147340153, i32 -2147340145}
545 !1 = metadata !{i32 -2147340276, i32 -2147340268}