Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-all.ll
blobf280527688276881202676976266d3f440da0e57
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 {
28 entry:
29   br label %for.cond
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
47   unreachable
49 if.end:                                           ; preds = %for.body
50   br label %for.inc
52 for.inc:                                          ; preds = %if.end
53   %indvar.next = add i64 %indvar, 1
54   br label %for.cond
56 for.end:                                          ; preds = %for.cond
57   ret void
60 declare void @abort() noreturn
62 define void @fcheck_results(float* %a, float* %results) nounwind uwtable noinline {
63 entry:
64   br label %for.cond
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
82   unreachable
84 if.end:                                           ; preds = %for.body
85   br label %for.inc
87 for.inc:                                          ; preds = %if.end
88   %indvar.next = add i64 %indvar, 1
89   br label %for.cond
91 for.end:                                          ; preds = %for.cond
92   ret void
95 define void @fbar_mul(float* %a) nounwind uwtable noinline {
96 entry:
97   call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fmul_results, i64 0, i64 0))
98   ret void
101 define void @fbar_add(float* %a) nounwind uwtable noinline {
102 entry:
103   call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fadd_results, i64 0, i64 0))
104   ret void
107 define void @ibar_add(i32* %a) nounwind uwtable noinline {
108 entry:
109   call void @icheck_results(i32* %a, i32* getelementptr inbounds ([16 x i32]* @iadd_results, i64 0, i64 0))
110   ret void
113 define void @fbar1(float* %a) nounwind uwtable noinline {
114 entry:
115   call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fresults1, i64 0, i64 0))
116   ret void
119 define void @fbar2(float* %a) nounwind uwtable noinline {
120 entry:
121   call void @fcheck_results(float* %a, float* getelementptr inbounds ([16 x float]* @fresults2, i64 0, i64 0))
122   ret void
125 define i32 @main1() nounwind uwtable noinline {
126 entry:
127   br label %for.cond
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
139   br label %for.inc
141 for.inc:                                          ; preds = %for.body
142   %indvar.next55 = add i64 %indvar54, 1
143   br label %for.cond
145 for.end:                                          ; preds = %for.cond
146   br label %for.cond7
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
164   unreachable
166 if.end:                                           ; preds = %for.body10
167   br label %for.inc22
169 for.inc22:                                        ; preds = %if.end
170   %indvar.next52 = add i64 %indvar51, 1
171   br label %for.cond7
173 for.end25:                                        ; preds = %for.cond7
174   br label %for.cond26
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
189   br label %for.inc42
191 for.inc42:                                        ; preds = %for.body30
192   %indvar.next48 = add i64 %indvar47, 1
193   br label %for.cond26
195 for.end45:                                        ; preds = %for.cond26
196   call void @fbar_mul(float* getelementptr inbounds ([16 x float]* @a, i64 0, i64 0))
197   br label %for.cond46
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
229   br label %for.inc96
231 for.inc96:                                        ; preds = %for.body50
232   %indvar.next44 = add i64 %indvar43, 1
233   br label %for.cond46
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
270   br label %for.inc153
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
292   br label %for.inc171
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
319   unreachable
321 if.end193:                                        ; preds = %for.body179
322   br label %for.inc194
324 for.inc194:                                       ; preds = %if.end193
325   %indvar.next28 = add i64 %indvar27, 1
326   br label %for.cond175
328 for.end197:                                       ; preds = %for.cond175
329   br label %while.cond
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
342   br label %while.cond
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
363   unreachable
365 if.end228:                                        ; preds = %for.body216
366   br label %for.inc229
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
385   br label %for.inc247
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
410   unreachable
412 if.end266:                                        ; preds = %for.body254
413   br label %for.inc267
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
430   br label %for.inc279
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
453   unreachable
455 if.end296:                                        ; preds = %for.body287
456   br label %for.inc297
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
473   br label %for.inc309
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
496   unreachable
498 if.end326:                                        ; preds = %for.body317
499   br label %for.inc327
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
519   br label %for.inc344
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
545   unreachable
547 if.end365:                                        ; preds = %for.body352
548   br label %for.inc366
550 for.inc366:                                       ; preds = %if.end365
551   %indvar.next = add i64 %indvar, 1
552   br label %for.cond348
554 for.end369:                                       ; preds = %for.cond348
555   ret i32 0
558 define i32 @main() nounwind uwtable {
559 entry:
560   call void @check_vect()
561   %call = call i32 @main1()
562   ret i32 %call
565 define internal void @check_vect() nounwind uwtable noinline {
566 entry:
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
584   unreachable
586 if.end:                                           ; preds = %lor.lhs.false
587   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
588   ret void
591 declare void (i32)* @signal(i32, void (i32)*) nounwind
593 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
594 entry:
595   call void @exit(i32 0) noreturn nounwind
596   unreachable
598 return:                                           ; No predecessors!
599   ret void
602 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
603 entry:
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
610   br label %return
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
622   br label %return
624 return:                                           ; preds = %if.end, %if.then
625   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
626   ret i32 %retval.0
629 declare void @exit(i32) noreturn
631 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
632 entry:
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
641   br label %if.end
643 if.end:                                           ; preds = %entry, %if.then
644   ret i32 %asmresult
647 !0 = metadata !{i32 -2147339944, i32 -2147339936} 
648 !1 = metadata !{i32 -2147340067, i32 -2147340059} 
649 ; CHECK: define