Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-78.ll
blob13aab8f24e359cf0df07f88f44080217870b72d5
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-78.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-78.s > vect-78.ll
6 ; ModuleID = 'vect-78.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 @ib = global [16 x i32] [i32 0, i32 1, i32 3, i32 5, i32 7, i32 11, i32 13, i32 17, i32 0, i32 2, i32 6, i32 10, i32 14, i32 22, i32 26, i32 34], align 16
11 @off = global i32 8, align 4
13 define i32 @main1(i32* %ib) nounwind uwtable noinline {
14 entry:
15   %ia = alloca [8 x i32], align 16
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar2 = phi i64 [ %indvar.next3, %for.inc ], [ 0, %entry ]
20   %arrayidx7 = getelementptr [8 x i32]* %ia, i64 0, i64 %indvar2
21   %i.0 = trunc i64 %indvar2 to i32
22   %exitcond = icmp ne i64 %indvar2, 8
23   br i1 %exitcond, label %for.body, label %for.end
25 for.body:                                         ; preds = %for.cond
26   %tmp2 = load i32* @off, align 4
27   %add = add i32 %tmp2, %i.0
28   %idxprom = sext i32 %add to i64
29   %arrayidx = getelementptr inbounds i32* %ib, i64 %idxprom
30   %tmp4 = load i32* %arrayidx, align 4
31   store i32 %tmp4, i32* %arrayidx7, align 4
32   br label %for.inc
34 for.inc:                                          ; preds = %for.body
35   %indvar.next3 = add i64 %indvar2, 1
36   br label %for.cond
38 for.end:                                          ; preds = %for.cond
39   br label %for.cond9
41 for.cond9:                                        ; preds = %for.inc25, %for.end
42   %indvar = phi i64 [ %indvar.next, %for.inc25 ], [ 0, %for.end ]
43   %i.1 = trunc i64 %indvar to i32
44   %arrayidx15 = getelementptr [8 x i32]* %ia, i64 0, i64 %indvar
45   %cmp11 = icmp slt i32 %i.1, 8
46   br i1 %cmp11, label %for.body12, label %for.end28
48 for.body12:                                       ; preds = %for.cond9
49   %tmp16 = load i32* %arrayidx15, align 4
50   %tmp18 = load i32* @off, align 4
51   %add19 = add i32 %tmp18, %i.1
52   %idxprom20 = sext i32 %add19 to i64
53   %arrayidx22 = getelementptr inbounds i32* %ib, i64 %idxprom20
54   %tmp23 = load i32* %arrayidx22, align 4
55   %cmp24 = icmp eq i32 %tmp16, %tmp23
56   br i1 %cmp24, label %if.end, label %if.then
58 if.then:                                          ; preds = %for.body12
59   call void @abort() noreturn nounwind
60   unreachable
62 if.end:                                           ; preds = %for.body12
63   br label %for.inc25
65 for.inc25:                                        ; preds = %if.end
66   %indvar.next = add i64 %indvar, 1
67   br label %for.cond9
69 for.end28:                                        ; preds = %for.cond9
70   ret i32 0
73 declare void @abort() noreturn
75 define i32 @main() nounwind uwtable {
76 entry:
77   call void @check_vect()
78   %call = call i32 @main1(i32* getelementptr inbounds ([16 x i32]* @ib, i64 0, i64 0))
79   ret i32 0
82 define internal void @check_vect() nounwind uwtable noinline {
83 entry:
84   %a = alloca i32, align 4
85   %b = alloca i32, align 4
86   %c = alloca i32, align 4
87   %d = alloca i32, align 4
88   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
89   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
90   %tobool = icmp eq i32 %call1, 0
91   br i1 %tobool, label %if.then, label %lor.lhs.false
93 lor.lhs.false:                                    ; preds = %entry
94   %tmp4 = load i32* %d, align 4
95   %and6 = and i32 %tmp4, 67108864
96   %cmp = icmp eq i32 %and6, 0
97   br i1 %cmp, label %if.then, label %if.end
99 if.then:                                          ; preds = %entry, %lor.lhs.false
100   call void @exit(i32 0) noreturn nounwind
101   unreachable
103 if.end:                                           ; preds = %lor.lhs.false
104   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
105   ret void
108 declare void (i32)* @signal(i32, void (i32)*) nounwind
110 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
111 entry:
112   call void @exit(i32 0) noreturn nounwind
113   unreachable
115 return:                                           ; No predecessors!
116   ret void
119 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
120 entry:
121   %and = and i32 %__level, -2147483648
122   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
123   %cmp = icmp ult i32 %call, %__level
124   br i1 %cmp, label %if.then, label %if.end
126 if.then:                                          ; preds = %entry
127   br label %return
129 if.end:                                           ; preds = %entry
130   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
131   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
132   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
133   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
134   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
135   store i32 %asmresult, i32* %__eax, align 4
136   store i32 %asmresult8, i32* %__ebx, align 4
137   store i32 %asmresult9, i32* %__ecx, align 4
138   store i32 %asmresult10, i32* %__edx, align 4
139   br label %return
141 return:                                           ; preds = %if.end, %if.then
142   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
143   ret i32 %retval.0
146 declare void @exit(i32) noreturn
148 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
149 entry:
150   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
151   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
152   %tobool = icmp eq i32* %__sig, null
153   br i1 %tobool, label %if.end, label %if.then
155 if.then:                                          ; preds = %entry
156   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
157   store i32 %asmresult1, i32* %__sig, align 4
158   br label %if.end
160 if.end:                                           ; preds = %entry, %if.then
161   ret i32 %asmresult
164 !0 = metadata !{i32 -2147343436, i32 -2147343428} 
165 !1 = metadata !{i32 -2147343559, i32 -2147343551} 
166 ; CHECK: define