Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-cond-3.ll
blob5106202ee20d21a88478618f7530cbd6c8d16f88
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-cond-3.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-cond-3.s > vect-cond-3.ll
6 ; ModuleID = 'vect-cond-3.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 @c = global [16 x i32] [i32 3, i32 2, i32 1, i32 10, i32 1, i32 42, i32 3, i32 4, i32 50, i32 9, i32 32, i32 8, i32 11, i32 10, i32 1, i32 2], align 16
11 @a = global [17 x i32] [i32 0, i32 16, i32 32, i32 48, i32 64, i32 128, i32 256, i32 512, i32 0, i32 16, i32 32, i32 48, i32 64, i32 128, i32 256, i32 512, i32 1024], align 16
12 @b = global [17 x i32] [i32 17, i32 16, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1], align 16
13 @check_result_a = global [32 x i32] [i32 1024, i32 1024, i32 1024, i32 256, i32 256, i32 256, i32 256, i32 256, i32 256, i32 256, i32 256, i32 128, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48], align 16
14 @check_result_b = global [32 x i32] [i32 17, i32 17, i32 2, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1], align 16
15 @x_in = common global [32 x i32] zeroinitializer, align 16
16 @x_out_a = common global [32 x i32] zeroinitializer, align 16
17 @x_out_b = common global [32 x i32] zeroinitializer, align 16
19 define void @foo() nounwind uwtable noinline {
20 entry:
21   br label %for.cond
23 for.cond:                                         ; preds = %for.inc44, %entry
24   %indvar2 = phi i64 [ %indvar.next3, %for.inc44 ], [ 0, %entry ]
25   %arrayidx43 = getelementptr [32 x i32]* @x_out_b, i64 0, i64 %indvar2
26   %arrayidx39 = getelementptr [32 x i32]* @x_out_a, i64 0, i64 %indvar2
27   %arrayidx = getelementptr [32 x i32]* @x_in, i64 0, i64 %indvar2
28   %exitcond4 = icmp ne i64 %indvar2, 32
29   br i1 %exitcond4, label %for.body, label %for.end47
31 for.body:                                         ; preds = %for.cond
32   %tmp2 = load i32* %arrayidx, align 4
33   %tmp3 = load i32* getelementptr inbounds ([17 x i32]* @a, i64 0, i64 0), align 16
34   %tmp4 = load i32* getelementptr inbounds ([17 x i32]* @b, i64 0, i64 0), align 16
35   br label %for.cond5
37 for.cond5:                                        ; preds = %for.inc, %for.body
38   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %for.body ]
39   %curr_a.0 = phi i32 [ %tmp3, %for.body ], [ %cond, %for.inc ]
40   %curr_b.0 = phi i32 [ %tmp4, %for.body ], [ %cond34, %for.inc ]
41   %tmp = add i64 %indvar, 1
42   %arrayidx22 = getelementptr [17 x i32]* @b, i64 0, i64 %tmp
43   %arrayidx17 = getelementptr [17 x i32]* @a, i64 0, i64 %tmp
44   %arrayidx12 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar
45   %exitcond = icmp ne i64 %indvar, 16
46   br i1 %exitcond, label %for.body8, label %for.end
48 for.body8:                                        ; preds = %for.cond5
49   %tmp13 = load i32* %arrayidx12, align 4
50   %cmp14 = icmp sgt i32 %tmp2, %tmp13
51   %tmp23 = load i32* %arrayidx22, align 4
52   br i1 %cmp14, label %cond.true, label %cond.false
54 cond.true:                                        ; preds = %for.body8
55   br label %cond.end
57 cond.false:                                       ; preds = %for.body8
58   %tmp18 = load i32* %arrayidx17, align 4
59   br label %cond.end
61 cond.end:                                         ; preds = %cond.false, %cond.true
62   %cond = phi i32 [ %curr_a.0, %cond.true ], [ %tmp18, %cond.false ]
63   br i1 %cmp14, label %cond.true29, label %cond.false31
65 cond.true29:                                      ; preds = %cond.end
66   br label %cond.end33
68 cond.false31:                                     ; preds = %cond.end
69   br label %cond.end33
71 cond.end33:                                       ; preds = %cond.false31, %cond.true29
72   %cond34 = phi i32 [ %tmp23, %cond.true29 ], [ %curr_b.0, %cond.false31 ]
73   br label %for.inc
75 for.inc:                                          ; preds = %cond.end33
76   %indvar.next = add i64 %indvar, 1
77   br label %for.cond5
79 for.end:                                          ; preds = %for.cond5
80   %curr_b.0.lcssa = phi i32 [ %curr_b.0, %for.cond5 ]
81   %curr_a.0.lcssa = phi i32 [ %curr_a.0, %for.cond5 ]
82   store i32 %curr_a.0.lcssa, i32* %arrayidx39, align 4
83   store i32 %curr_b.0.lcssa, i32* %arrayidx43, align 4
84   br label %for.inc44
86 for.inc44:                                        ; preds = %for.end
87   %indvar.next3 = add i64 %indvar2, 1
88   br label %for.cond
90 for.end47:                                        ; preds = %for.cond
91   ret void
94 define i32 @main() nounwind uwtable {
95 entry:
96   call void @check_vect()
97   br label %for.cond
99 for.cond:                                         ; preds = %for.inc, %entry
100   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ]
101   %arrayidx = getelementptr [32 x i32]* @x_in, i64 0, i64 %indvar1
102   %j.0 = trunc i64 %indvar1 to i32
103   %exitcond = icmp ne i64 %indvar1, 32
104   br i1 %exitcond, label %for.body, label %for.end
106 for.body:                                         ; preds = %for.cond
107   store i32 %j.0, i32* %arrayidx, align 4
108   br label %for.inc
110 for.inc:                                          ; preds = %for.body
111   %indvar.next2 = add i64 %indvar1, 1
112   br label %for.cond
114 for.end:                                          ; preds = %for.cond
115   call void @foo()
116   br label %for.cond4
118 for.cond4:                                        ; preds = %for.inc26, %for.end
119   %indvar = phi i64 [ %indvar.next, %for.inc26 ], [ 0, %for.end ]
120   %arrayidx23 = getelementptr [32 x i32]* @check_result_b, i64 0, i64 %indvar
121   %arrayidx19 = getelementptr [32 x i32]* @x_out_b, i64 0, i64 %indvar
122   %arrayidx14 = getelementptr [32 x i32]* @check_result_a, i64 0, i64 %indvar
123   %arrayidx10 = getelementptr [32 x i32]* @x_out_a, i64 0, i64 %indvar
124   %j.1 = trunc i64 %indvar to i32
125   %cmp6 = icmp slt i32 %j.1, 32
126   br i1 %cmp6, label %for.body7, label %for.end29
128 for.body7:                                        ; preds = %for.cond4
129   %tmp11 = load i32* %arrayidx10, align 4
130   %tmp15 = load i32* %arrayidx14, align 4
131   %cmp16 = icmp eq i32 %tmp11, %tmp15
132   br i1 %cmp16, label %lor.lhs.false, label %if.then
134 lor.lhs.false:                                    ; preds = %for.body7
135   %tmp20 = load i32* %arrayidx19, align 4
136   %tmp24 = load i32* %arrayidx23, align 4
137   %cmp25 = icmp eq i32 %tmp20, %tmp24
138   br i1 %cmp25, label %if.end, label %if.then
140 if.then:                                          ; preds = %lor.lhs.false, %for.body7
141   call void @abort() noreturn nounwind
142   unreachable
144 if.end:                                           ; preds = %lor.lhs.false
145   br label %for.inc26
147 for.inc26:                                        ; preds = %if.end
148   %indvar.next = add i64 %indvar, 1
149   br label %for.cond4
151 for.end29:                                        ; preds = %for.cond4
152   ret i32 0
155 define internal void @check_vect() nounwind uwtable noinline {
156 entry:
157   %a = alloca i32, align 4
158   %b = alloca i32, align 4
159   %c = alloca i32, align 4
160   %d = alloca i32, align 4
161   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
162   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
163   %tobool = icmp eq i32 %call1, 0
164   br i1 %tobool, label %if.then, label %lor.lhs.false
166 lor.lhs.false:                                    ; preds = %entry
167   %tmp4 = load i32* %d, align 4
168   %and6 = and i32 %tmp4, 67108864
169   %cmp = icmp eq i32 %and6, 0
170   br i1 %cmp, label %if.then, label %if.end
172 if.then:                                          ; preds = %entry, %lor.lhs.false
173   call void @exit(i32 0) noreturn nounwind
174   unreachable
176 if.end:                                           ; preds = %lor.lhs.false
177   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
178   ret void
181 declare void @abort() noreturn nounwind
183 declare void (i32)* @signal(i32, void (i32)*) nounwind
185 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
186 entry:
187   call void @exit(i32 0) noreturn nounwind
188   unreachable
190 return:                                           ; No predecessors!
191   ret void
194 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
195 entry:
196   %and = and i32 %__level, -2147483648
197   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
198   %cmp = icmp ult i32 %call, %__level
199   br i1 %cmp, label %if.then, label %if.end
201 if.then:                                          ; preds = %entry
202   br label %return
204 if.end:                                           ; preds = %entry
205   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
206   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
207   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
208   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
209   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
210   store i32 %asmresult, i32* %__eax, align 4
211   store i32 %asmresult8, i32* %__ebx, align 4
212   store i32 %asmresult9, i32* %__ecx, align 4
213   store i32 %asmresult10, i32* %__edx, align 4
214   br label %return
216 return:                                           ; preds = %if.end, %if.then
217   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
218   ret i32 %retval.0
221 declare void @exit(i32) noreturn nounwind
223 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
224 entry:
225   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
226   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
227   %tobool = icmp eq i32* %__sig, null
228   br i1 %tobool, label %if.end, label %if.then
230 if.then:                                          ; preds = %entry
231   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
232   store i32 %asmresult1, i32* %__sig, align 4
233   br label %if.end
235 if.end:                                           ; preds = %entry, %if.then
236   ret i32 %asmresult
239 !0 = metadata !{i32 -2147227761, i32 -2147227753} 
240 !1 = metadata !{i32 -2147227884, i32 -2147227876} 
241 ; CHECK: define