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 vect-strided-u8-i8-gap4-unknown.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-strided-u8-i8-gap4-unknown.s > vect-strided-u8-i8-gap4-unknown.ll
6 ; ModuleID = 'vect-strided-u8-i8-gap4-unknown.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 %struct.s = type { i8, i8, i8, i8, i8, i8, i8, i8 }
12 define i32 @main1(%struct.s* %arr, i32 %n) nounwind uwtable noinline {
14 %res = alloca [160 x %struct.s], align 16
17 for.cond: ; preds = %for.inc, %entry
18 %indvar41 = phi i64 [ %indvar.next42, %for.inc ], [ 0, %entry ]
19 %h = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41, i32 7
20 %g = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41, i32 6
21 %f = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41, i32 5
22 %e = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41, i32 4
23 %d = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41, i32 3
24 %c = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41, i32 2
25 %b = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41, i32 1
26 %scevgep51 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar41
27 %a = bitcast %struct.s* %scevgep51 to i8*
28 %exitcond43 = icmp ne i64 %indvar41, 160
29 br i1 %exitcond43, label %for.body, label %for.end
31 for.body: ; preds = %for.cond
32 store i8 0, i8* %a, align 8
33 store i8 0, i8* %b, align 1
34 store i8 0, i8* %c, align 2
35 store i8 0, i8* %d, align 1
36 store i8 0, i8* %e, align 4
37 store i8 0, i8* %f, align 1
38 store i8 0, i8* %g, align 2
39 store i8 0, i8* %h, align 1
40 call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0
43 for.inc: ; preds = %for.body
44 %indvar.next42 = add i64 %indvar41, 1
47 for.end: ; preds = %for.cond
48 %tmp25 = icmp sgt i32 %n, 0
49 %smax = select i1 %tmp25, i32 %n, i32 0
50 %tmp26 = zext i32 %smax to i64
53 for.cond27: ; preds = %for.inc137, %for.end
54 %indvar23 = phi i64 [ %indvar.next24, %for.inc137 ], [ 0, %for.end ]
55 %g135 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23, i32 6
56 %h121 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23, i32 7
57 %e114 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23, i32 4
58 %f100 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23, i32 5
59 %b86 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23, i32 1
60 %d79 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23, i32 3
61 %scevgep33 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23
62 %a65 = bitcast %struct.s* %scevgep33 to i8*
63 %c43 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar23, i32 2
64 %c36 = getelementptr %struct.s* %arr, i64 %indvar23, i32 2
65 %b33 = getelementptr %struct.s* %arr, i64 %indvar23, i32 1
66 %e92 = getelementptr %struct.s* %arr, i64 %indvar23, i32 4
67 %f49 = getelementptr %struct.s* %arr, i64 %indvar23, i32 5
68 %exitcond = icmp ne i64 %indvar23, %tmp26
69 br i1 %exitcond, label %for.body31, label %for.end140
71 for.body31: ; preds = %for.cond27
72 %tmp34 = load i8* %b33, align 1
73 %tmp37 = load i8* %c36, align 1
74 %add = add i8 %tmp34, %tmp37
75 store i8 %add, i8* %c43, align 2
76 %tmp46 = load i8* %c36, align 1
77 %tmp50 = load i8* %f49, align 1
78 %add52 = add i8 %tmp46, %tmp50
79 %tmp58 = load i8* %b33, align 1
80 %add60 = add i8 %add52, %tmp58
81 store i8 %add60, i8* %a65, align 8
82 %tmp68 = load i8* %b33, align 1
83 %tmp72 = load i8* %c36, align 1
84 %add74 = add i8 %tmp68, %tmp72
85 store i8 %add74, i8* %d79, align 1
86 %tmp82 = load i8* %c36, align 1
87 store i8 %tmp82, i8* %b86, align 1
88 %tmp89 = load i8* %f49, align 1
89 %tmp93 = load i8* %e92, align 1
90 %add95 = add i8 %tmp89, %tmp93
91 store i8 %add95, i8* %f100, align 1
92 %tmp103 = load i8* %b33, align 1
93 %tmp107 = load i8* %e92, align 1
94 %add109 = add i8 %tmp103, %tmp107
95 store i8 %add109, i8* %e114, align 4
96 %tmp117 = load i8* %c36, align 1
97 store i8 %tmp117, i8* %h121, align 1
98 %tmp124 = load i8* %b33, align 1
99 %tmp128 = load i8* %c36, align 1
100 %add130 = add i8 %tmp124, %tmp128
101 store i8 %add130, i8* %g135, align 2
104 for.inc137: ; preds = %for.body31
105 %indvar.next24 = add i64 %indvar23, 1
108 for.end140: ; preds = %for.cond27
109 br label %for.cond141
111 for.cond141: ; preds = %for.inc329, %for.end140
112 %indvar7 = phi i64 [ %indvar.next8, %for.inc329 ], [ 0, %for.end140 ]
113 %c164 = getelementptr %struct.s* %arr, i64 %indvar7, i32 2
114 %b157 = getelementptr %struct.s* %arr, i64 %indvar7, i32 1
115 %g309 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7, i32 6
116 %h293 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7, i32 7
117 %e259 = getelementptr %struct.s* %arr, i64 %indvar7, i32 4
118 %e269 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7, i32 4
119 %f187 = getelementptr %struct.s* %arr, i64 %indvar7, i32 5
120 %f245 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7, i32 5
121 %b229 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7, i32 1
122 %d205 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7, i32 3
123 %scevgep19 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7
124 %a173 = bitcast %struct.s* %scevgep19 to i8*
125 %c150 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %indvar7, i32 2
126 %i.2 = trunc i64 %indvar7 to i32
127 %cmp144 = icmp slt i32 %i.2, %n
128 br i1 %cmp144, label %for.body146, label %for.end332
130 for.body146: ; preds = %for.cond141
131 %tmp151 = load i8* %c150, align 2
132 %conv152 = zext i8 %tmp151 to i32
133 %tmp158 = load i8* %b157, align 1
134 %conv159 = zext i8 %tmp158 to i32
135 %tmp165 = load i8* %c164, align 1
136 %conv166 = zext i8 %tmp165 to i32
137 %add167 = add nsw i32 %conv159, %conv166
138 %cmp168 = icmp eq i32 %conv152, %add167
139 br i1 %cmp168, label %lor.lhs.false, label %if.then
141 lor.lhs.false: ; preds = %for.body146
142 %tmp174 = load i8* %a173, align 8
143 %conv175 = zext i8 %tmp174 to i32
144 %tmp181 = load i8* %c164, align 1
145 %conv182 = zext i8 %tmp181 to i32
146 %tmp188 = load i8* %f187, align 1
147 %conv189 = zext i8 %tmp188 to i32
148 %add190 = add nsw i32 %conv182, %conv189
149 %tmp196 = load i8* %b157, align 1
150 %conv197 = zext i8 %tmp196 to i32
151 %add198 = add nsw i32 %add190, %conv197
152 %cmp199 = icmp eq i32 %conv175, %add198
153 br i1 %cmp199, label %lor.lhs.false201, label %if.then
155 lor.lhs.false201: ; preds = %lor.lhs.false
156 %tmp206 = load i8* %d205, align 1
157 %conv207 = zext i8 %tmp206 to i32
158 %tmp213 = load i8* %b157, align 1
159 %conv214 = zext i8 %tmp213 to i32
160 %tmp220 = load i8* %c164, align 1
161 %conv221 = zext i8 %tmp220 to i32
162 %add222 = add nsw i32 %conv214, %conv221
163 %cmp223 = icmp eq i32 %conv207, %add222
164 br i1 %cmp223, label %lor.lhs.false225, label %if.then
166 lor.lhs.false225: ; preds = %lor.lhs.false201
167 %tmp230 = load i8* %b229, align 1
168 %tmp237 = load i8* %c164, align 1
169 %cmp239 = icmp eq i8 %tmp230, %tmp237
170 br i1 %cmp239, label %lor.lhs.false241, label %if.then
172 lor.lhs.false241: ; preds = %lor.lhs.false225
173 %tmp246 = load i8* %f245, align 1
174 %conv247 = zext i8 %tmp246 to i32
175 %tmp253 = load i8* %f187, align 1
176 %conv254 = zext i8 %tmp253 to i32
177 %tmp260 = load i8* %e259, align 1
178 %conv261 = zext i8 %tmp260 to i32
179 %add262 = add nsw i32 %conv254, %conv261
180 %cmp263 = icmp eq i32 %conv247, %add262
181 br i1 %cmp263, label %lor.lhs.false265, label %if.then
183 lor.lhs.false265: ; preds = %lor.lhs.false241
184 %tmp270 = load i8* %e269, align 4
185 %conv271 = zext i8 %tmp270 to i32
186 %tmp277 = load i8* %b157, align 1
187 %conv278 = zext i8 %tmp277 to i32
188 %tmp284 = load i8* %e259, align 1
189 %conv285 = zext i8 %tmp284 to i32
190 %add286 = add nsw i32 %conv278, %conv285
191 %cmp287 = icmp eq i32 %conv271, %add286
192 br i1 %cmp287, label %lor.lhs.false289, label %if.then
194 lor.lhs.false289: ; preds = %lor.lhs.false265
195 %tmp294 = load i8* %h293, align 1
196 %tmp301 = load i8* %c164, align 1
197 %cmp303 = icmp eq i8 %tmp294, %tmp301
198 br i1 %cmp303, label %lor.lhs.false305, label %if.then
200 lor.lhs.false305: ; preds = %lor.lhs.false289
201 %tmp310 = load i8* %g309, align 2
202 %conv311 = zext i8 %tmp310 to i32
203 %tmp317 = load i8* %b157, align 1
204 %conv318 = zext i8 %tmp317 to i32
205 %tmp324 = load i8* %c164, align 1
206 %conv325 = zext i8 %tmp324 to i32
207 %add326 = add nsw i32 %conv318, %conv325
208 %cmp327 = icmp eq i32 %conv311, %add326
209 br i1 %cmp327, label %if.end, label %if.then
211 if.then: ; preds = %lor.lhs.false305, %lor.lhs.false289, %lor.lhs.false265, %lor.lhs.false241, %lor.lhs.false225, %lor.lhs.false201, %lor.lhs.false, %for.body146
212 call void @abort() noreturn nounwind
215 if.end: ; preds = %lor.lhs.false305
218 for.inc329: ; preds = %if.end
219 %indvar.next8 = add i64 %indvar7, 1
220 br label %for.cond141
222 for.end332: ; preds = %for.cond141
223 %tmp = sext i32 %n to i64
224 %tmp4 = zext i32 %n to i64
225 br label %for.cond334
227 for.cond334: ; preds = %for.inc524, %for.end332
228 %indvar = phi i64 [ %indvar.next, %for.inc524 ], [ 0, %for.end332 ]
229 %tmp1 = add i64 %tmp, %indvar
230 %c356 = getelementptr %struct.s* %arr, i64 %tmp1, i32 2
231 %b349 = getelementptr %struct.s* %arr, i64 %tmp1, i32 1
232 %g502 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1, i32 6
233 %h486 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1, i32 7
234 %e452 = getelementptr %struct.s* %arr, i64 %tmp1, i32 4
235 %e462 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1, i32 4
236 %f380 = getelementptr %struct.s* %arr, i64 %tmp1, i32 5
237 %f438 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1, i32 5
238 %b422 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1, i32 1
239 %d398 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1, i32 3
240 %scevgep = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1
241 %a366 = bitcast %struct.s* %scevgep to i8*
242 %c342 = getelementptr [160 x %struct.s]* %res, i64 0, i64 %tmp1, i32 2
243 %tmp5 = add i64 %tmp4, %indvar
244 %i.3 = trunc i64 %tmp5 to i32
245 %cmp336 = icmp slt i32 %i.3, 160
246 br i1 %cmp336, label %for.body338, label %for.end527
248 for.body338: ; preds = %for.cond334
249 %tmp343 = load i8* %c342, align 2
250 %conv344 = zext i8 %tmp343 to i32
251 %tmp350 = load i8* %b349, align 1
252 %conv351 = zext i8 %tmp350 to i32
253 %tmp357 = load i8* %c356, align 1
254 %conv358 = zext i8 %tmp357 to i32
255 %add359 = add nsw i32 %conv351, %conv358
256 %cmp360 = icmp eq i32 %conv344, %add359
257 br i1 %cmp360, label %if.then522, label %lor.lhs.false362
259 lor.lhs.false362: ; preds = %for.body338
260 %tmp367 = load i8* %a366, align 8
261 %conv368 = zext i8 %tmp367 to i32
262 %tmp374 = load i8* %c356, align 1
263 %conv375 = zext i8 %tmp374 to i32
264 %tmp381 = load i8* %f380, align 1
265 %conv382 = zext i8 %tmp381 to i32
266 %add383 = add nsw i32 %conv375, %conv382
267 %tmp389 = load i8* %b349, align 1
268 %conv390 = zext i8 %tmp389 to i32
269 %add391 = add nsw i32 %add383, %conv390
270 %cmp392 = icmp eq i32 %conv368, %add391
271 br i1 %cmp392, label %if.then522, label %lor.lhs.false394
273 lor.lhs.false394: ; preds = %lor.lhs.false362
274 %tmp399 = load i8* %d398, align 1
275 %conv400 = zext i8 %tmp399 to i32
276 %tmp406 = load i8* %b349, align 1
277 %conv407 = zext i8 %tmp406 to i32
278 %tmp413 = load i8* %c356, align 1
279 %conv414 = zext i8 %tmp413 to i32
280 %add415 = add nsw i32 %conv407, %conv414
281 %cmp416 = icmp eq i32 %conv400, %add415
282 br i1 %cmp416, label %if.then522, label %lor.lhs.false418
284 lor.lhs.false418: ; preds = %lor.lhs.false394
285 %tmp423 = load i8* %b422, align 1
286 %tmp430 = load i8* %c356, align 1
287 %cmp432 = icmp eq i8 %tmp423, %tmp430
288 br i1 %cmp432, label %if.then522, label %lor.lhs.false434
290 lor.lhs.false434: ; preds = %lor.lhs.false418
291 %tmp439 = load i8* %f438, align 1
292 %conv440 = zext i8 %tmp439 to i32
293 %tmp446 = load i8* %f380, align 1
294 %conv447 = zext i8 %tmp446 to i32
295 %tmp453 = load i8* %e452, align 1
296 %conv454 = zext i8 %tmp453 to i32
297 %add455 = add nsw i32 %conv447, %conv454
298 %cmp456 = icmp eq i32 %conv440, %add455
299 br i1 %cmp456, label %if.then522, label %lor.lhs.false458
301 lor.lhs.false458: ; preds = %lor.lhs.false434
302 %tmp463 = load i8* %e462, align 4
303 %conv464 = zext i8 %tmp463 to i32
304 %tmp470 = load i8* %b349, align 1
305 %conv471 = zext i8 %tmp470 to i32
306 %tmp477 = load i8* %e452, align 1
307 %conv478 = zext i8 %tmp477 to i32
308 %add479 = add nsw i32 %conv471, %conv478
309 %cmp480 = icmp eq i32 %conv464, %add479
310 br i1 %cmp480, label %if.then522, label %lor.lhs.false482
312 lor.lhs.false482: ; preds = %lor.lhs.false458
313 %tmp487 = load i8* %h486, align 1
314 %tmp494 = load i8* %c356, align 1
315 %cmp496 = icmp eq i8 %tmp487, %tmp494
316 br i1 %cmp496, label %if.then522, label %lor.lhs.false498
318 lor.lhs.false498: ; preds = %lor.lhs.false482
319 %tmp503 = load i8* %g502, align 2
320 %conv504 = zext i8 %tmp503 to i32
321 %tmp510 = load i8* %b349, align 1
322 %conv511 = zext i8 %tmp510 to i32
323 %tmp517 = load i8* %c356, align 1
324 %conv518 = zext i8 %tmp517 to i32
325 %add519 = add nsw i32 %conv511, %conv518
326 %cmp520 = icmp eq i32 %conv504, %add519
327 br i1 %cmp520, label %if.then522, label %if.end523
329 if.then522: ; preds = %lor.lhs.false498, %lor.lhs.false482, %lor.lhs.false458, %lor.lhs.false434, %lor.lhs.false418, %lor.lhs.false394, %lor.lhs.false362, %for.body338
330 call void @abort() noreturn nounwind
333 if.end523: ; preds = %lor.lhs.false498
336 for.inc524: ; preds = %if.end523
337 %indvar.next = add i64 %indvar, 1
338 br label %for.cond334
340 for.end527: ; preds = %for.cond334
344 declare void @abort() noreturn
346 define i32 @main() nounwind uwtable {
348 %arr = alloca [160 x %struct.s], align 16
349 call void @check_vect()
352 for.cond: ; preds = %for.inc, %entry
353 %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
354 %scevgep = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar
355 %a = bitcast %struct.s* %scevgep to i8*
356 %h = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar, i32 7
357 %g = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar, i32 6
358 %f = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar, i32 5
359 %e = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar, i32 4
360 %d = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar, i32 3
361 %c = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar, i32 2
362 %b = getelementptr [160 x %struct.s]* %arr, i64 0, i64 %indvar, i32 1
363 %i.0 = trunc i64 %indvar to i32
364 %cmp = icmp slt i32 %i.0, 160
365 br i1 %cmp, label %for.body, label %for.end
367 for.body: ; preds = %for.cond
368 store i8 5, i8* %a, align 8
369 store i8 6, i8* %b, align 1
370 store i8 17, i8* %c, align 2
371 store i8 3, i8* %d, align 1
372 store i8 16, i8* %e, align 4
373 store i8 16, i8* %f, align 1
374 store i8 3, i8* %g, align 2
375 store i8 56, i8* %h, align 1
376 %tmp27 = load i8* %a, align 8
377 %cmp28 = icmp eq i8 %tmp27, -78
378 br i1 %cmp28, label %if.then, label %if.end
380 if.then: ; preds = %for.body
381 call void @abort() noreturn nounwind
384 if.end: ; preds = %for.body
387 for.inc: ; preds = %if.end
388 %indvar.next = add i64 %indvar, 1
391 for.end: ; preds = %for.cond
392 %arraydecay = getelementptr inbounds [160 x %struct.s]* %arr, i64 0, i64 0
393 %call = call i32 @main1(%struct.s* %arraydecay, i32 158)
397 define internal void @check_vect() nounwind uwtable noinline {
399 %a = alloca i32, align 4
400 %b = alloca i32, align 4
401 %c = alloca i32, align 4
402 %d = alloca i32, align 4
403 %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
404 %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
405 %tobool = icmp eq i32 %call1, 0
406 br i1 %tobool, label %if.then, label %lor.lhs.false
408 lor.lhs.false: ; preds = %entry
409 %tmp4 = load i32* %d, align 4
410 %and6 = and i32 %tmp4, 67108864
411 %cmp = icmp eq i32 %and6, 0
412 br i1 %cmp, label %if.then, label %if.end
414 if.then: ; preds = %entry, %lor.lhs.false
415 call void @exit(i32 0) noreturn nounwind
418 if.end: ; preds = %lor.lhs.false
419 %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
423 declare void (i32)* @signal(i32, void (i32)*) nounwind
425 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
427 call void @exit(i32 0) noreturn nounwind
430 return: ; No predecessors!
434 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
436 %and = and i32 %__level, -2147483648
437 %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
438 %cmp = icmp ult i32 %call, %__level
439 br i1 %cmp, label %if.then, label %if.end
441 if.then: ; preds = %entry
444 if.end: ; preds = %entry
445 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !1
446 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
447 %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
448 %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
449 %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
450 store i32 %asmresult, i32* %__eax, align 4
451 store i32 %asmresult8, i32* %__ebx, align 4
452 store i32 %asmresult9, i32* %__ecx, align 4
453 store i32 %asmresult10, i32* %__edx, align 4
456 return: ; preds = %if.end, %if.then
457 %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
461 declare void @exit(i32) noreturn
463 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
465 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !2
466 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
467 %tobool = icmp eq i32* %__sig, null
468 br i1 %tobool, label %if.end, label %if.then
470 if.then: ; preds = %entry
471 %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
472 store i32 %asmresult1, i32* %__sig, align 4
475 if.end: ; preds = %entry, %if.then
479 !0 = metadata !{i32 640}
480 !1 = metadata !{i32 -2147243428, i32 -2147243420}
481 !2 = metadata !{i32 -2147243551, i32 -2147243543}