1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
2
3; Function Attrs: norecurse nounwind readnone
4define signext i8 @f2c(float %a) {
5; CHECK-LABEL: f2c:
6; CHECK:       # %bb.0: # %entry
7; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0
8; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
9; CHECK-NEXT:    b.l.t (, %s10)
10entry:
11  %conv = fptosi float %a to i8
12  ret i8 %conv
13}
14
15; Function Attrs: norecurse nounwind readnone
16define signext i16 @f2s(float %a) {
17; CHECK-LABEL: f2s:
18; CHECK:       # %bb.0: # %entry
19; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0
20; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
21; CHECK-NEXT:    b.l.t (, %s10)
22entry:
23  %conv = fptosi float %a to i16
24  ret i16 %conv
25}
26
27; Function Attrs: norecurse nounwind readnone
28define i32 @f2i(float %a) {
29; CHECK-LABEL: f2i:
30; CHECK:       # %bb.0: # %entry
31; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0
32; CHECK-NEXT:    b.l.t (, %s10)
33entry:
34  %conv = fptosi float %a to i32
35  ret i32 %conv
36}
37
38; Function Attrs: norecurse nounwind readnone
39define i64 @f2l(float %a) {
40; CHECK-LABEL: f2l:
41; CHECK:       # %bb.0: # %entry
42; CHECK-NEXT:    cvt.d.s %s0, %s0
43; CHECK-NEXT:    cvt.l.d.rz %s0, %s0
44; CHECK-NEXT:    b.l.t (, %s10)
45entry:
46  %conv = fptosi float %a to i64
47  ret i64 %conv
48}
49
50; Function Attrs: norecurse nounwind readnone
51define zeroext i8 @f2uc(float %a) {
52; CHECK-LABEL: f2uc:
53; CHECK:       # %bb.0: # %entry
54; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0
55; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
56; CHECK-NEXT:    b.l.t (, %s10)
57entry:
58  %conv = fptoui float %a to i8
59  ret i8 %conv
60}
61
62; Function Attrs: norecurse nounwind readnone
63define zeroext i16 @f2us(float %a) {
64; CHECK-LABEL: f2us:
65; CHECK:       # %bb.0: # %entry
66; CHECK-NEXT:    cvt.w.s.sx.rz %s0, %s0
67; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
68; CHECK-NEXT:    b.l.t (, %s10)
69entry:
70  %conv = fptoui float %a to i16
71  ret i16 %conv
72}
73
74; Function Attrs: norecurse nounwind readnone
75define i32 @f2ui(float %a) {
76; CHECK-LABEL: f2ui:
77; CHECK:       # %bb.0: # %entry
78; CHECK-NEXT:    cvt.d.s %s0, %s0
79; CHECK-NEXT:    cvt.l.d.rz %s0, %s0
80; CHECK-NEXT:    b.l.t (, %s10)
81entry:
82  %conv = fptoui float %a to i32
83  ret i32 %conv
84}
85
86; Function Attrs: norecurse nounwind readnone
87define i64 @f2ul(float %a) {
88; CHECK-LABEL: f2ul:
89; CHECK:       # %bb.0: # %entry
90; CHECK-NEXT:    lea.sl %s1, 1593835520
91; CHECK-NEXT:    fcmp.s %s2, %s0, %s1
92; CHECK-NEXT:    fsub.s %s1, %s0, %s1
93; CHECK-NEXT:    cvt.d.s %s1, %s1
94; CHECK-NEXT:    cvt.l.d.rz %s1, %s1
95; CHECK-NEXT:    xor %s1, %s1, (1)1
96; CHECK-NEXT:    cvt.d.s %s0, %s0
97; CHECK-NEXT:    cvt.l.d.rz %s0, %s0
98; CHECK-NEXT:    cmov.s.lt %s1, %s0, %s2
99; CHECK-NEXT:    or %s0, 0, %s1
100; CHECK-NEXT:    b.l.t (, %s10)
101entry:
102  %conv = fptoui float %a to i64
103  ret i64 %conv
104}
105
106; Function Attrs: norecurse nounwind readnone
107define signext i8 @d2c(double %a) {
108; CHECK-LABEL: d2c:
109; CHECK:       # %bb.0: # %entry
110; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0
111; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
112; CHECK-NEXT:    b.l.t (, %s10)
113entry:
114  %conv = fptosi double %a to i8
115  ret i8 %conv
116}
117
118; Function Attrs: norecurse nounwind readnone
119define signext i16 @d2s(double %a) {
120; CHECK-LABEL: d2s:
121; CHECK:       # %bb.0: # %entry
122; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0
123; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
124; CHECK-NEXT:    b.l.t (, %s10)
125entry:
126  %conv = fptosi double %a to i16
127  ret i16 %conv
128}
129
130; Function Attrs: norecurse nounwind readnone
131define i32 @d2i(double %a) {
132; CHECK-LABEL: d2i:
133; CHECK:       # %bb.0: # %entry
134; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0
135; CHECK-NEXT:    b.l.t (, %s10)
136entry:
137  %conv = fptosi double %a to i32
138  ret i32 %conv
139}
140
141; Function Attrs: norecurse nounwind readnone
142define i64 @d2l(double %a) {
143; CHECK-LABEL: d2l:
144; CHECK:       # %bb.0: # %entry
145; CHECK-NEXT:    cvt.l.d.rz %s0, %s0
146; CHECK-NEXT:    b.l.t (, %s10)
147entry:
148  %conv = fptosi double %a to i64
149  ret i64 %conv
150}
151
152; Function Attrs: norecurse nounwind readnone
153define zeroext i8 @d2uc(double %a) {
154; CHECK-LABEL: d2uc:
155; CHECK:       # %bb.0: # %entry
156; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0
157; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
158; CHECK-NEXT:    b.l.t (, %s10)
159entry:
160  %conv = fptoui double %a to i8
161  ret i8 %conv
162}
163
164; Function Attrs: norecurse nounwind readnone
165define zeroext i16 @d2us(double %a) {
166; CHECK-LABEL: d2us:
167; CHECK:       # %bb.0: # %entry
168; CHECK-NEXT:    cvt.w.d.sx.rz %s0, %s0
169; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
170; CHECK-NEXT:    b.l.t (, %s10)
171entry:
172  %conv = fptoui double %a to i16
173  ret i16 %conv
174}
175
176; Function Attrs: norecurse nounwind readnone
177define i32 @d2ui(double %a) {
178; CHECK-LABEL: d2ui:
179; CHECK:       # %bb.0: # %entry
180; CHECK-NEXT:    cvt.l.d.rz %s0, %s0
181; CHECK-NEXT:    b.l.t (, %s10)
182entry:
183  %conv = fptoui double %a to i32
184  ret i32 %conv
185}
186
187; Function Attrs: norecurse nounwind readnone
188define i64 @d2ul(double %a) {
189; CHECK-LABEL: d2ul:
190; CHECK:       # %bb.0: # %entry
191; CHECK-NEXT:    lea.sl %s1, 1138753536
192; CHECK-NEXT:    fcmp.d %s2, %s0, %s1
193; CHECK-NEXT:    fsub.d %s1, %s0, %s1
194; CHECK-NEXT:    cvt.l.d.rz %s1, %s1
195; CHECK-NEXT:    xor %s1, %s1, (1)1
196; CHECK-NEXT:    cvt.l.d.rz %s0, %s0
197; CHECK-NEXT:    cmov.d.lt %s1, %s0, %s2
198; CHECK-NEXT:    or %s0, 0, %s1
199; CHECK-NEXT:    b.l.t (, %s10)
200entry:
201  %conv = fptoui double %a to i64
202  ret i64 %conv
203}
204