Add compile command to each testcase
[gcc-vect-testsuite.git] / no-scevccp-outer-17.ll
blobaf145a4f4a261743fc7a93004f6a82a853fb59e9
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 no-scevccp-outer-17.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer no-scevccp-outer-17.s > no-scevccp-outer-17.ll
6 ; ModuleID = 'no-scevccp-outer-17.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 = common global [40 x i32] zeroinitializer, align 16
11 @c = common global [40 x i32] zeroinitializer, align 16
12 @a = common global [40 x i32] zeroinitializer, align 16
14 define i32 @foo() nounwind uwtable noinline {
15 entry:
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc28, %entry
19   %indvar1 = phi i64 [ %indvar.next2, %for.inc28 ], [ 0, %entry ]
20   %sum.0 = phi i32 [ 0, %entry ], [ %add27, %for.inc28 ]
21   %arrayidx24 = getelementptr [40 x i32]* @a, i64 0, i64 %indvar1
22   %arrayidx6 = getelementptr [40 x i32]* @c, i64 0, i64 %indvar1
23   %arrayidx = getelementptr [40 x i32]* @b, i64 0, i64 %indvar1
24   %exitcond3 = icmp ne i64 %indvar1, 40
25   br i1 %exitcond3, label %for.body, label %for.end31
27 for.body:                                         ; preds = %for.cond
28   %tmp3 = load i32* %arrayidx, align 4
29   %tmp7 = load i32* %arrayidx6, align 4
30   br label %for.cond8
32 for.cond8:                                        ; preds = %for.inc, %for.body
33   %indvar = phi i32 [ %indvar.next, %for.inc ], [ 0, %for.body ]
34   %sum_j.0 = phi i32 [ 0, %for.body ], [ %phitmp, %for.inc ]
35   %exitcond = icmp ne i32 %indvar, 40
36   br i1 %exitcond, label %for.body12, label %for.end
38 for.body12:                                       ; preds = %for.cond8
39   br label %for.inc
41 for.inc:                                          ; preds = %for.body12
42   %add = add i32 %sum_j.0, %indvar
43   %phitmp = and i32 %add, 65535
44   %indvar.next = add i32 %indvar, 1
45   br label %for.cond8
47 for.end:                                          ; preds = %for.cond8
48   %sum_j.0.lcssa = phi i32 [ %sum_j.0, %for.cond8 ]
49   %sub = sub nsw i32 %tmp3, %tmp7
50   %add21 = add nsw i32 %sum_j.0.lcssa, 5
51   store i32 %add21, i32* %arrayidx24, align 4
52   br label %for.inc28
54 for.inc28:                                        ; preds = %for.end
55   %add27 = add nsw i32 %sum.0, %sub
56   %indvar.next2 = add i64 %indvar1, 1
57   br label %for.cond
59 for.end31:                                        ; preds = %for.cond
60   %sum.0.lcssa = phi i32 [ %sum.0, %for.cond ]
61   ret i32 %sum.0.lcssa
64 define i32 @main() nounwind uwtable {
65 entry:
66   call void @check_vect()
67   br label %for.cond
69 for.cond:                                         ; preds = %for.inc, %entry
70   %indvar4 = phi i64 [ %indvar.next5, %for.inc ], [ 0, %entry ]
71   %tmp = mul i64 %indvar4, 2
72   %mul = trunc i64 %tmp to i32
73   %arrayidx6 = getelementptr [40 x i32]* @c, i64 0, i64 %indvar4
74   %arrayidx = getelementptr [40 x i32]* @b, i64 0, i64 %indvar4
75   %i.0 = trunc i64 %indvar4 to i32
76   %exitcond6 = icmp ne i64 %indvar4, 40
77   br i1 %exitcond6, label %for.body, label %for.end
79 for.body:                                         ; preds = %for.cond
80   store i32 %i.0, i32* %arrayidx, align 4
81   store i32 %mul, i32* %arrayidx6, align 4
82   br label %for.inc
84 for.inc:                                          ; preds = %for.body
85   %indvar.next5 = add i64 %indvar4, 1
86   br label %for.cond
88 for.end:                                          ; preds = %for.cond
89   %call = call i32 @foo()
90   br label %for.cond8
92 for.cond8:                                        ; preds = %for.inc45, %for.end
93   %indvar2 = phi i64 [ %indvar.next3, %for.inc45 ], [ 0, %for.end ]
94   %sum.0 = phi i32 [ 0, %for.end ], [ %add, %for.inc45 ]
95   %arrayidx38 = getelementptr [40 x i32]* @a, i64 0, i64 %indvar2
96   %arrayidx18 = getelementptr [40 x i32]* @c, i64 0, i64 %indvar2
97   %arrayidx14 = getelementptr [40 x i32]* @b, i64 0, i64 %indvar2
98   %i.1 = trunc i64 %indvar2 to i32
99   %cmp10 = icmp slt i32 %i.1, 40
100   br i1 %cmp10, label %for.body11, label %for.end48
102 for.body11:                                       ; preds = %for.cond8
103   %tmp15 = load i32* %arrayidx14, align 4
104   %tmp19 = load i32* %arrayidx18, align 4
105   %sub = sub nsw i32 %tmp15, %tmp19
106   br label %for.cond21
108 for.cond21:                                       ; preds = %for.inc32, %for.body11
109   %indvar = phi i32 [ %indvar.next, %for.inc32 ], [ 0, %for.body11 ]
110   %sum_j.0 = phi i32 [ 0, %for.body11 ], [ %phitmp, %for.inc32 ]
111   %exitcond = icmp ne i32 %indvar, 40
112   br i1 %exitcond, label %for.body25, label %for.end35
114 for.body25:                                       ; preds = %for.cond21
115   br label %for.inc32
117 for.inc32:                                        ; preds = %for.body25
118   %add30 = add i32 %sum_j.0, %indvar
119   %phitmp = and i32 %add30, 65535
120   %indvar.next = add i32 %indvar, 1
121   br label %for.cond21
123 for.end35:                                        ; preds = %for.cond21
124   %sum_j.0.lcssa = phi i32 [ %sum_j.0, %for.cond21 ]
125   %add = add nsw i32 %sum.0, %sub
126   %tmp39 = load i32* %arrayidx38, align 4
127   %add42 = add nsw i32 %sum_j.0.lcssa, 5
128   %cmp43 = icmp eq i32 %tmp39, %add42
129   br i1 %cmp43, label %if.end, label %if.then
131 if.then:                                          ; preds = %for.end35
132   call void @abort() noreturn nounwind
133   unreachable
135 if.end:                                           ; preds = %for.end35
136   br label %for.inc45
138 for.inc45:                                        ; preds = %if.end
139   %indvar.next3 = add i64 %indvar2, 1
140   br label %for.cond8
142 for.end48:                                        ; preds = %for.cond8
143   %sum.0.lcssa = phi i32 [ %sum.0, %for.cond8 ]
144   %cmp51 = icmp eq i32 %call, %sum.0.lcssa
145   br i1 %cmp51, label %if.end54, label %if.then53
147 if.then53:                                        ; preds = %for.end48
148   call void @abort() noreturn nounwind
149   unreachable
151 if.end54:                                         ; preds = %for.end48
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
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
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 -2147343301, i32 -2147343293} 
240 !1 = metadata !{i32 -2147343424, i32 -2147343416} 
241 ; CHECK: define