@@ -227,3 +227,106 @@ define <8 x float> @test_extload_bf16x8(ptr addrspace(3) noundef %arg) #0 {
227
227
%res = fpext <8 x bfloat> %load to <8 x float >
228
228
ret <8 x float > %res
229
229
}
230
+
231
+ ; CHECK-LABEL: test_fptosi_i16(
232
+ ; CHECK: ld.param.b16 [[A:%rs[0-9]+]], [test_fptosi_i16_param_0];
233
+ ; SM80: cvt.f32.bf16 [[B:%f[0-9]+]], [[A]];
234
+ ; SM80: cvt.rzi.s16.f32 [[C:%rs[0-9]+]], [[B]];
235
+ ; SM80: cvt.u32.u16 [[R:%r[0-9]+]], [[C]];
236
+ ; SM90: cvt.rzi.s16.bf16 [[B:%rs[0-9]+]], [[A]];
237
+ ; SM90: cvt.u32.u16 [[R:%r[0-9]+]], [[B]];
238
+ ; CHECK: st.param.b32 [func_retval0+0], [[R]];
239
+ ; CHECK: ret;
240
+ define i16 @test_fptosi_i16 (bfloat %a ) {
241
+ %r = fptosi bfloat %a to i16
242
+ ret i16 %r
243
+ }
244
+
245
+ ; CHECK-LABEL: test_fptoui_i16(
246
+ ; CHECK: ld.param.b16 [[A:%rs[0-9]+]], [test_fptoui_i16_param_0];
247
+ ; SM80: cvt.f32.bf16 [[B:%f[0-9]+]], [[A]];
248
+ ; SM80: cvt.rzi.u16.f32 [[C:%rs[0-9]+]], [[B]];
249
+ ; SM80: cvt.u32.u16 [[R:%r[0-9]+]], [[C]];
250
+ ; SM90: cvt.rzi.u16.bf16 [[B:%rs[0-9]+]], [[A]];
251
+ ; SM90: cvt.u32.u16 [[R:%r[0-9]+]], [[B]];
252
+ ; CHECK: st.param.b32 [func_retval0+0], [[R]];
253
+ ; CHECK: ret;
254
+ define i16 @test_fptoui_i16 (bfloat %a ) {
255
+ %r = fptoui bfloat %a to i16
256
+ ret i16 %r
257
+ }
258
+
259
+ ; CHECK-LABEL: test_sitofp_i16(
260
+ ; CHECK: ld.param.u16 [[A:%rs[0-9]+]], [test_sitofp_i16_param_0];
261
+ ; SM80: cvt.rn.f32.s16 [[B:%f[0-9]+]], [[A]];
262
+ ; SM80: cvt.rn.bf16.f32 [[R:%rs[0-9]+]], [[B]];
263
+ ; SM90: cvt.rn.bf16.s16 [[R:%rs[0-9]+]], [[A]];
264
+ ; CHECK: st.param.b16 [func_retval0+0], [[R]];
265
+ ; CHECK: ret;
266
+ define bfloat @test_sitofp_i16 (i16 %a ) {
267
+ %r = sitofp i16 %a to bfloat
268
+ ret bfloat %r
269
+ }
270
+
271
+ ; CHECK-LABEL: test_uitofp_i8(
272
+ ; CHECK: ld.param.u8 %rs1, [test_uitofp_i8_param_0];
273
+ ; SM80: cvt.rn.f32.u16 [[B:%f[0-9]+]], [[A]];
274
+ ; SM80: cvt.rn.bf16.f32 [[R:%rs[0-9]+]], [[B]];
275
+ ; SM90: cvt.rn.bf16.u16 [[R:%rs[0-9]+]], [[A]];
276
+ ; CHECK: st.param.b16 [func_retval0+0], [[R]];
277
+ ; CHECK: ret;
278
+ define bfloat @test_uitofp_i8 (i8 %a ) {
279
+ %r = uitofp i8 %a to bfloat
280
+ ret bfloat %r
281
+ }
282
+
283
+ ; CHECK-LABEL: test_uitofp_i1(
284
+ ; CHECK: ld.param.u8 [[A:%rs[0-9]+]], [test_uitofp_i1_param_0];
285
+ ; CHECK: and.b16 [[B:%rs[0-9]+]], [[A]], 1;
286
+ ; CHECK: setp.eq.b16 [[C:%p[0-9]+]], [[B]], 1;
287
+ ; CHECK: selp.u32 [[D:%r[0-9]+]], 1, 0, [[C]];
288
+ ; SM80: cvt.rn.f32.u32 [[E:%f[0-9]+]], [[D]];
289
+ ; SM80: cvt.rn.bf16.f32 [[R:%rs[0-9]+]], [[E]];
290
+ ; SM90: cvt.rn.bf16.u32 [[R:%rs[0-9]+]], [[D]];
291
+ ; CHECK: st.param.b16 [func_retval0+0], [[R]];
292
+ ; CHECK: ret;
293
+ define bfloat @test_uitofp_i1 (i1 %a ) {
294
+ %r = uitofp i1 %a to bfloat
295
+ ret bfloat %r
296
+ }
297
+
298
+ ; CHECK-LABEL: test_uitofp_i16(
299
+ ; CHECK: ld.param.u16 [[A:%rs[0-9]+]], [test_uitofp_i16_param_0];
300
+ ; SM80: cvt.rn.f32.u16 [[B:%f[0-9]+]], [[A]];
301
+ ; SM80: cvt.rn.bf16.f32 [[R:%rs[0-9]+]], [[B]];
302
+ ; SM90: cvt.rn.bf16.u16 [[R:%rs[0-9]+]], [[A]];
303
+ ; CHECK: st.param.b16 [func_retval0+0], [[R]];
304
+ ; CHECK: ret;
305
+ define bfloat @test_uitofp_i16 (i16 %a ) {
306
+ %r = uitofp i16 %a to bfloat
307
+ ret bfloat %r
308
+ }
309
+
310
+ ; CHECK-LABEL: test_uitofp_i32(
311
+ ; CHECK: ld.param.u32 [[A:%r[0-9]+]], [test_uitofp_i32_param_0];
312
+ ; SM80: cvt.rn.f32.u32 [[B:%f[0-9]+]], [[A]];
313
+ ; SM80: cvt.rn.bf16.f32 [[R:%rs[0-9]+]], [[B]];
314
+ ; SM90: cvt.rn.bf16.u32 [[R:%rs[0-9]+]], [[A]];
315
+ ; CHECK: st.param.b16 [func_retval0+0], [[R]];
316
+ ; CHECK: ret;
317
+ define bfloat @test_uitofp_i32 (i32 %a ) {
318
+ %r = uitofp i32 %a to bfloat
319
+ ret bfloat %r
320
+ }
321
+
322
+ ; CHECK-LABEL: test_uitofp_i64(
323
+ ; CHECK: ld.param.u64 [[A:%rd[0-9]+]], [test_uitofp_i64_param_0];
324
+ ; SM80: cvt.rn.f32.u64 [[B:%f[0-9]+]], [[A]];
325
+ ; SM80: cvt.rn.bf16.f32 [[R:%rs[0-9]+]], [[B]];
326
+ ; SM90: cvt.rn.bf16.u64 [[R:%rs[0-9]+]], [[A]];
327
+ ; CHECK: st.param.b16 [func_retval0+0], [[R]];
328
+ ; CHECK: ret;
329
+ define bfloat @test_uitofp_i64 (i64 %a ) {
330
+ %r = uitofp i64 %a to bfloat
331
+ ret bfloat %r
332
+ }
0 commit comments