@@ -46,8 +46,14 @@ define amdgpu_kernel void @frem_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1
46
46
; VI-NEXT: v_cvt_f32_f16_e32 v0, s2
47
47
; VI-NEXT: v_cvt_f32_f16_e32 v2, s0
48
48
; VI-NEXT: v_mov_b32_e32 v1, s0
49
- ; VI-NEXT: v_rcp_f32_e32 v2, v2
50
- ; VI-NEXT: v_mul_f32_e32 v0, v0, v2
49
+ ; VI-NEXT: v_rcp_f32_e32 v3, v2
50
+ ; VI-NEXT: v_mul_f32_e32 v4, v0, v3
51
+ ; VI-NEXT: v_mad_f32 v5, -v2, v4, v0
52
+ ; VI-NEXT: v_mac_f32_e32 v4, v5, v3
53
+ ; VI-NEXT: v_mad_f32 v0, -v2, v4, v0
54
+ ; VI-NEXT: v_mul_f32_e32 v0, v0, v3
55
+ ; VI-NEXT: v_and_b32_e32 v0, 0xff800000, v0
56
+ ; VI-NEXT: v_add_f32_e32 v0, v0, v4
51
57
; VI-NEXT: v_cvt_f16_f32_e32 v0, v0
52
58
; VI-NEXT: v_div_fixup_f16 v0, v0, v1, s2
53
59
; VI-NEXT: v_trunc_f16_e32 v0, v0
@@ -554,19 +560,31 @@ define amdgpu_kernel void @frem_v2f16(ptr addrspace(1) %out, ptr addrspace(1) %i
554
560
; VI-NEXT: v_cvt_f32_f16_e32 v0, s2
555
561
; VI-NEXT: v_cvt_f32_f16_e32 v2, s0
556
562
; VI-NEXT: s_lshr_b32 s3, s0, 16
557
- ; VI-NEXT: v_cvt_f32_f16_e32 v3, s3
558
563
; VI-NEXT: v_mov_b32_e32 v1, s0
559
- ; VI-NEXT: v_rcp_f32_e32 v2, v2
560
564
; VI-NEXT: s_lshr_b32 s1, s2, 16
561
- ; VI-NEXT: v_rcp_f32_e32 v3, v3
562
- ; VI-NEXT: v_mul_f32_e32 v0, v0, v2
565
+ ; VI-NEXT: v_rcp_f32_e32 v3, v2
566
+ ; VI-NEXT: v_mul_f32_e32 v4, v0, v3
567
+ ; VI-NEXT: v_mad_f32 v5, -v2, v4, v0
568
+ ; VI-NEXT: v_mac_f32_e32 v4, v5, v3
569
+ ; VI-NEXT: v_mad_f32 v0, -v2, v4, v0
570
+ ; VI-NEXT: v_mul_f32_e32 v0, v0, v3
571
+ ; VI-NEXT: v_and_b32_e32 v0, 0xff800000, v0
572
+ ; VI-NEXT: v_add_f32_e32 v0, v0, v4
563
573
; VI-NEXT: v_cvt_f16_f32_e32 v0, v0
574
+ ; VI-NEXT: v_cvt_f32_f16_e32 v3, s3
564
575
; VI-NEXT: v_mov_b32_e32 v2, s3
565
576
; VI-NEXT: v_div_fixup_f16 v0, v0, v1, s2
566
577
; VI-NEXT: v_trunc_f16_e32 v0, v0
567
578
; VI-NEXT: v_fma_f16 v0, -v0, v1, s2
568
579
; VI-NEXT: v_cvt_f32_f16_e32 v1, s1
569
- ; VI-NEXT: v_mul_f32_e32 v1, v1, v3
580
+ ; VI-NEXT: v_rcp_f32_e32 v4, v3
581
+ ; VI-NEXT: v_mul_f32_e32 v5, v1, v4
582
+ ; VI-NEXT: v_mad_f32 v6, -v3, v5, v1
583
+ ; VI-NEXT: v_mac_f32_e32 v5, v6, v4
584
+ ; VI-NEXT: v_mad_f32 v1, -v3, v5, v1
585
+ ; VI-NEXT: v_mul_f32_e32 v1, v1, v4
586
+ ; VI-NEXT: v_and_b32_e32 v1, 0xff800000, v1
587
+ ; VI-NEXT: v_add_f32_e32 v1, v1, v5
570
588
; VI-NEXT: v_cvt_f16_f32_e32 v1, v1
571
589
; VI-NEXT: v_div_fixup_f16 v1, v1, v2, s1
572
590
; VI-NEXT: v_trunc_f16_e32 v1, v1
@@ -691,41 +709,65 @@ define amdgpu_kernel void @frem_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %i
691
709
; VI-NEXT: v_cvt_f32_f16_e32 v0, s2
692
710
; VI-NEXT: v_cvt_f32_f16_e32 v2, s0
693
711
; VI-NEXT: s_lshr_b32 s8, s0, 16
694
- ; VI-NEXT: v_cvt_f32_f16_e32 v3, s8
695
712
; VI-NEXT: v_mov_b32_e32 v1, s0
696
- ; VI-NEXT: v_rcp_f32_e32 v2, v2
697
713
; VI-NEXT: s_lshr_b32 s6, s2, 16
698
- ; VI-NEXT: v_rcp_f32_e32 v3, v3
699
- ; VI-NEXT: v_cvt_f32_f16_e32 v4, s1
700
- ; VI-NEXT: v_mul_f32_e32 v0, v0, v2
714
+ ; VI-NEXT: v_rcp_f32_e32 v3, v2
715
+ ; VI-NEXT: s_lshr_b32 s9, s1, 16
716
+ ; VI-NEXT: s_lshr_b32 s7, s3, 16
717
+ ; VI-NEXT: v_mul_f32_e32 v4, v0, v3
718
+ ; VI-NEXT: v_mad_f32 v5, -v2, v4, v0
719
+ ; VI-NEXT: v_mac_f32_e32 v4, v5, v3
720
+ ; VI-NEXT: v_mad_f32 v0, -v2, v4, v0
721
+ ; VI-NEXT: v_mul_f32_e32 v0, v0, v3
722
+ ; VI-NEXT: v_and_b32_e32 v0, 0xff800000, v0
723
+ ; VI-NEXT: v_add_f32_e32 v0, v0, v4
701
724
; VI-NEXT: v_cvt_f16_f32_e32 v0, v0
725
+ ; VI-NEXT: v_cvt_f32_f16_e32 v3, s8
702
726
; VI-NEXT: v_mov_b32_e32 v2, s8
703
- ; VI-NEXT: v_rcp_f32_e32 v4, v4
704
- ; VI-NEXT: s_lshr_b32 s9, s1, 16
705
727
; VI-NEXT: v_div_fixup_f16 v0, v0, v1, s2
706
728
; VI-NEXT: v_trunc_f16_e32 v0, v0
707
729
; VI-NEXT: v_fma_f16 v0, -v0, v1, s2
708
730
; VI-NEXT: v_cvt_f32_f16_e32 v1, s6
709
- ; VI-NEXT: v_cvt_f32_f16_e32 v5, s9
710
- ; VI-NEXT: s_lshr_b32 s7, s3, 16
711
- ; VI-NEXT: v_mul_f32_e32 v1, v1, v3
731
+ ; VI-NEXT: v_rcp_f32_e32 v4, v3
732
+ ; VI-NEXT: v_mul_f32_e32 v5, v1, v4
733
+ ; VI-NEXT: v_mad_f32 v6, -v3, v5, v1
734
+ ; VI-NEXT: v_mac_f32_e32 v5, v6, v4
735
+ ; VI-NEXT: v_mad_f32 v1, -v3, v5, v1
736
+ ; VI-NEXT: v_mul_f32_e32 v1, v1, v4
737
+ ; VI-NEXT: v_and_b32_e32 v1, 0xff800000, v1
738
+ ; VI-NEXT: v_add_f32_e32 v1, v1, v5
712
739
; VI-NEXT: v_cvt_f16_f32_e32 v1, v1
740
+ ; VI-NEXT: v_cvt_f32_f16_e32 v4, s1
713
741
; VI-NEXT: v_mov_b32_e32 v3, s1
714
- ; VI-NEXT: v_rcp_f32_e32 v5, v5
715
742
; VI-NEXT: v_div_fixup_f16 v1, v1, v2, s6
716
743
; VI-NEXT: v_trunc_f16_e32 v1, v1
717
744
; VI-NEXT: v_fma_f16 v1, -v1, v2, s6
718
745
; VI-NEXT: v_cvt_f32_f16_e32 v2, s3
746
+ ; VI-NEXT: v_rcp_f32_e32 v5, v4
719
747
; VI-NEXT: v_lshlrev_b32_e32 v1, 16, v1
720
748
; VI-NEXT: v_or_b32_e32 v0, v0, v1
721
- ; VI-NEXT: v_mul_f32_e32 v2, v2, v4
749
+ ; VI-NEXT: v_mul_f32_e32 v6, v2, v5
750
+ ; VI-NEXT: v_mad_f32 v7, -v4, v6, v2
751
+ ; VI-NEXT: v_mac_f32_e32 v6, v7, v5
752
+ ; VI-NEXT: v_mad_f32 v2, -v4, v6, v2
753
+ ; VI-NEXT: v_mul_f32_e32 v2, v2, v5
754
+ ; VI-NEXT: v_and_b32_e32 v2, 0xff800000, v2
755
+ ; VI-NEXT: v_add_f32_e32 v2, v2, v6
722
756
; VI-NEXT: v_cvt_f16_f32_e32 v2, v2
757
+ ; VI-NEXT: v_cvt_f32_f16_e32 v5, s9
723
758
; VI-NEXT: v_mov_b32_e32 v4, s9
724
759
; VI-NEXT: v_div_fixup_f16 v2, v2, v3, s3
725
760
; VI-NEXT: v_trunc_f16_e32 v2, v2
726
761
; VI-NEXT: v_fma_f16 v2, -v2, v3, s3
727
762
; VI-NEXT: v_cvt_f32_f16_e32 v3, s7
728
- ; VI-NEXT: v_mul_f32_e32 v3, v3, v5
763
+ ; VI-NEXT: v_rcp_f32_e32 v6, v5
764
+ ; VI-NEXT: v_mul_f32_e32 v7, v3, v6
765
+ ; VI-NEXT: v_mad_f32 v8, -v5, v7, v3
766
+ ; VI-NEXT: v_mac_f32_e32 v7, v8, v6
767
+ ; VI-NEXT: v_mad_f32 v3, -v5, v7, v3
768
+ ; VI-NEXT: v_mul_f32_e32 v3, v3, v6
769
+ ; VI-NEXT: v_and_b32_e32 v3, 0xff800000, v3
770
+ ; VI-NEXT: v_add_f32_e32 v3, v3, v7
729
771
; VI-NEXT: v_cvt_f16_f32_e32 v3, v3
730
772
; VI-NEXT: v_div_fixup_f16 v3, v3, v4, s7
731
773
; VI-NEXT: v_trunc_f16_e32 v3, v3
0 commit comments