Add compile command to each testcase
[gcc-vect-testsuite.git] / if-cvt-stores-vect-ifcvt-18.ll
blobe15de441db09b59680a8625e4f728d2b43d11b1e
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 if-cvt-stores-vect-ifcvt-18.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer if-cvt-stores-vect-ifcvt-18.s > if-cvt-stores-vect-ifcvt-18.ll
6 ; ModuleID = 'if-cvt-stores-vect-ifcvt-18.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 %struct.data = type { i16, i16 }
12 @result = global [100 x i16] [i16 10, i16 -7, i16 11, i16 -6, i16 12, i16 -5, i16 13, i16 -4, i16 14, i16 -3, i16 15, i16 -2, i16 16, i16 -1, i16 17, i16 0, i16 18, i16 1, i16 19, i16 2, i16 20, i16 3, i16 21, i16 4, i16 22, i16 5, i16 23, i16 6, i16 24, i16 7, i16 25, i16 8, i16 26, i16 9, i16 27, i16 10, i16 28, i16 11, i16 29, i16 12, i16 30, i16 13, i16 31, i16 14, i16 32, i16 15, i16 33, i16 16, i16 34, i16 17, i16 35, i16 18, i16 36, i16 19, i16 37, i16 20, i16 38, i16 21, i16 39, i16 22, i16 40, i16 23, i16 41, i16 24, i16 42, i16 25, i16 43, i16 26, i16 44, i16 27, i16 45, i16 28, i16 46, i16 29, i16 47, i16 30, i16 48, i16 31, i16 49, i16 32, i16 50, i16 33, i16 51, i16 34, i16 52, i16 35, i16 53, i16 36, i16 54, i16 37, i16 55, i16 38, i16 56, i16 39, i16 57, i16 40, i16 58, i16 41, i16 59, i16 42], align 16
13 @in1 = common global [50 x %struct.data] zeroinitializer, align 16
14 @in2 = common global [50 x %struct.data] zeroinitializer, align 16
15 @out = common global [50 x %struct.data] zeroinitializer, align 16
16 @out1 = common global [50 x i16] zeroinitializer, align 16
17 @out2 = common global [50 x i16] zeroinitializer, align 16
19 define void @foo() nounwind uwtable noinline {
20 entry:
21   br label %for.cond
23 for.cond:                                         ; preds = %for.inc, %entry
24   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
25   %scevgep = getelementptr [50 x %struct.data]* @out, i64 0, i64 %indvar
26   %a27 = bitcast %struct.data* %scevgep to i16*
27   %scevgep6 = getelementptr [50 x %struct.data]* @in2, i64 0, i64 %indvar
28   %a38 = bitcast %struct.data* %scevgep6 to i16*
29   %b20 = getelementptr [50 x %struct.data]* @out, i64 0, i64 %indvar, i32 1
30   %scevgep9 = getelementptr [50 x %struct.data]* @in1, i64 0, i64 %indvar
31   %a = bitcast %struct.data* %scevgep9 to i16*
32   %b6 = getelementptr [50 x %struct.data]* @in2, i64 0, i64 %indvar, i32 1
33   %b = getelementptr [50 x %struct.data]* @in1, i64 0, i64 %indvar, i32 1
34   %exitcond = icmp ne i64 %indvar, 50
35   br i1 %exitcond, label %for.body, label %for.end
37 for.body:                                         ; preds = %for.cond
38   %tmp2 = load i16* %b, align 2
39   %tmp7 = load i16* %b6, align 2
40   %cmp11 = icmp slt i16 %tmp2, %tmp7
41   br i1 %cmp11, label %if.else, label %if.then
43 if.then:                                          ; preds = %for.body
44   %tmp16 = load i16* %a, align 4
45   store i16 %tmp16, i16* %b20, align 2
46   %add = add i16 %tmp7, 5
47   store i16 %add, i16* %a27, align 4
48   br label %if.end
50 if.else:                                          ; preds = %for.body
51   %sub = add i16 %tmp7, -12
52   store i16 %sub, i16* %b20, align 2
53   %tmp39 = load i16* %a38, align 4
54   %add43 = add i16 %tmp39, %tmp7
55   store i16 %add43, i16* %a27, align 4
56   br label %if.end
58 if.end:                                           ; preds = %if.else, %if.then
59   br label %for.inc
61 for.inc:                                          ; preds = %if.end
62   %indvar.next = add i64 %indvar, 1
63   br label %for.cond
65 for.end:                                          ; preds = %for.cond
66   ret void
69 define i32 @main() nounwind uwtable {
70 entry:
71   call void @check_vect()
72   br label %for.cond
74 for.cond:                                         ; preds = %for.inc, %entry
75   %indvar5 = phi i64 [ %indvar.next6, %for.inc ], [ 0, %entry ]
76   %b18 = getelementptr [50 x %struct.data]* @in2, i64 0, i64 %indvar5, i32 1
77   %tmp8 = add i64 %indvar5, 5
78   %conv14 = trunc i64 %tmp8 to i16
79   %scevgep10 = getelementptr [50 x %struct.data]* @in2, i64 0, i64 %indvar5
80   %a11 = bitcast %struct.data* %scevgep10 to i16*
81   %b = getelementptr [50 x %struct.data]* @in1, i64 0, i64 %indvar5, i32 1
82   %tmp13 = add i64 %indvar5, 2
83   %conv4 = trunc i64 %tmp13 to i16
84   %scevgep15 = getelementptr [50 x %struct.data]* @in1, i64 0, i64 %indvar5
85   %a = bitcast %struct.data* %scevgep15 to i16*
86   %conv = trunc i64 %indvar5 to i16
87   %exitcond = icmp ne i64 %indvar5, 50
88   br i1 %exitcond, label %for.body, label %for.end
90 for.body:                                         ; preds = %for.cond
91   store i16 %conv, i16* %a, align 4
92   store i16 %conv4, i16* %b, align 2
93   store i16 5, i16* %a11, align 4
94   store i16 %conv14, i16* %b18, align 2
95   call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0
96   br label %for.inc
98 for.inc:                                          ; preds = %for.body
99   %indvar.next6 = add i64 %indvar5, 1
100   br label %for.cond
102 for.end:                                          ; preds = %for.cond
103   call void @foo()
104   br label %for.cond20
106 for.cond20:                                       ; preds = %for.inc53, %for.end
107   %indvar = phi i64 [ %indvar.next, %for.inc53 ], [ 0, %for.end ]
108   %tmp = mul i64 %indvar, 2
109   %tmp2 = add i64 %tmp, 1
110   %arrayidx48 = getelementptr [100 x i16]* @result, i64 0, i64 %tmp2
111   %arrayidx33 = getelementptr [100 x i16]* @result, i64 0, i64 %tmp
112   %b41 = getelementptr [50 x %struct.data]* @out, i64 0, i64 %indvar, i32 1
113   %scevgep = getelementptr [50 x %struct.data]* @out, i64 0, i64 %indvar
114   %a28 = bitcast %struct.data* %scevgep to i16*
115   %i.1 = trunc i64 %indvar to i32
116   %cmp22 = icmp slt i32 %i.1, 50
117   br i1 %cmp22, label %for.body24, label %for.end56
119 for.body24:                                       ; preds = %for.cond20
120   %tmp29 = load i16* %a28, align 4
121   %tmp34 = load i16* %arrayidx33, align 4
122   %cmp36 = icmp eq i16 %tmp29, %tmp34
123   br i1 %cmp36, label %lor.lhs.false, label %if.then
125 lor.lhs.false:                                    ; preds = %for.body24
126   %tmp42 = load i16* %b41, align 2
127   %tmp49 = load i16* %arrayidx48, align 2
128   %cmp51 = icmp eq i16 %tmp42, %tmp49
129   br i1 %cmp51, label %if.end, label %if.then
131 if.then:                                          ; preds = %lor.lhs.false, %for.body24
132   call void @abort() noreturn nounwind
133   unreachable
135 if.end:                                           ; preds = %lor.lhs.false
136   br label %for.inc53
138 for.inc53:                                        ; preds = %if.end
139   %indvar.next = add i64 %indvar, 1
140   br label %for.cond20
142 for.end56:                                        ; preds = %for.cond20
143   ret i32 0
146 define internal void @check_vect() nounwind uwtable noinline {
147 entry:
148   %a = alloca i32, align 4
149   %b = alloca i32, align 4
150   %c = alloca i32, align 4
151   %d = alloca i32, align 4
152   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
153   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
154   %tobool = icmp eq i32 %call1, 0
155   br i1 %tobool, label %if.then, label %lor.lhs.false
157 lor.lhs.false:                                    ; preds = %entry
158   %tmp4 = load i32* %d, align 4
159   %and6 = and i32 %tmp4, 67108864
160   %cmp = icmp eq i32 %and6, 0
161   br i1 %cmp, label %if.then, label %if.end
163 if.then:                                          ; preds = %entry, %lor.lhs.false
164   call void @exit(i32 0) noreturn nounwind
165   unreachable
167 if.end:                                           ; preds = %lor.lhs.false
168   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
169   ret void
172 declare void @abort() noreturn
174 declare void (i32)* @signal(i32, void (i32)*) nounwind
176 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
177 entry:
178   call void @exit(i32 0) noreturn nounwind
179   unreachable
181 return:                                           ; No predecessors!
182   ret void
185 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
186 entry:
187   %and = and i32 %__level, -2147483648
188   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
189   %cmp = icmp ult i32 %call, %__level
190   br i1 %cmp, label %if.then, label %if.end
192 if.then:                                          ; preds = %entry
193   br label %return
195 if.end:                                           ; preds = %entry
196   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !1
197   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
198   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
199   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
200   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
201   store i32 %asmresult, i32* %__eax, align 4
202   store i32 %asmresult8, i32* %__ebx, align 4
203   store i32 %asmresult9, i32* %__ecx, align 4
204   store i32 %asmresult10, i32* %__edx, align 4
205   br label %return
207 return:                                           ; preds = %if.end, %if.then
208   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
209   ret i32 %retval.0
212 declare void @exit(i32) noreturn
214 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
215 entry:
216   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !2
217   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
218   %tobool = icmp eq i32* %__sig, null
219   br i1 %tobool, label %if.end, label %if.then
221 if.then:                                          ; preds = %entry
222   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
223   store i32 %asmresult1, i32* %__sig, align 4
224   br label %if.end
226 if.end:                                           ; preds = %entry, %if.then
227   ret i32 %asmresult
230 !0 = metadata !{i32 1052}
231 !1 = metadata !{i32 -2147342939, i32 -2147342931} 
232 !2 = metadata !{i32 -2147343062, i32 -2147343054} 
233 ; CHECK: define