Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-cond-1.ll
blob06191d49fd4bfe3f28390151e6fda4e215f0bd48
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-cond-1.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-cond-1.s > vect-cond-1.ll
6 ; ModuleID = 'vect-cond-1.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 @c = global [16 x i32] [i32 3, i32 2, i32 1, i32 10, i32 1, i32 42, i32 3, i32 4, i32 50, i32 9, i32 32, i32 8, i32 11, i32 10, i32 1, i32 2], align 16
11 @a = global [17 x i32] [i32 0, i32 16, i32 32, i32 48, i32 64, i32 128, i32 256, i32 512, i32 0, i32 16, i32 32, i32 48, i32 64, i32 128, i32 256, i32 512, i32 1024], align 16
12 @check_result = global [32 x i32] [i32 1024, i32 1024, i32 1024, i32 256, i32 256, i32 256, i32 256, i32 256, i32 256, i32 256, i32 256, i32 128, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48], align 16
13 @x_in = common global [32 x i32] zeroinitializer, align 16
14 @x_out = common global [32 x i32] zeroinitializer, align 16
16 define void @foo() nounwind uwtable noinline {
17 entry:
18   br label %for.cond
20 for.cond:                                         ; preds = %for.inc25, %entry
21   %indvar2 = phi i64 [ %indvar.next3, %for.inc25 ], [ 0, %entry ]
22   %arrayidx24 = getelementptr [32 x i32]* @x_out, i64 0, i64 %indvar2
23   %arrayidx = getelementptr [32 x i32]* @x_in, i64 0, i64 %indvar2
24   %exitcond4 = icmp ne i64 %indvar2, 32
25   br i1 %exitcond4, label %for.body, label %for.end28
27 for.body:                                         ; preds = %for.cond
28   %tmp2 = load i32* %arrayidx, align 4
29   %tmp3 = load i32* getelementptr inbounds ([17 x i32]* @a, i64 0, i64 0), align 16
30   br label %for.cond4
32 for.cond4:                                        ; preds = %for.inc, %for.body
33   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %for.body ]
34   %curr_a.0 = phi i32 [ %tmp3, %for.body ], [ %cond, %for.inc ]
35   %arrayidx15 = getelementptr [16 x i32]* @c, i64 0, i64 %indvar
36   %tmp = add i64 %indvar, 1
37   %arrayidx10 = getelementptr [17 x i32]* @a, i64 0, i64 %tmp
38   %exitcond = icmp ne i64 %indvar, 16
39   br i1 %exitcond, label %for.body7, label %for.end
41 for.body7:                                        ; preds = %for.cond4
42   %tmp16 = load i32* %arrayidx15, align 4
43   %cmp17 = icmp sgt i32 %tmp2, %tmp16
44   br i1 %cmp17, label %cond.true, label %cond.false
46 cond.true:                                        ; preds = %for.body7
47   br label %cond.end
49 cond.false:                                       ; preds = %for.body7
50   %tmp11 = load i32* %arrayidx10, align 4
51   br label %cond.end
53 cond.end:                                         ; preds = %cond.false, %cond.true
54   %cond = phi i32 [ %curr_a.0, %cond.true ], [ %tmp11, %cond.false ]
55   br label %for.inc
57 for.inc:                                          ; preds = %cond.end
58   %indvar.next = add i64 %indvar, 1
59   br label %for.cond4
61 for.end:                                          ; preds = %for.cond4
62   %curr_a.0.lcssa = phi i32 [ %curr_a.0, %for.cond4 ]
63   store i32 %curr_a.0.lcssa, i32* %arrayidx24, align 4
64   br label %for.inc25
66 for.inc25:                                        ; preds = %for.end
67   %indvar.next3 = add i64 %indvar2, 1
68   br label %for.cond
70 for.end28:                                        ; preds = %for.cond
71   ret void
74 define i32 @main() nounwind uwtable {
75 entry:
76   call void @check_vect()
77   br label %for.cond
79 for.cond:                                         ; preds = %for.inc, %entry
80   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ]
81   %arrayidx = getelementptr [32 x i32]* @x_in, i64 0, i64 %indvar1
82   %j.0 = trunc i64 %indvar1 to i32
83   %exitcond = icmp ne i64 %indvar1, 32
84   br i1 %exitcond, label %for.body, label %for.end
86 for.body:                                         ; preds = %for.cond
87   store i32 %j.0, i32* %arrayidx, align 4
88   br label %for.inc
90 for.inc:                                          ; preds = %for.body
91   %indvar.next2 = add i64 %indvar1, 1
92   br label %for.cond
94 for.end:                                          ; preds = %for.cond
95   call void @foo()
96   br label %for.cond4
98 for.cond4:                                        ; preds = %for.inc17, %for.end
99   %indvar = phi i64 [ %indvar.next, %for.inc17 ], [ 0, %for.end ]
100   %arrayidx14 = getelementptr [32 x i32]* @check_result, i64 0, i64 %indvar
101   %arrayidx10 = getelementptr [32 x i32]* @x_out, i64 0, i64 %indvar
102   %j.1 = trunc i64 %indvar to i32
103   %cmp6 = icmp slt i32 %j.1, 32
104   br i1 %cmp6, label %for.body7, label %for.end20
106 for.body7:                                        ; preds = %for.cond4
107   %tmp11 = load i32* %arrayidx10, align 4
108   %tmp15 = load i32* %arrayidx14, align 4
109   %cmp16 = icmp eq i32 %tmp11, %tmp15
110   br i1 %cmp16, label %if.end, label %if.then
112 if.then:                                          ; preds = %for.body7
113   call void @abort() noreturn nounwind
114   unreachable
116 if.end:                                           ; preds = %for.body7
117   br label %for.inc17
119 for.inc17:                                        ; preds = %if.end
120   %indvar.next = add i64 %indvar, 1
121   br label %for.cond4
123 for.end20:                                        ; preds = %for.cond4
124   ret i32 0
127 define internal void @check_vect() nounwind uwtable noinline {
128 entry:
129   %a = alloca i32, align 4
130   %b = alloca i32, align 4
131   %c = alloca i32, align 4
132   %d = alloca i32, align 4
133   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
134   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
135   %tobool = icmp eq i32 %call1, 0
136   br i1 %tobool, label %if.then, label %lor.lhs.false
138 lor.lhs.false:                                    ; preds = %entry
139   %tmp4 = load i32* %d, align 4
140   %and6 = and i32 %tmp4, 67108864
141   %cmp = icmp eq i32 %and6, 0
142   br i1 %cmp, label %if.then, label %if.end
144 if.then:                                          ; preds = %entry, %lor.lhs.false
145   call void @exit(i32 0) noreturn nounwind
146   unreachable
148 if.end:                                           ; preds = %lor.lhs.false
149   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
150   ret void
153 declare void @abort() noreturn nounwind
155 declare void (i32)* @signal(i32, void (i32)*) nounwind
157 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
158 entry:
159   call void @exit(i32 0) noreturn nounwind
160   unreachable
162 return:                                           ; No predecessors!
163   ret void
166 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
167 entry:
168   %and = and i32 %__level, -2147483648
169   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
170   %cmp = icmp ult i32 %call, %__level
171   br i1 %cmp, label %if.then, label %if.end
173 if.then:                                          ; preds = %entry
174   br label %return
176 if.end:                                           ; preds = %entry
177   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
178   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
179   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
180   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
181   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
182   store i32 %asmresult, i32* %__eax, align 4
183   store i32 %asmresult8, i32* %__ebx, align 4
184   store i32 %asmresult9, i32* %__ecx, align 4
185   store i32 %asmresult10, i32* %__edx, align 4
186   br label %return
188 return:                                           ; preds = %if.end, %if.then
189   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
190   ret i32 %retval.0
193 declare void @exit(i32) noreturn nounwind
195 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
196 entry:
197   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
198   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
199   %tobool = icmp eq i32* %__sig, null
200   br i1 %tobool, label %if.end, label %if.then
202 if.then:                                          ; preds = %entry
203   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
204   store i32 %asmresult1, i32* %__sig, align 4
205   br label %if.end
207 if.end:                                           ; preds = %entry, %if.then
208   ret i32 %asmresult
211 !0 = metadata !{i32 -2147228140, i32 -2147228132} 
212 !1 = metadata !{i32 -2147228263, i32 -2147228255} 
213 ; CHECK: define