xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/soft-sitofp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=i386-pc-linux < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-pc-linux < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: s64_to_d:
6*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatdidf
7*9880d681SAndroid Build Coastguard Workerdefine double @s64_to_d(i64 %n) #0 {
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i64 %n to double
10*9880d681SAndroid Build Coastguard Worker  ret double %conv
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: s64_to_f:
14*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatdisf
15*9880d681SAndroid Build Coastguard Workerdefine float @s64_to_f(i64 %n) #0 {
16*9880d681SAndroid Build Coastguard Workerentry:
17*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i64 %n to float
18*9880d681SAndroid Build Coastguard Worker  ret float %conv
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: s32_to_d:
22*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatsidf
23*9880d681SAndroid Build Coastguard Workerdefine double @s32_to_d(i32 %n) #0 {
24*9880d681SAndroid Build Coastguard Workerentry:
25*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i32 %n to double
26*9880d681SAndroid Build Coastguard Worker  ret double %conv
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: s32_to_f:
30*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatsisf
31*9880d681SAndroid Build Coastguard Workerdefine float @s32_to_f(i32 %n) #0 {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i32 %n to float
34*9880d681SAndroid Build Coastguard Worker  ret float %conv
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: u64_to_d:
38*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatundidf
39*9880d681SAndroid Build Coastguard Workerdefine double @u64_to_d(i64 %n) #0 {
40*9880d681SAndroid Build Coastguard Workerentry:
41*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i64 %n to double
42*9880d681SAndroid Build Coastguard Worker  ret double %conv
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: u64_to_f:
46*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatundisf
47*9880d681SAndroid Build Coastguard Workerdefine float @u64_to_f(i64 %n) #0 {
48*9880d681SAndroid Build Coastguard Workerentry:
49*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i64 %n to float
50*9880d681SAndroid Build Coastguard Worker  ret float %conv
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: u32_to_d:
54*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatunsidf
55*9880d681SAndroid Build Coastguard Workerdefine double @u32_to_d(i32 %n) #0 {
56*9880d681SAndroid Build Coastguard Workerentry:
57*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i32 %n to double
58*9880d681SAndroid Build Coastguard Worker  ret double %conv
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: u32_to_f:
62*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __floatunsisf
63*9880d681SAndroid Build Coastguard Workerdefine float @u32_to_f(i32 %n) #0 {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i32 %n to float
66*9880d681SAndroid Build Coastguard Worker  ret float %conv
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: d_to_s64:
70*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixdfdi
71*9880d681SAndroid Build Coastguard Workerdefine i64 @d_to_s64(double %n) #0 {
72*9880d681SAndroid Build Coastguard Workerentry:
73*9880d681SAndroid Build Coastguard Worker  %conv = fptosi double %n to i64
74*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: d_to_s32:
78*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixdfsi
79*9880d681SAndroid Build Coastguard Workerdefine i32 @d_to_s32(double %n) #0 {
80*9880d681SAndroid Build Coastguard Workerentry:
81*9880d681SAndroid Build Coastguard Worker  %conv = fptosi double %n to i32
82*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_s64:
86*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixsfdi
87*9880d681SAndroid Build Coastguard Workerdefine i64 @f_to_s64(float %n) #0 {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker  %conv = fptosi float %n to i64
90*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_s32:
94*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixsfsi
95*9880d681SAndroid Build Coastguard Workerdefine i32 @f_to_s32(float %n) #0 {
96*9880d681SAndroid Build Coastguard Workerentry:
97*9880d681SAndroid Build Coastguard Worker  %conv = fptosi float %n to i32
98*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: d_to_u64:
102*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixunsdfdi
103*9880d681SAndroid Build Coastguard Workerdefine i64 @d_to_u64(double %n) #0 {
104*9880d681SAndroid Build Coastguard Workerentry:
105*9880d681SAndroid Build Coastguard Worker  %conv = fptoui double %n to i64
106*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: d_to_u32:
110*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixunsdfsi
111*9880d681SAndroid Build Coastguard Workerdefine i32 @d_to_u32(double %n) #0 {
112*9880d681SAndroid Build Coastguard Workerentry:
113*9880d681SAndroid Build Coastguard Worker  %conv = fptoui double %n to i32
114*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_u64:
118*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixunssfdi
119*9880d681SAndroid Build Coastguard Workerdefine i64 @f_to_u64(float %n) #0 {
120*9880d681SAndroid Build Coastguard Workerentry:
121*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %n to i64
122*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_u32:
126*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixunssfsi
127*9880d681SAndroid Build Coastguard Workerdefine i32 @f_to_u32(float %n) #0 {
128*9880d681SAndroid Build Coastguard Workerentry:
129*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %n to i32
130*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_s8:
134*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixsfsi
135*9880d681SAndroid Build Coastguard Workerdefine i8 @f_to_s8(float %f, i8 %i) #0 {
136*9880d681SAndroid Build Coastguard Workerentry:
137*9880d681SAndroid Build Coastguard Worker  %conv = fptosi float %f to i8
138*9880d681SAndroid Build Coastguard Worker  %add = add i8 %conv, %i
139*9880d681SAndroid Build Coastguard Worker  ret i8 %add
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_u8:
143*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixunssfsi
144*9880d681SAndroid Build Coastguard Workerdefine i8 @f_to_u8(float %f, i8 %i) #0 {
145*9880d681SAndroid Build Coastguard Workerentry:
146*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %f to i8
147*9880d681SAndroid Build Coastguard Worker  %add = add i8 %conv, %i
148*9880d681SAndroid Build Coastguard Worker  ret i8 %add
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_s16:
152*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixsfsi
153*9880d681SAndroid Build Coastguard Workerdefine i16 @f_to_s16(float %f, i16 %i) #0 {
154*9880d681SAndroid Build Coastguard Workerentry:
155*9880d681SAndroid Build Coastguard Worker  %conv = fptosi float %f to i16
156*9880d681SAndroid Build Coastguard Worker  %add = add i16 %conv, %i
157*9880d681SAndroid Build Coastguard Worker  ret i16 %add
158*9880d681SAndroid Build Coastguard Worker}
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_to_u16:
161*9880d681SAndroid Build Coastguard Worker; CHECK: call{{l|q}} __fixunssfsi
162*9880d681SAndroid Build Coastguard Workerdefine i16 @f_to_u16(float %f, i16 %i) #0 {
163*9880d681SAndroid Build Coastguard Workerentry:
164*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %f to i16
165*9880d681SAndroid Build Coastguard Worker  %add = add i16 %conv, %i
166*9880d681SAndroid Build Coastguard Worker  ret i16 %add
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind "use-soft-float"="true" }
170