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-22.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-22.s > slp-22.ll
6 ; ModuleID = 'slp-22.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(i16 zeroext %a0, i16 zeroext %a1, i16 zeroext %a2, i16 zeroext %a3, i16 zeroext %a4, i16 zeroext %a5, i16 zeroext %a6, i16 zeroext %a7, i16 zeroext %a8) nounwind uwtable {
12 %out = alloca [1024 x i16], align 16
13 %out2 = alloca [1024 x i16], align 16
14 %out3 = alloca [1024 x i16], align 16
17 for.cond: ; preds = %for.inc, %entry
18 %indvar81 = phi i64 [ %indvar.next82, %for.inc ], [ 0, %entry ]
19 %b0.0 = phi i16 [ undef, %entry ], [ %add, %for.inc ]
20 %b1.0 = phi i16 [ undef, %entry ], [ %add5, %for.inc ]
21 %b2.0 = phi i16 [ undef, %entry ], [ %add9, %for.inc ]
22 %b3.0 = phi i16 [ undef, %entry ], [ %add13, %for.inc ]
23 %b4.0 = phi i16 [ undef, %entry ], [ %add17, %for.inc ]
24 %b5.0 = phi i16 [ undef, %entry ], [ %add21, %for.inc ]
25 %tmp84 = mul i64 %indvar81, 4
26 %tmp85 = add i64 %tmp84, 3
27 %arrayidx88 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp85
28 %tmp86 = add i64 %tmp84, 2
29 %arrayidx82 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp86
30 %tmp87 = add i64 %tmp84, 1
31 %arrayidx76 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp87
32 %arrayidx70 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp84
33 %arrayidx65 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp85
34 %arrayidx59 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp86
35 %arrayidx53 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp87
36 %arrayidx47 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp84
37 %arrayidx42 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp85
38 %arrayidx36 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp86
39 %arrayidx30 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp87
40 %arrayidx = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp84
41 %exitcond83 = icmp ne i64 %indvar81, 128
42 br i1 %exitcond83, label %for.body, label %for.end
44 for.body: ; preds = %for.cond
46 %add5 = add i16 %a1, 7
47 %add9 = add i16 %a2, 6
48 %add13 = add i16 %a3, 5
49 %add17 = add i16 %a4, 4
50 %add21 = add i16 %a5, 3
51 store i16 %add, i16* %arrayidx, align 8
52 store i16 %add5, i16* %arrayidx30, align 2
53 store i16 %add9, i16* %arrayidx36, align 4
54 store i16 %add13, i16* %arrayidx42, align 2
55 store i16 %add, i16* %arrayidx47, align 8
56 store i16 %add5, i16* %arrayidx53, align 2
57 store i16 %add17, i16* %arrayidx59, align 4
58 store i16 %add21, i16* %arrayidx65, align 2
59 store i16 %add9, i16* %arrayidx70, align 8
60 store i16 %add5, i16* %arrayidx76, align 2
61 store i16 %add17, i16* %arrayidx82, align 4
62 store i16 %add21, i16* %arrayidx88, align 2
65 for.inc: ; preds = %for.body
66 %indvar.next82 = add i64 %indvar81, 1
69 for.end: ; preds = %for.cond
70 %b5.0.lcssa = phi i16 [ %b5.0, %for.cond ]
71 %b4.0.lcssa = phi i16 [ %b4.0, %for.cond ]
72 %b3.0.lcssa = phi i16 [ %b3.0, %for.cond ]
73 %b2.0.lcssa = phi i16 [ %b2.0, %for.cond ]
74 %b1.0.lcssa = phi i16 [ %b1.0, %for.cond ]
75 %b0.0.lcssa = phi i16 [ %b0.0, %for.cond ]
78 for.cond90: ; preds = %for.inc236, %for.end
79 %indvar74 = phi i64 [ %indvar.next75, %for.inc236 ], [ 0, %for.end ]
80 %tmp76 = mul i64 %indvar74, 4
81 %tmp77 = add i64 %tmp76, 3
82 %arrayidx227 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp77
83 %tmp78 = add i64 %tmp76, 2
84 %arrayidx215 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp78
85 %tmp79 = add i64 %tmp76, 1
86 %arrayidx203 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp79
87 %arrayidx191 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp76
88 %arrayidx179 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp77
89 %arrayidx167 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp78
90 %arrayidx155 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp79
91 %arrayidx143 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp76
92 %arrayidx133 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp77
93 %arrayidx121 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp78
94 %arrayidx109 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp79
95 %arrayidx98 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp76
96 %i.1 = trunc i64 %indvar74 to i32
97 %cmp92 = icmp slt i32 %i.1, 128
98 br i1 %cmp92, label %for.body94, label %for.end239
100 for.body94: ; preds = %for.cond90
101 %tmp99 = load i16* %arrayidx98, align 8
102 %cmp103 = icmp eq i16 %tmp99, %b0.0.lcssa
103 br i1 %cmp103, label %lor.lhs.false, label %if.then
105 lor.lhs.false: ; preds = %for.body94
106 %tmp110 = load i16* %arrayidx109, align 2
107 %cmp114 = icmp eq i16 %tmp110, %b1.0.lcssa
108 br i1 %cmp114, label %lor.lhs.false116, label %if.then
110 lor.lhs.false116: ; preds = %lor.lhs.false
111 %tmp122 = load i16* %arrayidx121, align 4
112 %cmp126 = icmp eq i16 %tmp122, %b2.0.lcssa
113 br i1 %cmp126, label %lor.lhs.false128, label %if.then
115 lor.lhs.false128: ; preds = %lor.lhs.false116
116 %tmp134 = load i16* %arrayidx133, align 2
117 %cmp138 = icmp eq i16 %tmp134, %b3.0.lcssa
118 br i1 %cmp138, label %if.end, label %if.then
120 if.then: ; preds = %lor.lhs.false128, %lor.lhs.false116, %lor.lhs.false, %for.body94
121 call void @abort() noreturn nounwind
124 if.end: ; preds = %lor.lhs.false128
125 %tmp144 = load i16* %arrayidx143, align 8
126 %cmp148 = icmp eq i16 %tmp144, %b0.0.lcssa
127 br i1 %cmp148, label %lor.lhs.false150, label %if.then186
129 lor.lhs.false150: ; preds = %if.end
130 %tmp156 = load i16* %arrayidx155, align 2
131 %cmp160 = icmp eq i16 %tmp156, %b1.0.lcssa
132 br i1 %cmp160, label %lor.lhs.false162, label %if.then186
134 lor.lhs.false162: ; preds = %lor.lhs.false150
135 %tmp168 = load i16* %arrayidx167, align 4
136 %cmp172 = icmp eq i16 %tmp168, %b4.0.lcssa
137 br i1 %cmp172, label %lor.lhs.false174, label %if.then186
139 lor.lhs.false174: ; preds = %lor.lhs.false162
140 %tmp180 = load i16* %arrayidx179, align 2
141 %cmp184 = icmp eq i16 %tmp180, %b5.0.lcssa
142 br i1 %cmp184, label %if.end187, label %if.then186
144 if.then186: ; preds = %lor.lhs.false174, %lor.lhs.false162, %lor.lhs.false150, %if.end
145 call void @abort() noreturn nounwind
148 if.end187: ; preds = %lor.lhs.false174
149 %tmp192 = load i16* %arrayidx191, align 8
150 %cmp196 = icmp eq i16 %tmp192, %b2.0.lcssa
151 br i1 %cmp196, label %lor.lhs.false198, label %if.then234
153 lor.lhs.false198: ; preds = %if.end187
154 %tmp204 = load i16* %arrayidx203, align 2
155 %cmp208 = icmp eq i16 %tmp204, %b1.0.lcssa
156 br i1 %cmp208, label %lor.lhs.false210, label %if.then234
158 lor.lhs.false210: ; preds = %lor.lhs.false198
159 %tmp216 = load i16* %arrayidx215, align 4
160 %cmp220 = icmp eq i16 %tmp216, %b4.0.lcssa
161 br i1 %cmp220, label %lor.lhs.false222, label %if.then234
163 lor.lhs.false222: ; preds = %lor.lhs.false210
164 %tmp228 = load i16* %arrayidx227, align 2
165 %cmp232 = icmp eq i16 %tmp228, %b5.0.lcssa
166 br i1 %cmp232, label %if.end235, label %if.then234
168 if.then234: ; preds = %lor.lhs.false222, %lor.lhs.false210, %lor.lhs.false198, %if.end187
169 call void @abort() noreturn nounwind
172 if.end235: ; preds = %lor.lhs.false222
175 for.inc236: ; preds = %if.end235
176 %indvar.next75 = add i64 %indvar74, 1
179 for.end239: ; preds = %for.cond90
180 br label %for.cond240
182 for.cond240: ; preds = %for.inc362, %for.end239
183 %indvar57 = phi i64 [ %indvar.next58, %for.inc362 ], [ 0, %for.end239 ]
184 %b0.1 = phi i16 [ %b0.0.lcssa, %for.end239 ], [ %add247, %for.inc362 ]
185 %b1.1 = phi i16 [ %b1.0.lcssa, %for.end239 ], [ %add251, %for.inc362 ]
186 %b2.1 = phi i16 [ %b2.0.lcssa, %for.end239 ], [ %add255, %for.inc362 ]
187 %b3.1 = phi i16 [ %b3.0.lcssa, %for.end239 ], [ %add259, %for.inc362 ]
188 %b4.1 = phi i16 [ %b4.0.lcssa, %for.end239 ], [ %add263, %for.inc362 ]
189 %b5.1 = phi i16 [ %b5.0.lcssa, %for.end239 ], [ %add267, %for.inc362 ]
190 %b6.0 = phi i32 [ 0, %for.end239 ], [ %phitmp, %for.inc362 ]
191 %b7.0 = phi i32 [ 0, %for.end239 ], [ %phitmp10, %for.inc362 ]
192 %b8.0 = phi i32 [ 0, %for.end239 ], [ %phitmp12, %for.inc362 ]
193 %tmp59 = mul i64 %indvar57, 2
194 %arrayidx361 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp59
195 %tmp60 = add i64 %tmp59, 1
196 %arrayidx356 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp60
197 %tmp61 = mul i64 %indvar57, 8
198 %tmp62 = add i64 %tmp61, 7
199 %arrayidx350 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp62
200 %tmp63 = add i64 %tmp61, 6
201 %arrayidx344 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp63
202 %tmp64 = add i64 %tmp61, 5
203 %arrayidx338 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp64
204 %tmp65 = add i64 %tmp61, 4
205 %arrayidx332 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp65
206 %tmp66 = add i64 %tmp61, 3
207 %arrayidx326 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp66
208 %tmp67 = add i64 %tmp61, 2
209 %arrayidx320 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp67
210 %tmp68 = add i64 %tmp61, 1
211 %arrayidx314 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp68
212 %arrayidx308 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp61
213 %tmp69 = mul i64 %indvar57, 4
214 %tmp70 = add i64 %tmp69, 3
215 %arrayidx303 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp70
216 %tmp71 = add i64 %tmp69, 2
217 %arrayidx297 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp71
218 %tmp72 = add i64 %tmp69, 1
219 %arrayidx291 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp72
220 %arrayidx285 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp69
221 %exitcond = icmp ne i64 %indvar57, 128
222 br i1 %exitcond, label %for.body244, label %for.end365
224 for.body244: ; preds = %for.cond240
225 %add247 = add i16 %a0, 8
226 %add251 = add i16 %a1, 7
227 %add255 = add i16 %a2, 6
228 %add259 = add i16 %a3, 5
229 %add263 = add i16 %a4, 4
230 %add267 = add i16 %a5, 3
231 %conv270 = zext i16 %a6 to i32
232 %add271 = add nsw i32 %conv270, 2
233 %conv272 = trunc i32 %add271 to i16
234 %conv274 = zext i16 %a7 to i32
235 %add275 = add nsw i32 %conv274, 1
236 %conv276 = trunc i32 %add275 to i16
237 %conv278 = zext i16 %a8 to i32
238 %add279 = add nsw i32 %conv278, 9
239 %conv280 = trunc i32 %add279 to i16
240 store i16 %add247, i16* %arrayidx285, align 8
241 store i16 %add251, i16* %arrayidx291, align 2
242 store i16 %add255, i16* %arrayidx297, align 4
243 store i16 %add259, i16* %arrayidx303, align 2
244 store i16 %add247, i16* %arrayidx308, align 16
245 store i16 %add251, i16* %arrayidx314, align 2
246 store i16 %add263, i16* %arrayidx320, align 4
247 store i16 %add267, i16* %arrayidx326, align 2
248 store i16 %conv272, i16* %arrayidx332, align 8
249 store i16 %add255, i16* %arrayidx338, align 2
250 store i16 %conv276, i16* %arrayidx344, align 4
251 store i16 %conv280, i16* %arrayidx350, align 2
252 store i16 %a0, i16* %arrayidx356, align 2
253 store i16 %conv280, i16* %arrayidx361, align 4
256 for.inc362: ; preds = %for.body244
257 %phitmp = and i32 %add271, 65535
258 %phitmp10 = and i32 %add275, 65535
259 %phitmp12 = and i32 %add279, 65535
260 %indvar.next58 = add i64 %indvar57, 1
261 br label %for.cond240
263 for.end365: ; preds = %for.cond240
264 %b8.0.lcssa = phi i32 [ %b8.0, %for.cond240 ]
265 %b7.0.lcssa = phi i32 [ %b7.0, %for.cond240 ]
266 %b6.0.lcssa = phi i32 [ %b6.0, %for.cond240 ]
267 %b5.1.lcssa = phi i16 [ %b5.1, %for.cond240 ]
268 %b4.1.lcssa = phi i16 [ %b4.1, %for.cond240 ]
269 %b3.1.lcssa = phi i16 [ %b3.1, %for.cond240 ]
270 %b2.1.lcssa = phi i16 [ %b2.1, %for.cond240 ]
271 %b1.1.lcssa = phi i16 [ %b1.1, %for.cond240 ]
272 %b0.1.lcssa = phi i16 [ %b0.1, %for.cond240 ]
273 br label %for.cond366
275 for.cond366: ; preds = %for.inc539, %for.end365
276 %indvar = phi i64 [ %indvar.next, %for.inc539 ], [ 0, %for.end365 ]
277 %tmp = mul i64 %indvar, 2
278 %tmp43 = add i64 %tmp, 1
279 %arrayidx530 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp43
280 %arrayidx518 = getelementptr [1024 x i16]* %out3, i64 0, i64 %tmp
281 %tmp44 = mul i64 %indvar, 8
282 %tmp45 = add i64 %tmp44, 7
283 %arrayidx506 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp45
284 %tmp46 = add i64 %tmp44, 6
285 %arrayidx494 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp46
286 %tmp47 = add i64 %tmp44, 5
287 %arrayidx482 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp47
288 %tmp48 = add i64 %tmp44, 4
289 %arrayidx470 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp48
290 %tmp49 = add i64 %tmp44, 3
291 %arrayidx458 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp49
292 %tmp50 = add i64 %tmp44, 2
293 %arrayidx446 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp50
294 %tmp51 = add i64 %tmp44, 1
295 %arrayidx434 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp51
296 %arrayidx422 = getelementptr [1024 x i16]* %out2, i64 0, i64 %tmp44
297 %tmp52 = mul i64 %indvar, 4
298 %tmp53 = add i64 %tmp52, 3
299 %arrayidx410 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp53
300 %tmp54 = add i64 %tmp52, 2
301 %arrayidx398 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp54
302 %tmp55 = add i64 %tmp52, 1
303 %arrayidx386 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp55
304 %arrayidx374 = getelementptr [1024 x i16]* %out, i64 0, i64 %tmp52
305 %i.3 = trunc i64 %indvar to i32
306 %cmp368 = icmp slt i32 %i.3, 128
307 br i1 %cmp368, label %for.body370, label %for.end542
309 for.body370: ; preds = %for.cond366
310 %tmp375 = load i16* %arrayidx374, align 8
311 %cmp379 = icmp eq i16 %tmp375, %b0.1.lcssa
312 br i1 %cmp379, label %lor.lhs.false381, label %if.then417
314 lor.lhs.false381: ; preds = %for.body370
315 %tmp387 = load i16* %arrayidx386, align 2
316 %cmp391 = icmp eq i16 %tmp387, %b1.1.lcssa
317 br i1 %cmp391, label %lor.lhs.false393, label %if.then417
319 lor.lhs.false393: ; preds = %lor.lhs.false381
320 %tmp399 = load i16* %arrayidx398, align 4
321 %cmp403 = icmp eq i16 %tmp399, %b2.1.lcssa
322 br i1 %cmp403, label %lor.lhs.false405, label %if.then417
324 lor.lhs.false405: ; preds = %lor.lhs.false393
325 %tmp411 = load i16* %arrayidx410, align 2
326 %cmp415 = icmp eq i16 %tmp411, %b3.1.lcssa
327 br i1 %cmp415, label %if.end418, label %if.then417
329 if.then417: ; preds = %lor.lhs.false405, %lor.lhs.false393, %lor.lhs.false381, %for.body370
330 call void @abort() noreturn nounwind
333 if.end418: ; preds = %lor.lhs.false405
334 %tmp423 = load i16* %arrayidx422, align 16
335 %cmp427 = icmp eq i16 %tmp423, %b0.1.lcssa
336 br i1 %cmp427, label %lor.lhs.false429, label %if.then513
338 lor.lhs.false429: ; preds = %if.end418
339 %tmp435 = load i16* %arrayidx434, align 2
340 %cmp439 = icmp eq i16 %tmp435, %b1.1.lcssa
341 br i1 %cmp439, label %lor.lhs.false441, label %if.then513
343 lor.lhs.false441: ; preds = %lor.lhs.false429
344 %tmp447 = load i16* %arrayidx446, align 4
345 %cmp451 = icmp eq i16 %tmp447, %b4.1.lcssa
346 br i1 %cmp451, label %lor.lhs.false453, label %if.then513
348 lor.lhs.false453: ; preds = %lor.lhs.false441
349 %tmp459 = load i16* %arrayidx458, align 2
350 %cmp463 = icmp eq i16 %tmp459, %b5.1.lcssa
351 br i1 %cmp463, label %lor.lhs.false465, label %if.then513
353 lor.lhs.false465: ; preds = %lor.lhs.false453
354 %tmp471 = load i16* %arrayidx470, align 8
355 %conv472 = zext i16 %tmp471 to i32
356 %cmp475 = icmp eq i32 %conv472, %b6.0.lcssa
357 br i1 %cmp475, label %lor.lhs.false477, label %if.then513
359 lor.lhs.false477: ; preds = %lor.lhs.false465
360 %tmp483 = load i16* %arrayidx482, align 2
361 %cmp487 = icmp eq i16 %tmp483, %b2.1.lcssa
362 br i1 %cmp487, label %lor.lhs.false489, label %if.then513
364 lor.lhs.false489: ; preds = %lor.lhs.false477
365 %tmp495 = load i16* %arrayidx494, align 4
366 %conv496 = zext i16 %tmp495 to i32
367 %cmp499 = icmp eq i32 %conv496, %b7.0.lcssa
368 br i1 %cmp499, label %lor.lhs.false501, label %if.then513
370 lor.lhs.false501: ; preds = %lor.lhs.false489
371 %tmp507 = load i16* %arrayidx506, align 2
372 %conv508 = zext i16 %tmp507 to i32
373 %cmp511 = icmp eq i32 %conv508, %b8.0.lcssa
374 br i1 %cmp511, label %if.end514, label %if.then513
376 if.then513: ; preds = %lor.lhs.false501, %lor.lhs.false489, %lor.lhs.false477, %lor.lhs.false465, %lor.lhs.false453, %lor.lhs.false441, %lor.lhs.false429, %if.end418
377 call void @abort() noreturn nounwind
380 if.end514: ; preds = %lor.lhs.false501
381 %tmp519 = load i16* %arrayidx518, align 4
382 %conv520 = zext i16 %tmp519 to i32
383 %cmp523 = icmp eq i32 %conv520, %b8.0.lcssa
384 br i1 %cmp523, label %lor.lhs.false525, label %if.then537
386 lor.lhs.false525: ; preds = %if.end514
387 %tmp531 = load i16* %arrayidx530, align 2
388 %cmp535 = icmp eq i16 %tmp531, %a0
389 br i1 %cmp535, label %if.end538, label %if.then537
391 if.then537: ; preds = %lor.lhs.false525, %if.end514
392 call void @abort() noreturn nounwind
395 if.end538: ; preds = %lor.lhs.false525
398 for.inc539: ; preds = %if.end538
399 %indvar.next = add i64 %indvar, 1
400 br label %for.cond366
402 for.end542: ; preds = %for.cond366
406 declare void @abort() noreturn
408 define i32 @main() nounwind uwtable {
410 call void @check_vect()
411 %call = call i32 @main1(i16 zeroext 8, i16 zeroext 7, i16 zeroext 6, i16 zeroext 5, i16 zeroext 4, i16 zeroext 3, i16 zeroext 2, i16 zeroext 1, i16 zeroext 0)
415 define internal void @check_vect() nounwind uwtable noinline {
417 %a = alloca i32, align 4
418 %b = alloca i32, align 4
419 %c = alloca i32, align 4
420 %d = alloca i32, align 4
421 %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
422 %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
423 %tobool = icmp eq i32 %call1, 0
424 br i1 %tobool, label %if.then, label %lor.lhs.false
426 lor.lhs.false: ; preds = %entry
427 %tmp4 = load i32* %d, align 4
428 %and6 = and i32 %tmp4, 67108864
429 %cmp = icmp eq i32 %and6, 0
430 br i1 %cmp, label %if.then, label %if.end
432 if.then: ; preds = %entry, %lor.lhs.false
433 call void @exit(i32 0) noreturn nounwind
436 if.end: ; preds = %lor.lhs.false
437 %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
441 declare void (i32)* @signal(i32, void (i32)*) nounwind
443 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
445 call void @exit(i32 0) noreturn nounwind
448 return: ; No predecessors!
452 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
454 %and = and i32 %__level, -2147483648
455 %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
456 %cmp = icmp ult i32 %call, %__level
457 br i1 %cmp, label %if.then, label %if.end
459 if.then: ; preds = %entry
462 if.end: ; preds = %entry
463 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
464 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
465 %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
466 %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
467 %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
468 store i32 %asmresult, i32* %__eax, align 4
469 store i32 %asmresult8, i32* %__ebx, align 4
470 store i32 %asmresult9, i32* %__ecx, align 4
471 store i32 %asmresult10, i32* %__edx, align 4
474 return: ; preds = %if.end, %if.then
475 %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
479 declare void @exit(i32) noreturn
481 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
483 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
484 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
485 %tobool = icmp eq i32* %__sig, null
486 br i1 %tobool, label %if.end, label %if.then
488 if.then: ; preds = %entry
489 %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
490 store i32 %asmresult1, i32* %__sig, align 4
493 if.end: ; preds = %entry, %if.then
497 !0 = metadata !{i32 -2147341564, i32 -2147341556}
498 !1 = metadata !{i32 -2147341687, i32 -2147341679}