Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-reduc-2.ll
bloba468abceb28292412b0525593cecb190cda7e4c5
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-reduc-2.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-reduc-2.s > vect-reduc-2.ll
6 ; ModuleID = 'vect-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 @b = global [16 x i32] [i32 1, 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
11 @c = global [16 x i32] [i32 1, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15], align 16
13 define void @main1(i32 %x, i32 %max_result, i32 %min_result) nounwind uwtable noinline {
14 entry:
15   br label %for.cond
17 for.cond:                                         ; preds = %for.inc, %entry
18   %indvar4 = phi i64 [ %indvar.next5, %for.inc ], [ 0, %entry ]
19   %diff.0 = phi i32 [ 0, %entry ], [ %add, %for.inc ]
20   %arrayidx8 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar4
21   %arrayidx = getelementptr [16 x i32]* @b, i64 0, i64 %indvar4
22   %exitcond6 = icmp ne i64 %indvar4, 16
23   br i1 %exitcond6, label %for.body, label %for.end
25 for.body:                                         ; preds = %for.cond
26   br label %for.inc
28 for.inc:                                          ; preds = %for.body
29   %tmp9 = load i32* %arrayidx8, align 4
30   %tmp5 = load i32* %arrayidx, align 4
31   %sub = sub nsw i32 %tmp5, %tmp9
32   %add = add nsw i32 %diff.0, %sub
33   %indvar.next5 = add i64 %indvar4, 1
34   br label %for.cond
36 for.end:                                          ; preds = %for.cond
37   %diff.0.lcssa = phi i32 [ %diff.0, %for.cond ]
38   br label %for.cond12
40 for.cond12:                                       ; preds = %for.inc27, %for.end
41   %indvar1 = phi i64 [ %indvar.next2, %for.inc27 ], [ 0, %for.end ]
42   %max.0 = phi i32 [ %x, %for.end ], [ %cond, %for.inc27 ]
43   %arrayidx19 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar1
44   %exitcond3 = icmp ne i64 %indvar1, 16
45   br i1 %exitcond3, label %for.body15, label %for.end30
47 for.body15:                                       ; preds = %for.cond12
48   %tmp20 = load i32* %arrayidx19, align 4
49   %cmp21 = icmp slt i32 %max.0, %tmp20
50   br i1 %cmp21, label %cond.true, label %cond.false
52 cond.true:                                        ; preds = %for.body15
53   %tmp25 = load i32* %arrayidx19, align 4
54   br label %cond.end
56 cond.false:                                       ; preds = %for.body15
57   br label %cond.end
59 cond.end:                                         ; preds = %cond.false, %cond.true
60   %cond = phi i32 [ %tmp25, %cond.true ], [ %max.0, %cond.false ]
61   br label %for.inc27
63 for.inc27:                                        ; preds = %cond.end
64   %indvar.next2 = add i64 %indvar1, 1
65   br label %for.cond12
67 for.end30:                                        ; preds = %for.cond12
68   %max.0.lcssa = phi i32 [ %max.0, %for.cond12 ]
69   br label %for.cond31
71 for.cond31:                                       ; preds = %for.inc50, %for.end30
72   %indvar = phi i64 [ %indvar.next, %for.inc50 ], [ 0, %for.end30 ]
73   %min.0 = phi i32 [ %x, %for.end30 ], [ %cond49, %for.inc50 ]
74   %arrayidx38 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar
75   %exitcond = icmp ne i64 %indvar, 16
76   br i1 %exitcond, label %for.body34, label %for.end53
78 for.body34:                                       ; preds = %for.cond31
79   %tmp39 = load i32* %arrayidx38, align 4
80   %cmp40 = icmp sgt i32 %min.0, %tmp39
81   br i1 %cmp40, label %cond.true41, label %cond.false46
83 cond.true41:                                      ; preds = %for.body34
84   %tmp45 = load i32* %arrayidx38, align 4
85   br label %cond.end48
87 cond.false46:                                     ; preds = %for.body34
88   br label %cond.end48
90 cond.end48:                                       ; preds = %cond.false46, %cond.true41
91   %cond49 = phi i32 [ %tmp45, %cond.true41 ], [ %min.0, %cond.false46 ]
92   br label %for.inc50
94 for.inc50:                                        ; preds = %cond.end48
95   %indvar.next = add i64 %indvar, 1
96   br label %for.cond31
98 for.end53:                                        ; preds = %for.cond31
99   %min.0.lcssa = phi i32 [ %min.0, %for.cond31 ]
100   %cmp55 = icmp eq i32 %diff.0.lcssa, 240
101   br i1 %cmp55, label %if.end, label %if.then
103 if.then:                                          ; preds = %for.end53
104   call void @abort() noreturn nounwind
105   unreachable
107 if.end:                                           ; preds = %for.end53
108   %cmp58 = icmp eq i32 %max.0.lcssa, %max_result
109   br i1 %cmp58, label %if.end60, label %if.then59
111 if.then59:                                        ; preds = %if.end
112   call void @abort() noreturn nounwind
113   unreachable
115 if.end60:                                         ; preds = %if.end
116   %cmp63 = icmp eq i32 %min.0.lcssa, %min_result
117   br i1 %cmp63, label %if.end65, label %if.then64
119 if.then64:                                        ; preds = %if.end60
120   call void @abort() noreturn nounwind
121   unreachable
123 if.end65:                                         ; preds = %if.end60
124   ret void
127 declare void @abort() noreturn
129 define i32 @main() nounwind uwtable {
130 entry:
131   call void @check_vect()
132   call void @main1(i32 100, i32 100, i32 1)
133   call void @main1(i32 0, i32 15, i32 0)
134   ret i32 0
137 define internal void @check_vect() nounwind uwtable noinline {
138 entry:
139   %a = alloca i32, align 4
140   %b = alloca i32, align 4
141   %c = alloca i32, align 4
142   %d = alloca i32, align 4
143   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
144   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
145   %tobool = icmp eq i32 %call1, 0
146   br i1 %tobool, label %if.then, label %lor.lhs.false
148 lor.lhs.false:                                    ; preds = %entry
149   %tmp4 = load i32* %d, align 4
150   %and6 = and i32 %tmp4, 67108864
151   %cmp = icmp eq i32 %and6, 0
152   br i1 %cmp, label %if.then, label %if.end
154 if.then:                                          ; preds = %entry, %lor.lhs.false
155   call void @exit(i32 0) noreturn nounwind
156   unreachable
158 if.end:                                           ; preds = %lor.lhs.false
159   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
160   ret void
163 declare void (i32)* @signal(i32, void (i32)*) nounwind
165 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
166 entry:
167   call void @exit(i32 0) noreturn nounwind
168   unreachable
170 return:                                           ; No predecessors!
171   ret void
174 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
175 entry:
176   %and = and i32 %__level, -2147483648
177   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
178   %cmp = icmp ult i32 %call, %__level
179   br i1 %cmp, label %if.then, label %if.end
181 if.then:                                          ; preds = %entry
182   br label %return
184 if.end:                                           ; preds = %entry
185   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
186   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
187   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
188   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
189   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
190   store i32 %asmresult, i32* %__eax, align 4
191   store i32 %asmresult8, i32* %__ebx, align 4
192   store i32 %asmresult9, i32* %__ecx, align 4
193   store i32 %asmresult10, i32* %__edx, align 4
194   br label %return
196 return:                                           ; preds = %if.end, %if.then
197   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
198   ret i32 %retval.0
201 declare void @exit(i32) noreturn
203 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
204 entry:
205   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
206   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
207   %tobool = icmp eq i32* %__sig, null
208   br i1 %tobool, label %if.end, label %if.then
210 if.then:                                          ; preds = %entry
211   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
212   store i32 %asmresult1, i32* %__sig, align 4
213   br label %if.end
215 if.end:                                           ; preds = %entry, %if.then
216   ret i32 %asmresult
219 !0 = metadata !{i32 -2147343294, i32 -2147343286} 
220 !1 = metadata !{i32 -2147343417, i32 -2147343409} 
221 ; CHECK: define