@@ -133,3 +133,55 @@ define iXLen @lround_f16(half %a) nounwind {
133
133
%1 = call iXLen @llvm.lround.iXLen.f16 (half %a )
134
134
ret iXLen %1
135
135
}
136
+
137
+ define i32 @lround_i32_f16 (half %a ) nounwind {
138
+ ; RV32IZFHMIN-LABEL: lround_i32_f16:
139
+ ; RV32IZFHMIN: # %bb.0:
140
+ ; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0
141
+ ; RV32IZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm
142
+ ; RV32IZFHMIN-NEXT: ret
143
+ ;
144
+ ; RV64IZFHMIN-LABEL: lround_i32_f16:
145
+ ; RV64IZFHMIN: # %bb.0:
146
+ ; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0
147
+ ; RV64IZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm
148
+ ; RV64IZFHMIN-NEXT: ret
149
+ ;
150
+ ; RV32IDZFHMIN-LABEL: lround_i32_f16:
151
+ ; RV32IDZFHMIN: # %bb.0:
152
+ ; RV32IDZFHMIN-NEXT: fcvt.s.h fa5, fa0
153
+ ; RV32IDZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm
154
+ ; RV32IDZFHMIN-NEXT: ret
155
+ ;
156
+ ; RV64IDZFHMIN-LABEL: lround_i32_f16:
157
+ ; RV64IDZFHMIN: # %bb.0:
158
+ ; RV64IDZFHMIN-NEXT: fcvt.s.h fa5, fa0
159
+ ; RV64IDZFHMIN-NEXT: fcvt.w.s a0, fa5, rmm
160
+ ; RV64IDZFHMIN-NEXT: ret
161
+ ;
162
+ ; RV32IZHINXMIN-LABEL: lround_i32_f16:
163
+ ; RV32IZHINXMIN: # %bb.0:
164
+ ; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0
165
+ ; RV32IZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm
166
+ ; RV32IZHINXMIN-NEXT: ret
167
+ ;
168
+ ; RV64IZHINXMIN-LABEL: lround_i32_f16:
169
+ ; RV64IZHINXMIN: # %bb.0:
170
+ ; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0
171
+ ; RV64IZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm
172
+ ; RV64IZHINXMIN-NEXT: ret
173
+ ;
174
+ ; RV32IZDINXZHINXMIN-LABEL: lround_i32_f16:
175
+ ; RV32IZDINXZHINXMIN: # %bb.0:
176
+ ; RV32IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0
177
+ ; RV32IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm
178
+ ; RV32IZDINXZHINXMIN-NEXT: ret
179
+ ;
180
+ ; RV64IZDINXZHINXMIN-LABEL: lround_i32_f16:
181
+ ; RV64IZDINXZHINXMIN: # %bb.0:
182
+ ; RV64IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0
183
+ ; RV64IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rmm
184
+ ; RV64IZDINXZHINXMIN-NEXT: ret
185
+ %1 = call i32 @llvm.lround.i32.f16 (half %a )
186
+ ret i32 %1
187
+ }
0 commit comments