Add compile command to each testcase
[gcc-vect-testsuite.git] / slp-multitypes-2.ll
blob36b3fc38dca76e09d2409b534cde300f0fce2b8e
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-multitypes-2.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-multitypes-2.s > slp-multitypes-2.ll
6 ; ModuleID = 'slp-multitypes-2.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 @main1(i16 zeroext %a0, i16 zeroext %a1, i16 zeroext %a2, i16 zeroext %a3, i16 zeroext %a4, i16 zeroext %a5, i16 zeroext %a6, i16 zeroext %a7, i16 zeroext %a8, i16 zeroext %a9, i16 zeroext %a10, i16 zeroext %a11, i16 zeroext %a12, i16 zeroext %a13, i16 zeroext %a14, i16 zeroext %a15, i8 zeroext %b0, i8 zeroext %b1) nounwind uwtable noinline {
11 entry:
12   %out = alloca [2048 x i16], align 16
13   %out2 = alloca [2048 x i8], align 16
14   br label %for.cond
16 for.cond:                                         ; preds = %for.inc, %entry
17   %indvar52 = phi i64 [ %indvar.next53, %for.inc ], [ 0, %entry ]
18   %tmp54 = mul i64 %indvar52, 2
19   %tmp55 = add i64 %tmp54, 1
20   %arrayidx102 = getelementptr [2048 x i8]* %out2, i64 0, i64 %tmp55
21   %arrayidx96 = getelementptr [2048 x i8]* %out2, i64 0, i64 %tmp54
22   %tmp56 = mul i64 %indvar52, 16
23   %tmp57 = add i64 %tmp56, 15
24   %arrayidx91 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp57
25   %tmp58 = add i64 %tmp56, 14
26   %arrayidx85 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp58
27   %tmp59 = add i64 %tmp56, 13
28   %arrayidx79 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp59
29   %tmp60 = add i64 %tmp56, 12
30   %arrayidx73 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp60
31   %tmp61 = add i64 %tmp56, 11
32   %arrayidx67 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp61
33   %tmp62 = add i64 %tmp56, 10
34   %arrayidx61 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp62
35   %tmp63 = add i64 %tmp56, 9
36   %arrayidx55 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp63
37   %tmp64 = add i64 %tmp56, 8
38   %arrayidx49 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp64
39   %tmp65 = add i64 %tmp56, 7
40   %arrayidx43 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp65
41   %tmp66 = add i64 %tmp56, 6
42   %arrayidx37 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp66
43   %tmp67 = add i64 %tmp56, 5
44   %arrayidx31 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp67
45   %tmp68 = add i64 %tmp56, 4
46   %arrayidx25 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp68
47   %tmp69 = add i64 %tmp56, 3
48   %arrayidx19 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp69
49   %tmp70 = add i64 %tmp56, 2
50   %arrayidx13 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp70
51   %tmp71 = add i64 %tmp56, 1
52   %arrayidx7 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp71
53   %arrayidx = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp56
54   %exitcond = icmp ne i64 %indvar52, 128
55   br i1 %exitcond, label %for.body, label %for.end
57 for.body:                                         ; preds = %for.cond
58   store i16 %a8, i16* %arrayidx, align 16
59   store i16 %a7, i16* %arrayidx7, align 2
60   store i16 %a1, i16* %arrayidx13, align 4
61   store i16 %a2, i16* %arrayidx19, align 2
62   store i16 %a8, i16* %arrayidx25, align 8
63   store i16 %a5, i16* %arrayidx31, align 2
64   store i16 %a5, i16* %arrayidx37, align 4
65   store i16 %a4, i16* %arrayidx43, align 2
66   store i16 %a12, i16* %arrayidx49, align 16
67   store i16 %a13, i16* %arrayidx55, align 2
68   store i16 %a14, i16* %arrayidx61, align 4
69   store i16 %a15, i16* %arrayidx67, align 2
70   store i16 %a6, i16* %arrayidx73, align 8
71   store i16 %a9, i16* %arrayidx79, align 2
72   store i16 %a0, i16* %arrayidx85, align 4
73   store i16 %a7, i16* %arrayidx91, align 2
74   store i8 %b1, i8* %arrayidx96, align 2
75   store i8 %b0, i8* %arrayidx102, align 1
76   br label %for.inc
78 for.inc:                                          ; preds = %for.body
79   %indvar.next53 = add i64 %indvar52, 1
80   br label %for.cond
82 for.end:                                          ; preds = %for.cond
83   br label %for.cond104
85 for.cond104:                                      ; preds = %for.inc319, %for.end
86   %indvar = phi i64 [ %indvar.next, %for.inc319 ], [ 0, %for.end ]
87   %tmp = mul i64 %indvar, 2
88   %tmp34 = add i64 %tmp, 1
89   %arrayidx312 = getelementptr [2048 x i8]* %out2, i64 0, i64 %tmp34
90   %arrayidx300 = getelementptr [2048 x i8]* %out2, i64 0, i64 %tmp
91   %tmp35 = mul i64 %indvar, 16
92   %tmp36 = add i64 %tmp35, 15
93   %arrayidx289 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp36
94   %tmp37 = add i64 %tmp35, 14
95   %arrayidx277 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp37
96   %tmp38 = add i64 %tmp35, 13
97   %arrayidx265 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp38
98   %tmp39 = add i64 %tmp35, 12
99   %arrayidx253 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp39
100   %tmp40 = add i64 %tmp35, 11
101   %arrayidx241 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp40
102   %tmp41 = add i64 %tmp35, 10
103   %arrayidx229 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp41
104   %tmp42 = add i64 %tmp35, 9
105   %arrayidx217 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp42
106   %tmp43 = add i64 %tmp35, 8
107   %arrayidx205 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp43
108   %tmp44 = add i64 %tmp35, 7
109   %arrayidx193 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp44
110   %tmp45 = add i64 %tmp35, 6
111   %arrayidx181 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp45
112   %tmp46 = add i64 %tmp35, 5
113   %arrayidx169 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp46
114   %tmp47 = add i64 %tmp35, 4
115   %arrayidx157 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp47
116   %tmp48 = add i64 %tmp35, 3
117   %arrayidx145 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp48
118   %tmp49 = add i64 %tmp35, 2
119   %arrayidx133 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp49
120   %tmp50 = add i64 %tmp35, 1
121   %arrayidx121 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp50
122   %arrayidx111 = getelementptr [2048 x i16]* %out, i64 0, i64 %tmp35
123   %i.1 = trunc i64 %indvar to i32
124   %cmp106 = icmp slt i32 %i.1, 128
125   br i1 %cmp106, label %for.body107, label %for.end322
127 for.body107:                                      ; preds = %for.cond104
128   %tmp112 = load i16* %arrayidx111, align 16
129   %cmp115 = icmp eq i16 %tmp112, %a8
130   br i1 %cmp115, label %lor.lhs.false, label %if.then
132 lor.lhs.false:                                    ; preds = %for.body107
133   %tmp122 = load i16* %arrayidx121, align 2
134   %cmp126 = icmp eq i16 %tmp122, %a7
135   br i1 %cmp126, label %lor.lhs.false128, label %if.then
137 lor.lhs.false128:                                 ; preds = %lor.lhs.false
138   %tmp134 = load i16* %arrayidx133, align 4
139   %cmp138 = icmp eq i16 %tmp134, %a1
140   br i1 %cmp138, label %lor.lhs.false140, label %if.then
142 lor.lhs.false140:                                 ; preds = %lor.lhs.false128
143   %tmp146 = load i16* %arrayidx145, align 2
144   %cmp150 = icmp eq i16 %tmp146, %a2
145   br i1 %cmp150, label %lor.lhs.false152, label %if.then
147 lor.lhs.false152:                                 ; preds = %lor.lhs.false140
148   %tmp158 = load i16* %arrayidx157, align 8
149   %cmp162 = icmp eq i16 %tmp158, %a8
150   br i1 %cmp162, label %lor.lhs.false164, label %if.then
152 lor.lhs.false164:                                 ; preds = %lor.lhs.false152
153   %tmp170 = load i16* %arrayidx169, align 2
154   %cmp174 = icmp eq i16 %tmp170, %a5
155   br i1 %cmp174, label %lor.lhs.false176, label %if.then
157 lor.lhs.false176:                                 ; preds = %lor.lhs.false164
158   %tmp182 = load i16* %arrayidx181, align 4
159   %cmp186 = icmp eq i16 %tmp182, %a5
160   br i1 %cmp186, label %lor.lhs.false188, label %if.then
162 lor.lhs.false188:                                 ; preds = %lor.lhs.false176
163   %tmp194 = load i16* %arrayidx193, align 2
164   %cmp198 = icmp eq i16 %tmp194, %a4
165   br i1 %cmp198, label %lor.lhs.false200, label %if.then
167 lor.lhs.false200:                                 ; preds = %lor.lhs.false188
168   %tmp206 = load i16* %arrayidx205, align 16
169   %cmp210 = icmp eq i16 %tmp206, %a12
170   br i1 %cmp210, label %lor.lhs.false212, label %if.then
172 lor.lhs.false212:                                 ; preds = %lor.lhs.false200
173   %tmp218 = load i16* %arrayidx217, align 2
174   %cmp222 = icmp eq i16 %tmp218, %a13
175   br i1 %cmp222, label %lor.lhs.false224, label %if.then
177 lor.lhs.false224:                                 ; preds = %lor.lhs.false212
178   %tmp230 = load i16* %arrayidx229, align 4
179   %cmp234 = icmp eq i16 %tmp230, %a14
180   br i1 %cmp234, label %lor.lhs.false236, label %if.then
182 lor.lhs.false236:                                 ; preds = %lor.lhs.false224
183   %tmp242 = load i16* %arrayidx241, align 2
184   %cmp246 = icmp eq i16 %tmp242, %a15
185   br i1 %cmp246, label %lor.lhs.false248, label %if.then
187 lor.lhs.false248:                                 ; preds = %lor.lhs.false236
188   %tmp254 = load i16* %arrayidx253, align 8
189   %cmp258 = icmp eq i16 %tmp254, %a6
190   br i1 %cmp258, label %lor.lhs.false260, label %if.then
192 lor.lhs.false260:                                 ; preds = %lor.lhs.false248
193   %tmp266 = load i16* %arrayidx265, align 2
194   %cmp270 = icmp eq i16 %tmp266, %a9
195   br i1 %cmp270, label %lor.lhs.false272, label %if.then
197 lor.lhs.false272:                                 ; preds = %lor.lhs.false260
198   %tmp278 = load i16* %arrayidx277, align 4
199   %cmp282 = icmp eq i16 %tmp278, %a0
200   br i1 %cmp282, label %lor.lhs.false284, label %if.then
202 lor.lhs.false284:                                 ; preds = %lor.lhs.false272
203   %tmp290 = load i16* %arrayidx289, align 2
204   %cmp294 = icmp eq i16 %tmp290, %a7
205   br i1 %cmp294, label %lor.lhs.false296, label %if.then
207 lor.lhs.false296:                                 ; preds = %lor.lhs.false284
208   %tmp301 = load i8* %arrayidx300, align 2
209   %cmp305 = icmp eq i8 %tmp301, %b1
210   br i1 %cmp305, label %lor.lhs.false307, label %if.then
212 lor.lhs.false307:                                 ; preds = %lor.lhs.false296
213   %tmp313 = load i8* %arrayidx312, align 1
214   %cmp317 = icmp eq i8 %tmp313, %b0
215   br i1 %cmp317, label %if.end, label %if.then
217 if.then:                                          ; preds = %lor.lhs.false307, %lor.lhs.false296, %lor.lhs.false284, %lor.lhs.false272, %lor.lhs.false260, %lor.lhs.false248, %lor.lhs.false236, %lor.lhs.false224, %lor.lhs.false212, %lor.lhs.false200, %lor.lhs.false188, %lor.lhs.false176, %lor.lhs.false164, %lor.lhs.false152, %lor.lhs.false140, %lor.lhs.false128, %lor.lhs.false, %for.body107
218   call void @abort() noreturn nounwind
219   unreachable
221 if.end:                                           ; preds = %lor.lhs.false307
222   br label %for.inc319
224 for.inc319:                                       ; preds = %if.end
225   %indvar.next = add i64 %indvar, 1
226   br label %for.cond104
228 for.end322:                                       ; preds = %for.cond104
229   ret i32 0
232 declare void @abort() noreturn
234 define i32 @main() nounwind uwtable {
235 entry:
236   call void @check_vect()
237   %call = call i32 @main1(i16 zeroext 15, i16 zeroext 14, i16 zeroext 13, i16 zeroext 12, i16 zeroext 11, i16 zeroext 10, i16 zeroext 9, i16 zeroext 8, i16 zeroext 7, i16 zeroext 6, i16 zeroext 5, i16 zeroext 4, i16 zeroext 3, i16 zeroext 2, i16 zeroext 1, i16 zeroext 0, i8 zeroext 20, i8 zeroext 21)
238   ret i32 0
241 define internal void @check_vect() nounwind uwtable noinline {
242 entry:
243   %a = alloca i32, align 4
244   %b = alloca i32, align 4
245   %c = alloca i32, align 4
246   %d = alloca i32, align 4
247   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
248   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
249   %tobool = icmp eq i32 %call1, 0
250   br i1 %tobool, label %if.then, label %lor.lhs.false
252 lor.lhs.false:                                    ; preds = %entry
253   %tmp4 = load i32* %d, align 4
254   %and6 = and i32 %tmp4, 67108864
255   %cmp = icmp eq i32 %and6, 0
256   br i1 %cmp, label %if.then, label %if.end
258 if.then:                                          ; preds = %entry, %lor.lhs.false
259   call void @exit(i32 0) noreturn nounwind
260   unreachable
262 if.end:                                           ; preds = %lor.lhs.false
263   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
264   ret void
267 declare void (i32)* @signal(i32, void (i32)*) nounwind
269 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
270 entry:
271   call void @exit(i32 0) noreturn nounwind
272   unreachable
274 return:                                           ; No predecessors!
275   ret void
278 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
279 entry:
280   %and = and i32 %__level, -2147483648
281   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
282   %cmp = icmp ult i32 %call, %__level
283   br i1 %cmp, label %if.then, label %if.end
285 if.then:                                          ; preds = %entry
286   br label %return
288 if.end:                                           ; preds = %entry
289   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
290   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
291   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
292   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
293   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
294   store i32 %asmresult, i32* %__eax, align 4
295   store i32 %asmresult8, i32* %__ebx, align 4
296   store i32 %asmresult9, i32* %__ecx, align 4
297   store i32 %asmresult10, i32* %__edx, align 4
298   br label %return
300 return:                                           ; preds = %if.end, %if.then
301   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
302   ret i32 %retval.0
305 declare void @exit(i32) noreturn
307 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
308 entry:
309   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
310   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
311   %tobool = icmp eq i32* %__sig, null
312   br i1 %tobool, label %if.end, label %if.then
314 if.then:                                          ; preds = %entry
315   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
316   store i32 %asmresult1, i32* %__sig, align 4
317   br label %if.end
319 if.end:                                           ; preds = %entry, %if.then
320   ret i32 %asmresult
323 !0 = metadata !{i32 -2147342122, i32 -2147342114} 
324 !1 = metadata !{i32 -2147342245, i32 -2147342237} 
325 ; CHECK: define