Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-reduc-pattern-1a.ll
blob206a58c8fb4784ab0d388db5aafe08a0f711d60c
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-pattern-1a.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-reduc-pattern-1a.s > vect-reduc-pattern-1a.ll
6 ; ModuleID = 'vect-reduc-pattern-1a.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 @udata_sh = global [16 x i16] [i16 0, i16 2, i16 4, i16 6, i16 8, i16 10, i16 12, i16 14, i16 16, i16 18, i16 20, i16 22, i16 24, i16 26, i16 28, i16 0], align 16
12 define i32 @foo() nounwind uwtable noinline {
13 entry:
14   br label %for.cond
16 for.cond:                                         ; preds = %for.inc, %entry
17   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
18   %intsum.0 = phi i32 [ 0, %entry ], [ %add, %for.inc ]
19   %arrayidx = getelementptr [16 x i16]* @udata_sh, i64 0, i64 %indvar
20   %exitcond = icmp ne i64 %indvar, 16
21   br i1 %exitcond, label %for.body, label %for.end
23 for.body:                                         ; preds = %for.cond
24   br label %for.inc
26 for.inc:                                          ; preds = %for.body
27   %tmp2 = load i16* %arrayidx, align 2
28   %conv = zext i16 %tmp2 to i32
29   %add = add i32 %intsum.0, %conv
30   %indvar.next = add i64 %indvar, 1
31   br label %for.cond
33 for.end:                                          ; preds = %for.cond
34   %intsum.0.lcssa = phi i32 [ %intsum.0, %for.cond ]
35   %cmp6 = icmp eq i32 %intsum.0.lcssa, 210
36   br i1 %cmp6, label %if.end, label %if.then
38 if.then:                                          ; preds = %for.end
39   call void @abort() noreturn nounwind
40   unreachable
42 if.end:                                           ; preds = %for.end
43   ret i32 0
46 declare void @abort() noreturn
48 define i32 @main() nounwind uwtable {
49 entry:
50   call void @check_vect()
51   %call = call i32 @foo()
52   ret i32 %call
55 define internal void @check_vect() nounwind uwtable noinline {
56 entry:
57   %a = alloca i32, align 4
58   %b = alloca i32, align 4
59   %c = alloca i32, align 4
60   %d = alloca i32, align 4
61   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
62   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
63   %tobool = icmp eq i32 %call1, 0
64   br i1 %tobool, label %if.then, label %lor.lhs.false
66 lor.lhs.false:                                    ; preds = %entry
67   %tmp4 = load i32* %d, align 4
68   %and6 = and i32 %tmp4, 67108864
69   %cmp = icmp eq i32 %and6, 0
70   br i1 %cmp, label %if.then, label %if.end
72 if.then:                                          ; preds = %entry, %lor.lhs.false
73   call void @exit(i32 0) noreturn nounwind
74   unreachable
76 if.end:                                           ; preds = %lor.lhs.false
77   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
78   ret void
81 declare void (i32)* @signal(i32, void (i32)*) nounwind
83 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
84 entry:
85   call void @exit(i32 0) noreturn nounwind
86   unreachable
88 return:                                           ; No predecessors!
89   ret void
92 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
93 entry:
94   %and = and i32 %__level, -2147483648
95   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
96   %cmp = icmp ult i32 %call, %__level
97   br i1 %cmp, label %if.then, label %if.end
99 if.then:                                          ; preds = %entry
100   br label %return
102 if.end:                                           ; preds = %entry
103   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
104   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
105   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
106   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
107   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
108   store i32 %asmresult, i32* %__eax, align 4
109   store i32 %asmresult8, i32* %__ebx, align 4
110   store i32 %asmresult9, i32* %__ecx, align 4
111   store i32 %asmresult10, i32* %__edx, align 4
112   br label %return
114 return:                                           ; preds = %if.end, %if.then
115   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
116   ret i32 %retval.0
119 declare void @exit(i32) noreturn
121 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
122 entry:
123   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
124   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
125   %tobool = icmp eq i32* %__sig, null
126   br i1 %tobool, label %if.end, label %if.then
128 if.then:                                          ; preds = %entry
129   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
130   store i32 %asmresult1, i32* %__sig, align 4
131   br label %if.end
133 if.end:                                           ; preds = %entry, %if.then
134   ret i32 %asmresult
137 !0 = metadata !{i32 -2147343424, i32 -2147343416} 
138 !1 = metadata !{i32 -2147343547, i32 -2147343539} 
139 ; CHECK: define