Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-73.ll
blob4d7939e480b4506eaaf52979736ecb590490d2a1
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-73.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-73.s > vect-73.ll
6 ; ModuleID = 'vect-73.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 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45], align 16
11 @ic = common global [32 x i32] zeroinitializer, align 16
13 define i32 @main1() nounwind uwtable noinline {
14 entry:
15   br label %for.cond
17 for.cond:                                         ; preds = %for.inc, %entry
18   %indvar4 = phi i64 [ %indvar.next5, %for.inc ], [ 0, %entry ]
19   %tmp6 = add i64 %indvar4, 16
20   %arrayidx5 = getelementptr [32 x i32]* @ic, i64 0, i64 %tmp6
21   %arrayidx = getelementptr [16 x i32]* @ib, i64 0, i64 %indvar4
22   %exitcond = icmp ne i64 %indvar4, 16
23   br i1 %exitcond, label %for.body, label %for.end
25 for.body:                                         ; preds = %for.cond
26   %tmp2 = load i32* %arrayidx, align 4
27   store i32 %tmp2, i32* %arrayidx5, align 4
28   br label %for.inc
30 for.inc:                                          ; preds = %for.body
31   %indvar.next5 = add i64 %indvar4, 1
32   br label %for.cond
34 for.end:                                          ; preds = %for.cond
35   br label %for.cond7
37 for.cond7:                                        ; preds = %for.inc20, %for.end
38   %indvar = phi i64 [ %indvar.next, %for.inc20 ], [ 0, %for.end ]
39   %arrayidx17 = getelementptr [16 x i32]* @ib, i64 0, i64 %indvar
40   %tmp = add i64 %indvar, 16
41   %arrayidx13 = getelementptr [32 x i32]* @ic, i64 0, i64 %tmp
42   %i.1 = trunc i64 %indvar to i32
43   %cmp9 = icmp slt i32 %i.1, 16
44   br i1 %cmp9, label %for.body10, label %for.end23
46 for.body10:                                       ; preds = %for.cond7
47   %tmp14 = load i32* %arrayidx13, align 4
48   %tmp18 = load i32* %arrayidx17, align 4
49   %cmp19 = icmp eq i32 %tmp14, %tmp18
50   br i1 %cmp19, label %if.end, label %if.then
52 if.then:                                          ; preds = %for.body10
53   call void @abort() noreturn nounwind
54   unreachable
56 if.end:                                           ; preds = %for.body10
57   br label %for.inc20
59 for.inc20:                                        ; preds = %if.end
60   %indvar.next = add i64 %indvar, 1
61   br label %for.cond7
63 for.end23:                                        ; preds = %for.cond7
64   ret i32 0
67 declare void @abort() noreturn
69 define i32 @main() nounwind uwtable {
70 entry:
71   call void @check_vect()
72   %call = call i32 @main1()
73   ret i32 %call
76 define internal void @check_vect() nounwind uwtable noinline {
77 entry:
78   %a = alloca i32, align 4
79   %b = alloca i32, align 4
80   %c = alloca i32, align 4
81   %d = alloca i32, align 4
82   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
83   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
84   %tobool = icmp eq i32 %call1, 0
85   br i1 %tobool, label %if.then, label %lor.lhs.false
87 lor.lhs.false:                                    ; preds = %entry
88   %tmp4 = load i32* %d, align 4
89   %and6 = and i32 %tmp4, 67108864
90   %cmp = icmp eq i32 %and6, 0
91   br i1 %cmp, label %if.then, label %if.end
93 if.then:                                          ; preds = %entry, %lor.lhs.false
94   call void @exit(i32 0) noreturn nounwind
95   unreachable
97 if.end:                                           ; preds = %lor.lhs.false
98   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
99   ret void
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 -2147343616, i32 -2147343608} 
159 !1 = metadata !{i32 -2147343739, i32 -2147343731} 
160 ; CHECK: define