Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-23.ll
blob9aeb0b50597a7c727fba89d56b7da30ac442f0c5
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 vect-23.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-23.s > vect-23.ll
6 ; ModuleID = 'vect-23.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 @main1.ib = internal unnamed_addr constant [64 x i32] [i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0], align 16
11 @main1.ic = internal unnamed_addr constant [64 x i32] [i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0], align 16
12 @main1.cb = internal unnamed_addr constant [64 x i8] c"\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00", align 16
13 @main1.cc = internal unnamed_addr constant [64 x i8] c"\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00\01\01\00\00\01\00\01\00", align 16
14 @main1.sb = internal unnamed_addr constant [64 x i16] [i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0], align 16
15 @main1.sc = internal unnamed_addr constant [64 x i16] [i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0], align 16
17 define i32 @main1() nounwind uwtable noinline {
18 entry:
19   %ia = alloca [64 x i32], align 16
20   %ib = alloca [64 x i32], align 16
21   %ic = alloca [64 x i32], align 16
22   %ca = alloca [64 x i8], align 16
23   %cb = alloca [64 x i8], align 16
24   %cc = alloca [64 x i8], align 16
25   %sa = alloca [64 x i16], align 16
26   %sb = alloca [64 x i16], align 16
27   %sc = alloca [64 x i16], align 16
28   %tmp = bitcast [64 x i32]* %ib to i8*
29   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* bitcast ([64 x i32]* @main1.ib to i8*), i64 256, i32 16, i1 false)
30   %tmp2 = bitcast [64 x i32]* %ic to i8*
31   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp2, i8* bitcast ([64 x i32]* @main1.ic to i8*), i64 256, i32 16, i1 false)
32   %tmp5 = getelementptr inbounds [64 x i8]* %cb, i64 0, i64 0
33   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp5, i8* getelementptr inbounds ([64 x i8]* @main1.cb, i64 0, i64 0), i64 64, i32 16, i1 false)
34   %tmp7 = getelementptr inbounds [64 x i8]* %cc, i64 0, i64 0
35   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp7, i8* getelementptr inbounds ([64 x i8]* @main1.cc, i64 0, i64 0), i64 64, i32 16, i1 false)
36   %tmp10 = bitcast [64 x i16]* %sb to i8*
37   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp10, i8* bitcast ([64 x i16]* @main1.sb to i8*), i64 128, i32 16, i1 false)
38   %tmp12 = bitcast [64 x i16]* %sc to i8*
39   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp12, i8* bitcast ([64 x i16]* @main1.sc to i8*), i64 128, i32 16, i1 false)
40   br label %for.cond
42 for.cond:                                         ; preds = %for.inc, %entry
43   %indvar17 = phi i64 [ %indvar.next18, %for.inc ], [ 0, %entry ]
44   %arrayidx23 = getelementptr [64 x i32]* %ia, i64 0, i64 %indvar17
45   %arrayidx18 = getelementptr [64 x i32]* %ic, i64 0, i64 %indvar17
46   %arrayidx = getelementptr [64 x i32]* %ib, i64 0, i64 %indvar17
47   %exitcond19 = icmp ne i64 %indvar17, 64
48   br i1 %exitcond19, label %for.body, label %for.end
50 for.body:                                         ; preds = %for.cond
51   %tmp15 = load i32* %arrayidx, align 4
52   %tobool = icmp eq i32 %tmp15, 0
53   br i1 %tobool, label %land.end, label %land.rhs
55 land.rhs:                                         ; preds = %for.body
56   %tmp19 = load i32* %arrayidx18, align 4
57   %tobool20 = icmp ne i32 %tmp19, 0
58   br label %land.end
60 land.end:                                         ; preds = %for.body, %land.rhs
61   %tmp21 = phi i1 [ false, %for.body ], [ %tobool20, %land.rhs ]
62   %land.ext = zext i1 %tmp21 to i32
63   store i32 %land.ext, i32* %arrayidx23, align 4
64   br label %for.inc
66 for.inc:                                          ; preds = %land.end
67   %indvar.next18 = add i64 %indvar17, 1
68   br label %for.cond
70 for.end:                                          ; preds = %for.cond
71   br label %for.cond25
73 for.cond25:                                       ; preds = %for.inc43, %for.end
74   %indvar14 = phi i64 [ %indvar.next15, %for.inc43 ], [ 0, %for.end ]
75   %arrayidx40 = getelementptr [64 x i32]* %ic, i64 0, i64 %indvar14
76   %arrayidx35 = getelementptr [64 x i32]* %ib, i64 0, i64 %indvar14
77   %arrayidx31 = getelementptr [64 x i32]* %ia, i64 0, i64 %indvar14
78   %i.1 = trunc i64 %indvar14 to i32
79   %cmp27 = icmp slt i32 %i.1, 64
80   br i1 %cmp27, label %for.body28, label %for.end46
82 for.body28:                                       ; preds = %for.cond25
83   %tmp32 = load i32* %arrayidx31, align 4
84   %tmp36 = load i32* %arrayidx35, align 4
85   %cmp37 = icmp eq i32 %tmp32, %tmp36
86   br i1 %cmp37, label %if.end, label %land.lhs.true
88 land.lhs.true:                                    ; preds = %for.body28
89   %tmp41 = load i32* %arrayidx40, align 4
90   %tobool42 = icmp eq i32 %tmp41, 0
91   br i1 %tobool42, label %if.end, label %if.then
93 if.then:                                          ; preds = %land.lhs.true
94   call void @abort() noreturn nounwind
95   unreachable
97 if.end:                                           ; preds = %land.lhs.true, %for.body28
98   br label %for.inc43
100 for.inc43:                                        ; preds = %if.end
101   %indvar.next15 = add i64 %indvar14, 1
102   br label %for.cond25
104 for.end46:                                        ; preds = %for.cond25
105   br label %for.cond47
107 for.cond47:                                       ; preds = %for.inc69, %for.end46
108   %indvar9 = phi i64 [ %indvar.next10, %for.inc69 ], [ 0, %for.end46 ]
109   %arrayidx68 = getelementptr [64 x i8]* %ca, i64 0, i64 %indvar9
110   %arrayidx59 = getelementptr [64 x i8]* %cc, i64 0, i64 %indvar9
111   %arrayidx53 = getelementptr [64 x i8]* %cb, i64 0, i64 %indvar9
112   %exitcond11 = icmp ne i64 %indvar9, 64
113   br i1 %exitcond11, label %for.body50, label %for.end72
115 for.body50:                                       ; preds = %for.cond47
116   %tmp54 = load i8* %arrayidx53, align 1
117   %tobool55 = icmp eq i8 %tmp54, 0
118   br i1 %tobool55, label %land.end63, label %land.rhs56
120 land.rhs56:                                       ; preds = %for.body50
121   %tmp60 = load i8* %arrayidx59, align 1
122   %tobool62 = icmp ne i8 %tmp60, 0
123   br label %land.end63
125 land.end63:                                       ; preds = %for.body50, %land.rhs56
126   %tmp22 = phi i1 [ false, %for.body50 ], [ %tobool62, %land.rhs56 ]
127   %conv65 = zext i1 %tmp22 to i8
128   store i8 %conv65, i8* %arrayidx68, align 1
129   br label %for.inc69
131 for.inc69:                                        ; preds = %land.end63
132   %indvar.next10 = add i64 %indvar9, 1
133   br label %for.cond47
135 for.end72:                                        ; preds = %for.cond47
136   br label %for.cond73
138 for.cond73:                                       ; preds = %for.inc99, %for.end72
139   %indvar5 = phi i64 [ %indvar.next6, %for.inc99 ], [ 0, %for.end72 ]
140   %arrayidx93 = getelementptr [64 x i8]* %cc, i64 0, i64 %indvar5
141   %arrayidx85 = getelementptr [64 x i8]* %cb, i64 0, i64 %indvar5
142   %arrayidx80 = getelementptr [64 x i8]* %ca, i64 0, i64 %indvar5
143   %i.3 = trunc i64 %indvar5 to i32
144   %cmp75 = icmp slt i32 %i.3, 64
145   br i1 %cmp75, label %for.body77, label %for.end102
147 for.body77:                                       ; preds = %for.cond73
148   %tmp81 = load i8* %arrayidx80, align 1
149   %tmp86 = load i8* %arrayidx85, align 1
150   %cmp88 = icmp eq i8 %tmp81, %tmp86
151   br i1 %cmp88, label %if.end98, label %land.lhs.true90
153 land.lhs.true90:                                  ; preds = %for.body77
154   %tmp94 = load i8* %arrayidx93, align 1
155   %tobool96 = icmp eq i8 %tmp94, 0
156   br i1 %tobool96, label %if.end98, label %if.then97
158 if.then97:                                        ; preds = %land.lhs.true90
159   call void @abort() noreturn nounwind
160   unreachable
162 if.end98:                                         ; preds = %land.lhs.true90, %for.body77
163   br label %for.inc99
165 for.inc99:                                        ; preds = %if.end98
166   %indvar.next6 = add i64 %indvar5, 1
167   br label %for.cond73
169 for.end102:                                       ; preds = %for.cond73
170   br label %for.cond103
172 for.cond103:                                      ; preds = %for.inc127, %for.end102
173   %indvar2 = phi i64 [ %indvar.next3, %for.inc127 ], [ 0, %for.end102 ]
174   %arrayidx126 = getelementptr [64 x i16]* %sa, i64 0, i64 %indvar2
175   %arrayidx117 = getelementptr [64 x i16]* %sc, i64 0, i64 %indvar2
176   %arrayidx110 = getelementptr [64 x i16]* %sb, i64 0, i64 %indvar2
177   %exitcond = icmp ne i64 %indvar2, 64
178   br i1 %exitcond, label %for.body107, label %for.end130
180 for.body107:                                      ; preds = %for.cond103
181   %tmp111 = load i16* %arrayidx110, align 2
182   %tobool113 = icmp eq i16 %tmp111, 0
183   br i1 %tobool113, label %land.end121, label %land.rhs114
185 land.rhs114:                                      ; preds = %for.body107
186   %tmp118 = load i16* %arrayidx117, align 2
187   %tobool120 = icmp ne i16 %tmp118, 0
188   br label %land.end121
190 land.end121:                                      ; preds = %for.body107, %land.rhs114
191   %tmp23 = phi i1 [ false, %for.body107 ], [ %tobool120, %land.rhs114 ]
192   %conv123 = zext i1 %tmp23 to i16
193   store i16 %conv123, i16* %arrayidx126, align 2
194   br label %for.inc127
196 for.inc127:                                       ; preds = %land.end121
197   %indvar.next3 = add i64 %indvar2, 1
198   br label %for.cond103
200 for.end130:                                       ; preds = %for.cond103
201   br label %for.cond131
203 for.cond131:                                      ; preds = %for.inc157, %for.end130
204   %indvar = phi i64 [ %indvar.next, %for.inc157 ], [ 0, %for.end130 ]
205   %arrayidx151 = getelementptr [64 x i16]* %sc, i64 0, i64 %indvar
206   %arrayidx143 = getelementptr [64 x i16]* %sb, i64 0, i64 %indvar
207   %arrayidx138 = getelementptr [64 x i16]* %sa, i64 0, i64 %indvar
208   %i.5 = trunc i64 %indvar to i32
209   %cmp133 = icmp slt i32 %i.5, 64
210   br i1 %cmp133, label %for.body135, label %for.end160
212 for.body135:                                      ; preds = %for.cond131
213   %tmp139 = load i16* %arrayidx138, align 2
214   %tmp144 = load i16* %arrayidx143, align 2
215   %cmp146 = icmp eq i16 %tmp139, %tmp144
216   br i1 %cmp146, label %if.end156, label %land.lhs.true148
218 land.lhs.true148:                                 ; preds = %for.body135
219   %tmp152 = load i16* %arrayidx151, align 2
220   %tobool154 = icmp eq i16 %tmp152, 0
221   br i1 %tobool154, label %if.end156, label %if.then155
223 if.then155:                                       ; preds = %land.lhs.true148
224   call void @abort() noreturn nounwind
225   unreachable
227 if.end156:                                        ; preds = %land.lhs.true148, %for.body135
228   br label %for.inc157
230 for.inc157:                                       ; preds = %if.end156
231   %indvar.next = add i64 %indvar, 1
232   br label %for.cond131
234 for.end160:                                       ; preds = %for.cond131
235   ret i32 0
238 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
240 declare void @abort() noreturn
242 define i32 @main() nounwind uwtable {
243 entry:
244   call void @check_vect()
245   %call = call i32 @main1()
246   ret i32 %call
249 define internal void @check_vect() nounwind uwtable noinline {
250 entry:
251   %a = alloca i32, align 4
252   %b = alloca i32, align 4
253   %c = alloca i32, align 4
254   %d = alloca i32, align 4
255   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
256   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
257   %tobool = icmp eq i32 %call1, 0
258   br i1 %tobool, label %if.then, label %lor.lhs.false
260 lor.lhs.false:                                    ; preds = %entry
261   %tmp4 = load i32* %d, align 4
262   %and6 = and i32 %tmp4, 67108864
263   %cmp = icmp eq i32 %and6, 0
264   br i1 %cmp, label %if.then, label %if.end
266 if.then:                                          ; preds = %entry, %lor.lhs.false
267   call void @exit(i32 0) noreturn nounwind
268   unreachable
270 if.end:                                           ; preds = %lor.lhs.false
271   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
272   ret void
275 declare void (i32)* @signal(i32, void (i32)*) nounwind
277 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
278 entry:
279   call void @exit(i32 0) noreturn nounwind
280   unreachable
282 return:                                           ; No predecessors!
283   ret void
286 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
287 entry:
288   %and = and i32 %__level, -2147483648
289   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
290   %cmp = icmp ult i32 %call, %__level
291   br i1 %cmp, label %if.then, label %if.end
293 if.then:                                          ; preds = %entry
294   br label %return
296 if.end:                                           ; preds = %entry
297   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
298   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
299   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
300   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
301   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
302   store i32 %asmresult, i32* %__eax, align 4
303   store i32 %asmresult8, i32* %__ebx, align 4
304   store i32 %asmresult9, i32* %__ecx, align 4
305   store i32 %asmresult10, i32* %__edx, align 4
306   br label %return
308 return:                                           ; preds = %if.end, %if.then
309   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
310   ret i32 %retval.0
313 declare void @exit(i32) noreturn
315 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
316 entry:
317   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
318   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
319   %tobool = icmp eq i32* %__sig, null
320   br i1 %tobool, label %if.end, label %if.then
322 if.then:                                          ; preds = %entry
323   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
324   store i32 %asmresult1, i32* %__sig, align 4
325   br label %if.end
327 if.end:                                           ; preds = %entry, %if.then
328   ret i32 %asmresult
331 !0 = metadata !{i32 -2147342047, i32 -2147342039} 
332 !1 = metadata !{i32 -2147342170, i32 -2147342162} 
333 ; CHECK: define