Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-cond-4.ll
blob9ddd224c341665d66ed627fc35689311db1bfa9a
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-4.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-cond-4.s > vect-cond-4.ll
6 ; ModuleID = 'vect-cond-4.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(i32 %z) nounwind uwtable noinline {
20 entry:
21   br label %for.cond
23 for.cond:                                         ; preds = %for.inc37, %entry
24   %indvar1 = phi i64 [ %indvar.next2, %for.inc37 ], [ 0, %entry ]
25   %arrayidx36 = getelementptr [32 x i32]* @x_out_b, i64 0, i64 %indvar1
26   %arrayidx32 = getelementptr [32 x i32]* @x_out_a, i64 0, i64 %indvar1
27   %arrayidx = getelementptr [32 x i32]* @x_in, i64 0, i64 %indvar1
28   %exitcond3 = icmp ne i64 %indvar1, 32
29   br i1 %exitcond3, label %for.body, label %for.end40
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 ], [ %cond27, %for.inc ]
41   %arrayidx12 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar
42   %exitcond = icmp ne i64 %indvar, 16
43   br i1 %exitcond, label %for.body8, label %for.end
45 for.body8:                                        ; preds = %for.cond5
46   %tmp13 = load i32* %arrayidx12, align 4
47   %cmp14 = icmp sgt i32 %tmp2, %tmp13
48   br i1 %cmp14, label %cond.true, label %cond.false
50 cond.true:                                        ; preds = %for.body8
51   br label %cond.end
53 cond.false:                                       ; preds = %for.body8
54   br label %cond.end
56 cond.end:                                         ; preds = %cond.false, %cond.true
57   %cond = phi i32 [ %curr_a.0, %cond.true ], [ %z, %cond.false ]
58   %tmp21 = load i32* %arrayidx12, align 4
59   %cmp22 = icmp sgt i32 %tmp2, %tmp21
60   br i1 %cmp22, label %cond.true23, label %cond.false25
62 cond.true23:                                      ; preds = %cond.end
63   br label %cond.end26
65 cond.false25:                                     ; preds = %cond.end
66   br label %cond.end26
68 cond.end26:                                       ; preds = %cond.false25, %cond.true23
69   %cond27 = phi i32 [ %curr_b.0, %cond.true23 ], [ 5, %cond.false25 ]
70   br label %for.inc
72 for.inc:                                          ; preds = %cond.end26
73   %indvar.next = add i64 %indvar, 1
74   br label %for.cond5
76 for.end:                                          ; preds = %for.cond5
77   %curr_b.0.lcssa = phi i32 [ %curr_b.0, %for.cond5 ]
78   %curr_a.0.lcssa = phi i32 [ %curr_a.0, %for.cond5 ]
79   store i32 %curr_a.0.lcssa, i32* %arrayidx32, align 4
80   store i32 %curr_b.0.lcssa, i32* %arrayidx36, align 4
81   br label %for.inc37
83 for.inc37:                                        ; preds = %for.end
84   %indvar.next2 = add i64 %indvar1, 1
85   br label %for.cond
87 for.end40:                                        ; preds = %for.cond
88   ret void
91 define i32 @main() nounwind uwtable {
92 entry:
93   call void @check_vect()
94   br label %for.cond
96 for.cond:                                         ; preds = %for.inc, %entry
97   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ]
98   %arrayidx = getelementptr [32 x i32]* @x_in, i64 0, i64 %indvar1
99   %j.0 = trunc i64 %indvar1 to i32
100   %exitcond = icmp ne i64 %indvar1, 32
101   br i1 %exitcond, label %for.body, label %for.end
103 for.body:                                         ; preds = %for.cond
104   store i32 %j.0, i32* %arrayidx, align 4
105   br label %for.inc
107 for.inc:                                          ; preds = %for.body
108   %indvar.next2 = add i64 %indvar1, 1
109   br label %for.cond
111 for.end:                                          ; preds = %for.cond
112   call void @foo(i32 125)
113   br label %for.cond4
115 for.cond4:                                        ; preds = %for.inc18, %for.end
116   %indvar = phi i64 [ %indvar.next, %for.inc18 ], [ 0, %for.end ]
117   %arrayidx15 = getelementptr [32 x i32]* @x_out_b, i64 0, i64 %indvar
118   %arrayidx10 = getelementptr [32 x i32]* @x_out_a, i64 0, i64 %indvar
119   %j.1 = trunc i64 %indvar to i32
120   %cmp6 = icmp slt i32 %j.1, 32
121   br i1 %cmp6, label %for.body7, label %for.end21
123 for.body7:                                        ; preds = %for.cond4
124   %tmp11 = load i32* %arrayidx10, align 4
125   %cmp12 = icmp eq i32 %tmp11, 125
126   br i1 %cmp12, label %lor.lhs.false, label %if.then
128 lor.lhs.false:                                    ; preds = %for.body7
129   %tmp16 = load i32* %arrayidx15, align 4
130   %cmp17 = icmp eq i32 %tmp16, 5
131   br i1 %cmp17, label %if.end, label %if.then
133 if.then:                                          ; preds = %lor.lhs.false, %for.body7
134   call void @abort() noreturn nounwind
135   unreachable
137 if.end:                                           ; preds = %lor.lhs.false
138   br label %for.inc18
140 for.inc18:                                        ; preds = %if.end
141   %indvar.next = add i64 %indvar, 1
142   br label %for.cond4
144 for.end21:                                        ; preds = %for.cond4
145   ret i32 0
148 define internal void @check_vect() nounwind uwtable noinline {
149 entry:
150   %a = alloca i32, align 4
151   %b = alloca i32, align 4
152   %c = alloca i32, align 4
153   %d = alloca i32, align 4
154   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
155   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
156   %tobool = icmp eq i32 %call1, 0
157   br i1 %tobool, label %if.then, label %lor.lhs.false
159 lor.lhs.false:                                    ; preds = %entry
160   %tmp4 = load i32* %d, align 4
161   %and6 = and i32 %tmp4, 67108864
162   %cmp = icmp eq i32 %and6, 0
163   br i1 %cmp, label %if.then, label %if.end
165 if.then:                                          ; preds = %entry, %lor.lhs.false
166   call void @exit(i32 0) noreturn nounwind
167   unreachable
169 if.end:                                           ; preds = %lor.lhs.false
170   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
171   ret void
174 declare void @abort() noreturn nounwind
176 declare void (i32)* @signal(i32, void (i32)*) nounwind
178 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
179 entry:
180   call void @exit(i32 0) noreturn nounwind
181   unreachable
183 return:                                           ; No predecessors!
184   ret void
187 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
188 entry:
189   %and = and i32 %__level, -2147483648
190   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
191   %cmp = icmp ult i32 %call, %__level
192   br i1 %cmp, label %if.then, label %if.end
194 if.then:                                          ; preds = %entry
195   br label %return
197 if.end:                                           ; preds = %entry
198   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
199   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
200   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
201   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
202   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
203   store i32 %asmresult, i32* %__eax, align 4
204   store i32 %asmresult8, i32* %__ebx, align 4
205   store i32 %asmresult9, i32* %__ecx, align 4
206   store i32 %asmresult10, i32* %__edx, align 4
207   br label %return
209 return:                                           ; preds = %if.end, %if.then
210   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
211   ret i32 %retval.0
214 declare void @exit(i32) noreturn nounwind
216 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
217 entry:
218   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
219   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
220   %tobool = icmp eq i32* %__sig, null
221   br i1 %tobool, label %if.end, label %if.then
223 if.then:                                          ; preds = %entry
224   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
225   store i32 %asmresult1, i32* %__sig, align 4
226   br label %if.end
228 if.end:                                           ; preds = %entry, %if.then
229   ret i32 %asmresult
232 !0 = metadata !{i32 -2147227888, i32 -2147227880} 
233 !1 = metadata !{i32 -2147228011, i32 -2147228003} 
234 ; CHECK: define