Add compile command to each testcase
[gcc-vect-testsuite.git] / bb-slp-16.ll
blob5c466ba5949c41d4c338570a9bfcd9bc1b962885
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 bb-slp-16.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer bb-slp-16.s > bb-slp-16.ll
6 ; ModuleID = 'bb-slp-16.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 [256 x i32] [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, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, 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, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, 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, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, 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, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63], align 16
11 @arr = global [32 x i32] [i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0], align 16
12 @out = common global [256 x i32] zeroinitializer, align 16
14 define i32 @main1(i32 %dummy) nounwind uwtable noinline {
15 entry:
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar25 = phi i64 [ %indvar.next26, %for.inc ], [ 0, %entry ]
20   %a.0 = phi i32 [ 0, %entry ], [ %a.1, %for.inc ]
21   %tmp27 = mul i64 %indvar25, 8
22   %tmp28 = add i64 %tmp27, 7
23   %incdec.ptr47 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp28
24   %tmp30 = add i64 %tmp27, 6
25   %incdec.ptr40 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp30
26   %tmp31 = add i64 %tmp27, 5
27   %incdec.ptr33 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp31
28   %tmp32 = add i64 %tmp27, 4
29   %incdec.ptr26 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp32
30   %tmp33 = add i64 %tmp27, 3
31   %incdec.ptr19 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp33
32   %tmp34 = add i64 %tmp27, 2
33   %incdec.ptr12 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp34
34   %tmp35 = add i64 %tmp27, 1
35   %incdec.ptr5 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp35
36   %pout.0 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp27
37   %incdec.ptr42 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp28
38   %incdec.ptr35 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp30
39   %incdec.ptr28 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp31
40   %incdec.ptr21 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp32
41   %incdec.ptr14 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp33
42   %incdec.ptr7 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp34
43   %incdec.ptr = getelementptr [256 x i32]* @in, i64 0, i64 %tmp35
44   %pin.0 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp27
45   %i.0 = trunc i64 %indvar25 to i32
46   %arrayidx = getelementptr [32 x i32]* @arr, i64 0, i64 %indvar25
47   %exitcond = icmp ne i64 %indvar25, 32
48   br i1 %exitcond, label %for.body, label %for.end
50 for.body:                                         ; preds = %for.cond
51   %tmp2 = load i32* %pin.0, align 4
52   %add = add i32 %tmp2, %a.0
53   store i32 %add, i32* %pout.0, align 4
54   %tmp8 = load i32* %incdec.ptr, align 4
55   %add10 = add i32 %tmp8, %a.0
56   store i32 %add10, i32* %incdec.ptr5, align 4
57   %tmp15 = load i32* %incdec.ptr7, align 4
58   %add17 = add i32 %tmp15, %a.0
59   store i32 %add17, i32* %incdec.ptr12, align 4
60   %tmp22 = load i32* %incdec.ptr14, align 4
61   %add24 = add i32 %tmp22, %a.0
62   store i32 %add24, i32* %incdec.ptr19, align 4
63   %tmp29 = load i32* %incdec.ptr21, align 4
64   %add31 = add i32 %tmp29, %a.0
65   store i32 %add31, i32* %incdec.ptr26, align 4
66   %tmp36 = load i32* %incdec.ptr28, align 4
67   %add38 = add i32 %tmp36, %a.0
68   store i32 %add38, i32* %incdec.ptr33, align 4
69   %tmp43 = load i32* %incdec.ptr35, align 4
70   %add45 = add i32 %tmp43, %a.0
71   store i32 %add45, i32* %incdec.ptr40, align 4
72   %tmp50 = load i32* %incdec.ptr42, align 4
73   %add52 = add i32 %tmp50, %a.0
74   store i32 %add52, i32* %incdec.ptr47, align 4
75   store i32 %i.0, i32* %arrayidx, align 4
76   %tobool = icmp eq i32 %i.0, 0
77   br i1 %tobool, label %if.else, label %if.then
79 if.then:                                          ; preds = %for.body
80   br label %if.end
82 if.else:                                          ; preds = %for.body
83   br label %if.end
85 if.end:                                           ; preds = %if.else, %if.then
86   %a.1 = phi i32 [ %i.0, %if.then ], [ 2, %if.else ]
87   br label %for.inc
89 for.inc:                                          ; preds = %if.end
90   %indvar.next26 = add i64 %indvar25, 1
91   br label %for.cond
93 for.end:                                          ; preds = %for.cond
94   br label %for.cond59
96 for.cond59:                                       ; preds = %for.inc197, %for.end
97   %indvar = phi i64 [ %indvar.next, %for.inc197 ], [ 0, %for.end ]
98   %a.2 = phi i32 [ 0, %for.end ], [ %a.3, %for.inc197 ]
99   %tmp = mul i64 %indvar, 8
100   %tmp16 = add i64 %tmp, 7
101   %arrayidx181 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp16
102   %arrayidx175 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp16
103   %tmp17 = add i64 %tmp, 6
104   %arrayidx165 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp17
105   %arrayidx159 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp17
106   %tmp18 = add i64 %tmp, 5
107   %arrayidx149 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp18
108   %arrayidx143 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp18
109   %tmp19 = add i64 %tmp, 4
110   %arrayidx133 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp19
111   %arrayidx127 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp19
112   %tmp20 = add i64 %tmp, 3
113   %arrayidx117 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp20
114   %arrayidx111 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp20
115   %tmp21 = add i64 %tmp, 2
116   %arrayidx101 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp21
117   %arrayidx95 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp21
118   %tmp23 = add i64 %tmp, 1
119   %arrayidx85 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp23
120   %arrayidx79 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp23
121   %arrayidx70 = getelementptr [256 x i32]* @in, i64 0, i64 %tmp
122   %arrayidx65 = getelementptr [256 x i32]* @out, i64 0, i64 %tmp
123   %i.1 = trunc i64 %indvar to i32
124   %arrayidx191 = getelementptr [32 x i32]* @arr, i64 0, i64 %indvar
125   %cmp61 = icmp slt i32 %i.1, 32
126   br i1 %cmp61, label %for.body62, label %for.end200
128 for.body62:                                       ; preds = %for.cond59
129   %tmp66 = load i32* %arrayidx65, align 16
130   %tmp71 = load i32* %arrayidx70, align 16
131   %add73 = add i32 %tmp71, %a.2
132   %cmp74 = icmp eq i32 %tmp66, %add73
133   br i1 %cmp74, label %lor.lhs.false, label %if.then186
135 lor.lhs.false:                                    ; preds = %for.body62
136   %tmp80 = load i32* %arrayidx79, align 4
137   %tmp86 = load i32* %arrayidx85, align 4
138   %add88 = add i32 %tmp86, %a.2
139   %cmp89 = icmp eq i32 %tmp80, %add88
140   br i1 %cmp89, label %lor.lhs.false90, label %if.then186
142 lor.lhs.false90:                                  ; preds = %lor.lhs.false
143   %tmp96 = load i32* %arrayidx95, align 8
144   %tmp102 = load i32* %arrayidx101, align 8
145   %add104 = add i32 %tmp102, %a.2
146   %cmp105 = icmp eq i32 %tmp96, %add104
147   br i1 %cmp105, label %lor.lhs.false106, label %if.then186
149 lor.lhs.false106:                                 ; preds = %lor.lhs.false90
150   %tmp112 = load i32* %arrayidx111, align 4
151   %tmp118 = load i32* %arrayidx117, align 4
152   %add120 = add i32 %tmp118, %a.2
153   %cmp121 = icmp eq i32 %tmp112, %add120
154   br i1 %cmp121, label %lor.lhs.false122, label %if.then186
156 lor.lhs.false122:                                 ; preds = %lor.lhs.false106
157   %tmp128 = load i32* %arrayidx127, align 16
158   %tmp134 = load i32* %arrayidx133, align 16
159   %add136 = add i32 %tmp134, %a.2
160   %cmp137 = icmp eq i32 %tmp128, %add136
161   br i1 %cmp137, label %lor.lhs.false138, label %if.then186
163 lor.lhs.false138:                                 ; preds = %lor.lhs.false122
164   %tmp144 = load i32* %arrayidx143, align 4
165   %tmp150 = load i32* %arrayidx149, align 4
166   %add152 = add i32 %tmp150, %a.2
167   %cmp153 = icmp eq i32 %tmp144, %add152
168   br i1 %cmp153, label %lor.lhs.false154, label %if.then186
170 lor.lhs.false154:                                 ; preds = %lor.lhs.false138
171   %tmp160 = load i32* %arrayidx159, align 8
172   %tmp166 = load i32* %arrayidx165, align 8
173   %add168 = add i32 %tmp166, %a.2
174   %cmp169 = icmp eq i32 %tmp160, %add168
175   br i1 %cmp169, label %lor.lhs.false170, label %if.then186
177 lor.lhs.false170:                                 ; preds = %lor.lhs.false154
178   %tmp176 = load i32* %arrayidx175, align 4
179   %tmp182 = load i32* %arrayidx181, align 4
180   %add184 = add i32 %tmp182, %a.2
181   %cmp185 = icmp eq i32 %tmp176, %add184
182   br i1 %cmp185, label %if.end187, label %if.then186
184 if.then186:                                       ; preds = %lor.lhs.false170, %lor.lhs.false154, %lor.lhs.false138, %lor.lhs.false122, %lor.lhs.false106, %lor.lhs.false90, %lor.lhs.false, %for.body62
185   call void @abort() noreturn nounwind
186   unreachable
188 if.end187:                                        ; preds = %lor.lhs.false170
189   store i32 %i.1, i32* %arrayidx191, align 4
190   %tobool192 = icmp eq i32 %i.1, 0
191   br i1 %tobool192, label %if.else195, label %if.then193
193 if.then193:                                       ; preds = %if.end187
194   br label %if.end196
196 if.else195:                                       ; preds = %if.end187
197   br label %if.end196
199 if.end196:                                        ; preds = %if.else195, %if.then193
200   %a.3 = phi i32 [ %i.1, %if.then193 ], [ 2, %if.else195 ]
201   br label %for.inc197
203 for.inc197:                                       ; preds = %if.end196
204   %indvar.next = add i64 %indvar, 1
205   br label %for.cond59
207 for.end200:                                       ; preds = %for.cond59
208   ret i32 0
211 declare void @abort() noreturn
213 define i32 @main() nounwind uwtable {
214 entry:
215   call void @check_vect()
216   %call = call i32 @main1(i32 33)
217   ret i32 0
220 define internal void @check_vect() nounwind uwtable noinline {
221 entry:
222   %a = alloca i32, align 4
223   %b = alloca i32, align 4
224   %c = alloca i32, align 4
225   %d = alloca i32, align 4
226   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
227   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
228   %tobool = icmp eq i32 %call1, 0
229   br i1 %tobool, label %if.then, label %lor.lhs.false
231 lor.lhs.false:                                    ; preds = %entry
232   %tmp4 = load i32* %d, align 4
233   %and6 = and i32 %tmp4, 67108864
234   %cmp = icmp eq i32 %and6, 0
235   br i1 %cmp, label %if.then, label %if.end
237 if.then:                                          ; preds = %entry, %lor.lhs.false
238   call void @exit(i32 0) noreturn nounwind
239   unreachable
241 if.end:                                           ; preds = %lor.lhs.false
242   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
243   ret void
246 declare void (i32)* @signal(i32, void (i32)*) nounwind
248 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
249 entry:
250   call void @exit(i32 0) noreturn nounwind
251   unreachable
253 return:                                           ; No predecessors!
254   ret void
257 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
258 entry:
259   %and = and i32 %__level, -2147483648
260   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
261   %cmp = icmp ult i32 %call, %__level
262   br i1 %cmp, label %if.then, label %if.end
264 if.then:                                          ; preds = %entry
265   br label %return
267 if.end:                                           ; preds = %entry
268   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
269   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
270   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
271   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
272   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
273   store i32 %asmresult, i32* %__eax, align 4
274   store i32 %asmresult8, i32* %__ebx, align 4
275   store i32 %asmresult9, i32* %__ecx, align 4
276   store i32 %asmresult10, i32* %__edx, align 4
277   br label %return
279 return:                                           ; preds = %if.end, %if.then
280   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
281   ret i32 %retval.0
284 declare void @exit(i32) noreturn
286 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
287 entry:
288   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
289   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
290   %tobool = icmp eq i32* %__sig, null
291   br i1 %tobool, label %if.end, label %if.then
293 if.then:                                          ; preds = %entry
294   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
295   store i32 %asmresult1, i32* %__sig, align 4
296   br label %if.end
298 if.end:                                           ; preds = %entry, %if.then
299   ret i32 %asmresult
302 !0 = metadata !{i32 -2147342213, i32 -2147342205} 
303 !1 = metadata !{i32 -2147342336, i32 -2147342328} 
304 ; CHECK: define