Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-109.ll
blob697a11ae3f18ece2dcbb50b280e698643c646049
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-109.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-109.s > vect-109.ll
6 ; ModuleID = 'vect-109.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 @sc = global [32 x i16] [i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 16, i16 17, i16 18, i16 19, i16 20, i16 21, i16 22, i16 23, i16 24, i16 25, i16 26, i16 27, i16 28, i16 29, i16 30, i16 31], align 16
11 @sb = global [32 x i16] [i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15, i16 16, i16 17, i16 18, i16 19, i16 20, i16 21, i16 22, i16 23, i16 24, i16 25, i16 26, i16 27, i16 28, i16 29, i16 30, i16 31], align 16
12 @ic = global [32 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, i32 0, 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 @ib = global [32 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, i32 0, 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
14 @sa = common global [32 x i16] zeroinitializer, align 16
15 @ia = common global [32 x i32] zeroinitializer, align 16
17 define i32 @main1(i32 %n) nounwind uwtable noinline {
18 entry:
19   %tmp9 = icmp sgt i32 %n, 0
20   %smax = select i1 %tmp9, i32 %n, i32 0
21   %tmp10 = zext i32 %smax to i64
22   br label %for.cond
24 for.cond:                                         ; preds = %for.inc, %entry
25   %indvar7 = phi i64 [ %indvar.next8, %for.inc ], [ 0, %entry ]
26   %tmp11 = add i64 %indvar7, 1
27   %arrayidx26 = getelementptr [32 x i32]* @ia, i64 0, i64 %tmp11
28   %arrayidx20 = getelementptr [32 x i32]* @ic, i64 0, i64 %indvar7
29   %arrayidx16 = getelementptr [32 x i32]* @ib, i64 0, i64 %indvar7
30   %tmp12 = add i64 %indvar7, 2
31   %add11 = trunc i64 %tmp12 to i32
32   %arrayidx6 = getelementptr [32 x i16]* @sc, i64 0, i64 %indvar7
33   %arrayidx = getelementptr [32 x i16]* @sb, i64 0, i64 %indvar7
34   %exitcond = icmp ne i64 %indvar7, %tmp10
35   br i1 %exitcond, label %for.body, label %for.end
37 for.body:                                         ; preds = %for.cond
38   %tmp3 = load i16* %arrayidx, align 2
39   %tmp7 = load i16* %arrayidx6, align 2
40   %add = add i16 %tmp3, %tmp7
41   %idxprom12 = sext i32 %add11 to i64
42   %arrayidx13 = getelementptr inbounds [32 x i16]* @sa, i64 0, i64 %idxprom12
43   store i16 %add, i16* %arrayidx13, align 2
44   %tmp17 = load i32* %arrayidx16, align 4
45   %tmp21 = load i32* %arrayidx20, align 4
46   %add22 = add nsw i32 %tmp17, %tmp21
47   store i32 %add22, i32* %arrayidx26, align 4
48   br label %for.inc
50 for.inc:                                          ; preds = %for.body
51   %indvar.next8 = add i64 %indvar7, 1
52   br label %for.cond
54 for.end:                                          ; preds = %for.cond
55   br label %for.cond28
57 for.cond28:                                       ; preds = %for.inc69, %for.end
58   %indvar = phi i64 [ %indvar.next, %for.inc69 ], [ 0, %for.end ]
59   %arrayidx64 = getelementptr [32 x i32]* @ic, i64 0, i64 %indvar
60   %arrayidx60 = getelementptr [32 x i32]* @ib, i64 0, i64 %indvar
61   %tmp = add i64 %indvar, 1
62   %arrayidx56 = getelementptr [32 x i32]* @ia, i64 0, i64 %tmp
63   %arrayidx47 = getelementptr [32 x i16]* @sc, i64 0, i64 %indvar
64   %arrayidx42 = getelementptr [32 x i16]* @sb, i64 0, i64 %indvar
65   %tmp4 = add i64 %indvar, 2
66   %add35 = trunc i64 %tmp4 to i32
67   %i.1 = trunc i64 %indvar to i32
68   %cmp31 = icmp slt i32 %i.1, %n
69   br i1 %cmp31, label %for.body33, label %for.end72
71 for.body33:                                       ; preds = %for.cond28
72   %idxprom36 = sext i32 %add35 to i64
73   %arrayidx37 = getelementptr inbounds [32 x i16]* @sa, i64 0, i64 %idxprom36
74   %tmp38 = load i16* %arrayidx37, align 2
75   %conv39 = sext i16 %tmp38 to i32
76   %tmp43 = load i16* %arrayidx42, align 2
77   %conv44 = sext i16 %tmp43 to i32
78   %tmp48 = load i16* %arrayidx47, align 2
79   %conv49 = sext i16 %tmp48 to i32
80   %add50 = add nsw i32 %conv44, %conv49
81   %cmp51 = icmp eq i32 %conv39, %add50
82   br i1 %cmp51, label %lor.lhs.false, label %if.then
84 lor.lhs.false:                                    ; preds = %for.body33
85   %tmp57 = load i32* %arrayidx56, align 4
86   %tmp61 = load i32* %arrayidx60, align 4
87   %tmp65 = load i32* %arrayidx64, align 4
88   %add66 = add nsw i32 %tmp61, %tmp65
89   %cmp67 = icmp eq i32 %tmp57, %add66
90   br i1 %cmp67, label %if.end, label %if.then
92 if.then:                                          ; preds = %lor.lhs.false, %for.body33
93   call void @abort() noreturn nounwind
94   unreachable
96 if.end:                                           ; preds = %lor.lhs.false
97   br label %for.inc69
99 for.inc69:                                        ; preds = %if.end
100   %indvar.next = add i64 %indvar, 1
101   br label %for.cond28
103 for.end72:                                        ; preds = %for.cond28
104   ret i32 0
107 declare void @abort() noreturn
109 define i32 @main2(i32 %n) nounwind uwtable {
110 entry:
111   %tmp8 = icmp sgt i32 %n, 0
112   %smax = select i1 %tmp8, i32 %n, i32 0
113   %tmp9 = zext i32 %smax to i64
114   br label %for.cond
116 for.cond:                                         ; preds = %for.inc, %entry
117   %indvar5 = phi i64 [ %indvar.next6, %for.inc ], [ 0, %entry ]
118   %arrayidx25 = getelementptr [32 x i16]* @sa, i64 0, i64 %indvar5
119   %arrayidx18 = getelementptr [32 x i16]* @sc, i64 0, i64 %indvar5
120   %arrayidx14 = getelementptr [32 x i16]* @sb, i64 0, i64 %indvar5
121   %tmp10 = add i64 %indvar5, 1
122   %arrayidx11 = getelementptr [32 x i32]* @ia, i64 0, i64 %tmp10
123   %arrayidx6 = getelementptr [32 x i32]* @ic, i64 0, i64 %indvar5
124   %arrayidx = getelementptr [32 x i32]* @ib, i64 0, i64 %indvar5
125   %exitcond = icmp ne i64 %indvar5, %tmp9
126   br i1 %exitcond, label %for.body, label %for.end
128 for.body:                                         ; preds = %for.cond
129   %tmp3 = load i32* %arrayidx, align 4
130   %tmp7 = load i32* %arrayidx6, align 4
131   %add = add nsw i32 %tmp3, %tmp7
132   store i32 %add, i32* %arrayidx11, align 4
133   %tmp15 = load i16* %arrayidx14, align 2
134   %tmp19 = load i16* %arrayidx18, align 2
135   %add21 = add i16 %tmp15, %tmp19
136   store i16 %add21, i16* %arrayidx25, align 2
137   br label %for.inc
139 for.inc:                                          ; preds = %for.body
140   %indvar.next6 = add i64 %indvar5, 1
141   br label %for.cond
143 for.end:                                          ; preds = %for.cond
144   br label %for.cond27
146 for.cond27:                                       ; preds = %for.inc67, %for.end
147   %indvar = phi i64 [ %indvar.next, %for.inc67 ], [ 0, %for.end ]
148   %arrayidx62 = getelementptr [32 x i32]* @ic, i64 0, i64 %indvar
149   %arrayidx58 = getelementptr [32 x i32]* @ib, i64 0, i64 %indvar
150   %tmp = add i64 %indvar, 1
151   %arrayidx54 = getelementptr [32 x i32]* @ia, i64 0, i64 %tmp
152   %arrayidx45 = getelementptr [32 x i16]* @sc, i64 0, i64 %indvar
153   %arrayidx40 = getelementptr [32 x i16]* @sb, i64 0, i64 %indvar
154   %arrayidx35 = getelementptr [32 x i16]* @sa, i64 0, i64 %indvar
155   %i.1 = trunc i64 %indvar to i32
156   %cmp30 = icmp slt i32 %i.1, %n
157   br i1 %cmp30, label %for.body32, label %for.end70
159 for.body32:                                       ; preds = %for.cond27
160   %tmp36 = load i16* %arrayidx35, align 2
161   %conv37 = sext i16 %tmp36 to i32
162   %tmp41 = load i16* %arrayidx40, align 2
163   %conv42 = sext i16 %tmp41 to i32
164   %tmp46 = load i16* %arrayidx45, align 2
165   %conv47 = sext i16 %tmp46 to i32
166   %add48 = add nsw i32 %conv42, %conv47
167   %cmp49 = icmp eq i32 %conv37, %add48
168   br i1 %cmp49, label %lor.lhs.false, label %if.then
170 lor.lhs.false:                                    ; preds = %for.body32
171   %tmp55 = load i32* %arrayidx54, align 4
172   %tmp59 = load i32* %arrayidx58, align 4
173   %tmp63 = load i32* %arrayidx62, align 4
174   %add64 = add nsw i32 %tmp59, %tmp63
175   %cmp65 = icmp eq i32 %tmp55, %add64
176   br i1 %cmp65, label %if.end, label %if.then
178 if.then:                                          ; preds = %lor.lhs.false, %for.body32
179   call void @abort() noreturn nounwind
180   unreachable
182 if.end:                                           ; preds = %lor.lhs.false
183   br label %for.inc67
185 for.inc67:                                        ; preds = %if.end
186   %indvar.next = add i64 %indvar, 1
187   br label %for.cond27
189 for.end70:                                        ; preds = %for.cond27
190   ret i32 0
193 define i32 @main() nounwind uwtable {
194 entry:
195   call void @check_vect()
196   %call = call i32 @main1(i32 30)
197   %call1 = call i32 @main2(i32 31)
198   ret i32 0
201 define internal void @check_vect() nounwind uwtable noinline {
202 entry:
203   %a = alloca i32, align 4
204   %b = alloca i32, align 4
205   %c = alloca i32, align 4
206   %d = alloca i32, align 4
207   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
208   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
209   %tobool = icmp eq i32 %call1, 0
210   br i1 %tobool, label %if.then, label %lor.lhs.false
212 lor.lhs.false:                                    ; preds = %entry
213   %tmp4 = load i32* %d, align 4
214   %and6 = and i32 %tmp4, 67108864
215   %cmp = icmp eq i32 %and6, 0
216   br i1 %cmp, label %if.then, label %if.end
218 if.then:                                          ; preds = %entry, %lor.lhs.false
219   call void @exit(i32 0) noreturn nounwind
220   unreachable
222 if.end:                                           ; preds = %lor.lhs.false
223   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
224   ret void
227 declare void (i32)* @signal(i32, void (i32)*) nounwind
229 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
230 entry:
231   call void @exit(i32 0) noreturn nounwind
232   unreachable
234 return:                                           ; No predecessors!
235   ret void
238 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
239 entry:
240   %and = and i32 %__level, -2147483648
241   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
242   %cmp = icmp ult i32 %call, %__level
243   br i1 %cmp, label %if.then, label %if.end
245 if.then:                                          ; preds = %entry
246   br label %return
248 if.end:                                           ; preds = %entry
249   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
250   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
251   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
252   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
253   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
254   store i32 %asmresult, i32* %__eax, align 4
255   store i32 %asmresult8, i32* %__ebx, align 4
256   store i32 %asmresult9, i32* %__ecx, align 4
257   store i32 %asmresult10, i32* %__edx, align 4
258   br label %return
260 return:                                           ; preds = %if.end, %if.then
261   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
262   ret i32 %retval.0
265 declare void @exit(i32) noreturn
267 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
268 entry:
269   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
270   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
271   %tobool = icmp eq i32* %__sig, null
272   br i1 %tobool, label %if.end, label %if.then
274 if.then:                                          ; preds = %entry
275   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
276   store i32 %asmresult1, i32* %__sig, align 4
277   br label %if.end
279 if.end:                                           ; preds = %entry, %if.then
280   ret i32 %asmresult
283 !0 = metadata !{i32 -2147342450, i32 -2147342442} 
284 !1 = metadata !{i32 -2147342573, i32 -2147342565} 
285 ; CHECK: define