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