123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925 |
- //===-- RISCVScheduleV.td - RISCV Scheduling Definitions V -*- tablegen -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //===----------------------------------------------------------------------===//
- /// Define scheduler resources associated with def operands.
- defvar UpperBoundLMUL = "UpperBound";
- defvar SchedMxList = ["UpperBound", "M1", "M2", "M4", "M8", "MF2", "MF4", "MF8"];
- // Used for widening and narrowing instructions as it doesn't contain M8.
- defvar SchedMxListW = ["UpperBound", "MF8", "MF4", "MF2", "M1", "M2", "M4"];
- defvar SchedMxListFW = ["UpperBound", "MF4", "MF2", "M1", "M2", "M4"];
- // Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxList
- multiclass LMULSchedWrites<string name> {
- foreach mx = SchedMxList in {
- def name # "_" # mx : SchedWrite;
- }
- }
- // Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxListW
- multiclass LMULSchedWritesW<string name> {
- foreach mx = SchedMxListW in {
- def name # "_" # mx : SchedWrite;
- }
- }
- // Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxListFW
- multiclass LMULSchedWritesFW<string name> {
- foreach mx = SchedMxListFW in {
- def name # "_" # mx : SchedWrite;
- }
- }
- // Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxList
- multiclass LMULSchedReads<string name> {
- foreach mx = SchedMxList in {
- def name # "_" # mx : SchedRead;
- }
- }
- // Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxListW
- multiclass LMULSchedReadsW<string name> {
- foreach mx = SchedMxListW in {
- def name # "_" # mx : SchedRead;
- }
- }
- // Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxListFW
- multiclass LMULSchedReadsFW<string name> {
- foreach mx = SchedMxListFW in {
- def name # "_" # mx : SchedRead;
- }
- }
- // Creates WriteRes for each (name, LMUL, resources) tuple for LMUL
- // in SchedMxList
- multiclass LMULWriteRes<string name, list<ProcResourceKind> resources> {
- foreach mx = SchedMxList in {
- def : WriteRes<!cast<SchedWrite>(name # "_" # mx), resources>;
- }
- }
- // Creates WriteRes for each (name, LMUL, resources) tuple for LMUL
- // in SchedMxListW
- multiclass LMULWriteResW<string name, list<ProcResourceKind> resources> {
- foreach mx = SchedMxListW in {
- def : WriteRes<!cast<SchedWrite>(name # "_" # mx), resources>;
- }
- }
- // Creates WriteRes for each (name, LMUL, resources) tuple for LMUL
- // in SchedMxListFW
- multiclass LMULWriteResFW<string name, list<ProcResourceKind> resources> {
- foreach mx = SchedMxListFW in {
- def : WriteRes<!cast<SchedWrite>(name # "_" # mx), resources>;
- }
- }
- // Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL
- // in SchedMxList
- multiclass LMULReadAdvance<string name, int val, list<SchedWrite> writes = []> {
- foreach mx = SchedMxList in {
- def : ReadAdvance<!cast<SchedRead>(name # "_" # mx), val, writes>;
- }
- }
- // Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL
- // in SchedMxListW
- multiclass LMULReadAdvanceW<string name, int val, list<SchedWrite> writes = []> {
- foreach mx = SchedMxListW in {
- def : ReadAdvance<!cast<SchedRead>(name # "_" # mx), val, writes>;
- }
- }
- // Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL
- // in SchedMxListFW
- multiclass LMULReadAdvanceFW<string name, int val, list<SchedWrite> writes = []> {
- foreach mx = SchedMxListFW in {
- def : ReadAdvance<!cast<SchedRead>(name # "_" # mx), val, writes>;
- }
- }
- // 3.6 Vector Byte Length vlenb
- def WriteRdVLENB : SchedWrite;
- // 6. Configuration-Setting Instructions
- def WriteVSETVLI : SchedWrite;
- def WriteVSETIVLI : SchedWrite;
- def WriteVSETVL : SchedWrite;
- // 7. Vector Loads and Stores
- // 7.4. Vector Unit-Stride Instructions
- defm "" : LMULSchedWrites<"WriteVLDE">;
- defm "" : LMULSchedWrites<"WriteVSTE">;
- // 7.4.1. Vector Unit-Strided Mask
- defm "" : LMULSchedWrites<"WriteVLDM">;
- defm "" : LMULSchedWrites<"WriteVSTM">;
- // 7.5. Vector Strided Instructions
- defm "" : LMULSchedWrites<"WriteVLDS8">;
- defm "" : LMULSchedWrites<"WriteVLDS16">;
- defm "" : LMULSchedWrites<"WriteVLDS32">;
- defm "" : LMULSchedWrites<"WriteVLDS64">;
- defm "" : LMULSchedWrites<"WriteVSTS8">;
- defm "" : LMULSchedWrites<"WriteVSTS16">;
- defm "" : LMULSchedWrites<"WriteVSTS32">;
- defm "" : LMULSchedWrites<"WriteVSTS64">;
- // 7.6. Vector Indexed Instructions
- defm "" : LMULSchedWrites<"WriteVLDUX8">;
- defm "" : LMULSchedWrites<"WriteVLDUX16">;
- defm "" : LMULSchedWrites<"WriteVLDUX32">;
- defm "" : LMULSchedWrites<"WriteVLDUX64">;
- defm "" : LMULSchedWrites<"WriteVLDOX8">;
- defm "" : LMULSchedWrites<"WriteVLDOX16">;
- defm "" : LMULSchedWrites<"WriteVLDOX32">;
- defm "" : LMULSchedWrites<"WriteVLDOX64">;
- defm "" : LMULSchedWrites<"WriteVSTUX8">;
- defm "" : LMULSchedWrites<"WriteVSTUX16">;
- defm "" : LMULSchedWrites<"WriteVSTUX32">;
- defm "" : LMULSchedWrites<"WriteVSTUX64">;
- defm "" : LMULSchedWrites<"WriteVSTOX8">;
- defm "" : LMULSchedWrites<"WriteVSTOX16">;
- defm "" : LMULSchedWrites<"WriteVSTOX32">;
- defm "" : LMULSchedWrites<"WriteVSTOX64">;
- // 7.7. Vector Unit-stride Fault-Only-First Loads
- defm "" : LMULSchedWrites<"WriteVLDFF">;
- // 7.8. Vector Segment Instructions
- foreach nf=2-8 in {
- foreach eew = [8, 16, 32, 64] in {
- defm "" : LMULSchedWrites<"WriteVLSEG" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVSSEG" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVLSEGFF" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVLSSEG" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVSSSEG" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVLUXSEG" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVLOXSEG" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVSUXSEG" # nf # e # eew>;
- defm "" : LMULSchedWrites<"WriteVSOXSEG" # nf # e # eew>;
- }
- }
- // 7.9. Vector Whole Register Instructions
- def WriteVLD1R : SchedWrite;
- def WriteVLD2R : SchedWrite;
- def WriteVLD4R : SchedWrite;
- def WriteVLD8R : SchedWrite;
- def WriteVST1R : SchedWrite;
- def WriteVST2R : SchedWrite;
- def WriteVST4R : SchedWrite;
- def WriteVST8R : SchedWrite;
- // 11. Vector Integer Arithmetic Instructions
- // 11.1. Vector Single-Width Integer Add and Subtract
- // 11.5. Vector Bitwise Logical Instructions
- defm "" : LMULSchedWrites<"WriteVIALUV">;
- defm "" : LMULSchedWrites<"WriteVIALUX">;
- defm "" : LMULSchedWrites<"WriteVIALUI">;
- // 11.2. Vector Widening Integer Add/Subtract
- defm "" : LMULSchedWritesW<"WriteVIWALUV">;
- defm "" : LMULSchedWritesW<"WriteVIWALUX">;
- defm "" : LMULSchedWritesW<"WriteVIWALUI">;
- // 11.3. Vector Integer Extension
- defm "" : LMULSchedWrites<"WriteVExtV">;
- // 11.4. Vector Integer Arithmetic with Carry or Borrow Instructions
- defm "" : LMULSchedWrites<"WriteVICALUV">;
- defm "" : LMULSchedWrites<"WriteVICALUX">;
- defm "" : LMULSchedWrites<"WriteVICALUI">;
- // 11.6. Vector Single-Width Bit Shift Instructions
- defm "" : LMULSchedWrites<"WriteVShiftV">;
- defm "" : LMULSchedWrites<"WriteVShiftX">;
- defm "" : LMULSchedWrites<"WriteVShiftI">;
- // 11.7. Vector Narrowing Integer Right Shift Instructions
- defm "" : LMULSchedWritesW<"WriteVNShiftV">;
- defm "" : LMULSchedWritesW<"WriteVNShiftX">;
- defm "" : LMULSchedWritesW<"WriteVNShiftI">;
- // 11.8. Vector Integer Comparison Instructions
- // 11.9. Vector Integer Min/Max Instructions
- defm "" : LMULSchedWrites<"WriteVICmpV">;
- defm "" : LMULSchedWrites<"WriteVICmpX">;
- defm "" : LMULSchedWrites<"WriteVICmpI">;
- // 11.10. Vector Single-Width Integer Multiply Instructions
- defm "" : LMULSchedWrites<"WriteVIMulV">;
- defm "" : LMULSchedWrites<"WriteVIMulX">;
- // 11.11. Vector Integer Divide Instructions
- defm "" : LMULSchedWrites<"WriteVIDivV">;
- defm "" : LMULSchedWrites<"WriteVIDivX">;
- // 11.12. Vector Widening Integer Multiply Instructions
- defm "" : LMULSchedWritesW<"WriteVIWMulV">;
- defm "" : LMULSchedWritesW<"WriteVIWMulX">;
- // 11.13. Vector Single-Width Integer Multiply-Add Instructions
- defm "" : LMULSchedWrites<"WriteVIMulAddV">;
- defm "" : LMULSchedWrites<"WriteVIMulAddX">;
- // 11.14. Vector Widening Integer Multiply-Add Instructions
- defm "" : LMULSchedWritesW<"WriteVIWMulAddV">;
- defm "" : LMULSchedWritesW<"WriteVIWMulAddX">;
- // 11.15. Vector Integer Merge Instructions
- defm "" : LMULSchedWrites<"WriteVIMergeV">;
- defm "" : LMULSchedWrites<"WriteVIMergeX">;
- defm "" : LMULSchedWrites<"WriteVIMergeI">;
- // 11.16. Vector Integer Move Instructions
- defm "" : LMULSchedWrites<"WriteVIMovV">;
- defm "" : LMULSchedWrites<"WriteVIMovX">;
- defm "" : LMULSchedWrites<"WriteVIMovI">;
- // 12. Vector Fixed-Point Arithmetic Instructions
- // 12.1. Vector Single-Width Saturating Add and Subtract
- defm "" : LMULSchedWrites<"WriteVSALUV">;
- defm "" : LMULSchedWrites<"WriteVSALUX">;
- defm "" : LMULSchedWrites<"WriteVSALUI">;
- // 12.2. Vector Single-Width Averaging Add and Subtract
- defm "" : LMULSchedWrites<"WriteVAALUV">;
- defm "" : LMULSchedWrites<"WriteVAALUX">;
- // 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
- defm "" : LMULSchedWrites<"WriteVSMulV">;
- defm "" : LMULSchedWrites<"WriteVSMulX">;
- // 12.4. Vector Single-Width Scaling Shift Instructions
- defm "" : LMULSchedWrites<"WriteVSShiftV">;
- defm "" : LMULSchedWrites<"WriteVSShiftX">;
- defm "" : LMULSchedWrites<"WriteVSShiftI">;
- // 12.5. Vector Narrowing Fixed-Point Clip Instructions
- defm "" : LMULSchedWritesW<"WriteVNClipV">;
- defm "" : LMULSchedWritesW<"WriteVNClipX">;
- defm "" : LMULSchedWritesW<"WriteVNClipI">;
- // 13. Vector Floating-Point Instructions
- // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
- defm "" : LMULSchedWrites<"WriteVFALUV">;
- defm "" : LMULSchedWrites<"WriteVFALUF">;
- // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
- defm "" : LMULSchedWritesFW<"WriteVFWALUV">;
- defm "" : LMULSchedWritesFW<"WriteVFWALUF">;
- // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
- defm "" : LMULSchedWrites<"WriteVFMulV">;
- defm "" : LMULSchedWrites<"WriteVFMulF">;
- defm "" : LMULSchedWrites<"WriteVFDivV">;
- defm "" : LMULSchedWrites<"WriteVFDivF">;
- // 13.5. Vector Widening Floating-Point Multiply
- defm "" : LMULSchedWritesFW<"WriteVFWMulV">;
- defm "" : LMULSchedWritesFW<"WriteVFWMulF">;
- // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
- defm "" : LMULSchedWrites<"WriteVFMulAddV">;
- defm "" : LMULSchedWrites<"WriteVFMulAddF">;
- // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
- defm "" : LMULSchedWritesFW<"WriteVFWMulAddV">;
- defm "" : LMULSchedWritesFW<"WriteVFWMulAddF">;
- // 13.8. Vector Floating-Point Square-Root Instruction
- defm "" : LMULSchedWrites<"WriteVFSqrtV">;
- // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
- // 13.10. Vector Floating-Point Reciprocal Estimate Instruction
- defm "" : LMULSchedWrites<"WriteVFRecpV">;
- // 13.11. Vector Floating-Point MIN/MAX Instructions
- // 13.13. Vector Floating-Point Compare Instructions
- defm "" : LMULSchedWrites<"WriteVFCmpV">;
- defm "" : LMULSchedWrites<"WriteVFCmpF">;
- // 13.12. Vector Floating-Point Sign-Injection Instructions
- defm "" : LMULSchedWrites<"WriteVFSgnjV">;
- defm "" : LMULSchedWrites<"WriteVFSgnjF">;
- // 13.14. Vector Floating-Point Classify Instruction
- defm "" : LMULSchedWrites<"WriteVFClassV">;
- // 13.15. Vector Floating-Point Merge Instruction
- defm "" : LMULSchedWrites<"WriteVFMergeV">;
- // 13.16. Vector Floating-Point Move Instruction
- defm "" : LMULSchedWrites<"WriteVFMovV">;
- // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
- defm "" : LMULSchedWrites<"WriteVFCvtIToFV">;
- defm "" : LMULSchedWrites<"WriteVFCvtFToIV">;
- // 13.18. Widening Floating-Point/Integer Type-Convert Instructions
- defm "" : LMULSchedWritesW<"WriteVFWCvtIToFV">;
- defm "" : LMULSchedWritesFW<"WriteVFWCvtFToIV">;
- defm "" : LMULSchedWritesFW<"WriteVFWCvtFToFV">;
- // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
- defm "" : LMULSchedWritesFW<"WriteVFNCvtIToFV">;
- defm "" : LMULSchedWritesW<"WriteVFNCvtFToIV">;
- defm "" : LMULSchedWritesFW<"WriteVFNCvtFToFV">;
- // 14. Vector Reduction Operations
- // 14.1. Vector Single-Width Integer Reduction Instructions
- def WriteVIRedV : SchedWrite;
- // 14.2. Vector Widening Integer Reduction Instructions
- def WriteVIWRedV : SchedWrite;
- // 14.3. Vector Single-Width Floating-Point Reduction Instructions
- def WriteVFRedV : SchedWrite;
- def WriteVFRedOV : SchedWrite;
- // 14.4. Vector Widening Floating-Point Reduction Instructions
- def WriteVFWRedV : SchedWrite;
- def WriteVFWRedOV : SchedWrite;
- // 15. Vector Mask Instructions
- // 15.1. Vector Mask-Register Logical Instructions
- defm "" : LMULSchedWrites<"WriteVMALUV">;
- // 15.2. Vector Mask Population Count
- defm "" : LMULSchedWrites<"WriteVMPopV">;
- // 15.3. Vector Find-First-Set Mask Bit
- defm "" : LMULSchedWrites<"WriteVMFFSV">;
- // 15.4. Vector Set-Before-First Mask Bit
- // 15.5. Vector Set-Including-First Mask Bit
- // 15.6. Vector Set-only-First Mask Bit
- defm "" : LMULSchedWrites<"WriteVMSFSV">;
- // 15.8. Vector Iota Instruction
- defm "" : LMULSchedWrites<"WriteVMIotV">;
- // 15.9. Vector Element Index Instruction
- defm "" : LMULSchedWrites<"WriteVMIdxV">;
- // 16. Vector Permutation Instructions
- // 16.1. Integer Scalar Move Instructions
- defm "" : LMULSchedWrites<"WriteVIMovVX">;
- defm "" : LMULSchedWrites<"WriteVIMovXV">;
- // 16.2. Floating-Point Scalar Move Instructions
- defm "" : LMULSchedWrites<"WriteVFMovVF">;
- defm "" : LMULSchedWrites<"WriteVFMovFV">;
- // 16.3. Vector Slide Instructions
- defm "" : LMULSchedWrites<"WriteVISlideX">;
- defm "" : LMULSchedWrites<"WriteVISlideI">;
- defm "" : LMULSchedWrites<"WriteVISlide1X">;
- defm "" : LMULSchedWrites<"WriteVFSlide1F">;
- // 16.4. Vector Register Gather Instructions
- defm "" : LMULSchedWrites<"WriteVGatherV">;
- defm "" : LMULSchedWrites<"WriteVGatherX">;
- defm "" : LMULSchedWrites<"WriteVGatherI">;
- // 16.5. Vector Compress Instruction
- defm "" : LMULSchedWrites<"WriteVCompressV">;
- // 16.6. Whole Vector Register Move
- // These are already LMUL aware
- def WriteVMov1V : SchedWrite;
- def WriteVMov2V : SchedWrite;
- def WriteVMov4V : SchedWrite;
- def WriteVMov8V : SchedWrite;
- //===----------------------------------------------------------------------===//
- /// Define scheduler resources associated with use operands.
- // 6. Configuration-Setting Instructions
- def ReadVSETVLI : SchedRead;
- def ReadVSETVL : SchedRead;
- // 7. Vector Loads and Stores
- defm "" : LMULSchedReads<"ReadVLDX">;
- defm "" : LMULSchedReads<"ReadVSTX">;
- // 7.4. Vector Unit-Stride Instructions
- defm "" : LMULSchedReads<"ReadVSTEV">;
- // 7.4.1. Vector Unit-Strided Mask
- defm "" : LMULSchedReads<"ReadVSTM">;
- // 7.5. Vector Strided Instructions
- defm "" : LMULSchedReads<"ReadVLDSX">;
- defm "" : LMULSchedReads<"ReadVSTSX">;
- defm "" : LMULSchedReads<"ReadVSTS8V">;
- defm "" : LMULSchedReads<"ReadVSTS16V">;
- defm "" : LMULSchedReads<"ReadVSTS32V">;
- defm "" : LMULSchedReads<"ReadVSTS64V">;
- // 7.6. Vector Indexed Instructions
- defm "" : LMULSchedReads<"ReadVLDUXV">;
- defm "" : LMULSchedReads<"ReadVLDOXV">;
- defm "" : LMULSchedReads<"ReadVSTUX8">;
- defm "" : LMULSchedReads<"ReadVSTUX16">;
- defm "" : LMULSchedReads<"ReadVSTUX32">;
- defm "" : LMULSchedReads<"ReadVSTUX64">;
- defm "" : LMULSchedReads<"ReadVSTUXV">;
- defm "" : LMULSchedReads<"ReadVSTUX8V">;
- defm "" : LMULSchedReads<"ReadVSTUX16V">;
- defm "" : LMULSchedReads<"ReadVSTUX32V">;
- defm "" : LMULSchedReads<"ReadVSTUX64V">;
- defm "" : LMULSchedReads<"ReadVSTOX8">;
- defm "" : LMULSchedReads<"ReadVSTOX16">;
- defm "" : LMULSchedReads<"ReadVSTOX32">;
- defm "" : LMULSchedReads<"ReadVSTOX64">;
- defm "" : LMULSchedReads<"ReadVSTOXV">;
- defm "" : LMULSchedReads<"ReadVSTOX8V">;
- defm "" : LMULSchedReads<"ReadVSTOX16V">;
- defm "" : LMULSchedReads<"ReadVSTOX32V">;
- defm "" : LMULSchedReads<"ReadVSTOX64V">;
- // 7.9. Vector Whole Register Instructions
- // These are already LMUL aware
- def ReadVST1R : SchedRead;
- def ReadVST2R : SchedRead;
- def ReadVST4R : SchedRead;
- def ReadVST8R : SchedRead;
- // 11. Vector Integer Arithmetic Instructions
- // 11.1. Vector Single-Width Integer Add and Subtract
- // 11.5. Vector Bitwise Logical Instructions
- defm "" : LMULSchedReads<"ReadVIALUV">;
- defm "" : LMULSchedReads<"ReadVIALUX">;
- // 11.2. Vector Widening Integer Add/Subtract
- defm "" : LMULSchedReadsW<"ReadVIWALUV">;
- defm "" : LMULSchedReadsW<"ReadVIWALUX">;
- // 11.3. Vector Integer Extension
- defm "" : LMULSchedReads<"ReadVExtV">;
- // 11.4. Vector Integer Arithmetic with Carry or Borrow Instructions
- defm "" : LMULSchedReads<"ReadVICALUV">;
- defm "" : LMULSchedReads<"ReadVICALUX">;
- // 11.6. Vector Single-Width Bit Shift Instructions
- defm "" : LMULSchedReads<"ReadVShiftV">;
- defm "" : LMULSchedReads<"ReadVShiftX">;
- // 11.7. Vector Narrowing Integer Right Shift Instructions
- defm "" : LMULSchedReadsW<"ReadVNShiftV">;
- defm "" : LMULSchedReadsW<"ReadVNShiftX">;
- // 11.8. Vector Integer Comparison Instructions
- // 11.9. Vector Integer Min/Max Instructions
- defm "" : LMULSchedReads<"ReadVICmpV">;
- defm "" : LMULSchedReads<"ReadVICmpX">;
- // 11.10. Vector Single-Width Integer Multiply Instructions
- defm "" : LMULSchedReads<"ReadVIMulV">;
- defm "" : LMULSchedReads<"ReadVIMulX">;
- // 11.11. Vector Integer Divide Instructions
- defm "" : LMULSchedReads<"ReadVIDivV">;
- defm "" : LMULSchedReads<"ReadVIDivX">;
- // 11.12. Vector Widening Integer Multiply Instructions
- defm "" : LMULSchedReadsW<"ReadVIWMulV">;
- defm "" : LMULSchedReadsW<"ReadVIWMulX">;
- // 11.13. Vector Single-Width Integer Multiply-Add Instructions
- defm "" : LMULSchedReads<"ReadVIMulAddV">;
- defm "" : LMULSchedReads<"ReadVIMulAddX">;
- // 11.14. Vector Widening Integer Multiply-Add Instructions
- defm "" : LMULSchedReadsW<"ReadVIWMulAddV">;
- defm "" : LMULSchedReadsW<"ReadVIWMulAddX">;
- // 11.15. Vector Integer Merge Instructions
- defm "" : LMULSchedReads<"ReadVIMergeV">;
- defm "" : LMULSchedReads<"ReadVIMergeX">;
- // 11.16. Vector Integer Move Instructions
- defm "" : LMULSchedReads<"ReadVIMovV">;
- defm "" : LMULSchedReads<"ReadVIMovX">;
- // 12. Vector Fixed-Point Arithmetic Instructions
- // 12.1. Vector Single-Width Saturating Add and Subtract
- defm "" : LMULSchedReads<"ReadVSALUV">;
- defm "" : LMULSchedReads<"ReadVSALUX">;
- // 12.2. Vector Single-Width Averaging Add and Subtract
- defm "" : LMULSchedReads<"ReadVAALUV">;
- defm "" : LMULSchedReads<"ReadVAALUX">;
- // 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
- defm "" : LMULSchedReads<"ReadVSMulV">;
- defm "" : LMULSchedReads<"ReadVSMulX">;
- // 12.4. Vector Single-Width Scaling Shift Instructions
- defm "" : LMULSchedReads<"ReadVSShiftV">;
- defm "" : LMULSchedReads<"ReadVSShiftX">;
- // 12.5. Vector Narrowing Fixed-Point Clip Instructions
- defm "" : LMULSchedReadsW<"ReadVNClipV">;
- defm "" : LMULSchedReadsW<"ReadVNClipX">;
- // 13. Vector Floating-Point Instructions
- // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
- defm "" : LMULSchedReads<"ReadVFALUV">;
- defm "" : LMULSchedReads<"ReadVFALUF">;
- // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
- defm "" : LMULSchedReadsFW<"ReadVFWALUV">;
- defm "" : LMULSchedReadsFW<"ReadVFWALUF">;
- // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
- defm "" : LMULSchedReads<"ReadVFMulV">;
- defm "" : LMULSchedReads<"ReadVFMulF">;
- defm "" : LMULSchedReads<"ReadVFDivV">;
- defm "" : LMULSchedReads<"ReadVFDivF">;
- // 13.5. Vector Widening Floating-Point Multiply
- defm "" : LMULSchedReadsFW<"ReadVFWMulV">;
- defm "" : LMULSchedReadsFW<"ReadVFWMulF">;
- // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
- defm "" : LMULSchedReads<"ReadVFMulAddV">;
- defm "" : LMULSchedReads<"ReadVFMulAddF">;
- // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
- defm "" : LMULSchedReadsFW<"ReadVFWMulAddV">;
- defm "" : LMULSchedReadsFW<"ReadVFWMulAddF">;
- // 13.8. Vector Floating-Point Square-Root Instruction
- defm "" : LMULSchedReads<"ReadVFSqrtV">;
- // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
- // 13.10. Vector Floating-Point Reciprocal Estimate Instruction
- defm "" : LMULSchedReads<"ReadVFRecpV">;
- // 13.11. Vector Floating-Point MIN/MAX Instructions
- // 13.13. Vector Floating-Point Compare Instructions
- defm "" : LMULSchedReads<"ReadVFCmpV">;
- defm "" : LMULSchedReads<"ReadVFCmpF">;
- // 13.12. Vector Floating-Point Sign-Injection Instructions
- defm "" : LMULSchedReads<"ReadVFSgnjV">;
- defm "" : LMULSchedReads<"ReadVFSgnjF">;
- // 13.14. Vector Floating-Point Classify Instruction
- defm "" : LMULSchedReads<"ReadVFClassV">;
- // 13.15. Vector Floating-Point Merge Instruction
- defm "" : LMULSchedReads<"ReadVFMergeV">;
- defm "" : LMULSchedReads<"ReadVFMergeF">;
- // 13.16. Vector Floating-Point Move Instruction
- defm "" : LMULSchedReads<"ReadVFMovF">;
- // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
- defm "" : LMULSchedReads<"ReadVFCvtIToFV">;
- defm "" : LMULSchedReads<"ReadVFCvtFToIV">;
- // 13.18. Widening Floating-Point/Integer Type-Convert Instructions
- defm "" : LMULSchedReadsW<"ReadVFWCvtIToFV">;
- defm "" : LMULSchedReadsFW<"ReadVFWCvtFToIV">;
- defm "" : LMULSchedReadsFW<"ReadVFWCvtFToFV">;
- // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
- defm "" : LMULSchedReadsFW<"ReadVFNCvtIToFV">;
- defm "" : LMULSchedReadsW<"ReadVFNCvtFToIV">;
- defm "" : LMULSchedReadsFW<"ReadVFNCvtFToFV">;
- // 14. Vector Reduction Operations
- // 14.1. Vector Single-Width Integer Reduction Instructions
- def ReadVIRedV : SchedRead;
- def ReadVIRedV0 : SchedRead;
- // 14.2. Vector Widening Integer Reduction Instructions
- def ReadVIWRedV : SchedRead;
- def ReadVIWRedV0 : SchedRead;
- // 14.3. Vector Single-Width Floating-Point Reduction Instructions
- def ReadVFRedV : SchedRead;
- def ReadVFRedV0 : SchedRead;
- def ReadVFRedOV : SchedRead;
- def ReadVFRedOV0 : SchedRead;
- // 14.4. Vector Widening Floating-Point Reduction Instructions
- def ReadVFWRedV : SchedRead;
- def ReadVFWRedV0 : SchedRead;
- def ReadVFWRedOV : SchedRead;
- def ReadVFWRedOV0 : SchedRead;
- // 15. Vector Mask Instructions
- // 15.1. Vector Mask-Register Logical Instructions
- defm "" : LMULSchedReads<"ReadVMALUV">;
- // 15.2. Vector Mask Population Count
- defm "" : LMULSchedReads<"ReadVMPopV">;
- // 15.3. Vector Find-First-Set Mask Bit
- defm "" : LMULSchedReads<"ReadVMFFSV">;
- // 15.4. Vector Set-Before-First Mask Bit
- // 15.5. Vector Set-Including-First Mask Bit
- // 15.6. Vector Set-only-First Mask Bit
- defm "" : LMULSchedReads<"ReadVMSFSV">;
- // 15.8. Vector Iota Instruction
- defm "" : LMULSchedReads<"ReadVMIotV">;
- // 16. Vector Permutation Instructions
- // 16.1. Integer Scalar Move Instructions
- defm "" : LMULSchedReads<"ReadVIMovVX">;
- defm "" : LMULSchedReads<"ReadVIMovXV">;
- defm "" : LMULSchedReads<"ReadVIMovXX">;
- // 16.2. Floating-Point Scalar Move Instructions
- defm "" : LMULSchedReads<"ReadVFMovVF">;
- defm "" : LMULSchedReads<"ReadVFMovFV">;
- defm "" : LMULSchedReads<"ReadVFMovFX">;
- // 16.3. Vector Slide Instructions
- defm "" : LMULSchedReads<"ReadVISlideV">;
- defm "" : LMULSchedReads<"ReadVISlideX">;
- defm "" : LMULSchedReads<"ReadVFSlideV">;
- defm "" : LMULSchedReads<"ReadVFSlideF">;
- // 16.4. Vector Register Gather Instructions
- defm "" : LMULSchedReads<"ReadVGatherV">;
- defm "" : LMULSchedReads<"ReadVGatherX">;
- // 16.5. Vector Compress Instruction
- defm "" : LMULSchedReads<"ReadVCompressV">;
- // 16.6. Whole Vector Register Move
- // These are already LMUL aware
- def ReadVMov1V : SchedRead;
- def ReadVMov2V : SchedRead;
- def ReadVMov4V : SchedRead;
- def ReadVMov8V : SchedRead;
- // Others
- def ReadVMask : SchedRead;
- //===----------------------------------------------------------------------===//
- /// Define default scheduler resources for V.
- multiclass UnsupportedSchedV {
- let Unsupported = true in {
- // 3.6 Vector Byte Length vlenb
- def : WriteRes<WriteRdVLENB, []>;
- // 6. Configuration-Setting Instructions
- def : WriteRes<WriteVSETVLI, []>;
- def : WriteRes<WriteVSETIVLI, []>;
- def : WriteRes<WriteVSETVL, []>;
- // 7. Vector Loads and Stores
- defm "" : LMULWriteRes<"WriteVLDE", []>;
- defm "" : LMULWriteRes<"WriteVSTE", []>;
- defm "" : LMULWriteRes<"WriteVLDM", []>;
- defm "" : LMULWriteRes<"WriteVSTM", []>;
- defm "" : LMULWriteRes<"WriteVLDS8", []>;
- defm "" : LMULWriteRes<"WriteVLDS16", []>;
- defm "" : LMULWriteRes<"WriteVLDS32", []>;
- defm "" : LMULWriteRes<"WriteVLDS64", []>;
- defm "" : LMULWriteRes<"WriteVSTS8", []>;
- defm "" : LMULWriteRes<"WriteVSTS16", []>;
- defm "" : LMULWriteRes<"WriteVSTS32", []>;
- defm "" : LMULWriteRes<"WriteVSTS64", []>;
- defm "" : LMULWriteRes<"WriteVLDUX8", []>;
- defm "" : LMULWriteRes<"WriteVLDUX16", []>;
- defm "" : LMULWriteRes<"WriteVLDUX32", []>;
- defm "" : LMULWriteRes<"WriteVLDUX64", []>;
- defm "" : LMULWriteRes<"WriteVLDOX8", []>;
- defm "" : LMULWriteRes<"WriteVLDOX16", []>;
- defm "" : LMULWriteRes<"WriteVLDOX32", []>;
- defm "" : LMULWriteRes<"WriteVLDOX64", []>;
- defm "" : LMULWriteRes<"WriteVSTUX8", []>;
- defm "" : LMULWriteRes<"WriteVSTUX16", []>;
- defm "" : LMULWriteRes<"WriteVSTUX32", []>;
- defm "" : LMULWriteRes<"WriteVSTUX64", []>;
- defm "" : LMULWriteRes<"WriteVSTOX8", []>;
- defm "" : LMULWriteRes<"WriteVSTOX16", []>;
- defm "" : LMULWriteRes<"WriteVSTOX32", []>;
- defm "" : LMULWriteRes<"WriteVSTOX64", []>;
- defm "" : LMULWriteRes<"WriteVLDFF", []>;
- // These are already LMUL aware
- def : WriteRes<WriteVLD1R, []>;
- def : WriteRes<WriteVLD2R, []>;
- def : WriteRes<WriteVLD4R, []>;
- def : WriteRes<WriteVLD8R, []>;
- def : WriteRes<WriteVST1R, []>;
- def : WriteRes<WriteVST2R, []>;
- def : WriteRes<WriteVST4R, []>;
- def : WriteRes<WriteVST8R, []>;
- // Vector Segment Loads and Stores
- foreach nf=2-8 in {
- foreach eew = [8, 16, 32, 64] in {
- defm "" : LMULWriteRes <"WriteVLSEG" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVLSEGFF" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVSSEG" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVLSSEG" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVSSSEG" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVLUXSEG" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVLOXSEG" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVSUXSEG" # nf # "e" # eew, []>;
- defm "" : LMULWriteRes <"WriteVSOXSEG" # nf # "e" # eew, []>;
- }
- }
- // 11. Vector Integer Arithmetic Instructions
- defm "" : LMULWriteRes<"WriteVIALUV", []>;
- defm "" : LMULWriteRes<"WriteVIALUX", []>;
- defm "" : LMULWriteRes<"WriteVIALUI", []>;
- defm "" : LMULWriteResW<"WriteVIWALUV", []>;
- defm "" : LMULWriteResW<"WriteVIWALUX", []>;
- defm "" : LMULWriteResW<"WriteVIWALUI", []>;
- defm "" : LMULWriteRes<"WriteVExtV", []>;
- defm "" : LMULWriteRes<"WriteVICALUV", []>;
- defm "" : LMULWriteRes<"WriteVICALUX", []>;
- defm "" : LMULWriteRes<"WriteVICALUI", []>;
- defm "" : LMULWriteRes<"WriteVShiftV", []>;
- defm "" : LMULWriteRes<"WriteVShiftX", []>;
- defm "" : LMULWriteRes<"WriteVShiftI", []>;
- defm "" : LMULWriteResW<"WriteVNShiftV", []>;
- defm "" : LMULWriteResW<"WriteVNShiftX", []>;
- defm "" : LMULWriteResW<"WriteVNShiftI", []>;
- defm "" : LMULWriteRes<"WriteVICmpV", []>;
- defm "" : LMULWriteRes<"WriteVICmpX", []>;
- defm "" : LMULWriteRes<"WriteVICmpI", []>;
- defm "" : LMULWriteRes<"WriteVIMulV", []>;
- defm "" : LMULWriteRes<"WriteVIMulX", []>;
- defm "" : LMULWriteRes<"WriteVIDivV", []>;
- defm "" : LMULWriteRes<"WriteVIDivX", []>;
- defm "" : LMULWriteResW<"WriteVIWMulV", []>;
- defm "" : LMULWriteResW<"WriteVIWMulX", []>;
- defm "" : LMULWriteRes<"WriteVIMulAddV", []>;
- defm "" : LMULWriteRes<"WriteVIMulAddX", []>;
- defm "" : LMULWriteResW<"WriteVIWMulAddV", []>;
- defm "" : LMULWriteResW<"WriteVIWMulAddX", []>;
- defm "" : LMULWriteRes<"WriteVIMergeV", []>;
- defm "" : LMULWriteRes<"WriteVIMergeX", []>;
- defm "" : LMULWriteRes<"WriteVIMergeI", []>;
- defm "" : LMULWriteRes<"WriteVIMovV", []>;
- defm "" : LMULWriteRes<"WriteVIMovX", []>;
- defm "" : LMULWriteRes<"WriteVIMovI", []>;
- // 12. Vector Fixed-Point Arithmetic Instructions
- defm "" : LMULWriteRes<"WriteVSALUV", []>;
- defm "" : LMULWriteRes<"WriteVSALUX", []>;
- defm "" : LMULWriteRes<"WriteVSALUI", []>;
- defm "" : LMULWriteRes<"WriteVAALUV", []>;
- defm "" : LMULWriteRes<"WriteVAALUX", []>;
- defm "" : LMULWriteRes<"WriteVSMulV", []>;
- defm "" : LMULWriteRes<"WriteVSMulX", []>;
- defm "" : LMULWriteRes<"WriteVSShiftV", []>;
- defm "" : LMULWriteRes<"WriteVSShiftX", []>;
- defm "" : LMULWriteRes<"WriteVSShiftI", []>;
- defm "" : LMULWriteResW<"WriteVNClipV", []>;
- defm "" : LMULWriteResW<"WriteVNClipX", []>;
- defm "" : LMULWriteResW<"WriteVNClipI", []>;
- // 13. Vector Floating-Point Instructions
- defm "" : LMULWriteRes<"WriteVFALUV", []>;
- defm "" : LMULWriteRes<"WriteVFALUF", []>;
- defm "" : LMULWriteResFW<"WriteVFWALUV", []>;
- defm "" : LMULWriteResFW<"WriteVFWALUF", []>;
- defm "" : LMULWriteRes<"WriteVFMulV", []>;
- defm "" : LMULWriteRes<"WriteVFMulF", []>;
- defm "" : LMULWriteRes<"WriteVFDivV", []>;
- defm "" : LMULWriteRes<"WriteVFDivF", []>;
- defm "" : LMULWriteResFW<"WriteVFWMulV", []>;
- defm "" : LMULWriteResFW<"WriteVFWMulF", []>;
- defm "" : LMULWriteRes<"WriteVFMulAddV", []>;
- defm "" : LMULWriteRes<"WriteVFMulAddF", []>;
- defm "" : LMULWriteResFW<"WriteVFWMulAddV", []>;
- defm "" : LMULWriteResFW<"WriteVFWMulAddF", []>;
- defm "" : LMULWriteRes<"WriteVFSqrtV", []>;
- defm "" : LMULWriteRes<"WriteVFRecpV", []>;
- defm "" : LMULWriteRes<"WriteVFCmpV", []>;
- defm "" : LMULWriteRes<"WriteVFCmpF", []>;
- defm "" : LMULWriteRes<"WriteVFSgnjV", []>;
- defm "" : LMULWriteRes<"WriteVFSgnjF", []>;
- defm "" : LMULWriteRes<"WriteVFClassV", []>;
- defm "" : LMULWriteRes<"WriteVFMergeV", []>;
- defm "" : LMULWriteRes<"WriteVFMovV", []>;
- defm "" : LMULWriteRes<"WriteVFCvtIToFV", []>;
- defm "" : LMULWriteRes<"WriteVFCvtFToIV", []>;
- defm "" : LMULWriteResW<"WriteVFWCvtIToFV", []>;
- defm "" : LMULWriteResFW<"WriteVFWCvtFToIV", []>;
- defm "" : LMULWriteResFW<"WriteVFWCvtFToFV", []>;
- defm "" : LMULWriteResFW<"WriteVFNCvtIToFV", []>;
- defm "" : LMULWriteResW<"WriteVFNCvtFToIV", []>;
- defm "" : LMULWriteResFW<"WriteVFNCvtFToFV", []>;
- // 14. Vector Reduction Operations
- def : WriteRes<WriteVIRedV, []>;
- def : WriteRes<WriteVIWRedV, []>;
- def : WriteRes<WriteVFRedV, []>;
- def : WriteRes<WriteVFRedOV, []>;
- def : WriteRes<WriteVFWRedV, []>;
- def : WriteRes<WriteVFWRedOV, []>;
- // 15. Vector Mask Instructions
- defm "" : LMULWriteRes<"WriteVMALUV", []>;
- defm "" : LMULWriteRes<"WriteVMPopV", []>;
- defm "" : LMULWriteRes<"WriteVMFFSV", []>;
- defm "" : LMULWriteRes<"WriteVMSFSV", []>;
- defm "" : LMULWriteRes<"WriteVMIotV", []>;
- defm "" : LMULWriteRes<"WriteVMIdxV", []>;
- // 16. Vector Permutation Instructions
- defm "" : LMULWriteRes<"WriteVIMovVX", []>;
- defm "" : LMULWriteRes<"WriteVIMovXV", []>;
- defm "" : LMULWriteRes<"WriteVFMovVF", []>;
- defm "" : LMULWriteRes<"WriteVFMovFV", []>;
- defm "" : LMULWriteRes<"WriteVISlideX", []>;
- defm "" : LMULWriteRes<"WriteVISlideI", []>;
- defm "" : LMULWriteRes<"WriteVISlide1X", []>;
- defm "" : LMULWriteRes<"WriteVFSlide1F", []>;
- defm "" : LMULWriteRes<"WriteVGatherV", []>;
- defm "" : LMULWriteRes<"WriteVGatherX", []>;
- defm "" : LMULWriteRes<"WriteVGatherI", []>;
- defm "" : LMULWriteRes<"WriteVCompressV", []>;
- // These are already LMUL aware
- def : WriteRes<WriteVMov1V, []>;
- def : WriteRes<WriteVMov2V, []>;
- def : WriteRes<WriteVMov4V, []>;
- def : WriteRes<WriteVMov8V, []>;
- // 6. Configuration-Setting Instructions
- def : ReadAdvance<ReadVSETVLI, 0>;
- def : ReadAdvance<ReadVSETVL, 0>;
- // 7. Vector Loads and Stores
- defm "" : LMULReadAdvance<"ReadVLDX", 0>;
- defm "" : LMULReadAdvance<"ReadVSTX", 0>;
- defm "" : LMULReadAdvance<"ReadVSTEV", 0>;
- defm "" : LMULReadAdvance<"ReadVSTM", 0>;
- defm "" : LMULReadAdvance<"ReadVLDSX", 0>;
- defm "" : LMULReadAdvance<"ReadVSTSX", 0>;
- defm "" : LMULReadAdvance<"ReadVSTS8V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTS16V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTS32V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTS64V", 0>;
- defm "" : LMULReadAdvance<"ReadVLDUXV", 0>;
- defm "" : LMULReadAdvance<"ReadVLDOXV", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUXV", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX8", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX16", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX32", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX64", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX8V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX16V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX32V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTUX64V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX8", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX16", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX32", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX64", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOXV", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX8V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX16V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX32V", 0>;
- defm "" : LMULReadAdvance<"ReadVSTOX64V", 0>;
- // These are already LMUL aware
- def : ReadAdvance<ReadVST1R, 0>;
- def : ReadAdvance<ReadVST2R, 0>;
- def : ReadAdvance<ReadVST4R, 0>;
- def : ReadAdvance<ReadVST8R, 0>;
- // 11. Vector Integer Arithmetic Instructions
- defm "" : LMULReadAdvance<"ReadVIALUV", 0>;
- defm "" : LMULReadAdvance<"ReadVIALUX", 0>;
- defm "" : LMULReadAdvanceW<"ReadVIWALUV", 0>;
- defm "" : LMULReadAdvanceW<"ReadVIWALUX", 0>;
- defm "" : LMULReadAdvance<"ReadVExtV", 0>;
- defm "" : LMULReadAdvance<"ReadVICALUV", 0>;
- defm "" : LMULReadAdvance<"ReadVICALUX", 0>;
- defm "" : LMULReadAdvance<"ReadVShiftV", 0>;
- defm "" : LMULReadAdvance<"ReadVShiftX", 0>;
- defm "" : LMULReadAdvanceW<"ReadVNShiftV", 0>;
- defm "" : LMULReadAdvanceW<"ReadVNShiftX", 0>;
- defm "" : LMULReadAdvance<"ReadVICmpV", 0>;
- defm "" : LMULReadAdvance<"ReadVICmpX", 0>;
- defm "" : LMULReadAdvance<"ReadVIMulV", 0>;
- defm "" : LMULReadAdvance<"ReadVIMulX", 0>;
- defm "" : LMULReadAdvance<"ReadVIDivV", 0>;
- defm "" : LMULReadAdvance<"ReadVIDivX", 0>;
- defm "" : LMULReadAdvanceW<"ReadVIWMulV", 0>;
- defm "" : LMULReadAdvanceW<"ReadVIWMulX", 0>;
- defm "" : LMULReadAdvance<"ReadVIMulAddV", 0>;
- defm "" : LMULReadAdvance<"ReadVIMulAddX", 0>;
- defm "" : LMULReadAdvanceW<"ReadVIWMulAddV", 0>;
- defm "" : LMULReadAdvanceW<"ReadVIWMulAddX", 0>;
- defm "" : LMULReadAdvance<"ReadVIMergeV", 0>;
- defm "" : LMULReadAdvance<"ReadVIMergeX", 0>;
- defm "" : LMULReadAdvance<"ReadVIMovV", 0>;
- defm "" : LMULReadAdvance<"ReadVIMovX", 0>;
- // 12. Vector Fixed-Point Arithmetic Instructions
- defm "" : LMULReadAdvance<"ReadVSALUV", 0>;
- defm "" : LMULReadAdvance<"ReadVSALUX", 0>;
- defm "" : LMULReadAdvance<"ReadVAALUV", 0>;
- defm "" : LMULReadAdvance<"ReadVAALUX", 0>;
- defm "" : LMULReadAdvance<"ReadVSMulV", 0>;
- defm "" : LMULReadAdvance<"ReadVSMulX", 0>;
- defm "" : LMULReadAdvance<"ReadVSShiftV", 0>;
- defm "" : LMULReadAdvance<"ReadVSShiftX", 0>;
- defm "" : LMULReadAdvanceW<"ReadVNClipV", 0>;
- defm "" : LMULReadAdvanceW<"ReadVNClipX", 0>;
- // 13. Vector Floating-Point Instructions
- defm "" : LMULReadAdvance<"ReadVFALUV", 0>;
- defm "" : LMULReadAdvance<"ReadVFALUF", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWALUV", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWALUF", 0>;
- defm "" : LMULReadAdvance<"ReadVFMulV", 0>;
- defm "" : LMULReadAdvance<"ReadVFMulF", 0>;
- defm "" : LMULReadAdvance<"ReadVFDivV", 0>;
- defm "" : LMULReadAdvance<"ReadVFDivF", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWMulV", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWMulF", 0>;
- defm "" : LMULReadAdvance<"ReadVFMulAddV", 0>;
- defm "" : LMULReadAdvance<"ReadVFMulAddF", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWMulAddV", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWMulAddF", 0>;
- defm "" : LMULReadAdvance<"ReadVFSqrtV", 0>;
- defm "" : LMULReadAdvance<"ReadVFRecpV", 0>;
- defm "" : LMULReadAdvance<"ReadVFCmpV", 0>;
- defm "" : LMULReadAdvance<"ReadVFCmpF", 0>;
- defm "" : LMULReadAdvance<"ReadVFSgnjV", 0>;
- defm "" : LMULReadAdvance<"ReadVFSgnjF", 0>;
- defm "" : LMULReadAdvance<"ReadVFClassV", 0>;
- defm "" : LMULReadAdvance<"ReadVFMergeV", 0>;
- defm "" : LMULReadAdvance<"ReadVFMergeF", 0>;
- defm "" : LMULReadAdvance<"ReadVFMovF", 0>;
- defm "" : LMULReadAdvance<"ReadVFCvtIToFV", 0>;
- defm "" : LMULReadAdvance<"ReadVFCvtFToIV", 0>;
- defm "" : LMULReadAdvanceW<"ReadVFWCvtIToFV", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWCvtFToIV", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFWCvtFToFV", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFNCvtIToFV", 0>;
- defm "" : LMULReadAdvanceW<"ReadVFNCvtFToIV", 0>;
- defm "" : LMULReadAdvanceFW<"ReadVFNCvtFToFV", 0>;
- // 14. Vector Reduction Operations
- def : ReadAdvance<ReadVIRedV, 0>;
- def : ReadAdvance<ReadVIRedV0, 0>;
- def : ReadAdvance<ReadVIWRedV, 0>;
- def : ReadAdvance<ReadVIWRedV0, 0>;
- def : ReadAdvance<ReadVFRedV, 0>;
- def : ReadAdvance<ReadVFRedV0, 0>;
- def : ReadAdvance<ReadVFRedOV, 0>;
- def : ReadAdvance<ReadVFRedOV0, 0>;
- def : ReadAdvance<ReadVFWRedV, 0>;
- def : ReadAdvance<ReadVFWRedV0, 0>;
- def : ReadAdvance<ReadVFWRedOV, 0>;
- def : ReadAdvance<ReadVFWRedOV0, 0>;
- // 15. Vector Mask Instructions
- defm "" : LMULReadAdvance<"ReadVMALUV", 0>;
- defm "" : LMULReadAdvance<"ReadVMPopV", 0>;
- defm "" : LMULReadAdvance<"ReadVMFFSV", 0>;
- defm "" : LMULReadAdvance<"ReadVMSFSV", 0>;
- defm "" : LMULReadAdvance<"ReadVMIotV", 0>;
- // 16. Vector Permutation Instructions
- defm "" : LMULReadAdvance<"ReadVIMovVX", 0>;
- defm "" : LMULReadAdvance<"ReadVIMovXV", 0>;
- defm "" : LMULReadAdvance<"ReadVIMovXX", 0>;
- defm "" : LMULReadAdvance<"ReadVFMovVF", 0>;
- defm "" : LMULReadAdvance<"ReadVFMovFV", 0>;
- defm "" : LMULReadAdvance<"ReadVFMovFX", 0>;
- defm "" : LMULReadAdvance<"ReadVISlideV", 0>;
- defm "" : LMULReadAdvance<"ReadVISlideX", 0>;
- defm "" : LMULReadAdvance<"ReadVFSlideV", 0>;
- defm "" : LMULReadAdvance<"ReadVFSlideF", 0>;
- defm "" : LMULReadAdvance<"ReadVGatherV", 0>;
- defm "" : LMULReadAdvance<"ReadVGatherX", 0>;
- defm "" : LMULReadAdvance<"ReadVCompressV", 0>;
- // These are already LMUL aware
- def : ReadAdvance<ReadVMov1V, 0>;
- def : ReadAdvance<ReadVMov2V, 0>;
- def : ReadAdvance<ReadVMov4V, 0>;
- def : ReadAdvance<ReadVMov8V, 0>;
- // Others
- def : ReadAdvance<ReadVMask, 0>;
- } // Unsupported
- } // UnsupportedSchedV
|