@@ -378,3 +378,84 @@ define half @freeze_half_poison(half %maybe.poison) nounwind {
378
378
%t1 = fadd half %y1 , %y1
379
379
ret half %t1
380
380
}
381
+
382
+ define signext i32 @test_half_to_s32 (half %a ) nounwind {
383
+ ; LA32-LABEL: test_half_to_s32:
384
+ ; LA32: # %bb.0: # %entry
385
+ ; LA32-NEXT: addi.w $sp, $sp, -16
386
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
387
+ ; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
388
+ ; LA32-NEXT: ftintrz.w.s $fa0, $fa0
389
+ ; LA32-NEXT: movfr2gr.s $a0, $fa0
390
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
391
+ ; LA32-NEXT: addi.w $sp, $sp, 16
392
+ ; LA32-NEXT: ret
393
+ ;
394
+ ; LA64-LABEL: test_half_to_s32:
395
+ ; LA64: # %bb.0: # %entry
396
+ ; LA64-NEXT: addi.d $sp, $sp, -16
397
+ ; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
398
+ ; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
399
+ ; LA64-NEXT: ftintrz.w.s $fa0, $fa0
400
+ ; LA64-NEXT: movfr2gr.s $a0, $fa0
401
+ ; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
402
+ ; LA64-NEXT: addi.d $sp, $sp, 16
403
+ ; LA64-NEXT: ret
404
+ entry:
405
+ %conv = fptosi half %a to i32
406
+ ret i32 %conv
407
+ }
408
+
409
+ define zeroext i32 @test_half_to_s32_u32 (half %a ) nounwind {
410
+ ; LA32-LABEL: test_half_to_s32_u32:
411
+ ; LA32: # %bb.0: # %entry
412
+ ; LA32-NEXT: addi.w $sp, $sp, -16
413
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
414
+ ; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
415
+ ; LA32-NEXT: ftintrz.w.s $fa0, $fa0
416
+ ; LA32-NEXT: movfr2gr.s $a0, $fa0
417
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
418
+ ; LA32-NEXT: addi.w $sp, $sp, 16
419
+ ; LA32-NEXT: ret
420
+ ;
421
+ ; LA64-LABEL: test_half_to_s32_u32:
422
+ ; LA64: # %bb.0: # %entry
423
+ ; LA64-NEXT: addi.d $sp, $sp, -16
424
+ ; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
425
+ ; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
426
+ ; LA64-NEXT: ftintrz.w.s $fa0, $fa0
427
+ ; LA64-NEXT: movfr2gr.s $a0, $fa0
428
+ ; LA64-NEXT: bstrpick.d $a0, $a0, 31, 0
429
+ ; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
430
+ ; LA64-NEXT: addi.d $sp, $sp, 16
431
+ ; LA64-NEXT: ret
432
+ entry:
433
+ %conv = fptosi half %a to i32
434
+ ret i32 %conv
435
+ }
436
+
437
+ define i64 @test_half_to_i64 (half %a ) nounwind {
438
+ ; LA32-LABEL: test_half_to_i64:
439
+ ; LA32: # %bb.0: # %entry
440
+ ; LA32-NEXT: addi.w $sp, $sp, -16
441
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
442
+ ; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
443
+ ; LA32-NEXT: bl %plt(__fixsfdi)
444
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
445
+ ; LA32-NEXT: addi.w $sp, $sp, 16
446
+ ; LA32-NEXT: ret
447
+ ;
448
+ ; LA64-LABEL: test_half_to_i64:
449
+ ; LA64: # %bb.0: # %entry
450
+ ; LA64-NEXT: addi.d $sp, $sp, -16
451
+ ; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
452
+ ; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
453
+ ; LA64-NEXT: ftintrz.l.s $fa0, $fa0
454
+ ; LA64-NEXT: movfr2gr.d $a0, $fa0
455
+ ; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
456
+ ; LA64-NEXT: addi.d $sp, $sp, 16
457
+ ; LA64-NEXT: ret
458
+ entry:
459
+ %conv = fptosi half %a to i64
460
+ ret i64 %conv
461
+ }
0 commit comments