Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-reduc-1short.ll
blob49a1f08864c3b654ae72b312613447b61888d7e6
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-reduc-1short.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-reduc-1short.s > vect-reduc-1short.ll
6 ; ModuleID = 'vect-reduc-1short.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 @ub = global [16 x i16] [i16 1, i16 3, i16 6, i16 9, i16 12, i16 15, i16 18, i16 21, i16 24, i16 27, i16 30, i16 33, i16 36, i16 39, i16 42, i16 45], align 16
11 @uc = global [16 x i16] [i16 1, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15], align 16
13 define void @main1(i16 zeroext %x, i16 zeroext %max_result, i16 zeroext %min_result) nounwind uwtable noinline {
14 entry:
15   br label %for.cond
17 for.cond:                                         ; preds = %for.inc, %entry
18   %indvar4 = phi i64 [ %indvar.next5, %for.inc ], [ 0, %entry ]
19   %udiff.0 = phi i32 [ 2, %entry ], [ %phitmp, %for.inc ]
20   %arrayidx8 = getelementptr [16 x i16]* @uc, i64 0, i64 %indvar4
21   %arrayidx = getelementptr [16 x i16]* @ub, i64 0, i64 %indvar4
22   %exitcond6 = icmp ne i64 %indvar4, 16
23   br i1 %exitcond6, label %for.body, label %for.end
25 for.body:                                         ; preds = %for.cond
26   br label %for.inc
28 for.inc:                                          ; preds = %for.body
29   %tmp9 = load i16* %arrayidx8, align 2
30   %tmp5 = load i16* %arrayidx, align 2
31   %sub = sub i16 %tmp5, %tmp9
32   %conv12 = zext i16 %sub to i32
33   %add = add nsw i32 %udiff.0, %conv12
34   %phitmp = and i32 %add, 65535
35   %indvar.next5 = add i64 %indvar4, 1
36   br label %for.cond
38 for.end:                                          ; preds = %for.cond
39   %udiff.0.lcssa = phi i32 [ %udiff.0, %for.cond ]
40   br label %for.cond17
42 for.cond17:                                       ; preds = %for.inc39, %for.end
43   %indvar1 = phi i64 [ %indvar.next2, %for.inc39 ], [ 0, %for.end ]
44   %umax.0 = phi i16 [ %x, %for.end ], [ %cond.in, %for.inc39 ]
45   %arrayidx26 = getelementptr [16 x i16]* @uc, i64 0, i64 %indvar1
46   %exitcond3 = icmp ne i64 %indvar1, 16
47   br i1 %exitcond3, label %for.body21, label %for.end42
49 for.body21:                                       ; preds = %for.cond17
50   %tmp27 = load i16* %arrayidx26, align 2
51   %cmp29 = icmp ult i16 %umax.0, %tmp27
52   br i1 %cmp29, label %cond.true, label %cond.false
54 cond.true:                                        ; preds = %for.body21
55   %tmp34 = load i16* %arrayidx26, align 2
56   br label %cond.end
58 cond.false:                                       ; preds = %for.body21
59   br label %cond.end
61 cond.end:                                         ; preds = %cond.false, %cond.true
62   %cond.in = phi i16 [ %tmp34, %cond.true ], [ %umax.0, %cond.false ]
63   br label %for.inc39
65 for.inc39:                                        ; preds = %cond.end
66   %indvar.next2 = add i64 %indvar1, 1
67   br label %for.cond17
69 for.end42:                                        ; preds = %for.cond17
70   %umax.0.lcssa = phi i16 [ %umax.0, %for.cond17 ]
71   br label %for.cond43
73 for.cond43:                                       ; preds = %for.inc69, %for.end42
74   %indvar = phi i64 [ %indvar.next, %for.inc69 ], [ 0, %for.end42 ]
75   %umin.0 = phi i16 [ %x, %for.end42 ], [ %cond67.in, %for.inc69 ]
76   %arrayidx52 = getelementptr [16 x i16]* @uc, i64 0, i64 %indvar
77   %exitcond = icmp ne i64 %indvar, 16
78   br i1 %exitcond, label %for.body47, label %for.end72
80 for.body47:                                       ; preds = %for.cond43
81   %tmp53 = load i16* %arrayidx52, align 2
82   %cmp55 = icmp ugt i16 %umin.0, %tmp53
83   br i1 %cmp55, label %cond.true57, label %cond.false63
85 cond.true57:                                      ; preds = %for.body47
86   %tmp61 = load i16* %arrayidx52, align 2
87   br label %cond.end66
89 cond.false63:                                     ; preds = %for.body47
90   br label %cond.end66
92 cond.end66:                                       ; preds = %cond.false63, %cond.true57
93   %cond67.in = phi i16 [ %tmp61, %cond.true57 ], [ %umin.0, %cond.false63 ]
94   br label %for.inc69
96 for.inc69:                                        ; preds = %cond.end66
97   %indvar.next = add i64 %indvar, 1
98   br label %for.cond43
100 for.end72:                                        ; preds = %for.cond43
101   %umin.0.lcssa = phi i16 [ %umin.0, %for.cond43 ]
102   %cmp75 = icmp eq i32 %udiff.0.lcssa, 242
103   br i1 %cmp75, label %if.end, label %if.then
105 if.then:                                          ; preds = %for.end72
106   call void @abort() noreturn nounwind
107   unreachable
109 if.end:                                           ; preds = %for.end72
110   %cmp81 = icmp eq i16 %umax.0.lcssa, %max_result
111   br i1 %cmp81, label %if.end84, label %if.then83
113 if.then83:                                        ; preds = %if.end
114   call void @abort() noreturn nounwind
115   unreachable
117 if.end84:                                         ; preds = %if.end
118   %cmp89 = icmp eq i16 %umin.0.lcssa, %min_result
119   br i1 %cmp89, label %if.end92, label %if.then91
121 if.then91:                                        ; preds = %if.end84
122   call void @abort() noreturn nounwind
123   unreachable
125 if.end92:                                         ; preds = %if.end84
126   ret void
129 declare void @abort() noreturn
131 define i32 @main() nounwind uwtable {
132 entry:
133   call void @check_vect()
134   call void @main1(i16 zeroext 100, i16 zeroext 100, i16 zeroext 1)
135   call void @main1(i16 zeroext 0, i16 zeroext 15, i16 zeroext 0)
136   ret i32 0
139 define internal void @check_vect() nounwind uwtable noinline {
140 entry:
141   %a = alloca i32, align 4
142   %b = alloca i32, align 4
143   %c = alloca i32, align 4
144   %d = alloca i32, align 4
145   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
146   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
147   %tobool = icmp eq i32 %call1, 0
148   br i1 %tobool, label %if.then, label %lor.lhs.false
150 lor.lhs.false:                                    ; preds = %entry
151   %tmp4 = load i32* %d, align 4
152   %and6 = and i32 %tmp4, 67108864
153   %cmp = icmp eq i32 %and6, 0
154   br i1 %cmp, label %if.then, label %if.end
156 if.then:                                          ; preds = %entry, %lor.lhs.false
157   call void @exit(i32 0) noreturn nounwind
158   unreachable
160 if.end:                                           ; preds = %lor.lhs.false
161   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
162   ret void
165 declare void (i32)* @signal(i32, void (i32)*) nounwind
167 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
168 entry:
169   call void @exit(i32 0) noreturn nounwind
170   unreachable
172 return:                                           ; No predecessors!
173   ret void
176 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
177 entry:
178   %and = and i32 %__level, -2147483648
179   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
180   %cmp = icmp ult i32 %call, %__level
181   br i1 %cmp, label %if.then, label %if.end
183 if.then:                                          ; preds = %entry
184   br label %return
186 if.end:                                           ; preds = %entry
187   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
188   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
189   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
190   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
191   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
192   store i32 %asmresult, i32* %__eax, align 4
193   store i32 %asmresult8, i32* %__ebx, align 4
194   store i32 %asmresult9, i32* %__ecx, align 4
195   store i32 %asmresult10, i32* %__edx, align 4
196   br label %return
198 return:                                           ; preds = %if.end, %if.then
199   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
200   ret i32 %retval.0
203 declare void @exit(i32) noreturn
205 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
206 entry:
207   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
208   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
209   %tobool = icmp eq i32* %__sig, null
210   br i1 %tobool, label %if.end, label %if.then
212 if.then:                                          ; preds = %entry
213   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
214   store i32 %asmresult1, i32* %__sig, align 4
215   br label %if.end
217 if.end:                                           ; preds = %entry, %if.then
218   ret i32 %asmresult
221 !0 = metadata !{i32 -2147343246, i32 -2147343238} 
222 !1 = metadata !{i32 -2147343369, i32 -2147343361} 
223 ; CHECK: define