@@ -1928,6 +1928,24 @@ multiclass XVPseudoVMSGE_VX_VI {
1928
1928
}
1929
1929
}
1930
1930
1931
+ multiclass XVPseudoVDIV_VV_VX {
1932
+ foreach m = MxListXTHeadV in {
1933
+ defvar mx = m.MX;
1934
+ defvar sews = SchedSEWSet<mx>.val;
1935
+ foreach e = sews in {
1936
+ defvar WriteVIDivV_MX_E = !cast<SchedWrite>("WriteVIDivV_" # mx # "_E" # e);
1937
+ defvar WriteVIDivX_MX_E = !cast<SchedWrite>("WriteVIDivX_" # mx # "_E" # e);
1938
+ defvar ReadVIDivV_MX_E = !cast<SchedRead>("ReadVIDivV_" # mx # "_E" # e);
1939
+ defvar ReadVIDivX_MX_E = !cast<SchedRead>("ReadVIDivX_" # mx # "_E" # e);
1940
+
1941
+ defm "" : XVPseudoBinaryV_VV<m, "", e>,
1942
+ Sched<[WriteVIDivV_MX_E, ReadVIDivV_MX_E, ReadVIDivV_MX_E, ReadVMask]>;
1943
+ defm "" : XVPseudoBinaryV_VX<m, "", e>,
1944
+ Sched<[WriteVIDivX_MX_E, ReadVIDivV_MX_E, ReadVIDivX_MX_E, ReadVMask]>;
1945
+ }
1946
+ }
1947
+ }
1948
+
1931
1949
//===----------------------------------------------------------------------===//
1932
1950
// Helpers to define the intrinsic patterns for the XTHeadVector extension.
1933
1951
//===----------------------------------------------------------------------===//
@@ -2609,6 +2627,23 @@ let Predicates = [HasVendorXTHeadV] in {
2609
2627
defm : XVPatBinaryV_VV_VX<"int_riscv_th_vmax", "PseudoTH_VMAX", AllIntegerXVectors>;
2610
2628
}
2611
2629
2630
+ //===----------------------------------------------------------------------===//
2631
+ // 12.10. Vector Integer Divide Instructions
2632
+ //===----------------------------------------------------------------------===//
2633
+ let Predicates = [HasVendorXTHeadV] in {
2634
+ defm PseudoTH_VDIVU : XVPseudoVDIV_VV_VX;
2635
+ defm PseudoTH_VDIV : XVPseudoVDIV_VV_VX;
2636
+ defm PseudoTH_VREMU : XVPseudoVDIV_VV_VX;
2637
+ defm PseudoTH_VREM : XVPseudoVDIV_VV_VX;
2638
+ } // Predicates = [HasVendorXTHeadV]
2639
+
2640
+ let Predicates = [HasVendorXTHeadV] in {
2641
+ defm : XVPatBinaryV_VV_VX<"int_riscv_th_vdivu", "PseudoTH_VDIVU", AllIntegerXVectors, isSEWAware=1>;
2642
+ defm : XVPatBinaryV_VV_VX<"int_riscv_th_vdiv", "PseudoTH_VDIV", AllIntegerXVectors, isSEWAware=1>;
2643
+ defm : XVPatBinaryV_VV_VX<"int_riscv_th_vremu", "PseudoTH_VREMU", AllIntegerXVectors, isSEWAware=1>;
2644
+ defm : XVPatBinaryV_VV_VX<"int_riscv_th_vrem", "PseudoTH_VREM", AllIntegerXVectors, isSEWAware=1>;
2645
+ } // Predicates = [HasVendorXTHeadV]
2646
+
2612
2647
//===----------------------------------------------------------------------===//
2613
2648
// 12.14. Vector Integer Merge and Move Instructions
2614
2649
//===----------------------------------------------------------------------===//
0 commit comments