Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-cselim-2.ll
blob09cec41f9ef8a6d250719cd0c3817360b30d90de
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-cselim-2.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-cselim-2.s > vect-cselim-2.ll
6 ; ModuleID = 'vect-cselim-2.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 @result = global [100 x i32] [i32 5, i32 -7, i32 7, i32 -6, i32 9, i32 -5, i32 11, i32 -4, i32 13, i32 -3, i32 15, i32 -2, i32 17, i32 -1, i32 19, i32 0, i32 21, i32 1, i32 23, i32 2, i32 25, i32 3, i32 27, i32 4, i32 29, i32 5, i32 31, i32 6, i32 33, i32 7, i32 35, i32 8, i32 37, i32 9, i32 39, i32 10, i32 41, i32 11, i32 43, i32 12, i32 45, i32 13, i32 47, i32 14, i32 49, i32 15, i32 51, i32 16, i32 53, i32 17, i32 55, i32 18, i32 57, i32 19, i32 59, i32 20, i32 61, i32 21, i32 63, i32 22, i32 65, i32 23, i32 67, i32 24, i32 69, i32 25, i32 71, i32 26, i32 73, i32 27, i32 75, i32 28, i32 77, i32 29, i32 79, i32 30, i32 81, i32 31, i32 83, i32 32, i32 85, i32 33, i32 87, i32 34, i32 89, i32 35, i32 91, i32 36, i32 93, i32 37, i32 95, i32 38, i32 97, i32 39, i32 99, i32 40, i32 101, i32 41, i32 103, i32 42], align 16
11 @in1 = common global [50 x i32] zeroinitializer, align 16
12 @in2 = common global [50 x i32] zeroinitializer, align 16
13 @a = common global [50 x i32] zeroinitializer, align 16
14 @b = common global [50 x i32] zeroinitializer, align 16
16 define void @foo(i32* %pa, i32* %pb) nounwind uwtable noinline {
17 entry:
18   br label %for.cond
20 for.cond:                                         ; preds = %for.inc, %entry
21   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
22   %arrayidx5 = getelementptr [50 x i32]* @in2, i64 0, i64 %indvar
23   %arrayidx = getelementptr [50 x i32]* @in1, i64 0, i64 %indvar
24   %pb.addr.0 = getelementptr i32* %pb, i64 %indvar
25   %pa.addr.0 = getelementptr i32* %pa, i64 %indvar
26   %exitcond = icmp ne i64 %indvar, 50
27   br i1 %exitcond, label %for.body, label %for.end
29 for.body:                                         ; preds = %for.cond
30   %tmp2 = load i32* %arrayidx, align 4
31   %tmp6 = load i32* %arrayidx5, align 4
32   %cmp9 = icmp slt i32 %tmp2, %tmp6
33   br i1 %cmp9, label %if.else, label %if.then
35 if.then:                                          ; preds = %for.body
36   store i32 %tmp2, i32* %pa.addr.0, align 4
37   %add = add nsw i32 %tmp6, 5
38   store i32 %add, i32* %pb.addr.0, align 4
39   br label %if.end
41 if.else:                                          ; preds = %for.body
42   %sub = add nsw i32 %tmp6, -12
43   store i32 %sub, i32* %pb.addr.0, align 4
44   %add18 = add nsw i32 %tmp2, %tmp6
45   store i32 %add18, i32* %pa.addr.0, align 4
46   br label %if.end
48 if.end:                                           ; preds = %if.else, %if.then
49   br label %for.inc
51 for.inc:                                          ; preds = %if.end
52   %indvar.next = add i64 %indvar, 1
53   br label %for.cond
55 for.end:                                          ; preds = %for.cond
56   ret void
59 define i32 @main() nounwind uwtable {
60 entry:
61   call void @check_vect()
62   br label %for.cond
64 for.cond:                                         ; preds = %for.inc, %entry
65   %indvar4 = phi i64 [ %indvar.next5, %for.inc ], [ 0, %entry ]
66   %arrayidx6 = getelementptr [50 x i32]* @in2, i64 0, i64 %indvar4
67   %tmp6 = add i64 %indvar4, 5
68   %add = trunc i64 %tmp6 to i32
69   %arrayidx = getelementptr [50 x i32]* @in1, i64 0, i64 %indvar4
70   %i.0 = trunc i64 %indvar4 to i32
71   %exitcond = icmp ne i64 %indvar4, 50
72   br i1 %exitcond, label %for.body, label %for.end
74 for.body:                                         ; preds = %for.cond
75   store i32 %i.0, i32* %arrayidx, align 4
76   store i32 %add, i32* %arrayidx6, align 4
77   call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0
78   br label %for.inc
80 for.inc:                                          ; preds = %for.body
81   %indvar.next5 = add i64 %indvar4, 1
82   br label %for.cond
84 for.end:                                          ; preds = %for.cond
85   call void @foo(i32* getelementptr inbounds ([50 x i32]* @a, i64 0, i64 0), i32* getelementptr inbounds ([50 x i32]* @b, i64 0, i64 0))
86   br label %for.cond8
88 for.cond8:                                        ; preds = %for.inc32, %for.end
89   %indvar = phi i64 [ %indvar.next, %for.inc32 ], [ 0, %for.end ]
90   %tmp = mul i64 %indvar, 2
91   %tmp2 = add i64 %tmp, 1
92   %arrayidx29 = getelementptr [100 x i32]* @result, i64 0, i64 %tmp2
93   %arrayidx18 = getelementptr [100 x i32]* @result, i64 0, i64 %tmp
94   %arrayidx23 = getelementptr [50 x i32]* @b, i64 0, i64 %indvar
95   %arrayidx14 = getelementptr [50 x i32]* @a, i64 0, i64 %indvar
96   %i.1 = trunc i64 %indvar to i32
97   %cmp10 = icmp slt i32 %i.1, 50
98   br i1 %cmp10, label %for.body11, label %for.end35
100 for.body11:                                       ; preds = %for.cond8
101   %tmp15 = load i32* %arrayidx14, align 4
102   %tmp19 = load i32* %arrayidx18, align 8
103   %cmp20 = icmp eq i32 %tmp15, %tmp19
104   br i1 %cmp20, label %lor.lhs.false, label %if.then
106 lor.lhs.false:                                    ; preds = %for.body11
107   %tmp24 = load i32* %arrayidx23, align 4
108   %tmp30 = load i32* %arrayidx29, align 4
109   %cmp31 = icmp eq i32 %tmp24, %tmp30
110   br i1 %cmp31, label %if.end, label %if.then
112 if.then:                                          ; preds = %lor.lhs.false, %for.body11
113   call void @abort() noreturn nounwind
114   unreachable
116 if.end:                                           ; preds = %lor.lhs.false
117   br label %for.inc32
119 for.inc32:                                        ; preds = %if.end
120   %indvar.next = add i64 %indvar, 1
121   br label %for.cond8
123 for.end35:                                        ; preds = %for.cond8
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
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 !1
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
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 !2
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 1007}
212 !1 = metadata !{i32 -2147343039, i32 -2147343031} 
213 !2 = metadata !{i32 -2147343162, i32 -2147343154} 
214 ; CHECK: define