Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-double-reduc-2.ll
blob6df5dcff7afaa973b62b4130e13a23b29f4933b4
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-double-reduc-2.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-double-reduc-2.s > vect-double-reduc-2.ll
6 ; ModuleID = 'vect-double-reduc-2.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 @check_result = global [32 x i32] [i32 357184, i32 339264, i32 321344, i32 303424, i32 285504, i32 267584, i32 249664, i32 231744, i32 213824, i32 195904, i32 177984, i32 160064, i32 142144, i32 124224, i32 106304, i32 88384, i32 70464, i32 52544, i32 34624, i32 16704, i32 -1216, i32 -19136, i32 -37056, i32 -54976, i32 -72896, i32 -90816, i32 -108736, i32 -126656, i32 -144576, i32 -162496, i32 -180416, i32 -198336], align 16
11 @in = common global [64 x [32 x i32]] zeroinitializer, align 16
12 @coeff = common global [32 x [32 x i32]] zeroinitializer, align 16
13 @out = common global [32 x i32] zeroinitializer, align 16
15 define void @foo() nounwind uwtable noinline {
16 entry:
17   br label %for.cond
19 for.cond:                                         ; preds = %for.inc32, %entry
20   %indvar3 = phi i64 [ %indvar.next4, %for.inc32 ], [ 0, %entry ]
21   %arrayidx31 = getelementptr [32 x i32]* @out, i64 0, i64 %indvar3
22   %exitcond9 = icmp ne i64 %indvar3, 32
23   br i1 %exitcond9, label %for.body, label %for.end35
25 for.body:                                         ; preds = %for.cond
26   br label %for.cond1
28 for.cond1:                                        ; preds = %for.inc24, %for.body
29   %indvar1 = phi i64 [ %indvar.next2, %for.inc24 ], [ 0, %for.body ]
30   %res.0 = phi i32 [ 1000000, %for.body ], [ %res.1.lcssa, %for.inc24 ]
31   %exitcond6 = icmp ne i64 %indvar1, 32
32   br i1 %exitcond6, label %for.body4, label %for.end27
34 for.body4:                                        ; preds = %for.cond1
35   br label %for.cond5
37 for.cond5:                                        ; preds = %for.inc, %for.body4
38   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %for.body4 ]
39   %res.1 = phi i32 [ %res.0, %for.body4 ], [ %sub, %for.inc ]
40   %tmp = add i64 %indvar3, %indvar
41   %arrayidx13 = getelementptr [64 x [32 x i32]]* @in, i64 0, i64 %tmp, i64 %indvar1
42   %arrayidx20 = getelementptr [32 x [32 x i32]]* @coeff, i64 0, i64 %indvar, i64 %indvar1
43   %exitcond = icmp ne i64 %indvar, 32
44   br i1 %exitcond, label %for.body8, label %for.end
46 for.body8:                                        ; preds = %for.cond5
47   br label %for.inc
49 for.inc:                                          ; preds = %for.body8
50   %tmp21 = load i32* %arrayidx20, align 4
51   %tmp14 = load i32* %arrayidx13, align 4
52   %mul = mul nsw i32 %tmp14, %tmp21
53   %sub = sub nsw i32 %res.1, %mul
54   %indvar.next = add i64 %indvar, 1
55   br label %for.cond5
57 for.end:                                          ; preds = %for.cond5
58   %res.1.lcssa = phi i32 [ %res.1, %for.cond5 ]
59   br label %for.inc24
61 for.inc24:                                        ; preds = %for.end
62   %indvar.next2 = add i64 %indvar1, 1
63   br label %for.cond1
65 for.end27:                                        ; preds = %for.cond1
66   %res.0.lcssa = phi i32 [ %res.0, %for.cond1 ]
67   store i32 %res.0.lcssa, i32* %arrayidx31, align 4
68   br label %for.inc32
70 for.inc32:                                        ; preds = %for.end27
71   %indvar.next4 = add i64 %indvar3, 1
72   br label %for.cond
74 for.end35:                                        ; preds = %for.cond
75   ret void
78 define i32 @main() nounwind uwtable {
79 entry:
80   call void @check_vect()
81   br label %for.cond
83 for.cond:                                         ; preds = %for.inc28, %entry
84   %indvar3 = phi i64 [ %indvar.next4, %for.inc28 ], [ 0, %entry ]
85   %exitcond13 = icmp ne i64 %indvar3, 32
86   br i1 %exitcond13, label %for.body, label %for.end31
88 for.body:                                         ; preds = %for.cond
89   br label %for.cond1
91 for.cond1:                                        ; preds = %for.inc, %for.body
92   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %for.body ]
93   %tmp14 = add i64 %indvar3, %indvar1
94   %add = trunc i64 %tmp14 to i32
95   %arrayidx10 = getelementptr [64 x [32 x i32]]* @in, i64 0, i64 %indvar1, i64 %indvar3
96   %exitcond = icmp ne i64 %indvar1, 64
97   br i1 %exitcond, label %for.body4, label %for.end
99 for.body4:                                        ; preds = %for.cond1
100   store i32 %add, i32* %arrayidx10, align 4
101   br label %for.inc
103 for.inc:                                          ; preds = %for.body4
104   %indvar.next2 = add i64 %indvar1, 1
105   br label %for.cond1
107 for.end:                                          ; preds = %for.cond1
108   br label %for.cond12
110 for.cond12:                                       ; preds = %for.inc24, %for.end
111   %indvar7 = phi i64 [ %indvar.next8, %for.inc24 ], [ 0, %for.end ]
112   %arrayidx23 = getelementptr [32 x [32 x i32]]* @coeff, i64 0, i64 %indvar7, i64 %indvar3
113   %tmp10 = add i64 %indvar7, 2
114   %add17 = trunc i64 %tmp10 to i32
115   %exitcond9 = icmp ne i64 %indvar7, 32
116   br i1 %exitcond9, label %for.body15, label %for.end27
118 for.body15:                                       ; preds = %for.cond12
119   store i32 %add17, i32* %arrayidx23, align 4
120   br label %for.inc24
122 for.inc24:                                        ; preds = %for.body15
123   %indvar.next8 = add i64 %indvar7, 1
124   br label %for.cond12
126 for.end27:                                        ; preds = %for.cond12
127   br label %for.inc28
129 for.inc28:                                        ; preds = %for.end27
130   %indvar.next4 = add i64 %indvar3, 1
131   br label %for.cond
133 for.end31:                                        ; preds = %for.cond
134   call void @foo()
135   br label %for.cond32
137 for.cond32:                                       ; preds = %for.inc45, %for.end31
138   %indvar = phi i64 [ %indvar.next, %for.inc45 ], [ 0, %for.end31 ]
139   %arrayidx42 = getelementptr [32 x i32]* @check_result, i64 0, i64 %indvar
140   %arrayidx38 = getelementptr [32 x i32]* @out, i64 0, i64 %indvar
141   %k.0 = trunc i64 %indvar to i32
142   %cmp34 = icmp slt i32 %k.0, 32
143   br i1 %cmp34, label %for.body35, label %for.end48
145 for.body35:                                       ; preds = %for.cond32
146   %tmp39 = load i32* %arrayidx38, align 4
147   %tmp43 = load i32* %arrayidx42, align 4
148   %cmp44 = icmp eq i32 %tmp39, %tmp43
149   br i1 %cmp44, label %if.end, label %if.then
151 if.then:                                          ; preds = %for.body35
152   call void @abort() noreturn nounwind
153   unreachable
155 if.end:                                           ; preds = %for.body35
156   br label %for.inc45
158 for.inc45:                                        ; preds = %if.end
159   %indvar.next = add i64 %indvar, 1
160   br label %for.cond32
162 for.end48:                                        ; preds = %for.cond32
163   ret i32 0
166 define internal void @check_vect() nounwind uwtable noinline {
167 entry:
168   %a = alloca i32, align 4
169   %b = alloca i32, align 4
170   %c = alloca i32, align 4
171   %d = alloca i32, align 4
172   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
173   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
174   %tobool = icmp eq i32 %call1, 0
175   br i1 %tobool, label %if.then, label %lor.lhs.false
177 lor.lhs.false:                                    ; preds = %entry
178   %tmp4 = load i32* %d, align 4
179   %and6 = and i32 %tmp4, 67108864
180   %cmp = icmp eq i32 %and6, 0
181   br i1 %cmp, label %if.then, label %if.end
183 if.then:                                          ; preds = %entry, %lor.lhs.false
184   call void @exit(i32 0) noreturn nounwind
185   unreachable
187 if.end:                                           ; preds = %lor.lhs.false
188   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
189   ret void
192 declare void @abort() noreturn
194 declare void (i32)* @signal(i32, void (i32)*) nounwind
196 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
197 entry:
198   call void @exit(i32 0) noreturn nounwind
199   unreachable
201 return:                                           ; No predecessors!
202   ret void
205 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
206 entry:
207   %and = and i32 %__level, -2147483648
208   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
209   %cmp = icmp ult i32 %call, %__level
210   br i1 %cmp, label %if.then, label %if.end
212 if.then:                                          ; preds = %entry
213   br label %return
215 if.end:                                           ; preds = %entry
216   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
217   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
218   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
219   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
220   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
221   store i32 %asmresult, i32* %__eax, align 4
222   store i32 %asmresult8, i32* %__ebx, align 4
223   store i32 %asmresult9, i32* %__ecx, align 4
224   store i32 %asmresult10, i32* %__edx, align 4
225   br label %return
227 return:                                           ; preds = %if.end, %if.then
228   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
229   ret i32 %retval.0
232 declare void @exit(i32) noreturn
234 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
235 entry:
236   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
237   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
238   %tobool = icmp eq i32* %__sig, null
239   br i1 %tobool, label %if.end, label %if.then
241 if.then:                                          ; preds = %entry
242   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
243   store i32 %asmresult1, i32* %__sig, align 4
244   br label %if.end
246 if.end:                                           ; preds = %entry, %if.then
247   ret i32 %asmresult
250 !0 = metadata !{i32 -2147343107, i32 -2147343099} 
251 !1 = metadata !{i32 -2147343230, i32 -2147343222} 
252 ; CHECK: define