Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-multitypes-2.ll
blobdf846c2243aa99af2cdec099926ca85affa79ca8
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-multitypes-2.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-multitypes-2.s > vect-multitypes-2.ll
6 ; ModuleID = 'vect-multitypes-2.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 [32 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, 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 @sb = global [32 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, 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 @cb = global [32 x i8] c"\00\03\06\09\0C\0F\12\15\18\1B\1E!$'*-\00\03\06\09\0C\0F\12\15\18\1B\1E!$'*-", align 16
13 @ia = common global [32 x i32] zeroinitializer, align 16
14 @sa = common global [32 x i16] zeroinitializer, align 16
15 @ca = common global [32 x i8] zeroinitializer, align 16
17 define i32 @main1() nounwind uwtable noinline {
18 entry:
19   br label %for.cond
21 for.cond:                                         ; preds = %for.inc, %entry
22   %indvar1 = phi i64 [ %indvar.next2, %for.inc ], [ 0, %entry ]
23   %arrayidx19 = getelementptr [32 x i8]* @ca, i64 0, i64 %indvar1
24   %arrayidx15 = getelementptr [32 x i8]* @cb, i64 0, i64 %indvar1
25   %arrayidx12 = getelementptr [32 x i16]* @sa, i64 0, i64 %indvar1
26   %arrayidx8 = getelementptr [32 x i16]* @sb, i64 0, i64 %indvar1
27   %arrayidx5 = getelementptr [32 x i32]* @ia, i64 0, i64 %indvar1
28   %arrayidx = getelementptr [32 x i32]* @ib, i64 0, i64 %indvar1
29   %exitcond = icmp ne i64 %indvar1, 32
30   br i1 %exitcond, label %for.body, label %for.end
32 for.body:                                         ; preds = %for.cond
33   %tmp2 = load i32* %arrayidx, align 4
34   store i32 %tmp2, i32* %arrayidx5, align 4
35   %tmp9 = load i16* %arrayidx8, align 2
36   store i16 %tmp9, i16* %arrayidx12, align 2
37   %tmp16 = load i8* %arrayidx15, align 1
38   store i8 %tmp16, i8* %arrayidx19, align 1
39   br label %for.inc
41 for.inc:                                          ; preds = %for.body
42   %indvar.next2 = add i64 %indvar1, 1
43   br label %for.cond
45 for.end:                                          ; preds = %for.cond
46   br label %for.cond21
48 for.cond21:                                       ; preds = %for.inc58, %for.end
49   %indvar = phi i64 [ %indvar.next, %for.inc58 ], [ 0, %for.end ]
50   %arrayidx53 = getelementptr [32 x i8]* @cb, i64 0, i64 %indvar
51   %arrayidx48 = getelementptr [32 x i8]* @ca, i64 0, i64 %indvar
52   %arrayidx40 = getelementptr [32 x i16]* @sb, i64 0, i64 %indvar
53   %arrayidx36 = getelementptr [32 x i16]* @sa, i64 0, i64 %indvar
54   %arrayidx31 = getelementptr [32 x i32]* @ib, i64 0, i64 %indvar
55   %arrayidx27 = getelementptr [32 x i32]* @ia, i64 0, i64 %indvar
56   %i.1 = trunc i64 %indvar to i32
57   %cmp23 = icmp slt i32 %i.1, 32
58   br i1 %cmp23, label %for.body24, label %for.end61
60 for.body24:                                       ; preds = %for.cond21
61   %tmp28 = load i32* %arrayidx27, align 4
62   %tmp32 = load i32* %arrayidx31, align 4
63   %cmp33 = icmp eq i32 %tmp28, %tmp32
64   br i1 %cmp33, label %lor.lhs.false, label %if.then
66 lor.lhs.false:                                    ; preds = %for.body24
67   %tmp37 = load i16* %arrayidx36, align 2
68   %tmp41 = load i16* %arrayidx40, align 2
69   %cmp43 = icmp eq i16 %tmp37, %tmp41
70   br i1 %cmp43, label %lor.lhs.false45, label %if.then
72 lor.lhs.false45:                                  ; preds = %lor.lhs.false
73   %tmp49 = load i8* %arrayidx48, align 1
74   %tmp54 = load i8* %arrayidx53, align 1
75   %cmp56 = icmp eq i8 %tmp49, %tmp54
76   br i1 %cmp56, label %if.end, label %if.then
78 if.then:                                          ; preds = %lor.lhs.false45, %lor.lhs.false, %for.body24
79   call void @abort() noreturn nounwind
80   unreachable
82 if.end:                                           ; preds = %lor.lhs.false45
83   br label %for.inc58
85 for.inc58:                                        ; preds = %if.end
86   %indvar.next = add i64 %indvar, 1
87   br label %for.cond21
89 for.end61:                                        ; preds = %for.cond21
90   ret i32 0
93 declare void @abort() noreturn
95 define i32 @main() nounwind uwtable {
96 entry:
97   call void @check_vect()
98   %call = call i32 @main1()
99   ret i32 %call
102 define internal void @check_vect() nounwind uwtable noinline {
103 entry:
104   %a = alloca i32, align 4
105   %b = alloca i32, align 4
106   %c = alloca i32, align 4
107   %d = alloca i32, align 4
108   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
109   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
110   %tobool = icmp eq i32 %call1, 0
111   br i1 %tobool, label %if.then, label %lor.lhs.false
113 lor.lhs.false:                                    ; preds = %entry
114   %tmp4 = load i32* %d, align 4
115   %and6 = and i32 %tmp4, 67108864
116   %cmp = icmp eq i32 %and6, 0
117   br i1 %cmp, label %if.then, label %if.end
119 if.then:                                          ; preds = %entry, %lor.lhs.false
120   call void @exit(i32 0) noreturn nounwind
121   unreachable
123 if.end:                                           ; preds = %lor.lhs.false
124   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
125   ret void
128 declare void (i32)* @signal(i32, void (i32)*) nounwind
130 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
131 entry:
132   call void @exit(i32 0) noreturn nounwind
133   unreachable
135 return:                                           ; No predecessors!
136   ret void
139 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
140 entry:
141   %and = and i32 %__level, -2147483648
142   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
143   %cmp = icmp ult i32 %call, %__level
144   br i1 %cmp, label %if.then, label %if.end
146 if.then:                                          ; preds = %entry
147   br label %return
149 if.end:                                           ; preds = %entry
150   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
151   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
152   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
153   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
154   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
155   store i32 %asmresult, i32* %__eax, align 4
156   store i32 %asmresult8, i32* %__ebx, align 4
157   store i32 %asmresult9, i32* %__ecx, align 4
158   store i32 %asmresult10, i32* %__edx, align 4
159   br label %return
161 return:                                           ; preds = %if.end, %if.then
162   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
163   ret i32 %retval.0
166 declare void @exit(i32) noreturn
168 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
169 entry:
170   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
171   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
172   %tobool = icmp eq i32* %__sig, null
173   br i1 %tobool, label %if.end, label %if.then
175 if.then:                                          ; preds = %entry
176   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
177   store i32 %asmresult1, i32* %__sig, align 4
178   br label %if.end
180 if.end:                                           ; preds = %entry, %if.then
181   ret i32 %asmresult
184 !0 = metadata !{i32 -2147343242, i32 -2147343234} 
185 !1 = metadata !{i32 -2147343365, i32 -2147343357} 
186 ; CHECK: define