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-all.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-all.s > vect-all.ll
6 ; ModuleID = 'vect-all.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 @iadd_results = global [16 x i32] [i32 0, i32 6, i32 12, i32 18, i32 24, i32 30, i32 36, i32 42, i32 48, i32 54, i32 60, i32 66, i32 72, i32 78, i32 84, i32 90], align 16
11 @fadd_results = global [16 x float] [float 0.000000e+00, float 6.000000e+00, float 1.200000e+01, float 1.800000e+01, float 2.400000e+01, float 3.000000e+01, float 3.600000e+01, float 4.200000e+01, float 4.800000e+01, float 5.400000e+01, float 6.000000e+01, float 6.600000e+01, float 7.200000e+01, float 7.800000e+01, float 8.400000e+01, float 9.000000e+01], align 16
12 @fmul_results = global [16 x float] [float 0.000000e+00, float 3.000000e+00, float 1.200000e+01, float 2.700000e+01, float 4.800000e+01, float 7.500000e+01, float 1.080000e+02, float 1.470000e+02, float 1.920000e+02, float 2.430000e+02, float 3.000000e+02, float 3.630000e+02, float 4.320000e+02, float 5.070000e+02, float 5.880000e+02, float 6.750000e+02], align 16
13 @fresults1 = global [16 x float] [float 1.920000e+02, float 2.400000e+02, float 2.880000e+02, float 3.360000e+02, float 3.840000e+02, float 4.320000e+02, float 4.800000e+02, float 5.280000e+02, float 4.800000e+01, float 5.400000e+01, float 6.000000e+01, float 6.600000e+01, float 7.200000e+01, float 7.800000e+01, float 8.400000e+01, float 9.000000e+01], align 16
14 @fresults2 = global [16 x float] [float 0.000000e+00, float 6.000000e+00, float 1.200000e+01, float 1.800000e+01, float 2.400000e+01, float 3.000000e+01, float 3.600000e+01, float 4.200000e+01, float 0.000000e+00, float 5.400000e+01, float 1.200000e+02, float 1.980000e+02, float 2.880000e+02, float 3.900000e+02, float 5.040000e+02, float 6.300000e+02], align 16
15 @b = global [16 x float] [float 0.000000e+00, float 3.000000e+00, float 6.000000e+00, float 9.000000e+00, float 1.200000e+01, float 1.500000e+01, float 1.800000e+01, float 2.100000e+01, float 2.400000e+01, float 2.700000e+01, float 3.000000e+01, float 3.300000e+01, float 3.600000e+01, float 3.900000e+01, float 4.200000e+01, float 4.500000e+01], align 16
16 @c = global [16 x float] [float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00, float 8.000000e+00, float 9.000000e+00, float 1.000000e+01, float 1.100000e+01, float 1.200000e+01, float 1.300000e+01, float 1.400000e+01, float 1.500000e+01], align 16
17 @d = global [16 x float] [float 0.000000e+00, float 2.000000e+00, float 4.000000e+00, float 6.000000e+00, float 8.000000e+00, float 1.000000e+01, float 1.200000e+01, float 1.400000e+01, float 1.600000e+01, float 1.800000e+01, float 2.000000e+01, float 2.200000e+01, float 2.400000e+01, float 2.600000e+01, float 2.800000e+01, float 3.000000e+01], align 16
18 @ic = global [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45], align 16
19 @ib = global [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45], align 16
20 @cb = global [16 x i8] c"\00\03\06\09\0C\0F\12\15\18\1B\1E!$'*-", align 16
21 @ca = common global [16 x i8] zeroinitializer, align 16
22 @a = common global [16 x float] zeroinitializer, align 16
23 @e = common global [16 x float] zeroinitializer, align 16
24 @ia = common global [16 x i32] zeroinitializer, align 16
25 @sa = common global [16 x i16] zeroinitializer, align 16
27 define void @icheck_results(i32* %a, i32* %results) nounwind uwtable noinline {
31 for.cond: ; preds = %for.inc, %entry
32 %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
33 %arrayidx7 = getelementptr i32* %results, i64 %indvar
34 %arrayidx = getelementptr i32* %a, i64 %indvar
35 %i.0 = trunc i64 %indvar to i32
36 %cmp = icmp slt i32 %i.0, 16
37 br i1 %cmp, label %for.body, label %for.end
39 for.body: ; preds = %for.cond
40 %tmp3 = load i32* %arrayidx, align 4
41 %tmp8 = load i32* %arrayidx7, align 4
42 %cmp9 = icmp eq i32 %tmp3, %tmp8
43 br i1 %cmp9, label %if.end, label %if.then
45 if.then: ; preds = %for.body
46 call void @abort() noreturn nounwind
49 if.end: ; preds = %for.body
52 for.inc: ; preds = %if.end
53 %indvar.next = add i64 %indvar, 1
56 for.end: ; preds = %for.cond
60 declare void @abort() noreturn
62 define void @fcheck_results(float* %a, float* %results) nounwind uwtable noinline {
66 for.cond: ; preds = %for.inc, %entry
67 %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
68 %arrayidx7 = getelementptr float* %results, i64 %indvar
69 %arrayidx = getelementptr float* %a, i64 %indvar
70 %i.0 = trunc i64 %indvar to i32
71 %cmp = icmp slt i32 %i.0, 16
72 br i1 %cmp, label %for.body, label %for.end
74 for.body: ; preds = %for.cond
75 %tmp3 = load float* %arrayidx, align 4
76 %tmp8 = load float* %arrayidx7, align 4
77 %cmp9 = fcmp une float %tmp3, %tmp8
78 br i1 %cmp9, label %if.then, label %if.end
80 if.then: ; preds = %for.body
81 call void @abort() noreturn nounwind
84 if.end: ; preds = %for.body
87 for.inc: ; preds = %if.end
88 %indvar.next = add i64 %indvar, 1
91 for.end: ; preds = %for.cond
95 define void @fbar_mul(float* %a) nounwind uwtable noinline {
97 call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fmul_results, i64 0, i64 0))
101 define void @fbar_add(float* %a) nounwind uwtable noinline {
103 call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fadd_results, i64 0, i64 0))
107 define void @ibar_add(i32* %a) nounwind uwtable noinline {
109 call void @icheck_results(i32* %a, i32* getelementptr inbounds ([16 x i32]* @iadd_results, i64 0, i64 0))
113 define void @fbar1(float* %a) nounwind uwtable noinline {
115 call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fresults1, i64 0, i64 0))
119 define void @fbar2(float* %a) nounwind uwtable noinline {
121 call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fresults2, i64 0, i64 0))
125 define i32 @main1() nounwind uwtable noinline {
129 for.cond: ; preds = %for.inc, %entry
130 %indvar54 = phi i64 [ %indvar.next55, %for.inc ], [ 0, %entry ]
131 %arrayidx5 = getelementptr [16 x i8]* @ca, i64 0, i64 %indvar54
132 %arrayidx = getelementptr [16 x i8]* @cb, i64 0, i64 %indvar54
133 %exitcond56 = icmp ne i64 %indvar54, 16
134 br i1 %exitcond56, label %for.body, label %for.end
136 for.body: ; preds = %for.cond
137 %tmp2 = load i8* %arrayidx, align 1
138 store i8 %tmp2, i8* %arrayidx5, align 1
141 for.inc: ; preds = %for.body
142 %indvar.next55 = add i64 %indvar54, 1
145 for.end: ; preds = %for.cond
148 for.cond7: ; preds = %for.inc22, %for.end
149 %indvar51 = phi i64 [ %indvar.next52, %for.inc22 ], [ 0, %for.end ]
150 %arrayidx17 = getelementptr [16 x i8]* @cb, i64 0, i64 %indvar51
151 %arrayidx13 = getelementptr [16 x i8]* @ca, i64 0, i64 %indvar51
152 %i.1 = trunc i64 %indvar51 to i32
153 %cmp9 = icmp slt i32 %i.1, 16
154 br i1 %cmp9, label %for.body10, label %for.end25
156 for.body10: ; preds = %for.cond7
157 %tmp14 = load i8* %arrayidx13, align 1
158 %tmp18 = load i8* %arrayidx17, align 1
159 %cmp20 = icmp eq i8 %tmp14, %tmp18
160 br i1 %cmp20, label %if.end, label %if.then
162 if.then: ; preds = %for.body10
163 call void @abort() noreturn nounwind
166 if.end: ; preds = %for.body10
169 for.inc22: ; preds = %if.end
170 %indvar.next52 = add i64 %indvar51, 1
173 for.end25: ; preds = %for.cond7
176 for.cond26: ; preds = %for.inc42, %for.end25
177 %indvar47 = phi i64 [ %indvar.next48, %for.inc42 ], [ 0, %for.end25 ]
178 %arrayidx41 = getelementptr [16 x float]* @a, i64 0, i64 %indvar47
179 %arrayidx37 = getelementptr [16 x float]* @c, i64 0, i64 %indvar47
180 %arrayidx33 = getelementptr [16 x float]* @b, i64 0, i64 %indvar47
181 %exitcond49 = icmp ne i64 %indvar47, 16
182 br i1 %exitcond49, label %for.body30, label %for.end45
184 for.body30: ; preds = %for.cond26
185 %tmp34 = load float* %arrayidx33, align 4
186 %tmp38 = load float* %arrayidx37, align 4
187 %mul = fmul float %tmp34, %tmp38
188 store float %mul, float* %arrayidx41, align 4
191 for.inc42: ; preds = %for.body30
192 %indvar.next48 = add i64 %indvar47, 1
195 for.end45: ; preds = %for.cond26
196 call void @fbar_mul(float* getelementptr inbounds ([16 x float]* @a, i64 0, i64 0))
199 for.cond46: ; preds = %for.inc96, %for.end45
200 %indvar43 = phi i64 [ %indvar.next44, %for.inc96 ], [ 0, %for.end45 ]
201 %arrayidx95 = getelementptr [16 x i32]* @ia, i64 0, i64 %indvar43
202 %arrayidx90 = getelementptr [16 x i32]* @ic, i64 0, i64 %indvar43
203 %arrayidx86 = getelementptr [16 x i32]* @ib, i64 0, i64 %indvar43
204 %arrayidx83 = getelementptr [16 x float]* @e, i64 0, i64 %indvar43
205 %arrayidx61 = getelementptr [16 x float]* @d, i64 0, i64 %indvar43
206 %arrayidx57 = getelementptr [16 x float]* @c, i64 0, i64 %indvar43
207 %arrayidx53 = getelementptr [16 x float]* @b, i64 0, i64 %indvar43
208 %arrayidx66 = getelementptr [16 x float]* @a, i64 0, i64 %indvar43
209 %exitcond45 = icmp ne i64 %indvar43, 16
210 br i1 %exitcond45, label %for.body50, label %for.end99
212 for.body50: ; preds = %for.cond46
213 %tmp54 = load float* %arrayidx53, align 4
214 %tmp58 = load float* %arrayidx57, align 4
215 %add = fadd float %tmp54, %tmp58
216 %tmp62 = load float* %arrayidx61, align 4
217 %add63 = fadd float %add, %tmp62
218 store float %add63, float* %arrayidx66, align 4
219 %tmp70 = load float* %arrayidx53, align 4
220 %tmp74 = load float* %arrayidx57, align 4
221 %add75 = fadd float %tmp70, %tmp74
222 %tmp79 = load float* %arrayidx61, align 4
223 %add80 = fadd float %add75, %tmp79
224 store float %add80, float* %arrayidx83, align 4
225 %tmp87 = load i32* %arrayidx86, align 4
226 %tmp91 = load i32* %arrayidx90, align 4
227 %add92 = add nsw i32 %tmp87, %tmp91
228 store i32 %add92, i32* %arrayidx95, align 4
231 for.inc96: ; preds = %for.body50
232 %indvar.next44 = add i64 %indvar43, 1
235 for.end99: ; preds = %for.cond46
236 call void @ibar_add(i32* getelementptr inbounds ([16 x i32]* @ia, i64 0, i64 0))
237 call void @fbar_add(float* getelementptr inbounds ([16 x float]* @a, i64 0, i64 0))
238 call void @fbar_add(float* getelementptr inbounds ([16 x float]* @e, i64 0, i64 0))
239 br label %for.cond100
241 for.cond100: ; preds = %for.inc153, %for.end99
242 %indvar38 = phi i64 [ %indvar.next39, %for.inc153 ], [ 0, %for.end99 ]
243 %tmp41 = add i64 %indvar38, 8
244 %arrayidx152 = getelementptr [16 x float]* @e, i64 0, i64 %tmp41
245 %arrayidx122 = getelementptr [16 x float]* @c, i64 0, i64 %indvar38
246 %arrayidx108 = getelementptr [16 x float]* @b, i64 0, i64 %tmp41
247 %arrayidx113 = getelementptr [16 x float]* @c, i64 0, i64 %tmp41
248 %arrayidx118 = getelementptr [16 x float]* @b, i64 0, i64 %indvar38
249 %arrayidx127 = getelementptr [16 x float]* @a, i64 0, i64 %indvar38
250 %exitcond40 = icmp ne i64 %indvar38, 8
251 br i1 %exitcond40, label %for.body104, label %for.end156
253 for.body104: ; preds = %for.cond100
254 %tmp109 = load float* %arrayidx108, align 4
255 %tmp114 = load float* %arrayidx113, align 4
256 %mul115 = fmul float %tmp109, %tmp114
257 %tmp119 = load float* %arrayidx118, align 4
258 %tmp123 = load float* %arrayidx122, align 4
259 %mul124 = fmul float %tmp119, %tmp123
260 %sub = fsub float %mul115, %mul124
261 store float %sub, float* %arrayidx127, align 4
262 %tmp131 = load float* %arrayidx118, align 4
263 %tmp136 = load float* %arrayidx113, align 4
264 %mul137 = fmul float %tmp131, %tmp136
265 %tmp142 = load float* %arrayidx108, align 4
266 %tmp146 = load float* %arrayidx122, align 4
267 %mul147 = fmul float %tmp142, %tmp146
268 %add148 = fadd float %mul137, %mul147
269 store float %add148, float* %arrayidx152, align 4
272 for.inc153: ; preds = %for.body104
273 %indvar.next39 = add i64 %indvar38, 1
274 br label %for.cond100
276 for.end156: ; preds = %for.cond100
277 call void @fbar1(float* getelementptr inbounds ([16 x float]* @a, i64 0, i64 0))
278 call void @fbar2(float* getelementptr inbounds ([16 x float]* @e, i64 0, i64 0))
279 br label %for.cond157
281 for.cond157: ; preds = %for.inc171, %for.end156
282 %indvar31 = phi i64 [ %indvar.next32, %for.inc171 ], [ 0, %for.end156 ]
283 %arrayidx165 = getelementptr [16 x float]* @b, i64 0, i64 %indvar31
284 %tmp37 = add i64 %indvar31, 4
285 %arrayidx170 = getelementptr [16 x float]* @a, i64 0, i64 %tmp37
286 %exitcond33 = icmp ne i64 %indvar31, 12
287 br i1 %exitcond33, label %for.body161, label %for.end174
289 for.body161: ; preds = %for.cond157
290 %tmp166 = load float* %arrayidx165, align 4
291 store float %tmp166, float* %arrayidx170, align 4
294 for.inc171: ; preds = %for.body161
295 %indvar.next32 = add i64 %indvar31, 1
296 br label %for.cond157
298 for.end174: ; preds = %for.cond157
299 br label %for.cond175
301 for.cond175: ; preds = %for.inc194, %for.end174
302 %indvar27 = phi i64 [ %indvar.next28, %for.inc194 ], [ 0, %for.end174 ]
303 %arrayidx188 = getelementptr [16 x float]* @b, i64 0, i64 %indvar27
304 %tmp = add i64 %indvar27, 1
305 %i.6 = trunc i64 %tmp to i32
306 %tmp30 = add i64 %indvar27, 4
307 %arrayidx183 = getelementptr [16 x float]* @a, i64 0, i64 %tmp30
308 %cmp177 = icmp slt i32 %i.6, 13
309 br i1 %cmp177, label %for.body179, label %for.end197
311 for.body179: ; preds = %for.cond175
312 %tmp184 = load float* %arrayidx183, align 4
313 %tmp189 = load float* %arrayidx188, align 4
314 %cmp190 = fcmp une float %tmp184, %tmp189
315 br i1 %cmp190, label %if.then192, label %if.end193
317 if.then192: ; preds = %for.body179
318 call void @abort() noreturn nounwind
321 if.end193: ; preds = %for.body179
324 for.inc194: ; preds = %if.end193
325 %indvar.next28 = add i64 %indvar27, 1
326 br label %for.cond175
328 for.end197: ; preds = %for.cond175
331 while.cond: ; preds = %while.body, %for.end197
332 %indvar23 = phi i64 [ %indvar.next24, %while.body ], [ 0, %for.end197 ]
333 %arrayidx207 = getelementptr [16 x float]* @a, i64 0, i64 %indvar23
334 %arrayidx203 = getelementptr [16 x float]* @c, i64 0, i64 %indvar23
335 %exitcond25 = icmp ne i64 %indvar23, 16
336 br i1 %exitcond25, label %while.body, label %while.end
338 while.body: ; preds = %while.cond
339 %tmp204 = load float* %arrayidx203, align 4
340 store float %tmp204, float* %arrayidx207, align 4
341 %indvar.next24 = add i64 %indvar23, 1
344 while.end: ; preds = %while.cond
345 br label %for.cond212
347 for.cond212: ; preds = %for.inc229, %while.end
348 %indvar21 = phi i64 [ %indvar.next22, %for.inc229 ], [ 0, %while.end ]
349 %arrayidx223 = getelementptr [16 x float]* @c, i64 0, i64 %indvar21
350 %arrayidx219 = getelementptr [16 x float]* @a, i64 0, i64 %indvar21
351 %i.8 = trunc i64 %indvar21 to i32
352 %cmp214 = icmp slt i32 %i.8, 16
353 br i1 %cmp214, label %for.body216, label %for.end232
355 for.body216: ; preds = %for.cond212
356 %tmp220 = load float* %arrayidx219, align 4
357 %tmp224 = load float* %arrayidx223, align 4
358 %cmp225 = fcmp une float %tmp220, %tmp224
359 br i1 %cmp225, label %if.then227, label %if.end228
361 if.then227: ; preds = %for.body216
362 call void @abort() noreturn nounwind
365 if.end228: ; preds = %for.body216
368 for.inc229: ; preds = %if.end228
369 %indvar.next22 = add i64 %indvar21, 1
370 br label %for.cond212
372 for.end232: ; preds = %for.cond212
373 br label %for.cond233
375 for.cond233: ; preds = %for.inc247, %for.end232
376 %indvar15 = phi i64 [ %indvar.next16, %for.inc247 ], [ 0, %for.end232 ]
377 %arrayidx246 = getelementptr [16 x float]* @a, i64 0, i64 %indvar15
378 %arrayidx241 = getelementptr [16 x float]* @d, i64 0, i64 %indvar15
379 %exitcond17 = icmp ne i64 %indvar15, 16
380 br i1 %exitcond17, label %for.body237, label %for.end249
382 for.body237: ; preds = %for.cond233
383 %tmp242 = load float* %arrayidx241, align 4
384 store float %tmp242, float* %arrayidx246, align 4
387 for.inc247: ; preds = %for.body237
388 %indvar.next16 = add i64 %indvar15, 1
389 br label %for.cond233
391 for.end249: ; preds = %for.cond233
392 br label %for.cond250
394 for.cond250: ; preds = %for.inc267, %for.end249
395 %indvar13 = phi i64 [ %indvar.next14, %for.inc267 ], [ 0, %for.end249 ]
396 %arrayidx261 = getelementptr [16 x float]* @d, i64 0, i64 %indvar13
397 %arrayidx257 = getelementptr [16 x float]* @a, i64 0, i64 %indvar13
398 %i.10 = trunc i64 %indvar13 to i32
399 %cmp252 = icmp slt i32 %i.10, 16
400 br i1 %cmp252, label %for.body254, label %for.end270
402 for.body254: ; preds = %for.cond250
403 %tmp258 = load float* %arrayidx257, align 4
404 %tmp262 = load float* %arrayidx261, align 4
405 %cmp263 = fcmp une float %tmp258, %tmp262
406 br i1 %cmp263, label %if.then265, label %if.end266
408 if.then265: ; preds = %for.body254
409 call void @abort() noreturn nounwind
412 if.end266: ; preds = %for.body254
415 for.inc267: ; preds = %if.end266
416 %indvar.next14 = add i64 %indvar13, 1
417 br label %for.cond250
419 for.end270: ; preds = %for.cond250
420 br label %for.cond271
422 for.cond271: ; preds = %for.inc279, %for.end270
423 %indvar10 = phi i64 [ %indvar.next11, %for.inc279 ], [ 0, %for.end270 ]
424 %arrayidx278 = getelementptr [16 x float]* @a, i64 0, i64 %indvar10
425 %exitcond12 = icmp ne i64 %indvar10, 16
426 br i1 %exitcond12, label %for.body275, label %for.end282
428 for.body275: ; preds = %for.cond271
429 store float 5.000000e+00, float* %arrayidx278, align 4
432 for.inc279: ; preds = %for.body275
433 %indvar.next11 = add i64 %indvar10, 1
434 br label %for.cond271
436 for.end282: ; preds = %for.cond271
437 br label %for.cond283
439 for.cond283: ; preds = %for.inc297, %for.end282
440 %indvar8 = phi i64 [ %indvar.next9, %for.inc297 ], [ 0, %for.end282 ]
441 %arrayidx290 = getelementptr [16 x float]* @a, i64 0, i64 %indvar8
442 %i.12 = trunc i64 %indvar8 to i32
443 %cmp285 = icmp slt i32 %i.12, 16
444 br i1 %cmp285, label %for.body287, label %for.end300
446 for.body287: ; preds = %for.cond283
447 %tmp291 = load float* %arrayidx290, align 4
448 %cmp293 = fcmp une float %tmp291, 5.000000e+00
449 br i1 %cmp293, label %if.then295, label %if.end296
451 if.then295: ; preds = %for.body287
452 call void @abort() noreturn nounwind
455 if.end296: ; preds = %for.body287
458 for.inc297: ; preds = %if.end296
459 %indvar.next9 = add i64 %indvar8, 1
460 br label %for.cond283
462 for.end300: ; preds = %for.cond283
463 br label %for.cond301
465 for.cond301: ; preds = %for.inc309, %for.end300
466 %indvar5 = phi i64 [ %indvar.next6, %for.inc309 ], [ 0, %for.end300 ]
467 %arrayidx308 = getelementptr [16 x i16]* @sa, i64 0, i64 %indvar5
468 %exitcond7 = icmp ne i64 %indvar5, 16
469 br i1 %exitcond7, label %for.body305, label %for.end312
471 for.body305: ; preds = %for.cond301
472 store i16 5, i16* %arrayidx308, align 2
475 for.inc309: ; preds = %for.body305
476 %indvar.next6 = add i64 %indvar5, 1
477 br label %for.cond301
479 for.end312: ; preds = %for.cond301
480 br label %for.cond313
482 for.cond313: ; preds = %for.inc327, %for.end312
483 %indvar3 = phi i64 [ %indvar.next4, %for.inc327 ], [ 0, %for.end312 ]
484 %arrayidx320 = getelementptr [16 x i16]* @sa, i64 0, i64 %indvar3
485 %i.14 = trunc i64 %indvar3 to i32
486 %cmp315 = icmp slt i32 %i.14, 16
487 br i1 %cmp315, label %for.body317, label %for.end330
489 for.body317: ; preds = %for.cond313
490 %tmp321 = load i16* %arrayidx320, align 2
491 %cmp323 = icmp eq i16 %tmp321, 5
492 br i1 %cmp323, label %if.end326, label %if.then325
494 if.then325: ; preds = %for.body317
495 call void @abort() noreturn nounwind
498 if.end326: ; preds = %for.body317
501 for.inc327: ; preds = %if.end326
502 %indvar.next4 = add i64 %indvar3, 1
503 br label %for.cond313
505 for.end330: ; preds = %for.cond313
506 br label %for.cond331
508 for.cond331: ; preds = %for.inc344, %for.end330
509 %indvar1 = phi i64 [ %indvar.next2, %for.inc344 ], [ 0, %for.end330 ]
510 %arrayidx343 = getelementptr [16 x i32]* @ia, i64 0, i64 %indvar1
511 %arrayidx338 = getelementptr [16 x i32]* @ib, i64 0, i64 %indvar1
512 %exitcond = icmp ne i64 %indvar1, 16
513 br i1 %exitcond, label %for.body335, label %for.end347
515 for.body335: ; preds = %for.cond331
516 %tmp339 = load i32* %arrayidx338, align 4
517 %add340 = add nsw i32 %tmp339, 5
518 store i32 %add340, i32* %arrayidx343, align 4
521 for.inc344: ; preds = %for.body335
522 %indvar.next2 = add i64 %indvar1, 1
523 br label %for.cond331
525 for.end347: ; preds = %for.cond331
526 br label %for.cond348
528 for.cond348: ; preds = %for.inc366, %for.end347
529 %indvar = phi i64 [ %indvar.next, %for.inc366 ], [ 0, %for.end347 ]
530 %arrayidx359 = getelementptr [16 x i32]* @ib, i64 0, i64 %indvar
531 %arrayidx355 = getelementptr [16 x i32]* @ia, i64 0, i64 %indvar
532 %i.16 = trunc i64 %indvar to i32
533 %cmp350 = icmp slt i32 %i.16, 16
534 br i1 %cmp350, label %for.body352, label %for.end369
536 for.body352: ; preds = %for.cond348
537 %tmp356 = load i32* %arrayidx355, align 4
538 %tmp360 = load i32* %arrayidx359, align 4
539 %add361 = add nsw i32 %tmp360, 5
540 %cmp362 = icmp eq i32 %tmp356, %add361
541 br i1 %cmp362, label %if.end365, label %if.then364
543 if.then364: ; preds = %for.body352
544 call void @abort() noreturn nounwind
547 if.end365: ; preds = %for.body352
550 for.inc366: ; preds = %if.end365
551 %indvar.next = add i64 %indvar, 1
552 br label %for.cond348
554 for.end369: ; preds = %for.cond348
558 define i32 @main() nounwind uwtable {
560 call void @check_vect()
561 %call = call i32 @main1()
565 define internal void @check_vect() nounwind uwtable noinline {
567 %a = alloca i32, align 4
568 %b = alloca i32, align 4
569 %c = alloca i32, align 4
570 %d = alloca i32, align 4
571 %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
572 %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
573 %tobool = icmp eq i32 %call1, 0
574 br i1 %tobool, label %if.then, label %lor.lhs.false
576 lor.lhs.false: ; preds = %entry
577 %tmp4 = load i32* %d, align 4
578 %and6 = and i32 %tmp4, 67108864
579 %cmp = icmp eq i32 %and6, 0
580 br i1 %cmp, label %if.then, label %if.end
582 if.then: ; preds = %entry, %lor.lhs.false
583 call void @exit(i32 0) noreturn nounwind
586 if.end: ; preds = %lor.lhs.false
587 %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
591 declare void (i32)* @signal(i32, void (i32)*) nounwind
593 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
595 call void @exit(i32 0) noreturn nounwind
598 return: ; No predecessors!
602 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
604 %and = and i32 %__level, -2147483648
605 %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
606 %cmp = icmp ult i32 %call, %__level
607 br i1 %cmp, label %if.then, label %if.end
609 if.then: ; preds = %entry
612 if.end: ; preds = %entry
613 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
614 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
615 %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
616 %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
617 %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
618 store i32 %asmresult, i32* %__eax, align 4
619 store i32 %asmresult8, i32* %__ebx, align 4
620 store i32 %asmresult9, i32* %__ecx, align 4
621 store i32 %asmresult10, i32* %__edx, align 4
624 return: ; preds = %if.end, %if.then
625 %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
629 declare void @exit(i32) noreturn
631 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
633 %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
634 %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
635 %tobool = icmp eq i32* %__sig, null
636 br i1 %tobool, label %if.end, label %if.then
638 if.then: ; preds = %entry
639 %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
640 store i32 %asmresult1, i32* %__sig, align 4
643 if.end: ; preds = %entry, %if.then
647 !0 = metadata !{i32 -2147339944, i32 -2147339936}
648 !1 = metadata !{i32 -2147340067, i32 -2147340059}