Add compile command to each testcase
[gcc-vect-testsuite.git] / slp-multitypes-7.ll
blob7e1cd188bb7f1f2e6281ee74c21b04e1b6992d23
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-7.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer slp-multitypes-7.s > slp-multitypes-7.ll
6 ; ModuleID = 'slp-multitypes-7.s'
7 ; XFAIL: *
8 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"
9 target triple = "x86_64-unknown-linux-gnu"
11 @in = global [64 x i8] c"\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F\10\11\12\13\14\15\16\17\18\19\1A\1B\1C\1D\1E\1F !\22#$%&'()*+,-./0123456789:;<=>?", align 16
13 define i32 @main1() nounwind uwtable noinline {
14 entry:
15   %out = alloca [64 x i32], align 16
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar37 = phi i64 [ %indvar.next38, %for.inc ], [ 0, %entry ]
20   %tmp39 = mul i64 %indvar37, 8
21   %tmp40 = add i64 %tmp39, 7
22   %arrayidx97 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp40
23   %arrayidx89 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp40
24   %tmp41 = add i64 %tmp39, 6
25   %arrayidx84 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp41
26   %arrayidx76 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp41
27   %tmp42 = add i64 %tmp39, 5
28   %arrayidx71 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp42
29   %arrayidx63 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp42
30   %tmp43 = add i64 %tmp39, 4
31   %arrayidx58 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp43
32   %arrayidx50 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp43
33   %tmp44 = add i64 %tmp39, 3
34   %arrayidx45 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp44
35   %arrayidx37 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp44
36   %tmp45 = add i64 %tmp39, 2
37   %arrayidx32 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp45
38   %arrayidx24 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp45
39   %tmp46 = add i64 %tmp39, 1
40   %arrayidx19 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp46
41   %arrayidx11 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp46
42   %arrayidx6 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp39
43   %arrayidx = getelementptr [64 x i8]* @in, i64 0, i64 %tmp39
44   %exitcond = icmp ne i64 %indvar37, 8
45   br i1 %exitcond, label %for.body, label %for.end
47 for.body:                                         ; preds = %for.cond
48   %tmp2 = load i8* %arrayidx, align 8
49   %conv = sext i8 %tmp2 to i32
50   %add = add nsw i32 %conv, 1
51   store i32 %add, i32* %arrayidx6, align 16
52   %tmp12 = load i8* %arrayidx11, align 1
53   %conv13 = sext i8 %tmp12 to i32
54   %add14 = add nsw i32 %conv13, 2
55   store i32 %add14, i32* %arrayidx19, align 4
56   %tmp25 = load i8* %arrayidx24, align 2
57   %conv26 = sext i8 %tmp25 to i32
58   %add27 = add nsw i32 %conv26, 3
59   store i32 %add27, i32* %arrayidx32, align 8
60   %tmp38 = load i8* %arrayidx37, align 1
61   %conv39 = sext i8 %tmp38 to i32
62   %add40 = add nsw i32 %conv39, 4
63   store i32 %add40, i32* %arrayidx45, align 4
64   %tmp51 = load i8* %arrayidx50, align 4
65   %conv52 = sext i8 %tmp51 to i32
66   %add53 = add nsw i32 %conv52, 5
67   store i32 %add53, i32* %arrayidx58, align 16
68   %tmp64 = load i8* %arrayidx63, align 1
69   %conv65 = sext i8 %tmp64 to i32
70   %add66 = add nsw i32 %conv65, 6
71   store i32 %add66, i32* %arrayidx71, align 4
72   %tmp77 = load i8* %arrayidx76, align 2
73   %conv78 = sext i8 %tmp77 to i32
74   %add79 = add nsw i32 %conv78, 7
75   store i32 %add79, i32* %arrayidx84, align 8
76   %tmp90 = load i8* %arrayidx89, align 1
77   %conv91 = sext i8 %tmp90 to i32
78   %add92 = add nsw i32 %conv91, 8
79   store i32 %add92, i32* %arrayidx97, align 4
80   br label %for.inc
82 for.inc:                                          ; preds = %for.body
83   %indvar.next38 = add i64 %indvar37, 1
84   br label %for.cond
86 for.end:                                          ; preds = %for.cond
87   br label %for.cond99
89 for.cond99:                                       ; preds = %for.inc236, %for.end
90   %indvar = phi i64 [ %indvar.next, %for.inc236 ], [ 0, %for.end ]
91   %tmp = mul i64 %indvar, 8
92   %tmp29 = add i64 %tmp, 7
93   %arrayidx230 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp29
94   %arrayidx224 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp29
95   %tmp30 = add i64 %tmp, 6
96   %arrayidx213 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp30
97   %arrayidx207 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp30
98   %tmp31 = add i64 %tmp, 5
99   %arrayidx196 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp31
100   %arrayidx190 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp31
101   %tmp32 = add i64 %tmp, 4
102   %arrayidx179 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp32
103   %arrayidx173 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp32
104   %tmp33 = add i64 %tmp, 3
105   %arrayidx162 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp33
106   %arrayidx156 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp33
107   %tmp34 = add i64 %tmp, 2
108   %arrayidx145 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp34
109   %arrayidx139 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp34
110   %tmp35 = add i64 %tmp, 1
111   %arrayidx128 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp35
112   %arrayidx122 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp35
113   %arrayidx112 = getelementptr [64 x i8]* @in, i64 0, i64 %tmp
114   %arrayidx107 = getelementptr [64 x i32]* %out, i64 0, i64 %tmp
115   %i.1 = trunc i64 %indvar to i32
116   %cmp101 = icmp slt i32 %i.1, 8
117   br i1 %cmp101, label %for.body103, label %for.end239
119 for.body103:                                      ; preds = %for.cond99
120   %tmp108 = load i32* %arrayidx107, align 16
121   %tmp113 = load i8* %arrayidx112, align 8
122   %conv114 = sext i8 %tmp113 to i32
123   %add115 = add nsw i32 %conv114, 1
124   %cmp116 = icmp eq i32 %tmp108, %add115
125   br i1 %cmp116, label %lor.lhs.false, label %if.then
127 lor.lhs.false:                                    ; preds = %for.body103
128   %tmp123 = load i32* %arrayidx122, align 4
129   %tmp129 = load i8* %arrayidx128, align 1
130   %conv130 = sext i8 %tmp129 to i32
131   %add131 = add nsw i32 %conv130, 2
132   %cmp132 = icmp eq i32 %tmp123, %add131
133   br i1 %cmp132, label %lor.lhs.false134, label %if.then
135 lor.lhs.false134:                                 ; preds = %lor.lhs.false
136   %tmp140 = load i32* %arrayidx139, align 8
137   %tmp146 = load i8* %arrayidx145, align 2
138   %conv147 = sext i8 %tmp146 to i32
139   %add148 = add nsw i32 %conv147, 3
140   %cmp149 = icmp eq i32 %tmp140, %add148
141   br i1 %cmp149, label %lor.lhs.false151, label %if.then
143 lor.lhs.false151:                                 ; preds = %lor.lhs.false134
144   %tmp157 = load i32* %arrayidx156, align 4
145   %tmp163 = load i8* %arrayidx162, align 1
146   %conv164 = sext i8 %tmp163 to i32
147   %add165 = add nsw i32 %conv164, 4
148   %cmp166 = icmp eq i32 %tmp157, %add165
149   br i1 %cmp166, label %lor.lhs.false168, label %if.then
151 lor.lhs.false168:                                 ; preds = %lor.lhs.false151
152   %tmp174 = load i32* %arrayidx173, align 16
153   %tmp180 = load i8* %arrayidx179, align 4
154   %conv181 = sext i8 %tmp180 to i32
155   %add182 = add nsw i32 %conv181, 5
156   %cmp183 = icmp eq i32 %tmp174, %add182
157   br i1 %cmp183, label %lor.lhs.false185, label %if.then
159 lor.lhs.false185:                                 ; preds = %lor.lhs.false168
160   %tmp191 = load i32* %arrayidx190, align 4
161   %tmp197 = load i8* %arrayidx196, align 1
162   %conv198 = sext i8 %tmp197 to i32
163   %add199 = add nsw i32 %conv198, 6
164   %cmp200 = icmp eq i32 %tmp191, %add199
165   br i1 %cmp200, label %lor.lhs.false202, label %if.then
167 lor.lhs.false202:                                 ; preds = %lor.lhs.false185
168   %tmp208 = load i32* %arrayidx207, align 8
169   %tmp214 = load i8* %arrayidx213, align 2
170   %conv215 = sext i8 %tmp214 to i32
171   %add216 = add nsw i32 %conv215, 7
172   %cmp217 = icmp eq i32 %tmp208, %add216
173   br i1 %cmp217, label %lor.lhs.false219, label %if.then
175 lor.lhs.false219:                                 ; preds = %lor.lhs.false202
176   %tmp225 = load i32* %arrayidx224, align 4
177   %tmp231 = load i8* %arrayidx230, align 1
178   %conv232 = sext i8 %tmp231 to i32
179   %add233 = add nsw i32 %conv232, 8
180   %cmp234 = icmp eq i32 %tmp225, %add233
181   br i1 %cmp234, label %if.end, label %if.then
183 if.then:                                          ; preds = %lor.lhs.false219, %lor.lhs.false202, %lor.lhs.false185, %lor.lhs.false168, %lor.lhs.false151, %lor.lhs.false134, %lor.lhs.false, %for.body103
184   call void @abort() noreturn nounwind
185   unreachable
187 if.end:                                           ; preds = %lor.lhs.false219
188   br label %for.inc236
190 for.inc236:                                       ; preds = %if.end
191   %indvar.next = add i64 %indvar, 1
192   br label %for.cond99
194 for.end239:                                       ; preds = %for.cond99
195   ret i32 0
198 declare void @abort() noreturn
200 define i32 @main() nounwind uwtable {
201 entry:
202   call void @check_vect()
203   %call = call i32 @main1()
204   ret i32 0
207 define internal void @check_vect() nounwind uwtable noinline {
208 entry:
209   %a = alloca i32, align 4
210   %b = alloca i32, align 4
211   %c = alloca i32, align 4
212   %d = alloca i32, align 4
213   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
214   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
215   %tobool = icmp eq i32 %call1, 0
216   br i1 %tobool, label %if.then, label %lor.lhs.false
218 lor.lhs.false:                                    ; preds = %entry
219   %tmp4 = load i32* %d, align 4
220   %and6 = and i32 %tmp4, 67108864
221   %cmp = icmp eq i32 %and6, 0
222   br i1 %cmp, label %if.then, label %if.end
224 if.then:                                          ; preds = %entry, %lor.lhs.false
225   call void @exit(i32 0) noreturn nounwind
226   unreachable
228 if.end:                                           ; preds = %lor.lhs.false
229   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
230   ret void
233 declare void (i32)* @signal(i32, void (i32)*) nounwind
235 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
236 entry:
237   call void @exit(i32 0) noreturn nounwind
238   unreachable
240 return:                                           ; No predecessors!
241   ret void
244 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
245 entry:
246   %and = and i32 %__level, -2147483648
247   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
248   %cmp = icmp ult i32 %call, %__level
249   br i1 %cmp, label %if.then, label %if.end
251 if.then:                                          ; preds = %entry
252   br label %return
254 if.end:                                           ; preds = %entry
255   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
256   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
257   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
258   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
259   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
260   store i32 %asmresult, i32* %__eax, align 4
261   store i32 %asmresult8, i32* %__ebx, align 4
262   store i32 %asmresult9, i32* %__ecx, align 4
263   store i32 %asmresult10, i32* %__edx, align 4
264   br label %return
266 return:                                           ; preds = %if.end, %if.then
267   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
268   ret i32 %retval.0
271 declare void @exit(i32) noreturn
273 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
274 entry:
275   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
276   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
277   %tobool = icmp eq i32* %__sig, null
278   br i1 %tobool, label %if.end, label %if.then
280 if.then:                                          ; preds = %entry
281   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
282   store i32 %asmresult1, i32* %__sig, align 4
283   br label %if.end
285 if.end:                                           ; preds = %entry, %if.then
286   ret i32 %asmresult
289 !0 = metadata !{i32 -2147342763, i32 -2147342755} 
290 !1 = metadata !{i32 -2147342886, i32 -2147342878} 
291 ; CHECK: define