Add compile command to each testcase
[gcc-vect-testsuite.git] / no-scevccp-outer-6.ll
blob6cd3540a246c41927c99461efd60f173b1293cf8
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-6.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer no-scevccp-outer-6.s > no-scevccp-outer-6.ll
6 ; ModuleID = 'no-scevccp-outer-6.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 define i32 @foo(i32* noalias %b, i32 %k) nounwind uwtable noinline {
11 entry:
12   %a = alloca [40 x i32], align 16
13   br label %for.cond
15 for.cond:                                         ; preds = %for.inc15, %entry
16   %indvar = phi i64 [ %indvar.next, %for.inc15 ], [ 0, %entry ]
17   %arrayidx14 = getelementptr [40 x i32]* %a, i64 0, i64 %indvar
18   %arrayidx = getelementptr i32* %b, i64 %indvar
19   %exitcond1 = icmp ne i64 %indvar, 40
20   br i1 %exitcond1, label %for.body, label %for.end18
22 for.body:                                         ; preds = %for.cond
23   %tmp3 = load i32* %arrayidx, align 4
24   br label %for.cond4
26 for.cond4:                                        ; preds = %for.inc, %for.body
27   %tmp4 = phi i32 [ 0, %for.body ], [ %inc, %for.inc ]
28   %exitcond = icmp ne i32 %tmp4, 40
29   br i1 %exitcond, label %for.body7, label %for.end
31 for.body7:                                        ; preds = %for.cond4
32   br label %for.inc
34 for.inc:                                          ; preds = %for.body7
35   %inc = add nsw i32 %tmp4, 1
36   br label %for.cond4
38 for.end:                                          ; preds = %for.cond4
39   %tmp = add i32 %tmp3, 780
40   store i32 %tmp, i32* %arrayidx14, align 4
41   br label %for.inc15
43 for.inc15:                                        ; preds = %for.end
44   %indvar.next = add i64 %indvar, 1
45   br label %for.cond
47 for.end18:                                        ; preds = %for.cond
48   %idxprom20 = sext i32 %k to i64
49   %arrayidx21 = getelementptr inbounds [40 x i32]* %a, i64 0, i64 %idxprom20
50   %tmp22 = load i32* %arrayidx21, align 4
51   ret i32 %tmp22
54 define i32 @main() nounwind uwtable {
55 entry:
56   %b = alloca [40 x i32], align 16
57   %a = alloca [40 x i32], align 16
58   call void @check_vect()
59   br label %for.cond
61 for.cond:                                         ; preds = %for.inc, %entry
62   %indvar6 = phi i64 [ %indvar.next7, %for.inc ], [ 0, %entry ]
63   %arrayidx = getelementptr [40 x i32]* %b, i64 0, i64 %indvar6
64   %tmp9 = add i64 %indvar6, 2
65   %add = trunc i64 %tmp9 to i32
66   %exitcond8 = icmp ne i64 %indvar6, 40
67   br i1 %exitcond8, label %for.body, label %for.end
69 for.body:                                         ; preds = %for.cond
70   store i32 %add, i32* %arrayidx, align 4
71   br label %for.inc
73 for.inc:                                          ; preds = %for.body
74   %indvar.next7 = add i64 %indvar6, 1
75   br label %for.cond
77 for.end:                                          ; preds = %for.cond
78   br label %for.cond4
80 for.cond4:                                        ; preds = %for.inc12, %for.end
81   %indvar2 = phi i64 [ %indvar.next3, %for.inc12 ], [ 0, %for.end ]
82   %arrayidx11 = getelementptr [40 x i32]* %a, i64 0, i64 %indvar2
83   %i.1 = trunc i64 %indvar2 to i32
84   %exitcond4 = icmp ne i64 %indvar2, 40
85   br i1 %exitcond4, label %for.body7, label %for.end15
87 for.body7:                                        ; preds = %for.cond4
88   %arraydecay = getelementptr inbounds [40 x i32]* %b, i64 0, i64 0
89   %call = call i32 @foo(i32* %arraydecay, i32 %i.1)
90   store i32 %call, i32* %arrayidx11, align 4
91   br label %for.inc12
93 for.inc12:                                        ; preds = %for.body7
94   %indvar.next3 = add i64 %indvar2, 1
95   br label %for.cond4
97 for.end15:                                        ; preds = %for.cond4
98   br label %for.cond16
100 for.cond16:                                       ; preds = %for.inc41, %for.end15
101   %indvar = phi i64 [ %indvar.next, %for.inc41 ], [ 0, %for.end15 ]
102   %arrayidx37 = getelementptr [40 x i32]* %a, i64 0, i64 %indvar
103   %arrayidx22 = getelementptr [40 x i32]* %b, i64 0, i64 %indvar
104   %i.2 = trunc i64 %indvar to i32
105   %cmp18 = icmp slt i32 %i.2, 40
106   br i1 %cmp18, label %for.body19, label %for.end44
108 for.body19:                                       ; preds = %for.cond16
109   %tmp23 = load i32* %arrayidx22, align 4
110   br label %for.cond24
112 for.cond24:                                       ; preds = %for.inc31, %for.body19
113   %tmp12 = phi i32 [ 0, %for.body19 ], [ %inc33, %for.inc31 ]
114   %exitcond = icmp ne i32 %tmp12, 40
115   br i1 %exitcond, label %for.body27, label %for.end34
117 for.body27:                                       ; preds = %for.cond24
118   br label %for.inc31
120 for.inc31:                                        ; preds = %for.body27
121   %inc33 = add nsw i32 %tmp12, 1
122   br label %for.cond24
124 for.end34:                                        ; preds = %for.cond24
125   %tmp = add i32 %tmp23, 780
126   %tmp38 = load i32* %arrayidx37, align 4
127   %cmp40 = icmp eq i32 %tmp38, %tmp
128   br i1 %cmp40, label %if.end, label %if.then
130 if.then:                                          ; preds = %for.end34
131   call void @abort() noreturn nounwind
132   unreachable
134 if.end:                                           ; preds = %for.end34
135   br label %for.inc41
137 for.inc41:                                        ; preds = %if.end
138   %indvar.next = add i64 %indvar, 1
139   br label %for.cond16
141 for.end44:                                        ; preds = %for.cond16
142   ret i32 0
145 define internal void @check_vect() nounwind uwtable noinline {
146 entry:
147   %a = alloca i32, align 4
148   %b = alloca i32, align 4
149   %c = alloca i32, align 4
150   %d = alloca i32, align 4
151   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
152   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
153   %tobool = icmp eq i32 %call1, 0
154   br i1 %tobool, label %if.then, label %lor.lhs.false
156 lor.lhs.false:                                    ; preds = %entry
157   %tmp4 = load i32* %d, align 4
158   %and6 = and i32 %tmp4, 67108864
159   %cmp = icmp eq i32 %and6, 0
160   br i1 %cmp, label %if.then, label %if.end
162 if.then:                                          ; preds = %entry, %lor.lhs.false
163   call void @exit(i32 0) noreturn nounwind
164   unreachable
166 if.end:                                           ; preds = %lor.lhs.false
167   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
168   ret void
171 declare void @abort() noreturn
173 declare void (i32)* @signal(i32, void (i32)*) nounwind
175 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
176 entry:
177   call void @exit(i32 0) noreturn nounwind
178   unreachable
180 return:                                           ; No predecessors!
181   ret void
184 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
185 entry:
186   %and = and i32 %__level, -2147483648
187   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
188   %cmp = icmp ult i32 %call, %__level
189   br i1 %cmp, label %if.then, label %if.end
191 if.then:                                          ; preds = %entry
192   br label %return
194 if.end:                                           ; preds = %entry
195   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
196   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
197   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
198   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
199   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
200   store i32 %asmresult, i32* %__eax, align 4
201   store i32 %asmresult8, i32* %__ebx, align 4
202   store i32 %asmresult9, i32* %__ecx, align 4
203   store i32 %asmresult10, i32* %__edx, align 4
204   br label %return
206 return:                                           ; preds = %if.end, %if.then
207   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
208   ret i32 %retval.0
211 declare void @exit(i32) noreturn
213 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
214 entry:
215   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
216   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
217   %tobool = icmp eq i32* %__sig, null
218   br i1 %tobool, label %if.end, label %if.then
220 if.then:                                          ; preds = %entry
221   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
222   store i32 %asmresult1, i32* %__sig, align 4
223   br label %if.end
225 if.end:                                           ; preds = %entry, %if.then
226   ret i32 %asmresult
229 !0 = metadata !{i32 -2147343332, i32 -2147343324} 
230 !1 = metadata !{i32 -2147343455, i32 -2147343447} 
231 ; CHECK: define