Add compile command to each testcase
[gcc-vect-testsuite.git] / slp-34.ll
blob579e74088eb90a17a8726406d7a8dc56fe4fc4d2
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 slp-34.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-34.s > slp-34.ll
6 ; ModuleID = 'slp-34.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 @in = global [64 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, i16 32, i16 33, i16 34, i16 35, i16 36, i16 37, i16 38, i16 39, i16 40, i16 41, i16 42, i16 43, i16 44, i16 45, i16 46, i16 47, i16 48, i16 49, i16 50, i16 51, i16 52, i16 53, i16 54, i16 55, i16 56, i16 57, i16 58, i16 59, i16 60, i16 61, i16 62, i16 63], align 16
11 @in2 = global [64 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, i16 32, i16 33, i16 34, i16 35, i16 36, i16 37, i16 38, i16 39, i16 40, i16 41, i16 42, i16 43, i16 44, i16 45, i16 46, i16 47, i16 48, i16 49, i16 50, i16 51, i16 52, i16 53, i16 54, i16 55, i16 56, i16 57, i16 58, i16 59, i16 60, i16 61, i16 62, i16 63], align 16
13 define i32 @main1() nounwind uwtable {
14 entry:
15   %out = alloca [64 x i16], align 16
16   %out2 = alloca [64 x i16], align 16
17   br label %for.cond
19 for.cond:                                         ; preds = %for.inc, %entry
20   %indvar10 = phi i64 [ %indvar.next11, %for.inc ], [ 0, %entry ]
21   %tmp12 = mul i64 %indvar10, 5
22   %tmp14 = add i64 %tmp12, 4
23   %arrayidx103 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp14
24   %arrayidx94 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp14
25   %tmp15 = add i64 %tmp12, 3
26   %arrayidx89 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp15
27   %arrayidx80 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp15
28   %tmp16 = add i64 %tmp12, 2
29   %arrayidx75 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp16
30   %arrayidx66 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp16
31   %tmp17 = add i64 %tmp12, 1
32   %arrayidx61 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp17
33   %arrayidx52 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp17
34   %arrayidx47 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp12
35   %arrayidx39 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp12
36   %tmp18 = mul i64 %indvar10, 3
37   %tmp19 = add i64 %tmp18, 2
38   %arrayidx35 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp19
39   %arrayidx26 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp19
40   %tmp20 = add i64 %tmp18, 1
41   %arrayidx21 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp20
42   %arrayidx12 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp20
43   %arrayidx7 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp18
44   %arrayidx = getelementptr [64 x i16]* @in, i64 0, i64 %tmp18
45   %exitcond = icmp ne i64 %indvar10, 8
46   br i1 %exitcond, label %for.body, label %for.end
48 for.body:                                         ; preds = %for.cond
49   %tmp2 = load i16* %arrayidx, align 2
50   %add = add i16 %tmp2, 5
51   store i16 %add, i16* %arrayidx7, align 2
52   %tmp13 = load i16* %arrayidx12, align 2
53   %add15 = add i16 %tmp13, 6
54   store i16 %add15, i16* %arrayidx21, align 2
55   %tmp27 = load i16* %arrayidx26, align 2
56   %add29 = add i16 %tmp27, 16
57   store i16 %add29, i16* %arrayidx35, align 2
58   %tmp40 = load i16* %arrayidx39, align 2
59   %add42 = add i16 %tmp40, 2
60   store i16 %add42, i16* %arrayidx47, align 2
61   %tmp53 = load i16* %arrayidx52, align 2
62   %add55 = add i16 %tmp53, 2
63   store i16 %add55, i16* %arrayidx61, align 2
64   %tmp67 = load i16* %arrayidx66, align 2
65   %add69 = add i16 %tmp67, 1
66   store i16 %add69, i16* %arrayidx75, align 2
67   %tmp81 = load i16* %arrayidx80, align 2
68   %add83 = add i16 %tmp81, 3
69   store i16 %add83, i16* %arrayidx89, align 2
70   %tmp95 = load i16* %arrayidx94, align 2
71   %add97 = add i16 %tmp95, 13
72   store i16 %add97, i16* %arrayidx103, align 2
73   br label %for.inc
75 for.inc:                                          ; preds = %for.body
76   %indvar.next11 = add i64 %indvar10, 1
77   br label %for.cond
79 for.end:                                          ; preds = %for.cond
80   br label %for.cond105
82 for.cond105:                                      ; preds = %for.inc248, %for.end
83   %indvar = phi i64 [ %indvar.next, %for.inc248 ], [ 0, %for.end ]
84   %tmp = mul i64 %indvar, 5
85   %tmp1 = add i64 %tmp, 4
86   %arrayidx242 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp1
87   %arrayidx235 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp1
88   %tmp3 = add i64 %tmp, 3
89   %arrayidx224 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp3
90   %arrayidx217 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp3
91   %tmp4 = add i64 %tmp, 2
92   %arrayidx206 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp4
93   %arrayidx199 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp4
94   %tmp5 = add i64 %tmp, 1
95   %arrayidx188 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp5
96   %arrayidx181 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp5
97   %arrayidx170 = getelementptr [64 x i16]* @in2, i64 0, i64 %tmp
98   %arrayidx164 = getelementptr [64 x i16]* %out2, i64 0, i64 %tmp
99   %tmp6 = mul i64 %indvar, 3
100   %tmp7 = add i64 %tmp6, 2
101   %arrayidx154 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp7
102   %arrayidx147 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp7
103   %tmp8 = add i64 %tmp6, 1
104   %arrayidx136 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp8
105   %arrayidx129 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp8
106   %arrayidx119 = getelementptr [64 x i16]* @in, i64 0, i64 %tmp6
107   %arrayidx113 = getelementptr [64 x i16]* %out, i64 0, i64 %tmp6
108   %i.1 = trunc i64 %indvar to i32
109   %cmp107 = icmp slt i32 %i.1, 8
110   br i1 %cmp107, label %for.body109, label %for.end251
112 for.body109:                                      ; preds = %for.cond105
113   %tmp114 = load i16* %arrayidx113, align 2
114   %conv115 = zext i16 %tmp114 to i32
115   %tmp120 = load i16* %arrayidx119, align 2
116   %conv121 = zext i16 %tmp120 to i32
117   %add122 = add nsw i32 %conv121, 5
118   %cmp123 = icmp eq i32 %conv115, %add122
119   br i1 %cmp123, label %lor.lhs.false, label %if.then
121 lor.lhs.false:                                    ; preds = %for.body109
122   %tmp130 = load i16* %arrayidx129, align 2
123   %conv131 = zext i16 %tmp130 to i32
124   %tmp137 = load i16* %arrayidx136, align 2
125   %conv138 = zext i16 %tmp137 to i32
126   %add139 = add nsw i32 %conv138, 6
127   %cmp140 = icmp eq i32 %conv131, %add139
128   br i1 %cmp140, label %lor.lhs.false142, label %if.then
130 lor.lhs.false142:                                 ; preds = %lor.lhs.false
131   %tmp148 = load i16* %arrayidx147, align 2
132   %conv149 = zext i16 %tmp148 to i32
133   %tmp155 = load i16* %arrayidx154, align 2
134   %conv156 = zext i16 %tmp155 to i32
135   %add157 = add nsw i32 %conv156, 16
136   %cmp158 = icmp eq i32 %conv149, %add157
137   br i1 %cmp158, label %lor.lhs.false160, label %if.then
139 lor.lhs.false160:                                 ; preds = %lor.lhs.false142
140   %tmp165 = load i16* %arrayidx164, align 2
141   %conv166 = zext i16 %tmp165 to i32
142   %tmp171 = load i16* %arrayidx170, align 2
143   %conv172 = zext i16 %tmp171 to i32
144   %add173 = add nsw i32 %conv172, 2
145   %cmp174 = icmp eq i32 %conv166, %add173
146   br i1 %cmp174, label %lor.lhs.false176, label %if.then
148 lor.lhs.false176:                                 ; preds = %lor.lhs.false160
149   %tmp182 = load i16* %arrayidx181, align 2
150   %conv183 = zext i16 %tmp182 to i32
151   %tmp189 = load i16* %arrayidx188, align 2
152   %conv190 = zext i16 %tmp189 to i32
153   %add191 = add nsw i32 %conv190, 2
154   %cmp192 = icmp eq i32 %conv183, %add191
155   br i1 %cmp192, label %lor.lhs.false194, label %if.then
157 lor.lhs.false194:                                 ; preds = %lor.lhs.false176
158   %tmp200 = load i16* %arrayidx199, align 2
159   %conv201 = zext i16 %tmp200 to i32
160   %tmp207 = load i16* %arrayidx206, align 2
161   %conv208 = zext i16 %tmp207 to i32
162   %add209 = add nsw i32 %conv208, 1
163   %cmp210 = icmp eq i32 %conv201, %add209
164   br i1 %cmp210, label %lor.lhs.false212, label %if.then
166 lor.lhs.false212:                                 ; preds = %lor.lhs.false194
167   %tmp218 = load i16* %arrayidx217, align 2
168   %conv219 = zext i16 %tmp218 to i32
169   %tmp225 = load i16* %arrayidx224, align 2
170   %conv226 = zext i16 %tmp225 to i32
171   %add227 = add nsw i32 %conv226, 3
172   %cmp228 = icmp eq i32 %conv219, %add227
173   br i1 %cmp228, label %lor.lhs.false230, label %if.then
175 lor.lhs.false230:                                 ; preds = %lor.lhs.false212
176   %tmp236 = load i16* %arrayidx235, align 2
177   %conv237 = zext i16 %tmp236 to i32
178   %tmp243 = load i16* %arrayidx242, align 2
179   %conv244 = zext i16 %tmp243 to i32
180   %add245 = add nsw i32 %conv244, 13
181   %cmp246 = icmp eq i32 %conv237, %add245
182   br i1 %cmp246, label %if.end, label %if.then
184 if.then:                                          ; preds = %lor.lhs.false230, %lor.lhs.false212, %lor.lhs.false194, %lor.lhs.false176, %lor.lhs.false160, %lor.lhs.false142, %lor.lhs.false, %for.body109
185   call void @abort() noreturn nounwind
186   unreachable
188 if.end:                                           ; preds = %lor.lhs.false230
189   br label %for.inc248
191 for.inc248:                                       ; preds = %if.end
192   %indvar.next = add i64 %indvar, 1
193   br label %for.cond105
195 for.end251:                                       ; preds = %for.cond105
196   ret i32 0
199 declare void @abort() noreturn
201 define i32 @main() nounwind uwtable {
202 entry:
203   call void @check_vect()
204   %call = call i32 @main1()
205   ret i32 0
208 define internal void @check_vect() nounwind uwtable noinline {
209 entry:
210   %a = alloca i32, align 4
211   %b = alloca i32, align 4
212   %c = alloca i32, align 4
213   %d = alloca i32, align 4
214   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
215   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
216   %tobool = icmp eq i32 %call1, 0
217   br i1 %tobool, label %if.then, label %lor.lhs.false
219 lor.lhs.false:                                    ; preds = %entry
220   %tmp4 = load i32* %d, align 4
221   %and6 = and i32 %tmp4, 67108864
222   %cmp = icmp eq i32 %and6, 0
223   br i1 %cmp, label %if.then, label %if.end
225 if.then:                                          ; preds = %entry, %lor.lhs.false
226   call void @exit(i32 0) noreturn nounwind
227   unreachable
229 if.end:                                           ; preds = %lor.lhs.false
230   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
231   ret void
234 declare void (i32)* @signal(i32, void (i32)*) nounwind
236 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
237 entry:
238   call void @exit(i32 0) noreturn nounwind
239   unreachable
241 return:                                           ; No predecessors!
242   ret void
245 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
246 entry:
247   %and = and i32 %__level, -2147483648
248   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
249   %cmp = icmp ult i32 %call, %__level
250   br i1 %cmp, label %if.then, label %if.end
252 if.then:                                          ; preds = %entry
253   br label %return
255 if.end:                                           ; preds = %entry
256   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
257   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
258   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
259   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
260   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
261   store i32 %asmresult, i32* %__eax, align 4
262   store i32 %asmresult8, i32* %__ebx, align 4
263   store i32 %asmresult9, i32* %__ecx, align 4
264   store i32 %asmresult10, i32* %__edx, align 4
265   br label %return
267 return:                                           ; preds = %if.end, %if.then
268   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
269   ret i32 %retval.0
272 declare void @exit(i32) noreturn
274 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
275 entry:
276   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
277   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
278   %tobool = icmp eq i32* %__sig, null
279   br i1 %tobool, label %if.end, label %if.then
281 if.then:                                          ; preds = %entry
282   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
283   store i32 %asmresult1, i32* %__sig, align 4
284   br label %if.end
286 if.end:                                           ; preds = %entry, %if.then
287   ret i32 %asmresult
290 !0 = metadata !{i32 -2147342617, i32 -2147342609} 
291 !1 = metadata !{i32 -2147342740, i32 -2147342732} 
292 ; CHECK: define