Skip to content

Commit 7f09bca

Browse files
AinsleySnowimkiva
authored andcommitted
[LLVM][XTHeadVector] Implement intrinsics for vwmul/vwmulu/vwmulsu. (llvm#65)
* [LLVM][XTHeadVector] Define intrinsic functions for vwmul/vwmulu/vwmulsu. * [LLVM][XTHeadVector] Define pseudos and pats. * [LLVM][XTHeadVector] Add tests. * [NFC][XTHeadVector] Update README.
1 parent da12833 commit 7f09bca

File tree

6 files changed

+4515
-0
lines changed

6 files changed

+4515
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Any feature not listed below but present in the specification should be consider
4747
- (Done) `12.7 Vector Integer Comparison Instructions`
4848
- (Done) `12.8. Vector Integer Min/Max Instructions`
4949
- (Done) `12.10. Vector Integer Divide Instructions`
50+
- (Done) `12.11. Vector Widening Integer Multiply Instructions`
5051
- (WIP) Clang intrinsics related to the `XTHeadVector` extension:
5152
- (WIP) `6. Configuration-Setting and Utility`
5253
- (Done) `6.1. Set vl and vtype`

llvm/include/llvm/IR/IntrinsicsRISCVXTHeadV.td

+5
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,11 @@ let TargetPrefix = "riscv" in {
693693
defm th_vdiv : XVBinaryAAX;
694694
defm th_vremu : XVBinaryAAX;
695695
defm th_vrem : XVBinaryAAX;
696+
697+
// 12.11. Vector Widening Integer Multiply Instructions
698+
defm th_vwmul : XVBinaryABX;
699+
defm th_vwmulu : XVBinaryABX;
700+
defm th_vwmulsu : XVBinaryABX;
696701
} // TargetPrefix = "riscv"
697702

698703
let TargetPrefix = "riscv" in {

llvm/lib/Target/RISCV/RISCVInstrInfoXTHeadVPseudos.td

+30
Original file line numberDiff line numberDiff line change
@@ -1946,6 +1946,21 @@ multiclass XVPseudoVDIV_VV_VX {
19461946
}
19471947
}
19481948

1949+
multiclass XVPseudoVWMUL_VV_VX {
1950+
foreach m = MxListWXTHeadV in {
1951+
defvar mx = m.MX;
1952+
defvar WriteVIWMulV_MX = !cast<SchedWrite>("WriteVIWMulV_" # mx);
1953+
defvar WriteVIWMulX_MX = !cast<SchedWrite>("WriteVIWMulX_" # mx);
1954+
defvar ReadVIWMulV_MX = !cast<SchedRead>("ReadVIWMulV_" # mx);
1955+
defvar ReadVIWMulX_MX = !cast<SchedRead>("ReadVIWMulX_" # mx);
1956+
1957+
defm "" : XVPseudoBinaryW_VV<m>,
1958+
Sched<[WriteVIWMulV_MX, ReadVIWMulV_MX, ReadVIWMulV_MX, ReadVMask]>;
1959+
defm "" : XVPseudoBinaryW_VX<m>,
1960+
Sched<[WriteVIWMulX_MX, ReadVIWMulV_MX, ReadVIWMulX_MX, ReadVMask]>;
1961+
}
1962+
}
1963+
19491964
//===----------------------------------------------------------------------===//
19501965
// Helpers to define the intrinsic patterns for the XTHeadVector extension.
19511966
//===----------------------------------------------------------------------===//
@@ -2644,6 +2659,21 @@ let Predicates = [HasVendorXTHeadV] in {
26442659
defm : XVPatBinaryV_VV_VX<"int_riscv_th_vrem", "PseudoTH_VREM", AllIntegerXVectors, isSEWAware=1>;
26452660
} // Predicates = [HasVendorXTHeadV]
26462661

2662+
//===----------------------------------------------------------------------===//
2663+
// 12.11. Vector Widening Integer Multiply Instructions
2664+
//===----------------------------------------------------------------------===//
2665+
let Predicates = [HasVendorXTHeadV] in {
2666+
defm PseudoTH_VWMUL : XVPseudoVWMUL_VV_VX;
2667+
defm PseudoTH_VWMULU : XVPseudoVWMUL_VV_VX;
2668+
defm PseudoTH_VWMULSU : XVPseudoVWMUL_VV_VX;
2669+
} // Predicates = [HasVendorXTHeadV]
2670+
2671+
let Predicates = [HasVendorXTHeadV] in {
2672+
defm : XVPatBinaryW_VV_VX<"int_riscv_th_vwmul", "PseudoTH_VWMUL", AllWidenableIntXVectors>;
2673+
defm : XVPatBinaryW_VV_VX<"int_riscv_th_vwmulu", "PseudoTH_VWMULU", AllWidenableIntXVectors>;
2674+
defm : XVPatBinaryW_VV_VX<"int_riscv_th_vwmulsu", "PseudoTH_VWMULSU", AllWidenableIntXVectors>;
2675+
} // Predicates = [HasVendorXTHeadV]
2676+
26472677
//===----------------------------------------------------------------------===//
26482678
// 12.14. Vector Integer Merge and Move Instructions
26492679
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)