Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-65.ll
blobb0c235e0d777f7c9dcf6bf94999f87248284bfe5
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-65.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-65.s > vect-65.ll
6 ; ModuleID = 'vect-65.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 @main1.ib = internal unnamed_addr constant [4 x [4 x [16 x i32]]] [[4 x [16 x i32]] [[16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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]], [4 x [16 x i32]] [[16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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]], [4 x [16 x i32]] [[16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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]], [4 x [16 x i32]] [[16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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], [16 x i32] [i32 0, 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
12 define i32 @main1() nounwind uwtable noinline {
13 entry:
14   %ib = alloca [4 x [4 x [16 x i32]]], align 16
15   %ia = alloca [4 x [4 x [16 x i32]]], align 16
16   %ic = alloca [16 x i32], align 16
17   %tmp = bitcast [4 x [4 x [16 x i32]]]* %ib to i8*
18   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* bitcast ([4 x [4 x [16 x i32]]]* @main1.ib to i8*), i64 1024, i32 16, i1 false)
19   br label %for.cond
21 for.cond:                                         ; preds = %for.inc22, %entry
22   %indvar21 = phi i64 [ %indvar.next22, %for.inc22 ], [ 0, %entry ]
23   %exitcond24 = icmp ne i64 %indvar21, 4
24   br i1 %exitcond24, label %for.body, label %for.end25
26 for.body:                                         ; preds = %for.cond
27   br label %for.cond4
29 for.cond4:                                        ; preds = %for.inc, %for.body
30   %indvar18 = phi i64 [ %indvar.next19, %for.inc ], [ 0, %for.body ]
31   %arrayidx12 = getelementptr [4 x [4 x [16 x i32]]]* %ib, i64 0, i64 2, i64 %indvar21, i64 %indvar18
32   %arrayidx20 = getelementptr [4 x [4 x [16 x i32]]]* %ia, i64 0, i64 %indvar21, i64 1, i64 %indvar18
33   %exitcond20 = icmp ne i64 %indvar18, 16
34   br i1 %exitcond20, label %for.body7, label %for.end
36 for.body7:                                        ; preds = %for.cond4
37   %tmp13 = load i32* %arrayidx12, align 4
38   store i32 %tmp13, i32* %arrayidx20, align 4
39   br label %for.inc
41 for.inc:                                          ; preds = %for.body7
42   %indvar.next19 = add i64 %indvar18, 1
43   br label %for.cond4
45 for.end:                                          ; preds = %for.cond4
46   br label %for.inc22
48 for.inc22:                                        ; preds = %for.end
49   %indvar.next22 = add i64 %indvar21, 1
50   br label %for.cond
52 for.end25:                                        ; preds = %for.cond
53   br label %for.cond26
55 for.cond26:                                       ; preds = %for.inc55, %for.end25
56   %indvar14 = phi i64 [ %indvar.next15, %for.inc55 ], [ 0, %for.end25 ]
57   %i.1 = trunc i64 %indvar14 to i32
58   %cmp28 = icmp slt i32 %i.1, 4
59   br i1 %cmp28, label %for.body29, label %for.end58
61 for.body29:                                       ; preds = %for.cond26
62   br label %for.cond30
64 for.cond30:                                       ; preds = %for.inc51, %for.body29
65   %indvar12 = phi i64 [ %indvar.next13, %for.inc51 ], [ 0, %for.body29 ]
66   %arrayidx40 = getelementptr [4 x [4 x [16 x i32]]]* %ia, i64 0, i64 %indvar14, i64 1, i64 %indvar12
67   %arrayidx48 = getelementptr [4 x [4 x [16 x i32]]]* %ib, i64 0, i64 2, i64 %indvar14, i64 %indvar12
68   %j.1 = trunc i64 %indvar12 to i32
69   %cmp32 = icmp slt i32 %j.1, 16
70   br i1 %cmp32, label %for.body33, label %for.end54
72 for.body33:                                       ; preds = %for.cond30
73   %tmp41 = load i32* %arrayidx40, align 4
74   %tmp49 = load i32* %arrayidx48, align 4
75   %cmp50 = icmp eq i32 %tmp41, %tmp49
76   br i1 %cmp50, label %if.end, label %if.then
78 if.then:                                          ; preds = %for.body33
79   call void @abort() noreturn nounwind
80   unreachable
82 if.end:                                           ; preds = %for.body33
83   br label %for.inc51
85 for.inc51:                                        ; preds = %if.end
86   %indvar.next13 = add i64 %indvar12, 1
87   br label %for.cond30
89 for.end54:                                        ; preds = %for.cond30
90   br label %for.inc55
92 for.inc55:                                        ; preds = %for.end54
93   %indvar.next15 = add i64 %indvar14, 1
94   br label %for.cond26
96 for.end58:                                        ; preds = %for.cond26
97   br label %for.cond59
99 for.cond59:                                       ; preds = %for.inc82, %for.end58
100   %indvar7 = phi i64 [ %indvar.next8, %for.inc82 ], [ 0, %for.end58 ]
101   %exitcond10 = icmp ne i64 %indvar7, 4
102   br i1 %exitcond10, label %for.body62, label %for.end85
104 for.body62:                                       ; preds = %for.cond59
105   br label %for.cond63
107 for.cond63:                                       ; preds = %for.inc78, %for.body62
108   %indvar5 = phi i64 [ %indvar.next6, %for.inc78 ], [ 0, %for.body62 ]
109   %arrayidx73 = getelementptr [4 x [4 x [16 x i32]]]* %ib, i64 0, i64 2, i64 %indvar7, i64 %indvar5
110   %arrayidx77 = getelementptr [16 x i32]* %ic, i64 0, i64 %indvar5
111   %exitcond = icmp ne i64 %indvar5, 16
112   br i1 %exitcond, label %for.body66, label %for.end81
114 for.body66:                                       ; preds = %for.cond63
115   %tmp74 = load i32* %arrayidx73, align 4
116   store i32 %tmp74, i32* %arrayidx77, align 4
117   br label %for.inc78
119 for.inc78:                                        ; preds = %for.body66
120   %indvar.next6 = add i64 %indvar5, 1
121   br label %for.cond63
123 for.end81:                                        ; preds = %for.cond63
124   br label %for.inc82
126 for.inc82:                                        ; preds = %for.end81
127   %indvar.next8 = add i64 %indvar7, 1
128   br label %for.cond59
130 for.end85:                                        ; preds = %for.cond59
131   br label %for.cond86
133 for.cond86:                                       ; preds = %for.inc113, %for.end85
134   %indvar1 = phi i64 [ %indvar.next2, %for.inc113 ], [ 0, %for.end85 ]
135   %i.3 = trunc i64 %indvar1 to i32
136   %cmp88 = icmp slt i32 %i.3, 4
137   br i1 %cmp88, label %for.body89, label %for.end116
139 for.body89:                                       ; preds = %for.cond86
140   br label %for.cond90
142 for.cond90:                                       ; preds = %for.inc109, %for.body89
143   %indvar = phi i64 [ %indvar.next, %for.inc109 ], [ 0, %for.body89 ]
144   %arrayidx104 = getelementptr [4 x [4 x [16 x i32]]]* %ib, i64 0, i64 2, i64 %indvar1, i64 %indvar
145   %arrayidx96 = getelementptr [16 x i32]* %ic, i64 0, i64 %indvar
146   %j.3 = trunc i64 %indvar to i32
147   %cmp92 = icmp slt i32 %j.3, 16
148   br i1 %cmp92, label %for.body93, label %for.end112
150 for.body93:                                       ; preds = %for.cond90
151   %tmp97 = load i32* %arrayidx96, align 4
152   %tmp105 = load i32* %arrayidx104, align 4
153   %cmp106 = icmp eq i32 %tmp97, %tmp105
154   br i1 %cmp106, label %if.end108, label %if.then107
156 if.then107:                                       ; preds = %for.body93
157   call void @abort() noreturn nounwind
158   unreachable
160 if.end108:                                        ; preds = %for.body93
161   br label %for.inc109
163 for.inc109:                                       ; preds = %if.end108
164   %indvar.next = add i64 %indvar, 1
165   br label %for.cond90
167 for.end112:                                       ; preds = %for.cond90
168   br label %for.inc113
170 for.inc113:                                       ; preds = %for.end112
171   %indvar.next2 = add i64 %indvar1, 1
172   br label %for.cond86
174 for.end116:                                       ; preds = %for.cond86
175   ret i32 0
178 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
180 declare void @abort() noreturn
182 define i32 @main() nounwind uwtable {
183 entry:
184   call void @check_vect()
185   %call = call i32 @main1()
186   ret i32 %call
189 define internal void @check_vect() nounwind uwtable noinline {
190 entry:
191   %a = alloca i32, align 4
192   %b = alloca i32, align 4
193   %c = alloca i32, align 4
194   %d = alloca i32, align 4
195   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
196   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
197   %tobool = icmp eq i32 %call1, 0
198   br i1 %tobool, label %if.then, label %lor.lhs.false
200 lor.lhs.false:                                    ; preds = %entry
201   %tmp4 = load i32* %d, align 4
202   %and6 = and i32 %tmp4, 67108864
203   %cmp = icmp eq i32 %and6, 0
204   br i1 %cmp, label %if.then, label %if.end
206 if.then:                                          ; preds = %entry, %lor.lhs.false
207   call void @exit(i32 0) noreturn nounwind
208   unreachable
210 if.end:                                           ; preds = %lor.lhs.false
211   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
212   ret void
215 declare void (i32)* @signal(i32, void (i32)*) nounwind
217 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
218 entry:
219   call void @exit(i32 0) noreturn nounwind
220   unreachable
222 return:                                           ; No predecessors!
223   ret void
226 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
227 entry:
228   %and = and i32 %__level, -2147483648
229   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
230   %cmp = icmp ult i32 %call, %__level
231   br i1 %cmp, label %if.then, label %if.end
233 if.then:                                          ; preds = %entry
234   br label %return
236 if.end:                                           ; preds = %entry
237   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
238   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
239   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
240   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
241   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
242   store i32 %asmresult, i32* %__eax, align 4
243   store i32 %asmresult8, i32* %__ebx, align 4
244   store i32 %asmresult9, i32* %__ecx, align 4
245   store i32 %asmresult10, i32* %__edx, align 4
246   br label %return
248 return:                                           ; preds = %if.end, %if.then
249   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
250   ret i32 %retval.0
253 declare void @exit(i32) noreturn
255 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
256 entry:
257   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
258   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
259   %tobool = icmp eq i32* %__sig, null
260   br i1 %tobool, label %if.end, label %if.then
262 if.then:                                          ; preds = %entry
263   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
264   store i32 %asmresult1, i32* %__sig, align 4
265   br label %if.end
267 if.end:                                           ; preds = %entry, %if.then
268   ret i32 %asmresult
271 !0 = metadata !{i32 -2147341993, i32 -2147341985} 
272 !1 = metadata !{i32 -2147342116, i32 -2147342108} 
273 ; CHECK: define