//===-- 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 { foreach mx = SchedMxList in { def name # "_" # mx : SchedWrite; } } // Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxListW multiclass LMULSchedWritesW { foreach mx = SchedMxListW in { def name # "_" # mx : SchedWrite; } } // Creates SchedWrite for each (name, LMUL) pair for LMUL in SchedMxListFW multiclass LMULSchedWritesFW { foreach mx = SchedMxListFW in { def name # "_" # mx : SchedWrite; } } // Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxList multiclass LMULSchedReads { foreach mx = SchedMxList in { def name # "_" # mx : SchedRead; } } // Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxListW multiclass LMULSchedReadsW { foreach mx = SchedMxListW in { def name # "_" # mx : SchedRead; } } // Creates SchedRead for each (name, LMUL) pair for LMUL in SchedMxListFW multiclass LMULSchedReadsFW { foreach mx = SchedMxListFW in { def name # "_" # mx : SchedRead; } } // Creates WriteRes for each (name, LMUL, resources) tuple for LMUL // in SchedMxList multiclass LMULWriteRes resources> { foreach mx = SchedMxList in { def : WriteRes(name # "_" # mx), resources>; } } // Creates WriteRes for each (name, LMUL, resources) tuple for LMUL // in SchedMxListW multiclass LMULWriteResW resources> { foreach mx = SchedMxListW in { def : WriteRes(name # "_" # mx), resources>; } } // Creates WriteRes for each (name, LMUL, resources) tuple for LMUL // in SchedMxListFW multiclass LMULWriteResFW resources> { foreach mx = SchedMxListFW in { def : WriteRes(name # "_" # mx), resources>; } } // Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL // in SchedMxList multiclass LMULReadAdvance writes = []> { foreach mx = SchedMxList in { def : ReadAdvance(name # "_" # mx), val, writes>; } } // Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL // in SchedMxListW multiclass LMULReadAdvanceW writes = []> { foreach mx = SchedMxListW in { def : ReadAdvance(name # "_" # mx), val, writes>; } } // Creates ReadAdvance for each (name, LMUL, val) tuple for LMUL // in SchedMxListFW multiclass LMULReadAdvanceFW writes = []> { foreach mx = SchedMxListFW in { def : ReadAdvance(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; // 6. Configuration-Setting Instructions def : WriteRes; def : WriteRes; def : WriteRes; // 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; def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; // 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; def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; // 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; def : WriteRes; def : WriteRes; def : WriteRes; // 6. Configuration-Setting Instructions def : ReadAdvance; def : ReadAdvance; // 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; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; // 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; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; // 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; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; // Others def : ReadAdvance; } // Unsupported } // UnsupportedSchedV