Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-63.ll
blobcd3717135cead85d6caa981b7954dd88d6c2764e
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-63.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-63.s > vect-63.ll
6 ; ModuleID = 'vect-63.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 [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45], align 16
12 define i32 @main1() nounwind uwtable noinline {
13 entry:
14   %ib = alloca [16 x i32], align 16
15   %ia = alloca [32 x [4 x [16 x i32]]], align 16
16   %tmp = bitcast [16 x i32]* %ib to i8*
17   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* bitcast ([16 x i32]* @main1.ib to i8*), i64 64, i32 16, i1 false)
18   br label %for.cond
20 for.cond:                                         ; preds = %for.inc18, %entry
21   %indvar8 = phi i64 [ %indvar.next9, %for.inc18 ], [ 0, %entry ]
22   %arrayidx = getelementptr [16 x i32]* %ib, i64 0, i64 %indvar8
23   %exitcond12 = icmp ne i64 %indvar8, 16
24   br i1 %exitcond12, label %for.body, label %for.end21
26 for.body:                                         ; preds = %for.cond
27   br label %for.cond3
29 for.cond3:                                        ; preds = %for.inc, %for.body
30   %idxprom10 = phi i64 [ %indvar.next7, %for.inc ], [ 0, %for.body ]
31   %tmp13 = mul i64 %idxprom10, 65
32   %arrayidx16 = getelementptr [32 x [4 x [16 x i32]]]* %ia, i64 0, i64 %indvar8, i64 1, i64 %tmp13
33   %exitcond = icmp ne i64 %idxprom10, 16
34   br i1 %exitcond, label %for.body6, label %for.end
36 for.body6:                                        ; preds = %for.cond3
37   %tmp8 = load i32* %arrayidx, align 4
38   store i32 %tmp8, i32* %arrayidx16, align 4
39   br label %for.inc
41 for.inc:                                          ; preds = %for.body6
42   %indvar.next7 = add i64 %idxprom10, 1
43   br label %for.cond3
45 for.end:                                          ; preds = %for.cond3
46   br label %for.inc18
48 for.inc18:                                        ; preds = %for.end
49   %indvar.next9 = add i64 %indvar8, 1
50   br label %for.cond
52 for.end21:                                        ; preds = %for.cond
53   br label %for.cond22
55 for.cond22:                                       ; preds = %for.inc49, %for.end21
56   %indvar1 = phi i64 [ %indvar.next2, %for.inc49 ], [ 0, %for.end21 ]
57   %arrayidx42 = getelementptr [16 x i32]* %ib, i64 0, i64 %indvar1
58   %i.1 = trunc i64 %indvar1 to i32
59   %cmp24 = icmp slt i32 %i.1, 16
60   br i1 %cmp24, label %for.body25, label %for.end52
62 for.body25:                                       ; preds = %for.cond22
63   br label %for.cond26
65 for.cond26:                                       ; preds = %for.inc45, %for.body25
66   %idxprom31 = phi i64 [ %indvar.next, %for.inc45 ], [ 0, %for.body25 ]
67   %tmp5 = mul i64 %idxprom31, 65
68   %arrayidx38 = getelementptr [32 x [4 x [16 x i32]]]* %ia, i64 0, i64 %indvar1, i64 1, i64 %tmp5
69   %j.1 = trunc i64 %idxprom31 to i32
70   %cmp28 = icmp slt i32 %j.1, 16
71   br i1 %cmp28, label %for.body29, label %for.end48
73 for.body29:                                       ; preds = %for.cond26
74   %tmp39 = load i32* %arrayidx38, align 4
75   %tmp43 = load i32* %arrayidx42, align 4
76   %cmp44 = icmp eq i32 %tmp39, %tmp43
77   br i1 %cmp44, label %if.end, label %if.then
79 if.then:                                          ; preds = %for.body29
80   call void @abort() noreturn nounwind
81   unreachable
83 if.end:                                           ; preds = %for.body29
84   br label %for.inc45
86 for.inc45:                                        ; preds = %if.end
87   %indvar.next = add i64 %idxprom31, 1
88   br label %for.cond26
90 for.end48:                                        ; preds = %for.cond26
91   br label %for.inc49
93 for.inc49:                                        ; preds = %for.end48
94   %indvar.next2 = add i64 %indvar1, 1
95   br label %for.cond22
97 for.end52:                                        ; preds = %for.cond22
98   ret i32 0
101 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
103 declare void @abort() noreturn
105 define i32 @main() nounwind uwtable {
106 entry:
107   call void @check_vect()
108   %call = call i32 @main1()
109   ret i32 %call
112 define internal void @check_vect() nounwind uwtable noinline {
113 entry:
114   %a = alloca i32, align 4
115   %b = alloca i32, align 4
116   %c = alloca i32, align 4
117   %d = alloca i32, align 4
118   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
119   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
120   %tobool = icmp eq i32 %call1, 0
121   br i1 %tobool, label %if.then, label %lor.lhs.false
123 lor.lhs.false:                                    ; preds = %entry
124   %tmp4 = load i32* %d, align 4
125   %and6 = and i32 %tmp4, 67108864
126   %cmp = icmp eq i32 %and6, 0
127   br i1 %cmp, label %if.then, label %if.end
129 if.then:                                          ; preds = %entry, %lor.lhs.false
130   call void @exit(i32 0) noreturn nounwind
131   unreachable
133 if.end:                                           ; preds = %lor.lhs.false
134   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
135   ret void
138 declare void (i32)* @signal(i32, void (i32)*) nounwind
140 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
141 entry:
142   call void @exit(i32 0) noreturn nounwind
143   unreachable
145 return:                                           ; No predecessors!
146   ret void
149 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
150 entry:
151   %and = and i32 %__level, -2147483648
152   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
153   %cmp = icmp ult i32 %call, %__level
154   br i1 %cmp, label %if.then, label %if.end
156 if.then:                                          ; preds = %entry
157   br label %return
159 if.end:                                           ; preds = %entry
160   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
161   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
162   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
163   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
164   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
165   store i32 %asmresult, i32* %__eax, align 4
166   store i32 %asmresult8, i32* %__ebx, align 4
167   store i32 %asmresult9, i32* %__ecx, align 4
168   store i32 %asmresult10, i32* %__edx, align 4
169   br label %return
171 return:                                           ; preds = %if.end, %if.then
172   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
173   ret i32 %retval.0
176 declare void @exit(i32) noreturn
178 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
179 entry:
180   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
181   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
182   %tobool = icmp eq i32* %__sig, null
183   br i1 %tobool, label %if.end, label %if.then
185 if.then:                                          ; preds = %entry
186   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
187   store i32 %asmresult1, i32* %__sig, align 4
188   br label %if.end
190 if.end:                                           ; preds = %entry, %if.then
191   ret i32 %asmresult
194 !0 = metadata !{i32 -2147343465, i32 -2147343457} 
195 !1 = metadata !{i32 -2147343588, i32 -2147343580} 
196 ; CHECK: define