Add compile command to each testcase
[gcc-vect-testsuite.git] / slp-33.ll
blob7ba9cd0ce5f51cd5237510fd5241b93ea86dafa2
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-33.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-33.s > slp-33.ll
6 ; ModuleID = 'slp-33.s'
7 ; XFAIL: *
8 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"
9 target triple = "x86_64-unknown-linux-gnu"
11 @main1.in = internal unnamed_addr constant [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 {
14 entry:
15   %out = alloca [64 x i32], align 16
16   %in = alloca [64 x i32], align 16
17   %out2 = alloca [64 x float], align 16
18   %tmp = bitcast [64 x i32]* %in to i8*
19   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* bitcast ([64 x i32]* @main1.in to i8*), i64 256, i32 16, i1 false)
20   br label %for.cond
22 for.cond:                                         ; preds = %for.inc, %entry
23   %indvar54 = phi i64 [ %indvar.next55, %for.inc ], [ 0, %entry ]
24   %tmp57 = mul i64 %indvar54, 7
25   %tmp58 = add i64 %tmp57, 6
26   %arrayidx107 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp58
27   %tmp59 = add i64 %tmp57, 5
28   %arrayidx100 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp59
29   %tmp60 = add i64 %tmp57, 4
30   %arrayidx93 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp60
31   %tmp61 = add i64 %tmp57, 3
32   %arrayidx86 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp61
33   %tmp62 = add i64 %tmp57, 2
34   %arrayidx79 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp62
35   %tmp63 = add i64 %tmp57, 1
36   %arrayidx72 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp63
37   %arrayidx65 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp57
38   %arrayidx44 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp58
39   %arrayidx37 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp59
40   %arrayidx30 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp60
41   %arrayidx23 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp61
42   %arrayidx16 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp62
43   %arrayidx9 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp63
44   %arrayidx = getelementptr [64 x i32]* %in, i64 0, i64 %tmp57
45   %exitcond56 = icmp ne i64 %indvar54, 8
46   br i1 %exitcond56, label %for.body, label %for.end
48 for.body:                                         ; preds = %for.cond
49   %tmp4 = load i32* %arrayidx, align 4
50   %tmp10 = load i32* %arrayidx9, align 4
51   %tmp17 = load i32* %arrayidx16, align 4
52   %tmp24 = load i32* %arrayidx23, align 4
53   %tmp31 = load i32* %arrayidx30, align 4
54   %tmp38 = load i32* %arrayidx37, align 4
55   %tmp45 = load i32* %arrayidx44, align 4
56   %tmp13 = mul i32 %tmp4, 3
57   %add11 = shl i32 %tmp10, 1
58   %tmp14 = mul i32 %tmp17, 12
59   %tmp15 = mul i32 %tmp24, 5
60   %add32 = shl i32 %tmp31, 3
61   %add39 = shl i32 %tmp38, 2
62   %tmp16 = mul i32 %tmp45, 3
63   %sub = add i32 %tmp13, 13
64   store i32 %sub, i32* %arrayidx65, align 4
65   %sub67 = add i32 %add11, 9
66   store i32 %sub67, i32* %arrayidx72, align 4
67   %sub74 = add i32 %tmp14, 82
68   store i32 %sub74, i32* %arrayidx79, align 4
69   %sub81 = add i32 %tmp15, 39
70   store i32 %sub81, i32* %arrayidx86, align 4
71   %sub88 = add i32 %add32, 64
72   store i32 %sub88, i32* %arrayidx93, align 4
73   %sub95 = add i32 %add39, 33
74   store i32 %sub95, i32* %arrayidx100, align 4
75   %sub102 = add i32 %tmp16, 30
76   store i32 %sub102, i32* %arrayidx107, align 4
77   br label %for.inc
79 for.inc:                                          ; preds = %for.body
80   %indvar.next55 = add i64 %indvar54, 1
81   br label %for.cond
83 for.end:                                          ; preds = %for.cond
84   br label %for.cond109
86 for.cond109:                                      ; preds = %for.inc228, %for.end
87   %indvar43 = phi i64 [ %indvar.next44, %for.inc228 ], [ 0, %for.end ]
88   %tmp46 = mul i64 %indvar43, 7
89   %tmp47 = add i64 %tmp46, 6
90   %arrayidx222 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp47
91   %arrayidx216 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp47
92   %tmp48 = add i64 %tmp46, 5
93   %arrayidx205 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp48
94   %arrayidx199 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp48
95   %tmp49 = add i64 %tmp46, 4
96   %arrayidx188 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp49
97   %arrayidx182 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp49
98   %tmp50 = add i64 %tmp46, 3
99   %arrayidx171 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp50
100   %arrayidx165 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp50
101   %tmp51 = add i64 %tmp46, 2
102   %arrayidx154 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp51
103   %arrayidx148 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp51
104   %tmp52 = add i64 %tmp46, 1
105   %arrayidx137 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp52
106   %arrayidx131 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp52
107   %arrayidx121 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp46
108   %arrayidx116 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp46
109   %i.1 = trunc i64 %indvar43 to i32
110   %cmp111 = icmp slt i32 %i.1, 8
111   br i1 %cmp111, label %for.body112, label %for.end231
113 for.body112:                                      ; preds = %for.cond109
114   %tmp117 = load i32* %arrayidx116, align 4
115   %tmp122 = load i32* %arrayidx121, align 4
116   %tmp8 = mul i32 %tmp122, 3
117   %sub125 = add i32 %tmp8, 13
118   %cmp126 = icmp eq i32 %tmp117, %sub125
119   br i1 %cmp126, label %lor.lhs.false, label %if.then
121 lor.lhs.false:                                    ; preds = %for.body112
122   %tmp132 = load i32* %arrayidx131, align 4
123   %tmp138 = load i32* %arrayidx137, align 4
124   %add139 = shl i32 %tmp138, 1
125   %sub141 = add i32 %add139, 9
126   %cmp142 = icmp eq i32 %tmp132, %sub141
127   br i1 %cmp142, label %lor.lhs.false143, label %if.then
129 lor.lhs.false143:                                 ; preds = %lor.lhs.false
130   %tmp149 = load i32* %arrayidx148, align 4
131   %tmp155 = load i32* %arrayidx154, align 4
132   %tmp9 = mul i32 %tmp155, 12
133   %sub158 = add i32 %tmp9, 82
134   %cmp159 = icmp eq i32 %tmp149, %sub158
135   br i1 %cmp159, label %lor.lhs.false160, label %if.then
137 lor.lhs.false160:                                 ; preds = %lor.lhs.false143
138   %tmp166 = load i32* %arrayidx165, align 4
139   %tmp172 = load i32* %arrayidx171, align 4
140   %tmp11 = mul i32 %tmp172, 5
141   %sub175 = add i32 %tmp11, 39
142   %cmp176 = icmp eq i32 %tmp166, %sub175
143   br i1 %cmp176, label %lor.lhs.false177, label %if.then
145 lor.lhs.false177:                                 ; preds = %lor.lhs.false160
146   %tmp183 = load i32* %arrayidx182, align 4
147   %tmp189 = load i32* %arrayidx188, align 4
148   %add190 = shl i32 %tmp189, 3
149   %sub192 = add i32 %add190, 64
150   %cmp193 = icmp eq i32 %tmp183, %sub192
151   br i1 %cmp193, label %lor.lhs.false194, label %if.then
153 lor.lhs.false194:                                 ; preds = %lor.lhs.false177
154   %tmp200 = load i32* %arrayidx199, align 4
155   %tmp206 = load i32* %arrayidx205, align 4
156   %add207 = shl i32 %tmp206, 2
157   %sub209 = add i32 %add207, 33
158   %cmp210 = icmp eq i32 %tmp200, %sub209
159   br i1 %cmp210, label %lor.lhs.false211, label %if.then
161 lor.lhs.false211:                                 ; preds = %lor.lhs.false194
162   %tmp217 = load i32* %arrayidx216, align 4
163   %tmp223 = load i32* %arrayidx222, align 4
164   %tmp12 = mul i32 %tmp223, 3
165   %sub226 = add i32 %tmp12, 30
166   %cmp227 = icmp eq i32 %tmp217, %sub226
167   br i1 %cmp227, label %if.end, label %if.then
169 if.then:                                          ; preds = %lor.lhs.false211, %lor.lhs.false194, %lor.lhs.false177, %lor.lhs.false160, %lor.lhs.false143, %lor.lhs.false, %for.body112
170   call void @abort() noreturn nounwind
171   unreachable
173 if.end:                                           ; preds = %lor.lhs.false211
174   br label %for.inc228
176 for.inc228:                                       ; preds = %if.end
177   %indvar.next44 = add i64 %indvar43, 1
178   br label %for.cond109
180 for.end231:                                       ; preds = %for.cond109
181   br label %for.cond232
183 for.cond232:                                      ; preds = %for.inc273, %for.end231
184   %indvar36 = phi i64 [ %indvar.next37, %for.inc273 ], [ 0, %for.end231 ]
185   %tmp39 = mul i64 %indvar36, 3
186   %tmp40 = add i64 %tmp39, 2
187   %arrayidx272 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp40
188   %arrayidx264 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp40
189   %tmp41 = add i64 %tmp39, 1
190   %arrayidx259 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp41
191   %arrayidx251 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp41
192   %arrayidx246 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp39
193   %arrayidx239 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp39
194   %exitcond38 = icmp ne i64 %indvar36, 16
195   br i1 %exitcond38, label %for.body235, label %for.end276
197 for.body235:                                      ; preds = %for.cond232
198   %tmp240 = load i32* %arrayidx239, align 4
199   %tmp5 = mul i32 %tmp240, 3
200   %mul242 = add i32 %tmp5, 6
201   store i32 %mul242, i32* %arrayidx246, align 4
202   %tmp252 = load i32* %arrayidx251, align 4
203   %tmp6 = mul i32 %tmp252, 7
204   %mul254 = add i32 %tmp6, 14
205   store i32 %mul254, i32* %arrayidx259, align 4
206   %tmp265 = load i32* %arrayidx264, align 4
207   %tmp7 = mul i32 %tmp265, 3
208   %mul267 = add i32 %tmp7, 21
209   store i32 %mul267, i32* %arrayidx272, align 4
210   br label %for.inc273
212 for.inc273:                                       ; preds = %for.body235
213   %indvar.next37 = add i64 %indvar36, 1
214   br label %for.cond232
216 for.end276:                                       ; preds = %for.cond232
217   br label %for.cond277
219 for.cond277:                                      ; preds = %for.inc328, %for.end276
220   %indvar29 = phi i64 [ %indvar.next30, %for.inc328 ], [ 0, %for.end276 ]
221   %tmp32 = mul i64 %indvar29, 3
222   %tmp33 = add i64 %tmp32, 2
223   %arrayidx321 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp33
224   %arrayidx315 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp33
225   %tmp34 = add i64 %tmp32, 1
226   %arrayidx305 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp34
227   %arrayidx299 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp34
228   %arrayidx289 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp32
229   %arrayidx284 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp32
230   %i.3 = trunc i64 %indvar29 to i32
231   %cmp279 = icmp slt i32 %i.3, 16
232   br i1 %cmp279, label %for.body280, label %for.end331
234 for.body280:                                      ; preds = %for.cond277
235   %tmp285 = load i32* %arrayidx284, align 4
236   %tmp290 = load i32* %arrayidx289, align 4
237   %tmp1 = mul i32 %tmp290, 3
238   %mul292 = add i32 %tmp1, 6
239   %cmp293 = icmp eq i32 %tmp285, %mul292
240   br i1 %cmp293, label %lor.lhs.false294, label %if.then326
242 lor.lhs.false294:                                 ; preds = %for.body280
243   %tmp300 = load i32* %arrayidx299, align 4
244   %tmp306 = load i32* %arrayidx305, align 4
245   %tmp2 = mul i32 %tmp306, 7
246   %mul308 = add i32 %tmp2, 14
247   %cmp309 = icmp eq i32 %tmp300, %mul308
248   br i1 %cmp309, label %lor.lhs.false310, label %if.then326
250 lor.lhs.false310:                                 ; preds = %lor.lhs.false294
251   %tmp316 = load i32* %arrayidx315, align 4
252   %tmp322 = load i32* %arrayidx321, align 4
253   %tmp3 = mul i32 %tmp322, 3
254   %mul324 = add i32 %tmp3, 21
255   %cmp325 = icmp eq i32 %tmp316, %mul324
256   br i1 %cmp325, label %if.end327, label %if.then326
258 if.then326:                                       ; preds = %lor.lhs.false310, %lor.lhs.false294, %for.body280
259   call void @abort() noreturn nounwind
260   unreachable
262 if.end327:                                        ; preds = %lor.lhs.false310
263   br label %for.inc328
265 for.inc328:                                       ; preds = %if.end327
266   %indvar.next30 = add i64 %indvar29, 1
267   br label %for.cond277
269 for.end331:                                       ; preds = %for.cond277
270   br label %for.cond332
272 for.cond332:                                      ; preds = %for.inc375, %for.end331
273   %indvar22 = phi i64 [ %indvar.next23, %for.inc375 ], [ 0, %for.end331 ]
274   %tmp25 = mul i64 %indvar22, 3
275   %tmp26 = add i64 %tmp25, 2
276   %arrayidx374 = getelementptr [64 x float]* %out2, i64 0, i64 %tmp26
277   %arrayidx365 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp26
278   %tmp27 = add i64 %tmp25, 1
279   %arrayidx360 = getelementptr [64 x float]* %out2, i64 0, i64 %tmp27
280   %arrayidx351 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp27
281   %arrayidx346 = getelementptr [64 x float]* %out2, i64 0, i64 %tmp25
282   %arrayidx339 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp25
283   %exitcond = icmp ne i64 %indvar22, 16
284   br i1 %exitcond, label %for.body335, label %for.end378
286 for.body335:                                      ; preds = %for.cond332
287   %tmp340 = load i32* %arrayidx339, align 4
288   %mul341 = shl i32 %tmp340, 1
289   %add342 = add i32 %mul341, 5
290   %conv = uitofp i32 %add342 to float
291   store float %conv, float* %arrayidx346, align 4
292   %tmp352 = load i32* %arrayidx351, align 4
293   %mul353 = mul i32 %tmp352, 3
294   %add354 = add i32 %mul353, 7
295   %conv355 = uitofp i32 %add354 to float
296   store float %conv355, float* %arrayidx360, align 4
297   %tmp366 = load i32* %arrayidx365, align 4
298   %mul367 = mul i32 %tmp366, 5
299   %add368 = add i32 %mul367, 4
300   %conv369 = uitofp i32 %add368 to float
301   store float %conv369, float* %arrayidx374, align 4
302   br label %for.inc375
304 for.inc375:                                       ; preds = %for.body335
305   %indvar.next23 = add i64 %indvar22, 1
306   br label %for.cond332
308 for.end378:                                       ; preds = %for.cond332
309   br label %for.cond379
311 for.cond379:                                      ; preds = %for.inc437, %for.end378
312   %indvar = phi i64 [ %indvar.next, %for.inc437 ], [ 0, %for.end378 ]
313   %tmp18 = mul i64 %indvar, 3
314   %tmp19 = add i64 %tmp18, 2
315   %arrayidx428 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp19
316   %arrayidx422 = getelementptr [64 x float]* %out2, i64 0, i64 %tmp19
317   %tmp20 = add i64 %tmp18, 1
318   %arrayidx410 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp20
319   %arrayidx404 = getelementptr [64 x float]* %out2, i64 0, i64 %tmp20
320   %arrayidx392 = getelementptr [64 x i32]* %in, i64 0, i64 %tmp18
321   %arrayidx387 = getelementptr [64 x float]* %out2, i64 0, i64 %tmp18
322   %i.5 = trunc i64 %indvar to i32
323   %cmp381 = icmp slt i32 %i.5, 16
324   br i1 %cmp381, label %for.body383, label %for.end440
326 for.body383:                                      ; preds = %for.cond379
327   %tmp388 = load float* %arrayidx387, align 4
328   %tmp393 = load i32* %arrayidx392, align 4
329   %mul394 = shl i32 %tmp393, 1
330   %add395 = add i32 %mul394, 5
331   %conv396 = uitofp i32 %add395 to float
332   %cmp397 = fcmp une float %tmp388, %conv396
333   br i1 %cmp397, label %if.then435, label %lor.lhs.false399
335 lor.lhs.false399:                                 ; preds = %for.body383
336   %tmp405 = load float* %arrayidx404, align 4
337   %tmp411 = load i32* %arrayidx410, align 4
338   %mul412 = mul i32 %tmp411, 3
339   %add413 = add i32 %mul412, 7
340   %conv414 = uitofp i32 %add413 to float
341   %cmp415 = fcmp une float %tmp405, %conv414
342   br i1 %cmp415, label %if.then435, label %lor.lhs.false417
344 lor.lhs.false417:                                 ; preds = %lor.lhs.false399
345   %tmp423 = load float* %arrayidx422, align 4
346   %tmp429 = load i32* %arrayidx428, align 4
347   %mul430 = mul i32 %tmp429, 5
348   %add431 = add i32 %mul430, 4
349   %conv432 = uitofp i32 %add431 to float
350   %cmp433 = fcmp une float %tmp423, %conv432
351   br i1 %cmp433, label %if.then435, label %if.end436
353 if.then435:                                       ; preds = %lor.lhs.false417, %lor.lhs.false399, %for.body383
354   call void @abort() noreturn nounwind
355   unreachable
357 if.end436:                                        ; preds = %lor.lhs.false417
358   br label %for.inc437
360 for.inc437:                                       ; preds = %if.end436
361   %indvar.next = add i64 %indvar, 1
362   br label %for.cond379
364 for.end440:                                       ; preds = %for.cond379
365   ret i32 0
368 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
370 declare void @abort() noreturn
372 define i32 @main() nounwind uwtable {
373 entry:
374   call void @check_vect()
375   %call = call i32 @main1()
376   ret i32 0
379 define internal void @check_vect() nounwind uwtable noinline {
380 entry:
381   %a = alloca i32, align 4
382   %b = alloca i32, align 4
383   %c = alloca i32, align 4
384   %d = alloca i32, align 4
385   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
386   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
387   %tobool = icmp eq i32 %call1, 0
388   br i1 %tobool, label %if.then, label %lor.lhs.false
390 lor.lhs.false:                                    ; preds = %entry
391   %tmp4 = load i32* %d, align 4
392   %and6 = and i32 %tmp4, 67108864
393   %cmp = icmp eq i32 %and6, 0
394   br i1 %cmp, label %if.then, label %if.end
396 if.then:                                          ; preds = %entry, %lor.lhs.false
397   call void @exit(i32 0) noreturn nounwind
398   unreachable
400 if.end:                                           ; preds = %lor.lhs.false
401   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
402   ret void
405 declare void (i32)* @signal(i32, void (i32)*) nounwind
407 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
408 entry:
409   call void @exit(i32 0) noreturn nounwind
410   unreachable
412 return:                                           ; No predecessors!
413   ret void
416 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
417 entry:
418   %and = and i32 %__level, -2147483648
419   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
420   %cmp = icmp ult i32 %call, %__level
421   br i1 %cmp, label %if.then, label %if.end
423 if.then:                                          ; preds = %entry
424   br label %return
426 if.end:                                           ; preds = %entry
427   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
428   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
429   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
430   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
431   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
432   store i32 %asmresult, i32* %__eax, align 4
433   store i32 %asmresult8, i32* %__ebx, align 4
434   store i32 %asmresult9, i32* %__ecx, align 4
435   store i32 %asmresult10, i32* %__edx, align 4
436   br label %return
438 return:                                           ; preds = %if.end, %if.then
439   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
440   ret i32 %retval.0
443 declare void @exit(i32) noreturn
445 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
446 entry:
447   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
448   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
449   %tobool = icmp eq i32* %__sig, null
450   br i1 %tobool, label %if.end, label %if.then
452 if.then:                                          ; preds = %entry
453   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
454   store i32 %asmresult1, i32* %__sig, align 4
455   br label %if.end
457 if.end:                                           ; preds = %entry, %if.then
458   ret i32 %asmresult
461 !0 = metadata !{i32 -2147340985, i32 -2147340977} 
462 !1 = metadata !{i32 -2147341108, i32 -2147341100} 
463 ; CHECK: define