Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-vfa-01.ll
blob754cf3f8971b202b4485db78f35c789c77400bd4
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-vfa-01.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-vfa-01.s > vect-vfa-01.ll
6 ; ModuleID = 'vect-vfa-01.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 @result = global [16 x i32] [i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27], align 16
11 @X = global [16 x i32] [i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25], align 16
12 @Y = global [16 x i32] zeroinitializer, align 16
14 define void @foo(i32* %in, i32* %out) nounwind uwtable noinline {
15 entry:
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
20   %arrayidx7 = getelementptr i32* %out, i64 %indvar
21   %arrayidx = getelementptr i32* %in, i64 %indvar
22   %exitcond = icmp ne i64 %indvar, 16
23   br i1 %exitcond, label %for.body, label %for.end
25 for.body:                                         ; preds = %for.cond
26   %tmp3 = load i32* %arrayidx, align 4
27   %add = add nsw i32 %tmp3, 2
28   store i32 %add, i32* %arrayidx7, align 4
29   br label %for.inc
31 for.inc:                                          ; preds = %for.body
32   %indvar.next = add i64 %indvar, 1
33   br label %for.cond
35 for.end:                                          ; preds = %for.cond
36   ret void
39 define i32 @main() nounwind uwtable {
40 entry:
41   call void @check_vect()
42   call void @foo(i32* getelementptr inbounds ([16 x i32]* @X, i64 0, i64 0), i32* getelementptr inbounds ([16 x i32]* @Y, i64 0, i64 0))
43   br label %for.cond
45 for.cond:                                         ; preds = %for.inc, %entry
46   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
47   %arrayidx5 = getelementptr [16 x i32]* @result, i64 0, i64 %indvar
48   %arrayidx = getelementptr [16 x i32]* @Y, i64 0, i64 %indvar
49   %i.0 = trunc i64 %indvar to i32
50   %cmp = icmp slt i32 %i.0, 16
51   br i1 %cmp, label %for.body, label %for.end
53 for.body:                                         ; preds = %for.cond
54   %tmp2 = load i32* %arrayidx, align 4
55   %tmp6 = load i32* %arrayidx5, align 4
56   %cmp7 = icmp eq i32 %tmp2, %tmp6
57   br i1 %cmp7, label %if.end, label %if.then
59 if.then:                                          ; preds = %for.body
60   call void @abort() noreturn nounwind
61   unreachable
63 if.end:                                           ; preds = %for.body
64   br label %for.inc
66 for.inc:                                          ; preds = %if.end
67   %indvar.next = add i64 %indvar, 1
68   br label %for.cond
70 for.end:                                          ; preds = %for.cond
71   ret i32 0
74 define internal void @check_vect() nounwind uwtable noinline {
75 entry:
76   %a = alloca i32, align 4
77   %b = alloca i32, align 4
78   %c = alloca i32, align 4
79   %d = alloca i32, align 4
80   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
81   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
82   %tobool = icmp eq i32 %call1, 0
83   br i1 %tobool, label %if.then, label %lor.lhs.false
85 lor.lhs.false:                                    ; preds = %entry
86   %tmp4 = load i32* %d, align 4
87   %and6 = and i32 %tmp4, 67108864
88   %cmp = icmp eq i32 %and6, 0
89   br i1 %cmp, label %if.then, label %if.end
91 if.then:                                          ; preds = %entry, %lor.lhs.false
92   call void @exit(i32 0) noreturn nounwind
93   unreachable
95 if.end:                                           ; preds = %lor.lhs.false
96   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
97   ret void
100 declare void @abort() noreturn
102 declare void (i32)* @signal(i32, void (i32)*) nounwind
104 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
105 entry:
106   call void @exit(i32 0) noreturn nounwind
107   unreachable
109 return:                                           ; No predecessors!
110   ret void
113 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
114 entry:
115   %and = and i32 %__level, -2147483648
116   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
117   %cmp = icmp ult i32 %call, %__level
118   br i1 %cmp, label %if.then, label %if.end
120 if.then:                                          ; preds = %entry
121   br label %return
123 if.end:                                           ; preds = %entry
124   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
125   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
126   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
127   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
128   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
129   store i32 %asmresult, i32* %__eax, align 4
130   store i32 %asmresult8, i32* %__ebx, align 4
131   store i32 %asmresult9, i32* %__ecx, align 4
132   store i32 %asmresult10, i32* %__edx, align 4
133   br label %return
135 return:                                           ; preds = %if.end, %if.then
136   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
137   ret i32 %retval.0
140 declare void @exit(i32) noreturn
142 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
143 entry:
144   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
145   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
146   %tobool = icmp eq i32* %__sig, null
147   br i1 %tobool, label %if.end, label %if.then
149 if.then:                                          ; preds = %entry
150   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
151   store i32 %asmresult1, i32* %__sig, align 4
152   br label %if.end
154 if.end:                                           ; preds = %entry, %if.then
155   ret i32 %asmresult
158 !0 = metadata !{i32 -2147343612, i32 -2147343604} 
159 !1 = metadata !{i32 -2147343735, i32 -2147343727} 
160 ; CHECK: define