Add compile command to each testcase
[gcc-vect-testsuite.git] / vect-intfloat-conversion-2.ll
blob970036e0551182fd7e62ae5a84e75b9a6a5749ad
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-intfloat-conversion-2.c
4 ; opt -correlated-propagation -mem2reg -instcombine -loop-simplify -indvars -instnamer vect-intfloat-conversion-2.s > vect-intfloat-conversion-2.ll
6 ; ModuleID = 'vect-intfloat-conversion-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 @int_arr = 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 @float_arr = common global [32 x float] zeroinitializer, align 16
12 @char_arr = common global [32 x i8] 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   %arrayidx8 = getelementptr [32 x i8]* @char_arr, i64 0, i64 %indvar1
21   %arrayidx5 = getelementptr [32 x float]* @float_arr, i64 0, i64 %indvar1
22   %arrayidx = getelementptr [32 x i32]* @int_arr, i64 0, i64 %indvar1
23   %exitcond = icmp ne i64 %indvar1, 32
24   br i1 %exitcond, label %for.body, label %for.end
26 for.body:                                         ; preds = %for.cond
27   %tmp2 = load i32* %arrayidx, align 4
28   %conv = sitofp i32 %tmp2 to float
29   store float %conv, float* %arrayidx5, align 4
30   store i8 0, i8* %arrayidx8, align 1
31   br label %for.inc
33 for.inc:                                          ; preds = %for.body
34   %indvar.next2 = add i64 %indvar1, 1
35   br label %for.cond
37 for.end:                                          ; preds = %for.cond
38   br label %for.cond10
40 for.cond10:                                       ; preds = %for.inc35, %for.end
41   %indvar = phi i64 [ %indvar.next, %for.inc35 ], [ 0, %for.end ]
42   %arrayidx28 = getelementptr [32 x i8]* @char_arr, i64 0, i64 %indvar
43   %arrayidx21 = getelementptr [32 x i32]* @int_arr, i64 0, i64 %indvar
44   %arrayidx17 = getelementptr [32 x float]* @float_arr, i64 0, i64 %indvar
45   %i.1 = trunc i64 %indvar to i32
46   %cmp12 = icmp slt i32 %i.1, 32
47   br i1 %cmp12, label %for.body14, label %for.end38
49 for.body14:                                       ; preds = %for.cond10
50   %tmp18 = load float* %arrayidx17, align 4
51   %tmp22 = load i32* %arrayidx21, align 4
52   %conv23 = sitofp i32 %tmp22 to float
53   %cmp24 = fcmp une float %tmp18, %conv23
54   br i1 %cmp24, label %if.then, label %if.end
56 if.then:                                          ; preds = %for.body14
57   call void @abort() noreturn nounwind
58   unreachable
60 if.end:                                           ; preds = %for.body14
61   %tmp29 = load i8* %arrayidx28, align 1
62   %cmp31 = icmp eq i8 %tmp29, 0
63   br i1 %cmp31, label %if.end34, label %if.then33
65 if.then33:                                        ; preds = %if.end
66   call void @abort() noreturn nounwind
67   unreachable
69 if.end34:                                         ; preds = %if.end
70   br label %for.inc35
72 for.inc35:                                        ; preds = %if.end34
73   %indvar.next = add i64 %indvar, 1
74   br label %for.cond10
76 for.end38:                                        ; preds = %for.cond10
77   ret i32 0
80 declare void @abort() noreturn
82 define i32 @main() nounwind uwtable {
83 entry:
84   call void @check_vect()
85   %call = call i32 @main1()
86   ret i32 %call
89 define internal void @check_vect() nounwind uwtable noinline {
90 entry:
91   %a = alloca i32, align 4
92   %b = alloca i32, align 4
93   %c = alloca i32, align 4
94   %d = alloca i32, align 4
95   %call = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* @sig_ill_handler) nounwind
96   %call1 = call i32 @__get_cpuid(i32 1, i32* %a, i32* %b, i32* %c, i32* %d)
97   %tobool = icmp eq i32 %call1, 0
98   br i1 %tobool, label %if.then, label %lor.lhs.false
100 lor.lhs.false:                                    ; preds = %entry
101   %tmp4 = load i32* %d, align 4
102   %and6 = and i32 %tmp4, 67108864
103   %cmp = icmp eq i32 %and6, 0
104   br i1 %cmp, label %if.then, label %if.end
106 if.then:                                          ; preds = %entry, %lor.lhs.false
107   call void @exit(i32 0) noreturn nounwind
108   unreachable
110 if.end:                                           ; preds = %lor.lhs.false
111   %call7 = call void (i32)* (i32, void (i32)*)* @signal(i32 4, void (i32)* null) nounwind
112   ret void
115 declare void (i32)* @signal(i32, void (i32)*) nounwind
117 define internal void @sig_ill_handler(i32 %sig) nounwind uwtable {
118 entry:
119   call void @exit(i32 0) noreturn nounwind
120   unreachable
122 return:                                           ; No predecessors!
123   ret void
126 define internal i32 @__get_cpuid(i32 %__level, i32* %__eax, i32* %__ebx, i32* %__ecx, i32* %__edx) nounwind uwtable inlinehint {
127 entry:
128   %and = and i32 %__level, -2147483648
129   %call = call i32 @__get_cpuid_max(i32 %and, i32* null)
130   %cmp = icmp ult i32 %call, %__level
131   br i1 %cmp, label %if.then, label %if.end
133 if.then:                                          ; preds = %entry
134   br label %return
136 if.end:                                           ; preds = %entry
137   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__level) nounwind, !srcloc !0
138   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
139   %asmresult8 = extractvalue { i32, i32, i32, i32 } %tmp, 1
140   %asmresult9 = extractvalue { i32, i32, i32, i32 } %tmp, 2
141   %asmresult10 = extractvalue { i32, i32, i32, i32 } %tmp, 3
142   store i32 %asmresult, i32* %__eax, align 4
143   store i32 %asmresult8, i32* %__ebx, align 4
144   store i32 %asmresult9, i32* %__ecx, align 4
145   store i32 %asmresult10, i32* %__edx, align 4
146   br label %return
148 return:                                           ; preds = %if.end, %if.then
149   %retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.end ]
150   ret i32 %retval.0
153 declare void @exit(i32) noreturn
155 define internal i32 @__get_cpuid_max(i32 %__ext, i32* %__sig) nounwind uwtable inlinehint {
156 entry:
157   %tmp = call { i32, i32, i32, i32 } asm "cpuid\0A\09", "={ax},={bx},={cx},={dx},0,~{dirflag},~{fpsr},~{flags}"(i32 %__ext) nounwind, !srcloc !1
158   %asmresult = extractvalue { i32, i32, i32, i32 } %tmp, 0
159   %tobool = icmp eq i32* %__sig, null
160   br i1 %tobool, label %if.end, label %if.then
162 if.then:                                          ; preds = %entry
163   %asmresult1 = extractvalue { i32, i32, i32, i32 } %tmp, 1
164   store i32 %asmresult1, i32* %__sig, align 4
165   br label %if.end
167 if.end:                                           ; preds = %entry, %if.then
168   ret i32 %asmresult
171 !0 = metadata !{i32 -2147343525, i32 -2147343517} 
172 !1 = metadata !{i32 -2147343648, i32 -2147343640} 
173 ; CHECK: define