Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-9.ll
blob6ede7437311e33b9235ad59f86d7b74466f60169
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-9.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-9.s > vect-9.ll
6 ; ModuleID = 'vect-9.s'
7 ; XFAIL: *
8 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"
9 target triple = "x86_64-unknown-linux-gnu"
11 @sb = global [16 x i16] [i16 0, i16 3, i16 6, i16 9, i16 12, i16 15, i16 18, i16 21, i16 24, i16 27, i16 30, i16 33, i16 36, i16 39, i16 42, i16 45], align 16
12 @ia = common global [16 x i32] zeroinitializer, align 16
14 define i32 @main1() nounwind uwtable noinline {
15 entry:
16   br label %for.cond
18 for.cond:                                         ; preds = %for.inc, %entry
19   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ]
20   %arrayidx5 = getelementptr [16 x i32]* @ia, i64 0, i64 %indvar1
21   %arrayidx = getelementptr [16 x i16]* @sb, i64 0, i64 %indvar1
22   %exitcond = icmp ne i64 %indvar1, 16
23   br i1 %exitcond, label %for.body, label %for.end
25 for.body:                                         ; preds = %for.cond
26   %tmp2 = load i16* %arrayidx, align 2
27   %conv = sext i16 %tmp2 to i32
28   store i32 %conv, i32* %arrayidx5, align 4
29   br label %for.inc
31 for.inc:                                          ; preds = %for.body
32   %indvar.next2 = add i64 %indvar1, 1
33   br label %for.cond
35 for.end:                                          ; preds = %for.cond
36   br label %for.cond7
38 for.cond7:                                        ; preds = %for.inc23, %for.end
39   %indvar = phi i64 [ %indvar.next, %for.inc23 ], [ 0, %for.end ]
40   %arrayidx18 = getelementptr [16 x i16]* @sb, i64 0, i64 %indvar
41   %arrayidx14 = getelementptr [16 x i32]* @ia, i64 0, i64 %indvar
42   %i.1 = trunc i64 %indvar to i32
43   %cmp9 = icmp slt i32 %i.1, 16
44   br i1 %cmp9, label %for.body11, label %for.end26
46 for.body11:                                       ; preds = %for.cond7
47   %tmp15 = load i32* %arrayidx14, align 4
48   %tmp19 = load i16* %arrayidx18, align 2
49   %conv20 = sext i16 %tmp19 to i32
50   %cmp21 = icmp eq i32 %tmp15, %conv20
51   br i1 %cmp21, label %if.end, label %if.then
53 if.then:                                          ; preds = %for.body11
54   call void @abort() noreturn nounwind
55   unreachable
57 if.end:                                           ; preds = %for.body11
58   br label %for.inc23
60 for.inc23:                                        ; preds = %if.end
61   %indvar.next = add i64 %indvar, 1
62   br label %for.cond7
64 for.end26:                                        ; preds = %for.cond7
65   ret i32 0
68 declare void @abort() noreturn
70 define i32 @main() nounwind uwtable {
71 entry:
72   call void @check_vect()
73   %call = call i32 @main1()
74   ret i32 %call
77 define internal void @check_vect() nounwind uwtable noinline {
78 entry:
79   %a = alloca i32, align 4
80   %b = alloca i32, align 4
81   %c = alloca i32, align 4
82   %d = alloca i32, align 4
83   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
84   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
85   %tobool = icmp eq i32 %call1, 0
86   br i1 %tobool, label %if.then, label %lor.lhs.false
88 lor.lhs.false:                                    ; preds = %entry
89   %tmp4 = load i32* %d, align 4
90   %and6 = and i32 %tmp4, 67108864
91   %cmp = icmp eq i32 %and6, 0
92   br i1 %cmp, label %if.then, label %if.end
94 if.then:                                          ; preds = %entry, %lor.lhs.false
95   call void @exit(i32 0) noreturn nounwind
96   unreachable
98 if.end:                                           ; preds = %lor.lhs.false
99   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
100   ret void
103 declare void (i32)* @signal(i32, void (i32)*) nounwind
105 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
106 entry:
107   call void @exit(i32 0) noreturn nounwind
108   unreachable
110 return:                                           ; No predecessors!
111   ret void
114 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
115 entry:
116   %and = and i32 %__level, -2147483648
117   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
118   %cmp = icmp ult i32 %call, %__level
119   br i1 %cmp, label %if.then, label %if.end
121 if.then:                                          ; preds = %entry
122   br label %return
124 if.end:                                           ; preds = %entry
125   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
126   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
127   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
128   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
129   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
130   store i32 %asmresult, i32* %__eax, align 4
131   store i32 %asmresult8, i32* %__ebx, align 4
132   store i32 %asmresult9, i32* %__ecx, align 4
133   store i32 %asmresult10, i32* %__edx, align 4
134   br label %return
136 return:                                           ; preds = %if.end, %if.then
137   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
138   ret i32 %retval.0
141 declare void @exit(i32) noreturn
143 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
144 entry:
145   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
146   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
147   %tobool = icmp eq i32* %__sig, null
148   br i1 %tobool, label %if.end, label %if.then
150 if.then:                                          ; preds = %entry
151   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
152   store i32 %asmresult1, i32* %__sig, align 4
153   br label %if.end
155 if.end:                                           ; preds = %entry, %if.then
156   ret i32 %asmresult
159 !0 = metadata !{i32 -2147343632, i32 -2147343624} 
160 !1 = metadata !{i32 -2147343755, i32 -2147343747} 
161 ; CHECK: define