Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-reduc-3.ll
blob2ad262c95c5182bd46c990a9c1fb82a7d951d5d7
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-3.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-reduc-3.s > vect-reduc-3.ll
6 ; ModuleID = 'vect-reduc-3.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 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
11 @uc = global [16 x i32] [i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15], align 16
13 define i32 @main1(i32 %n, i32 %res) nounwind uwtable noinline {
14 entry:
15   %tmp = icmp sgt i32 %n, 0
16   %smax = select i1 %tmp, i32 %n, i32 0
17   %tmp1 = zext i32 %smax to i64
18   br label %for.cond
20 for.cond:                                         ; preds = %for.inc, %entry
21   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
22   %udiff.0 = phi i32 [ 0, %entry ], [ %add, %for.inc ]
23   %arrayidx6 = getelementptr [16 x i32]* @uc, i64 0, i64 %indvar
24   %arrayidx = getelementptr [16 x i32]* @ub, i64 0, i64 %indvar
25   %exitcond = icmp ne i64 %indvar, %tmp1
26   br i1 %exitcond, label %for.body, label %for.end
28 for.body:                                         ; preds = %for.cond
29   br label %for.inc
31 for.inc:                                          ; preds = %for.body
32   %tmp7 = load i32* %arrayidx6, align 4
33   %tmp3 = load i32* %arrayidx, align 4
34   %sub = sub i32 %tmp3, %tmp7
35   %add = add i32 %udiff.0, %sub
36   %indvar.next = add i64 %indvar, 1
37   br label %for.cond
39 for.end:                                          ; preds = %for.cond
40   %udiff.0.lcssa = phi i32 [ %udiff.0, %for.cond ]
41   %cmp12 = icmp eq i32 %udiff.0.lcssa, %res
42   br i1 %cmp12, label %if.end, label %if.then
44 if.then:                                          ; preds = %for.end
45   call void @abort() noreturn nounwind
46   unreachable
48 if.end:                                           ; preds = %for.end
49   ret i32 0
52 declare void @abort() noreturn
54 define i32 @main() nounwind uwtable {
55 entry:
56   call void @check_vect()
57   %call = call i32 @main1(i32 16, i32 240)
58   %call1 = call i32 @main1(i32 15, i32 210)
59   ret i32 0
62 define internal void @check_vect() nounwind uwtable noinline {
63 entry:
64   %a = alloca i32, align 4
65   %b = alloca i32, align 4
66   %c = alloca i32, align 4
67   %d = alloca i32, align 4
68   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
69   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
70   %tobool = icmp eq i32 %call1, 0
71   br i1 %tobool, label %if.then, label %lor.lhs.false
73 lor.lhs.false:                                    ; preds = %entry
74   %tmp4 = load i32* %d, align 4
75   %and6 = and i32 %tmp4, 67108864
76   %cmp = icmp eq i32 %and6, 0
77   br i1 %cmp, label %if.then, label %if.end
79 if.then:                                          ; preds = %entry, %lor.lhs.false
80   call void @exit(i32 0) noreturn nounwind
81   unreachable
83 if.end:                                           ; preds = %lor.lhs.false
84   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
85   ret void
88 declare void (i32)* @signal(i32, void (i32)*) nounwind
90 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
91 entry:
92   call void @exit(i32 0) noreturn nounwind
93   unreachable
95 return:                                           ; No predecessors!
96   ret void
99 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
100 entry:
101   %and = and i32 %__level, -2147483648
102   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
103   %cmp = icmp ult i32 %call, %__level
104   br i1 %cmp, label %if.then, label %if.end
106 if.then:                                          ; preds = %entry
107   br label %return
109 if.end:                                           ; preds = %entry
110   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
111   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
112   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
113   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
114   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
115   store i32 %asmresult, i32* %__eax, align 4
116   store i32 %asmresult8, i32* %__ebx, align 4
117   store i32 %asmresult9, i32* %__ecx, align 4
118   store i32 %asmresult10, i32* %__edx, align 4
119   br label %return
121 return:                                           ; preds = %if.end, %if.then
122   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
123   ret i32 %retval.0
126 declare void @exit(i32) noreturn
128 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
129 entry:
130   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
131   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
132   %tobool = icmp eq i32* %__sig, null
133   br i1 %tobool, label %if.end, label %if.then
135 if.then:                                          ; preds = %entry
136   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
137   store i32 %asmresult1, i32* %__sig, align 4
138   br label %if.end
140 if.end:                                           ; preds = %entry, %if.then
141   ret i32 %asmresult
144 !0 = metadata !{i32 -2147343509, i32 -2147343501} 
145 !1 = metadata !{i32 -2147343632, i32 -2147343624} 
146 ; CHECK: define