Skip to content

Commit 7ef8e98

Browse files
committed
Add vector mask and permute operations
1 parent fce1328 commit 7ef8e98

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

llvm/lib/Target/RISCV/RISCVSchedTTAscalonD8.td

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,67 @@ foreach mx = SchedMxListFWRed in {
621621
}
622622
}
623623

624+
// Vector Mask Instructions
625+
foreach mx = SchedMxList in {
626+
defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
627+
let Latency = 1 in {
628+
defm "" : LMULWriteResMX<"WriteVMALUV", [AscalonV], mx, IsWorstCase>;
629+
defm "" : LMULWriteResMX<"WriteVMSFSV", [AscalonV], mx, IsWorstCase>;
630+
}
631+
let Latency = 2, ReleaseAtCycles = [1, 2] in {
632+
defm "" : LMULWriteResMX<"WriteVMPopV", [AscalonFX, AscalonV], mx, IsWorstCase>;
633+
defm "" : LMULWriteResMX<"WriteVMFFSV", [AscalonFX, AscalonV], mx, IsWorstCase>;
634+
}
635+
}
636+
foreach mx = SchedMxList in {
637+
defvar Cycles = AscalonGetCyclesDefault<mx>.c;
638+
defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
639+
let Latency = Cycles, ReleaseAtCycles = [1, !sub(Cycles, 1)] in {
640+
defm "" : LMULWriteResMX<"WriteVIotaV", [AscalonFX, AscalonV], mx, IsWorstCase>;
641+
defm "" : LMULWriteResMX<"WriteVIdxV", [AscalonFX, AscalonV], mx, IsWorstCase>;
642+
}
643+
}
644+
645+
// Vector Permutation Instructions
646+
let Latency = 2, ReleaseAtCycles = [1, 2] in {
647+
def : WriteRes<WriteVMovSX, [AscalonFX, AscalonV]>;
648+
def : WriteRes<WriteVMovXS, [AscalonFX, AscalonV]>;
649+
def : WriteRes<WriteVMovSF, [AscalonFX, AscalonV]>;
650+
def : WriteRes<WriteVMovFS, [AscalonFX, AscalonV]>;
651+
}
652+
foreach mx = SchedMxList in {
653+
defvar Cycles = AscalonGetCyclesDefault<mx>.c;
654+
defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
655+
let Latency = !mul(Cycles, 2), ReleaseAtCycles = [Cycles, !mul(Cycles, 2)] in {
656+
defm "" : LMULWriteResMX<"WriteVRGatherVX", [AscalonFX, AscalonV], mx, IsWorstCase>;
657+
defm "" : LMULWriteResMX<"WriteVRGatherVI", [AscalonFX, AscalonV], mx, IsWorstCase>;
658+
}
659+
}
660+
661+
foreach mx = SchedMxList in {
662+
foreach sew = SchedSEWSet<mx>.val in {
663+
defvar Cycles = AscalonGetCyclesVRGatherVV<mx>.c;
664+
defvar IsWorstCase = AscalonIsWorstCaseMXSEW<mx, sew, SchedMxList>.c;
665+
let Latency = !add(Cycles, 3), ReleaseAtCycles = [1, !add(1, Cycles)] in {
666+
defm "" : LMULSEWWriteResMXSEW<"WriteVRGatherVV", [AscalonFX, AscalonV], mx, sew, IsWorstCase>;
667+
defm "" : LMULSEWWriteResMXSEW<"WriteVRGatherEI16VV", [AscalonFX, AscalonV], mx, sew, IsWorstCase>;
668+
defm "" : LMULSEWWriteResMXSEW<"WriteVCompressV", [AscalonFX, AscalonV], mx, sew, IsWorstCase>;
669+
}
670+
}
671+
}
672+
673+
foreach mx = SchedMxList in {
674+
defvar Cycles = AscalonGetCyclesDefault<mx>.c;
675+
defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
676+
let Latency = 4, AcquireAtCycles = [0, 1], ReleaseAtCycles = [1, !add(1, Cycles)] in {
677+
defm "" : LMULWriteResMX<"WriteVSlideUpX", [AscalonFX, AscalonV], mx, IsWorstCase>;
678+
defm "" : LMULWriteResMX<"WriteVSlideDownX", [AscalonFX, AscalonV], mx, IsWorstCase>;
679+
defm "" : LMULWriteResMX<"WriteVSlideI", [AscalonFX, AscalonV], mx, IsWorstCase>;
680+
defm "" : LMULWriteResMX<"WriteVISlide1X", [AscalonFX, AscalonV], mx, IsWorstCase>;
681+
defm "" : LMULWriteResMX<"WriteVFSlide1F", [AscalonFX, AscalonV], mx, IsWorstCase>;
682+
}
683+
}
684+
624685
//===----------------------------------------------------------------------===//
625686
// Unsupported extensions
626687
defm : UnsupportedSchedQ;

0 commit comments

Comments
 (0)