xref: /llvm-project/llvm/test/CodeGen/VE/Scalar/int_to_fp.ll (revision 33dda45dde678f6f2efa24d7ca837cd6ad8f44d7)
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
2
3; Function Attrs: norecurse nounwind readnone
4define float @c2f(i8 signext %a) {
5; CHECK-LABEL: c2f:
6; CHECK:       # %bb.0: # %entry
7; CHECK-NEXT:    cvt.s.w %s0, %s0
8; CHECK-NEXT:    b.l.t (, %s10)
9entry:
10  %conv = sitofp i8 %a to float
11  ret float %conv
12}
13
14; Function Attrs: norecurse nounwind readnone
15define float @s2f(i16 signext %a) {
16; CHECK-LABEL: s2f:
17; CHECK:       # %bb.0: # %entry
18; CHECK-NEXT:    cvt.s.w %s0, %s0
19; CHECK-NEXT:    b.l.t (, %s10)
20entry:
21  %conv = sitofp i16 %a to float
22  ret float %conv
23}
24
25; Function Attrs: norecurse nounwind readnone
26define float @i2f(i32 %a) {
27; CHECK-LABEL: i2f:
28; CHECK:       # %bb.0: # %entry
29; CHECK-NEXT:    cvt.s.w %s0, %s0
30; CHECK-NEXT:    b.l.t (, %s10)
31entry:
32  %conv = sitofp i32 %a to float
33  ret float %conv
34}
35
36; Function Attrs: norecurse nounwind readnone
37define float @l2f(i64 %a) {
38; CHECK-LABEL: l2f:
39; CHECK:       # %bb.0: # %entry
40; CHECK-NEXT:    cvt.d.l %s0, %s0
41; CHECK-NEXT:    cvt.s.d %s0, %s0
42; CHECK-NEXT:    b.l.t (, %s10)
43entry:
44  %conv = sitofp i64 %a to float
45  ret float %conv
46}
47
48; Function Attrs: norecurse nounwind readnone
49define float @uc2f(i8 zeroext %a) {
50; CHECK-LABEL: uc2f:
51; CHECK:       # %bb.0: # %entry
52; CHECK-NEXT:    cvt.s.w %s0, %s0
53; CHECK-NEXT:    b.l.t (, %s10)
54entry:
55  %conv = uitofp i8 %a to float
56  ret float %conv
57}
58
59; Function Attrs: norecurse nounwind readnone
60define float @us2f(i16 zeroext %a) {
61; CHECK-LABEL: us2f:
62; CHECK:       # %bb.0: # %entry
63; CHECK-NEXT:    cvt.s.w %s0, %s0
64; CHECK-NEXT:    b.l.t (, %s10)
65entry:
66  %conv = uitofp i16 %a to float
67  ret float %conv
68}
69
70; Function Attrs: norecurse nounwind readnone
71define float @ui2f(i32 %a) {
72; CHECK-LABEL: ui2f:
73; CHECK:       # %bb.0: # %entry
74; CHECK-NEXT:    and %s0, %s0, (32)0
75; CHECK-NEXT:    cvt.d.l %s0, %s0
76; CHECK-NEXT:    cvt.s.d %s0, %s0
77; CHECK-NEXT:    b.l.t (, %s10)
78entry:
79  %conv = uitofp i32 %a to float
80  ret float %conv
81}
82
83; Function Attrs: norecurse nounwind readnone
84define float @ul2f(i64 %a) {
85; CHECK-LABEL: ul2f:
86; CHECK:       # %bb.0: # %entry
87; CHECK-NEXT:    cvt.d.l %s1, %s0
88; CHECK-NEXT:    cvt.s.d %s1, %s1
89; CHECK-NEXT:    srl %s2, %s0, 1
90; CHECK-NEXT:    and %s3, 1, %s0
91; CHECK-NEXT:    or %s2, %s3, %s2
92; CHECK-NEXT:    cvt.d.l %s2, %s2
93; CHECK-NEXT:    cvt.s.d %s2, %s2
94; CHECK-NEXT:    fadd.s %s2, %s2, %s2
95; CHECK-NEXT:    cmov.l.lt %s1, %s2, %s0
96; CHECK-NEXT:    or %s0, 0, %s1
97; CHECK-NEXT:    b.l.t (, %s10)
98entry:
99  %conv = uitofp i64 %a to float
100  ret float %conv
101}
102
103; Function Attrs: norecurse nounwind readnone
104define double @c2d(i8 signext %a) {
105; CHECK-LABEL: c2d:
106; CHECK:       # %bb.0: # %entry
107; CHECK-NEXT:    cvt.d.w %s0, %s0
108; CHECK-NEXT:    b.l.t (, %s10)
109entry:
110  %conv = sitofp i8 %a to double
111  ret double %conv
112}
113
114; Function Attrs: norecurse nounwind readnone
115define double @s2d(i16 signext %a) {
116; CHECK-LABEL: s2d:
117; CHECK:       # %bb.0: # %entry
118; CHECK-NEXT:    cvt.d.w %s0, %s0
119; CHECK-NEXT:    b.l.t (, %s10)
120entry:
121  %conv = sitofp i16 %a to double
122  ret double %conv
123}
124
125; Function Attrs: norecurse nounwind readnone
126define double @i2d(i32 %a) {
127; CHECK-LABEL: i2d:
128; CHECK:       # %bb.0: # %entry
129; CHECK-NEXT:    cvt.d.w %s0, %s0
130; CHECK-NEXT:    b.l.t (, %s10)
131entry:
132  %conv = sitofp i32 %a to double
133  ret double %conv
134}
135
136; Function Attrs: norecurse nounwind readnone
137define double @l2d(i64 %a) {
138; CHECK-LABEL: l2d:
139; CHECK:       # %bb.0: # %entry
140; CHECK-NEXT:    cvt.d.l %s0, %s0
141; CHECK-NEXT:    b.l.t (, %s10)
142entry:
143  %conv = sitofp i64 %a to double
144  ret double %conv
145}
146
147; Function Attrs: norecurse nounwind readnone
148define double @uc2d(i8 zeroext %a) {
149; CHECK-LABEL: uc2d:
150; CHECK:       # %bb.0: # %entry
151; CHECK-NEXT:    cvt.d.w %s0, %s0
152; CHECK-NEXT:    b.l.t (, %s10)
153entry:
154  %conv = uitofp i8 %a to double
155  ret double %conv
156}
157
158; Function Attrs: norecurse nounwind readnone
159define double @us2d(i16 zeroext %a) {
160; CHECK-LABEL: us2d:
161; CHECK:       # %bb.0: # %entry
162; CHECK-NEXT:    cvt.d.w %s0, %s0
163; CHECK-NEXT:    b.l.t (, %s10)
164entry:
165  %conv = uitofp i16 %a to double
166  ret double %conv
167}
168
169; Function Attrs: norecurse nounwind readnone
170define double @ui2d(i32 %a) {
171; CHECK-LABEL: ui2d:
172; CHECK:       # %bb.0: # %entry
173; CHECK-NEXT:    and %s0, %s0, (32)0
174; CHECK-NEXT:    cvt.d.l %s0, %s0
175; CHECK-NEXT:    b.l.t (, %s10)
176entry:
177  %conv = uitofp i32 %a to double
178  ret double %conv
179}
180
181; Function Attrs: norecurse nounwind readnone
182define double @ul2d(i64 %a) {
183; CHECK-LABEL: ul2d:
184; CHECK:       # %bb.0: # %entry
185; CHECK-NEXT:    srl %s1, %s0, 32
186; CHECK-NEXT:    lea.sl %s2, 1160773632
187; CHECK-NEXT:    or %s1, %s1, %s2
188; CHECK-NEXT:    lea %s2, 1048576
189; CHECK-NEXT:    lea.sl %s2, -986710016(, %s2)
190; CHECK-NEXT:    fadd.d %s1, %s1, %s2
191; CHECK-NEXT:    and %s0, %s0, (32)0
192; CHECK-NEXT:    lea.sl %s2, 1127219200
193; CHECK-NEXT:    or %s0, %s0, %s2
194; CHECK-NEXT:    fadd.d %s0, %s0, %s1
195; CHECK-NEXT:    b.l.t (, %s10)
196entry:
197  %conv = uitofp i64 %a to double
198  ret double %conv
199}
200