Skip to content

Commit da12833

Browse files
AinsleySnowimkiva
authored andcommitted
[LLVM][XTHeadVector] Implement intrinsics for vdiv/vdivu/vrem/vremu. (llvm#64)
* [LLVM][XTHeadVector] Define intrinsic functions for vdiv/vrem. * [LLVM][XTHeadVector] Define pseudos and pats for vdiv/vrem. * [LLVM][XTHeadVector] Add test cases. * [NFC][XTHeadVector] Update README.
1 parent d25f522 commit da12833

File tree

7 files changed

+9806
-0
lines changed

7 files changed

+9806
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Any feature not listed below but present in the specification should be consider
4646
- (Done) `12.6. Vector Narrowing Integer Right Shift Instructions`
4747
- (Done) `12.7 Vector Integer Comparison Instructions`
4848
- (Done) `12.8. Vector Integer Min/Max Instructions`
49+
- (Done) `12.10. Vector Integer Divide Instructions`
4950
- (WIP) Clang intrinsics related to the `XTHeadVector` extension:
5051
- (WIP) `6. Configuration-Setting and Utility`
5152
- (Done) `6.1. Set vl and vtype`

llvm/include/llvm/IR/IntrinsicsRISCVXTHeadV.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,12 @@ let TargetPrefix = "riscv" in {
687687
defm th_vmin : XVBinaryAAX;
688688
defm th_vmaxu : XVBinaryAAX;
689689
defm th_vmax : XVBinaryAAX;
690+
691+
// 12.10 Vector Integer Divide Instructions
692+
defm th_vdivu : XVBinaryAAX;
693+
defm th_vdiv : XVBinaryAAX;
694+
defm th_vremu : XVBinaryAAX;
695+
defm th_vrem : XVBinaryAAX;
690696
} // TargetPrefix = "riscv"
691697

692698
let TargetPrefix = "riscv" in {

llvm/lib/Target/RISCV/RISCVInstrInfoXTHeadVPseudos.td

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,24 @@ multiclass XVPseudoVMSGE_VX_VI {
19281928
}
19291929
}
19301930

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+
19311949
//===----------------------------------------------------------------------===//
19321950
// Helpers to define the intrinsic patterns for the XTHeadVector extension.
19331951
//===----------------------------------------------------------------------===//
@@ -2609,6 +2627,23 @@ let Predicates = [HasVendorXTHeadV] in {
26092627
defm : XVPatBinaryV_VV_VX<"int_riscv_th_vmax", "PseudoTH_VMAX", AllIntegerXVectors>;
26102628
}
26112629

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+
26122647
//===----------------------------------------------------------------------===//
26132648
// 12.14. Vector Integer Merge and Move Instructions
26142649
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)