Add compile command to each testcase
[gcc-vect-testsuite.git] / pr45752.ll
blobe5f4e974870ac9c9f1a20ea8bf192f9a5f2f45ad
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 pr45752.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer pr45752.s > pr45752.ll
6 ; ModuleID = 'pr45752.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 @main.check_results = internal unnamed_addr constant [16 x i32] [i32 3208, i32 1334, i32 28764, i32 35679, i32 2789, i32 13028, i32 4754, i32 168364, i32 91254, i32 12399, i32 22848, i32 8174, i32 307964, i32 146829, i32 22009, i32 0], align 16
11 @main.check_results2 = internal unnamed_addr constant [16 x i32] [i32 7136, i32 2702, i32 84604, i32 57909, i32 6633, i32 16956, i32 6122, i32 224204, i32 113484, i32 16243, i32 26776, i32 9542, i32 363804, i32 169059, i32 25853, i32 0], align 16
13 define void @foo(i32* noalias %pInput, i32* noalias %pOutput, i32* noalias %pInput2, i32* noalias %pOutput2) nounwind uwtable {
14 entry:
15   br label %for.cond
17 for.cond:                                         ; preds = %for.inc, %entry
18   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
19   %tmp = mul i64 %indvar, 5
20   %tmp1 = add i64 %tmp, 4
21   %incdec.ptr171 = getelementptr i32* %pOutput2, i64 %tmp1
22   %tmp3 = add i64 %tmp, 3
23   %incdec.ptr155 = getelementptr i32* %pOutput2, i64 %tmp3
24   %tmp4 = add i64 %tmp, 2
25   %incdec.ptr139 = getelementptr i32* %pOutput2, i64 %tmp4
26   %tmp6 = add i64 %tmp, 1
27   %incdec.ptr123 = getelementptr i32* %pOutput2, i64 %tmp6
28   %pOutput2.addr.0 = getelementptr i32* %pOutput2, i64 %tmp
29   %incdec.ptr103 = getelementptr i32* %pInput2, i64 %tmp1
30   %incdec.ptr100 = getelementptr i32* %pInput2, i64 %tmp3
31   %incdec.ptr97 = getelementptr i32* %pInput2, i64 %tmp4
32   %incdec.ptr94 = getelementptr i32* %pInput2, i64 %tmp6
33   %pInput2.addr.0 = getelementptr i32* %pInput2, i64 %tmp
34   %incdec.ptr76 = getelementptr i32* %pOutput, i64 %tmp1
35   %incdec.ptr60 = getelementptr i32* %pOutput, i64 %tmp3
36   %incdec.ptr44 = getelementptr i32* %pOutput, i64 %tmp4
37   %incdec.ptr28 = getelementptr i32* %pOutput, i64 %tmp6
38   %pOutput.addr.0 = getelementptr i32* %pOutput, i64 %tmp
39   %incdec.ptr10 = getelementptr i32* %pInput, i64 %tmp1
40   %incdec.ptr7 = getelementptr i32* %pInput, i64 %tmp3
41   %incdec.ptr4 = getelementptr i32* %pInput, i64 %tmp4
42   %incdec.ptr = getelementptr i32* %pInput, i64 %tmp6
43   %pInput.addr.0 = getelementptr i32* %pInput, i64 %tmp
44   %exitcond = icmp ne i64 %indvar, 3
45   br i1 %exitcond, label %for.body, label %for.end
47 for.body:                                         ; preds = %for.cond
48   %tmp2 = load i32* %pInput.addr.0, align 4
49   %tmp5 = load i32* %incdec.ptr, align 4
50   %tmp8 = load i32* %incdec.ptr4, align 4
51   %tmp11 = load i32* %incdec.ptr7, align 4
52   %tmp14 = load i32* %incdec.ptr10, align 4
53   %mul = mul i32 %tmp2, 100
54   %mul17 = mul i32 %tmp5, 1322
55   %add = add i32 %mul, %mul17
56   %mul19 = mul i32 %tmp8, 74
57   %add20 = add i32 %add, %mul19
58   %mul22 = mul i32 %tmp11, 134
59   %add23 = add i32 %add20, %mul22
60   %mul25 = mul i32 %tmp14, 334
61   %add26 = add i32 %add23, %mul25
62   store i32 %add26, i32* %pOutput.addr.0, align 4
63   %mul30 = mul i32 %tmp2, 216
64   %mul32 = mul i32 %tmp5, 13
65   %add33 = add i32 %mul30, %mul32
66   %mul35 = mul i32 %tmp8, 191
67   %add36 = add i32 %add33, %mul35
68   %mul38 = mul i32 %tmp11, 117
69   %add39 = add i32 %add36, %mul38
70   %mul41 = mul i32 %tmp14, 147
71   %add42 = add i32 %add39, %mul41
72   store i32 %add42, i32* %incdec.ptr28, align 4
73   %mul46 = mul i32 %tmp2, 23
74   %mul48 = mul i32 %tmp5, 27271
75   %add49 = add i32 %mul46, %mul48
76   %mul51 = mul i32 %tmp8, 500
77   %add52 = add i32 %add49, %mul51
78   %mul54 = mul i32 %tmp11, 11
79   %add55 = add i32 %add52, %mul54
80   %mul57 = mul i32 %tmp14, 115
81   %add58 = add i32 %add55, %mul57
82   store i32 %add58, i32* %incdec.ptr44, align 4
83   %mul62 = mul i32 %tmp2, 237
84   %mul64 = mul i32 %tmp5, 2280
85   %add65 = add i32 %mul62, %mul64
86   %mul67 = mul i32 %tmp8, 111
87   %add68 = add i32 %add65, %mul67
88   %mul70 = mul i32 %tmp11, 771
89   %add71 = add i32 %add68, %mul70
90   %mul73 = mul i32 %tmp14, 7716
91   %add74 = add i32 %add71, %mul73
92   store i32 %add74, i32* %incdec.ptr60, align 4
93   %mul78 = mul i32 %tmp2, 437
94   %mul80 = mul i32 %tmp5, 284
95   %add81 = add i32 %mul78, %mul80
96   %mul83 = mul i32 %tmp8, 1114
97   %add84 = add i32 %add81, %mul83
98   %mul86 = mul i32 %tmp11, 71
99   %add87 = add i32 %add84, %mul86
100   %mul89 = shl i32 %tmp14, 4
101   %add90 = add i32 %add87, %mul89
102   store i32 %add90, i32* %incdec.ptr76, align 4
103   %tmp95 = load i32* %pInput2.addr.0, align 4
104   %tmp98 = load i32* %incdec.ptr94, align 4
105   %tmp101 = load i32* %incdec.ptr97, align 4
106   %tmp104 = load i32* %incdec.ptr100, align 4
107   %tmp107 = load i32* %incdec.ptr103, align 4
108   %mul109 = mul i32 %tmp95, 100
109   %mul111 = mul i32 %tmp98, 1322
110   %add112 = add i32 %mul109, %mul111
111   %mul114 = mul i32 %tmp101, 74
112   %add115 = add i32 %add112, %mul114
113   %mul117 = mul i32 %tmp104, 134
114   %add118 = add i32 %add115, %mul117
115   %mul120 = mul i32 %tmp107, 334
116   %add121 = add i32 %add118, %mul120
117   store i32 %add121, i32* %pOutput2.addr.0, align 4
118   %mul125 = mul i32 %tmp95, 216
119   %mul127 = mul i32 %tmp98, 13
120   %add128 = add i32 %mul125, %mul127
121   %mul130 = mul i32 %tmp101, 191
122   %add131 = add i32 %add128, %mul130
123   %mul133 = mul i32 %tmp104, 117
124   %add134 = add i32 %add131, %mul133
125   %mul136 = mul i32 %tmp107, 147
126   %add137 = add i32 %add134, %mul136
127   store i32 %add137, i32* %incdec.ptr123, align 4
128   %mul141 = mul i32 %tmp95, 23
129   %mul143 = mul i32 %tmp98, 27271
130   %add144 = add i32 %mul141, %mul143
131   %mul146 = mul i32 %tmp101, 500
132   %add147 = add i32 %add144, %mul146
133   %mul149 = mul i32 %tmp104, 11
134   %add150 = add i32 %add147, %mul149
135   %mul152 = mul i32 %tmp107, 115
136   %add153 = add i32 %add150, %mul152
137   store i32 %add153, i32* %incdec.ptr139, align 4
138   %mul157 = mul i32 %tmp95, 237
139   %mul159 = mul i32 %tmp98, 2280
140   %add160 = add i32 %mul157, %mul159
141   %mul162 = mul i32 %tmp101, 111
142   %add163 = add i32 %add160, %mul162
143   %mul165 = mul i32 %tmp104, 771
144   %add166 = add i32 %add163, %mul165
145   %mul168 = mul i32 %tmp107, 7716
146   %add169 = add i32 %add166, %mul168
147   store i32 %add169, i32* %incdec.ptr155, align 4
148   %mul173 = mul i32 %tmp95, 437
149   %mul175 = mul i32 %tmp98, 284
150   %add176 = add i32 %mul173, %mul175
151   %mul178 = mul i32 %tmp101, 1114
152   %add179 = add i32 %add176, %mul178
153   %mul181 = mul i32 %tmp104, 71
154   %add182 = add i32 %add179, %mul181
155   %mul184 = shl i32 %tmp107, 4
156   %add185 = add i32 %add182, %mul184
157   store i32 %add185, i32* %incdec.ptr171, align 4
158   br label %for.inc
160 for.inc:                                          ; preds = %for.body
161   %indvar.next = add i64 %indvar, 1
162   br label %for.cond
164 for.end:                                          ; preds = %for.cond
165   ret void
168 define i32 @main(i32 %argc, i8** %argv) nounwind uwtable {
169 entry:
170   %input = alloca [16 x i32], align 16
171   %output = alloca [16 x i32], align 16
172   %input2 = alloca [16 x i32], align 16
173   %output2 = alloca [16 x i32], align 16
174   %check_results = alloca [16 x i32], align 16
175   %check_results2 = alloca [16 x i32], align 16
176   %tmp = bitcast [16 x i32]* %check_results to i8*
177   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* bitcast ([16 x i32]* @main.check_results to i8*), i64 64, i32 16, i1 false)
178   %tmp2 = bitcast [16 x i32]* %check_results2 to i8*
179   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp2, i8* bitcast ([16 x i32]* @main.check_results2 to i8*), i64 64, i32 16, i1 false)
180   call void @check_vect()
181   br label %for.cond
183 for.cond:                                         ; preds = %for.inc, %entry
184   %indvar2 = phi i64 [ %indvar.next3, %for.inc ], [ 0, %entry ]
185   %i.0 = trunc i64 %indvar2 to i32
186   %arrayidx15 = getelementptr [16 x i32]* %output2, i64 0, i64 %indvar2
187   %arrayidx12 = getelementptr [16 x i32]* %output, i64 0, i64 %indvar2
188   %arrayidx9 = getelementptr [16 x i32]* %input2, i64 0, i64 %indvar2
189   %tmp5 = add i64 %indvar2, 2
190   %add = trunc i64 %tmp5 to i32
191   %arrayidx = getelementptr [16 x i32]* %input, i64 0, i64 %indvar2
192   %exitcond = icmp ne i64 %indvar2, 16
193   br i1 %exitcond, label %for.body, label %for.end
195 for.body:                                         ; preds = %for.cond
196   store i32 %i.0, i32* %arrayidx, align 4
197   store i32 %add, i32* %arrayidx9, align 4
198   store i32 0, i32* %arrayidx12, align 4
199   store i32 0, i32* %arrayidx15, align 4
200   call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0
201   br label %for.inc
203 for.inc:                                          ; preds = %for.body
204   %indvar.next3 = add i64 %indvar2, 1
205   br label %for.cond
207 for.end:                                          ; preds = %for.cond
208   %arraydecay = getelementptr inbounds [16 x i32]* %input, i64 0, i64 0
209   %arraydecay17 = getelementptr inbounds [16 x i32]* %output, i64 0, i64 0
210   %arraydecay18 = getelementptr inbounds [16 x i32]* %input2, i64 0, i64 0
211   %arraydecay19 = getelementptr inbounds [16 x i32]* %output2, i64 0, i64 0
212   call void @foo(i32* %arraydecay, i32* %arraydecay17, i32* %arraydecay18, i32* %arraydecay19)
213   br label %for.cond20
215 for.cond20:                                       ; preds = %for.inc42, %for.end
216   %indvar = phi i64 [ %indvar.next, %for.inc42 ], [ 0, %for.end ]
217   %arrayidx39 = getelementptr [16 x i32]* %check_results2, i64 0, i64 %indvar
218   %arrayidx35 = getelementptr [16 x i32]* %output2, i64 0, i64 %indvar
219   %arrayidx30 = getelementptr [16 x i32]* %check_results, i64 0, i64 %indvar
220   %arrayidx26 = getelementptr [16 x i32]* %output, i64 0, i64 %indvar
221   %i.1 = trunc i64 %indvar to i32
222   %cmp22 = icmp ult i32 %i.1, 16
223   br i1 %cmp22, label %for.body23, label %for.end45
225 for.body23:                                       ; preds = %for.cond20
226   %tmp27 = load i32* %arrayidx26, align 4
227   %tmp31 = load i32* %arrayidx30, align 4
228   %cmp32 = icmp eq i32 %tmp27, %tmp31
229   br i1 %cmp32, label %lor.lhs.false, label %if.then
231 lor.lhs.false:                                    ; preds = %for.body23
232   %tmp36 = load i32* %arrayidx35, align 4
233   %tmp40 = load i32* %arrayidx39, align 4
234   %cmp41 = icmp eq i32 %tmp36, %tmp40
235   br i1 %cmp41, label %if.end, label %if.then
237 if.then:                                          ; preds = %lor.lhs.false, %for.body23
238   call void @abort() noreturn nounwind
239   unreachable
241 if.end:                                           ; preds = %lor.lhs.false
242   br label %for.inc42
244 for.inc42:                                        ; preds = %if.end
245   %indvar.next = add i64 %indvar, 1
246   br label %for.cond20
248 for.end45:                                        ; preds = %for.cond20
249   ret i32 0
252 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
254 define internal void @check_vect() nounwind uwtable noinline {
255 entry:
256   %a = alloca i32, align 4
257   %b = alloca i32, align 4
258   %c = alloca i32, align 4
259   %d = alloca i32, align 4
260   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
261   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
262   %tobool = icmp eq i32 %call1, 0
263   br i1 %tobool, label %if.then, label %lor.lhs.false
265 lor.lhs.false:                                    ; preds = %entry
266   %tmp4 = load i32* %d, align 4
267   %and6 = and i32 %tmp4, 67108864
268   %cmp = icmp eq i32 %and6, 0
269   br i1 %cmp, label %if.then, label %if.end
271 if.then:                                          ; preds = %entry, %lor.lhs.false
272   call void @exit(i32 0) noreturn nounwind
273   unreachable
275 if.end:                                           ; preds = %lor.lhs.false
276   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
277   ret void
280 declare void @abort() noreturn
282 declare void (i32)* @signal(i32, void (i32)*) nounwind
284 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
285 entry:
286   call void @exit(i32 0) noreturn nounwind
287   unreachable
289 return:                                           ; No predecessors!
290   ret void
293 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
294 entry:
295   %and = and i32 %__level, -2147483648
296   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
297   %cmp = icmp ult i32 %call, %__level
298   br i1 %cmp, label %if.then, label %if.end
300 if.then:                                          ; preds = %entry
301   br label %return
303 if.end:                                           ; preds = %entry
304   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !1
305   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
306   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
307   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
308   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
309   store i32 %asmresult, i32* %__eax, align 4
310   store i32 %asmresult8, i32* %__ebx, align 4
311   store i32 %asmresult9, i32* %__ecx, align 4
312   store i32 %asmresult10, i32* %__edx, align 4
313   br label %return
315 return:                                           ; preds = %if.end, %if.then
316   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
317   ret i32 %retval.0
320 declare void @exit(i32) noreturn
322 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
323 entry:
324   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !2
325   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
326   %tobool = icmp eq i32* %__sig, null
327   br i1 %tobool, label %if.end, label %if.then
329 if.then:                                          ; preds = %entry
330   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
331   store i32 %asmresult1, i32* %__sig, align 4
332   br label %if.end
334 if.end:                                           ; preds = %entry, %if.then
335   ret i32 %asmresult
338 !0 = metadata !{i32 2268}
339 !1 = metadata !{i32 -2147341535, i32 -2147341527} 
340 !2 = metadata !{i32 -2147341658, i32 -2147341650} 
341 ; CHECK: define