Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-vfa-02.ll
blob4a93d28f5de0b4fb5da522b50ca87bc9f84368a2
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-02.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-vfa-02.s > vect-vfa-02.ll
6 ; ModuleID = 'vect-vfa-02.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 @resultY = 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 @resultZ = global [16 x i32] [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, i32 28], align 16
12 @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
13 @Y = global [16 x i32] zeroinitializer, align 16
14 @Z = global [16 x i32] zeroinitializer, align 16
16 define void @foo(i32* %in, i32* %out1, i32* %out2) nounwind uwtable noinline {
17 entry:
18   br label %for.cond
20 for.cond:                                         ; preds = %for.inc, %entry
21   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
22   %arrayidx17 = getelementptr i32* %out2, i64 %indvar
23   %arrayidx = getelementptr i32* %in, i64 %indvar
24   %arrayidx7 = getelementptr i32* %out1, i64 %indvar
25   %exitcond = icmp ne i64 %indvar, 16
26   br i1 %exitcond, label %for.body, label %for.end
28 for.body:                                         ; preds = %for.cond
29   %tmp3 = load i32* %arrayidx, align 4
30   %add = add nsw i32 %tmp3, 2
31   store i32 %add, i32* %arrayidx7, align 4
32   %tmp12 = load i32* %arrayidx, align 4
33   %add13 = add nsw i32 %tmp12, 3
34   store i32 %add13, i32* %arrayidx17, align 4
35   br label %for.inc
37 for.inc:                                          ; preds = %for.body
38   %indvar.next = add i64 %indvar, 1
39   br label %for.cond
41 for.end:                                          ; preds = %for.cond
42   ret void
45 define i32 @main() nounwind uwtable {
46 entry:
47   call void @check_vect()
48   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), i32* getelementptr inbounds ([16 x i32]* @Z, i64 0, i64 0))
49   br label %for.cond
51 for.cond:                                         ; preds = %for.inc, %entry
52   %indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ]
53   %arrayidx14 = getelementptr [16 x i32]* @resultZ, i64 0, i64 %indvar
54   %arrayidx10 = getelementptr [16 x i32]* @Z, i64 0, i64 %indvar
55   %arrayidx5 = getelementptr [16 x i32]* @resultY, i64 0, i64 %indvar
56   %arrayidx = getelementptr [16 x i32]* @Y, i64 0, i64 %indvar
57   %i.0 = trunc i64 %indvar to i32
58   %cmp = icmp slt i32 %i.0, 16
59   br i1 %cmp, label %for.body, label %for.end
61 for.body:                                         ; preds = %for.cond
62   %tmp2 = load i32* %arrayidx, align 4
63   %tmp6 = load i32* %arrayidx5, align 4
64   %cmp7 = icmp eq i32 %tmp2, %tmp6
65   br i1 %cmp7, label %if.end, label %if.then
67 if.then:                                          ; preds = %for.body
68   call void @abort() noreturn nounwind
69   unreachable
71 if.end:                                           ; preds = %for.body
72   %tmp11 = load i32* %arrayidx10, align 4
73   %tmp15 = load i32* %arrayidx14, align 4
74   %cmp16 = icmp eq i32 %tmp11, %tmp15
75   br i1 %cmp16, label %if.end18, label %if.then17
77 if.then17:                                        ; preds = %if.end
78   call void @abort() noreturn nounwind
79   unreachable
81 if.end18:                                         ; preds = %if.end
82   br label %for.inc
84 for.inc:                                          ; preds = %if.end18
85   %indvar.next = add i64 %indvar, 1
86   br label %for.cond
88 for.end:                                          ; preds = %for.cond
89   ret i32 0
92 define internal void @check_vect() nounwind uwtable noinline {
93 entry:
94   %a = alloca i32, align 4
95   %b = alloca i32, align 4
96   %c = alloca i32, align 4
97   %d = alloca i32, align 4
98   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
99   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
100   %tobool = icmp eq i32 %call1, 0
101   br i1 %tobool, label %if.then, label %lor.lhs.false
103 lor.lhs.false:                                    ; preds = %entry
104   %tmp4 = load i32* %d, align 4
105   %and6 = and i32 %tmp4, 67108864
106   %cmp = icmp eq i32 %and6, 0
107   br i1 %cmp, label %if.then, label %if.end
109 if.then:                                          ; preds = %entry, %lor.lhs.false
110   call void @exit(i32 0) noreturn nounwind
111   unreachable
113 if.end:                                           ; preds = %lor.lhs.false
114   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
115   ret void
118 declare void @abort() noreturn
120 declare void (i32)* @signal(i32, void (i32)*) nounwind
122 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
123 entry:
124   call void @exit(i32 0) noreturn nounwind
125   unreachable
127 return:                                           ; No predecessors!
128   ret void
131 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
132 entry:
133   %and = and i32 %__level, -2147483648
134   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
135   %cmp = icmp ult i32 %call, %__level
136   br i1 %cmp, label %if.then, label %if.end
138 if.then:                                          ; preds = %entry
139   br label %return
141 if.end:                                           ; preds = %entry
142   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
143   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
144   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
145   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
146   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
147   store i32 %asmresult, i32* %__eax, align 4
148   store i32 %asmresult8, i32* %__ebx, align 4
149   store i32 %asmresult9, i32* %__ecx, align 4
150   store i32 %asmresult10, i32* %__edx, align 4
151   br label %return
153 return:                                           ; preds = %if.end, %if.then
154   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
155   ret i32 %retval.0
158 declare void @exit(i32) noreturn
160 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
161 entry:
162   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
163   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
164   %tobool = icmp eq i32* %__sig, null
165   br i1 %tobool, label %if.end, label %if.then
167 if.then:                                          ; preds = %entry
168   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
169   store i32 %asmresult1, i32* %__sig, align 4
170   br label %if.end
172 if.end:                                           ; preds = %entry, %if.then
173   ret i32 %asmresult
176 !0 = metadata !{i32 -2147343417, i32 -2147343409} 
177 !1 = metadata !{i32 -2147343540, i32 -2147343532} 
178 ; CHECK: define