[RISCV] Add scheduling resources for V

Add the scheduling resources for the V extension instructions.

Differential Revision: https://reviews.llvm.org/D98002
This commit is contained in:
Evandro Menezes 2021-07-24 20:46:31 -05:00
parent 219790c1f5
commit 63a5ac4e0d
5 changed files with 1535 additions and 281 deletions

File diff suppressed because it is too large Load Diff

View File

@ -231,6 +231,9 @@ def : ReadAdvance<ReadFMovI64ToF64, 0>;
def : ReadAdvance<ReadFClass32, 0>;
def : ReadAdvance<ReadFClass64, 0>;
//===----------------------------------------------------------------------===//
// Unsupported extensions
defm : UnsupportedSchedV;
defm : UnsupportedSchedZba;
defm : UnsupportedSchedZbb;
defm : UnsupportedSchedZfh;

View File

@ -219,6 +219,9 @@ def : ReadAdvance<ReadFMovI64ToF64, 0>;
def : ReadAdvance<ReadFClass32, 0>;
def : ReadAdvance<ReadFClass64, 0>;
//===----------------------------------------------------------------------===//
// Unsupported extensions
defm : UnsupportedSchedV;
defm : UnsupportedSchedZba;
defm : UnsupportedSchedZbb;
defm : UnsupportedSchedZfh;

View File

@ -230,3 +230,4 @@ def : ReadAdvance<ReadFSqrt16, 0>;
// Include the scheduler resources for other instruction extensions.
include "RISCVScheduleB.td"
include "RISCVScheduleV.td"

View File

@ -0,0 +1,820 @@
//===-- 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.
// 7. Vector Loads and Stores
// 7.4. Vector Unit-Stride Instructions
def WriteVLDE8 : SchedWrite;
def WriteVLDE16 : SchedWrite;
def WriteVLDE32 : SchedWrite;
def WriteVLDE64 : SchedWrite;
def WriteVSTE8 : SchedWrite;
def WriteVSTE16 : SchedWrite;
def WriteVSTE32 : SchedWrite;
def WriteVSTE64 : SchedWrite;
// 7.4.1. Vector Unit-Strided Mask
def WriteVLDM : SchedWrite;
def WriteVSTM : SchedWrite;
// 7.5. Vector Strided Instructions
def WriteVLDS8 : SchedWrite;
def WriteVLDS16 : SchedWrite;
def WriteVLDS32 : SchedWrite;
def WriteVLDS64 : SchedWrite;
def WriteVSTS8 : SchedWrite;
def WriteVSTS16 : SchedWrite;
def WriteVSTS32 : SchedWrite;
def WriteVSTS64 : SchedWrite;
// 7.6. Vector Indexed Instructions
def WriteVLDUX8 : SchedWrite;
def WriteVLDUX16 : SchedWrite;
def WriteVLDUX32 : SchedWrite;
def WriteVLDUX64 : SchedWrite;
def WriteVLDOX8 : SchedWrite;
def WriteVLDOX16 : SchedWrite;
def WriteVLDOX32 : SchedWrite;
def WriteVLDOX64 : SchedWrite;
def WriteVSTUX8 : SchedWrite;
def WriteVSTUX16 : SchedWrite;
def WriteVSTUX32 : SchedWrite;
def WriteVSTUX64 : SchedWrite;
def WriteVSTOX8 : SchedWrite;
def WriteVSTOX16 : SchedWrite;
def WriteVSTOX32 : SchedWrite;
def WriteVSTOX64 : SchedWrite;
// 7.7. Vector Unit-stride Fault-Only-First Loads
def WriteVLDFF8 : SchedWrite;
def WriteVLDFF16 : SchedWrite;
def WriteVLDFF32 : SchedWrite;
def WriteVLDFF64 : SchedWrite;
// 7.9. Vector Whole Register Instructions
def WriteVLD1R8 : SchedWrite;
def WriteVLD1R16 : SchedWrite;
def WriteVLD1R32 : SchedWrite;
def WriteVLD1R64 : SchedWrite;
def WriteVLD2R8 : SchedWrite;
def WriteVLD2R16 : SchedWrite;
def WriteVLD2R32 : SchedWrite;
def WriteVLD2R64 : SchedWrite;
def WriteVLD4R8 : SchedWrite;
def WriteVLD4R16 : SchedWrite;
def WriteVLD4R32 : SchedWrite;
def WriteVLD4R64 : SchedWrite;
def WriteVLD8R8 : SchedWrite;
def WriteVLD8R16 : SchedWrite;
def WriteVLD8R32 : SchedWrite;
def WriteVLD8R64 : 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
def WriteVIALUV : SchedWrite;
def WriteVIALUX : SchedWrite;
def WriteVIALUI : SchedWrite;
// 11.2. Vector Widening Integer Add/Subtract
def WriteVIWALUV : SchedWrite;
def WriteVIWALUX : SchedWrite;
def WriteVIWALUI : SchedWrite;
// 11.3. Vector Integer Extension
def WriteVExtV : SchedWrite;
// 11.4. Vector Integer Arithmetic with Carry or Borrow Instructions
def WriteVICALUV : SchedWrite;
def WriteVICALUX : SchedWrite;
def WriteVICALUI : SchedWrite;
// 11.6. Vector Single-Width Bit Shift Instructions
def WriteVShiftV : SchedWrite;
def WriteVShiftX : SchedWrite;
def WriteVShiftI : SchedWrite;
// 11.7. Vector Narrowing Integer Right Shift Instructions
def WriteVNShiftV : SchedWrite;
def WriteVNShiftX : SchedWrite;
def WriteVNShiftI : SchedWrite;
// 11.8. Vector Integer Comparison Instructions
// 11.9. Vector Integer Min/Max Instructions
def WriteVICmpV : SchedWrite;
def WriteVICmpX : SchedWrite;
def WriteVICmpI : SchedWrite;
// 11.10. Vector Single-Width Integer Multiply Instructions
def WriteVIMulV : SchedWrite;
def WriteVIMulX : SchedWrite;
// 11.11. Vector Integer Divide Instructions
def WriteVIDivV : SchedWrite;
def WriteVIDivX : SchedWrite;
// 11.12. Vector Widening Integer Multiply Instructions
def WriteVIWMulV : SchedWrite;
def WriteVIWMulX : SchedWrite;
// 11.13. Vector Single-Width Integer Multiply-Add Instructions
def WriteVIMulAddV : SchedWrite;
def WriteVIMulAddX : SchedWrite;
// 11.14. Vector Widening Integer Multiply-Add Instructions
def WriteVIWMulAddV : SchedWrite;
def WriteVIWMulAddX : SchedWrite;
// 11.15. Vector Integer Merge Instructions
def WriteVIMergeV : SchedWrite;
def WriteVIMergeX : SchedWrite;
def WriteVIMergeI : SchedWrite;
// 11.16. Vector Integer Move Instructions
def WriteVIMovV : SchedWrite;
def WriteVIMovX : SchedWrite;
def WriteVIMovI : SchedWrite;
// 12. Vector Fixed-Point Arithmetic Instructions
// 12.1. Vector Single-Width Saturating Add and Subtract
def WriteVSALUV : SchedWrite;
def WriteVSALUX : SchedWrite;
def WriteVSALUI : SchedWrite;
// 12.2. Vector Single-Width Averaging Add and Subtract
def WriteVAALUV : SchedWrite;
def WriteVAALUX : SchedWrite;
// 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
def WriteVSMulV : SchedWrite;
def WriteVSMulX : SchedWrite;
// 12.4. Vector Single-Width Scaling Shift Instructions
def WriteVSShiftV : SchedWrite;
def WriteVSShiftX : SchedWrite;
def WriteVSShiftI : SchedWrite;
// 12.5. Vector Narrowing Fixed-Point Clip Instructions
def WriteVNClipV : SchedWrite;
def WriteVNClipX : SchedWrite;
def WriteVNClipI : SchedWrite;
// 13. Vector Floating-Point Instructions
// 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
def WriteVFALUV : SchedWrite;
def WriteVFALUF : SchedWrite;
// 13.3. Vector Widening Floating-Point Add/Subtract Instructions
def WriteVFWALUV : SchedWrite;
def WriteVFWALUF : SchedWrite;
// 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
def WriteVFMulV : SchedWrite;
def WriteVFMulF : SchedWrite;
def WriteVFDivV : SchedWrite;
def WriteVFDivF : SchedWrite;
// 13.5. Vector Widening Floating-Point Multiply
def WriteVFWMulV : SchedWrite;
def WriteVFWMulF : SchedWrite;
// 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
def WriteVFMulAddV : SchedWrite;
def WriteVFMulAddF : SchedWrite;
// 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
def WriteVFWMulAddV : SchedWrite;
def WriteVFWMulAddF : SchedWrite;
// 13.8. Vector Floating-Point Square-Root Instruction
def WriteVFSqrtV : SchedWrite;
// 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
// 13.10. Vector Floating-Point Reciprocal Estimate Instruction
def WriteVFRecpV : SchedWrite;
// 13.11. Vector Floating-Point MIN/MAX Instructions
// 13.13. Vector Floating-Point Compare Instructions
def WriteVFCmpV : SchedWrite;
def WriteVFCmpF : SchedWrite;
// 13.12. Vector Floating-Point Sign-Injection Instructions
def WriteVFSgnjV : SchedWrite;
def WriteVFSgnjF : SchedWrite;
// 13.14. Vector Floating-Point Classify Instruction
def WriteVFClassV : SchedWrite;
// 13.15. Vector Floating-Point Merge Instruction
def WriteVFMergeV : SchedWrite;
// 13.16. Vector Floating-Point Move Instruction
def WriteVFMovV : SchedWrite;
// 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
def WriteVFCvtIToFV : SchedWrite;
def WriteVFCvtFToIV : SchedWrite;
def WriteVFCvtFToFV : SchedWrite;
// 13.18. Widening Floating-Point/Integer Type-Convert Instructions
def WriteVFWCvtIToFV : SchedWrite;
def WriteVFWCvtFToIV : SchedWrite;
def WriteVFWCvtFToFV : SchedWrite;
// 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
def WriteVFNCvtIToFV : SchedWrite;
def WriteVFNCvtFToIV : SchedWrite;
def WriteVFNCvtFToFV : SchedWrite;
// 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
def WriteVMALUV : SchedWrite;
// 15.2. Vector Mask Population Count
def WriteVMPopV : SchedWrite;
// 15.3. Vector Find-First-Set Mask Bit
def WriteVMFFSV : SchedWrite;
// 15.4. Vector Set-Before-First Mask Bit
// 15.5. Vector Set-Including-First Mask Bit
// 15.6. Vector Set-only-First Mask Bit
def WriteVMSFSV : SchedWrite;
// 15.8. Vector Iota Instruction
def WriteVMIotV : SchedWrite;
// 15.9. Vector Element Index Instruction
def WriteVMIdxV : SchedWrite;
// 16. Vector Permutation Instructions
// 16.1. Integer Scalar Move Instructions
def WriteVIMovVX : SchedWrite;
def WriteVIMovXV : SchedWrite;
// 16.2. Floating-Point Scalar Move Instructions
def WriteVFMovVF : SchedWrite;
def WriteVFMovFV : SchedWrite;
// 16.3. Vector Slide Instructions
def WriteVISlideX : SchedWrite;
def WriteVISlideI : SchedWrite;
def WriteVISlide1X : SchedWrite;
def WriteVFSlide1F : SchedWrite;
// 16.4. Vector Register Gather Instructions
def WriteVGatherV : SchedWrite;
def WriteVGatherX : SchedWrite;
def WriteVGatherI : SchedWrite;
// 16.5. Vector Compress Instruction
def WriteVCompressV : SchedWrite;
// 16.6. Whole Vector Register Move
def WriteVMov1V : SchedWrite;
def WriteVMov2V : SchedWrite;
def WriteVMov4V : SchedWrite;
def WriteVMov8V : SchedWrite;
//===----------------------------------------------------------------------===//
/// Define scheduler resources associated with use operands.
// 7. Vector Loads and Stores
def ReadVLDX : SchedRead;
def ReadVSTX : SchedRead;
// 7.4. Vector Unit-Stride Instructions
def ReadVSTE8V : SchedRead;
def ReadVSTE16V : SchedRead;
def ReadVSTE32V : SchedRead;
def ReadVSTE64V : SchedRead;
// 7.4.1. Vector Unit-Strided Mask
def ReadVSTM : SchedRead;
// 7.5. Vector Strided Instructions
def ReadVLDSX : SchedRead;
def ReadVSTSX : SchedRead;
def ReadVSTS8V : SchedRead;
def ReadVSTS16V : SchedRead;
def ReadVSTS32V : SchedRead;
def ReadVSTS64V : SchedRead;
// 7.6. Vector Indexed Instructions
def ReadVLDUXV : SchedRead;
def ReadVLDOXV : SchedRead;
def ReadVSTUX8 : SchedRead;
def ReadVSTUX16 : SchedRead;
def ReadVSTUX32 : SchedRead;
def ReadVSTUX64 : SchedRead;
def ReadVSTUXV : SchedRead;
def ReadVSTUX8V : SchedRead;
def ReadVSTUX16V : SchedRead;
def ReadVSTUX32V : SchedRead;
def ReadVSTUX64V : SchedRead;
def ReadVSTOX8 : SchedRead;
def ReadVSTOX16 : SchedRead;
def ReadVSTOX32 : SchedRead;
def ReadVSTOX64 : SchedRead;
def ReadVSTOXV : SchedRead;
def ReadVSTOX8V : SchedRead;
def ReadVSTOX16V : SchedRead;
def ReadVSTOX32V : SchedRead;
def ReadVSTOX64V : SchedRead;
// 7.9. Vector Whole Register Instructions
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
def ReadVIALUV : SchedRead;
def ReadVIALUX : SchedRead;
// 11.2. Vector Widening Integer Add/Subtract
def ReadVIWALUV : SchedRead;
def ReadVIWALUX : SchedRead;
// 11.3. Vector Integer Extension
def ReadVExtV : SchedRead;
// 11.4. Vector Integer Arithmetic with Carry or Borrow Instructions
def ReadVIALUCV : SchedRead;
def ReadVIALUCX : SchedRead;
// 11.6. Vector Single-Width Bit Shift Instructions
def ReadVShiftV : SchedRead;
def ReadVShiftX : SchedRead;
// 11.7. Vector Narrowing Integer Right Shift Instructions
def ReadVNShiftV : SchedRead;
def ReadVNShiftX : SchedRead;
// 11.8. Vector Integer Comparison Instructions
// 11.9. Vector Integer Min/Max Instructions
def ReadVICmpV : SchedRead;
def ReadVICmpX : SchedRead;
// 11.10. Vector Single-Width Integer Multiply Instructions
def ReadVIMulV : SchedRead;
def ReadVIMulX : SchedRead;
// 11.11. Vector Integer Divide Instructions
def ReadVIDivV : SchedRead;
def ReadVIDivX : SchedRead;
// 11.12. Vector Widening Integer Multiply Instructions
def ReadVIWMulV : SchedRead;
def ReadVIWMulX : SchedRead;
// 11.13. Vector Single-Width Integer Multiply-Add Instructions
def ReadVIMulAddV : SchedRead;
def ReadVIMulAddX : SchedRead;
// 11.14. Vector Widening Integer Multiply-Add Instructions
def ReadVIWMulAddV : SchedRead;
def ReadVIWMulAddX : SchedRead;
// 11.15. Vector Integer Merge Instructions
def ReadVIMergeV : SchedRead;
def ReadVIMergeX : SchedRead;
// 11.16. Vector Integer Move Instructions
def ReadVIMovV : SchedRead;
def ReadVIMovX : SchedRead;
// 12. Vector Fixed-Point Arithmetic Instructions
// 12.1. Vector Single-Width Saturating Add and Subtract
def ReadVSALUV : SchedRead;
def ReadVSALUX : SchedRead;
// 12.2. Vector Single-Width Averaging Add and Subtract
def ReadVAALUV : SchedRead;
def ReadVAALUX : SchedRead;
// 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
def ReadVSMulV : SchedRead;
def ReadVSMulX : SchedRead;
// 12.4. Vector Single-Width Scaling Shift Instructions
def ReadVSShiftV : SchedRead;
def ReadVSShiftX : SchedRead;
// 12.5. Vector Narrowing Fixed-Point Clip Instructions
def ReadVNClipV : SchedRead;
def ReadVNClipX : SchedRead;
// 13. Vector Floating-Point Instructions
// 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
def ReadVFALUV : SchedRead;
def ReadVFALUF : SchedRead;
// 13.3. Vector Widening Floating-Point Add/Subtract Instructions
def ReadVFWALUV : SchedRead;
def ReadVFWALUF : SchedRead;
// 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
def ReadVFMulV : SchedRead;
def ReadVFMulF : SchedRead;
def ReadVFDivV : SchedRead;
def ReadVFDivF : SchedRead;
// 13.5. Vector Widening Floating-Point Multiply
def ReadVFWMulV : SchedRead;
def ReadVFWMulF : SchedRead;
// 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
def ReadVFMulAddV : SchedRead;
def ReadVFMulAddF : SchedRead;
// 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
def ReadVFWMulAddV : SchedRead;
def ReadVFWMulAddF : SchedRead;
// 13.8. Vector Floating-Point Square-Root Instruction
def ReadVFSqrtV : SchedRead;
// 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
// 13.10. Vector Floating-Point Reciprocal Estimate Instruction
def ReadVFRecpV : SchedRead;
// 13.11. Vector Floating-Point MIN/MAX Instructions
// 13.13. Vector Floating-Point Compare Instructions
def ReadVFCmpV : SchedRead;
def ReadVFCmpF : SchedRead;
// 13.12. Vector Floating-Point Sign-Injection Instructions
def ReadVFSgnjV : SchedRead;
def ReadVFSgnjF : SchedRead;
// 13.14. Vector Floating-Point Classify Instruction
def ReadVFClassV : SchedRead;
// 13.15. Vector Floating-Point Merge Instruction
def ReadVFMergeV : SchedRead;
def ReadVFMergeF : SchedRead;
// 13.16. Vector Floating-Point Move Instruction
def ReadVFMovF : SchedRead;
// 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
def ReadVFCvtIToFV : SchedRead;
def ReadVFCvtFToIV : SchedRead;
// 13.18. Widening Floating-Point/Integer Type-Convert Instructions
def ReadVFWCvtIToFV : SchedRead;
def ReadVFWCvtFToIV : SchedRead;
def ReadVFWCvtFToFV : SchedRead;
// 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
def ReadVFNCvtIToFV : SchedRead;
def ReadVFNCvtFToIV : SchedRead;
def ReadVFNCvtFToFV : SchedRead;
// 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
def ReadVMALUV : SchedRead;
// 15.2. Vector Mask Population Count
def ReadVMPopV : SchedRead;
// 15.3. Vector Find-First-Set Mask Bit
def ReadVMFFSV : SchedRead;
// 15.4. Vector Set-Before-First Mask Bit
// 15.5. Vector Set-Including-First Mask Bit
// 15.6. Vector Set-only-First Mask Bit
def ReadVMSFSV : SchedRead;
// 15.8. Vector Iota Instruction
def ReadVMIotV : SchedRead;
// 16. Vector Permutation Instructions
// 16.1. Integer Scalar Move Instructions
def ReadVIMovVX : SchedRead;
def ReadVIMovXV : SchedRead;
def ReadVIMovXX : SchedRead;
// 16.2. Floating-Point Scalar Move Instructions
def ReadVFMovVF : SchedRead;
def ReadVFMovFV : SchedRead;
def ReadVFMovFX : SchedRead;
// 16.3. Vector Slide Instructions
def ReadVISlideV : SchedRead;
def ReadVISlideX : SchedRead;
def ReadVFSlideV : SchedRead;
def ReadVFSlideF : SchedRead;
// 16.4. Vector Register Gather Instructions
def ReadVGatherV : SchedRead;
def ReadVGatherX : SchedRead;
// 16.5. Vector Compress Instruction
def ReadVCompressV : SchedRead;
// 16.6. Whole Vector Register Move
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 {
// 7. Vector Loads and Stores
def : WriteRes<WriteVLDE8, []>;
def : WriteRes<WriteVLDE16, []>;
def : WriteRes<WriteVLDE32, []>;
def : WriteRes<WriteVLDE64, []>;
def : WriteRes<WriteVSTE8, []>;
def : WriteRes<WriteVSTE16, []>;
def : WriteRes<WriteVSTE32, []>;
def : WriteRes<WriteVSTE64, []>;
def : WriteRes<WriteVLDM, []>;
def : WriteRes<WriteVSTM, []>;
def : WriteRes<WriteVLDS8, []>;
def : WriteRes<WriteVLDS16, []>;
def : WriteRes<WriteVLDS32, []>;
def : WriteRes<WriteVLDS64, []>;
def : WriteRes<WriteVSTS8, []>;
def : WriteRes<WriteVSTS16, []>;
def : WriteRes<WriteVSTS32, []>;
def : WriteRes<WriteVSTS64, []>;
def : WriteRes<WriteVLDUX8, []>;
def : WriteRes<WriteVLDUX16, []>;
def : WriteRes<WriteVLDUX32, []>;
def : WriteRes<WriteVLDUX64, []>;
def : WriteRes<WriteVLDOX8, []>;
def : WriteRes<WriteVLDOX16, []>;
def : WriteRes<WriteVLDOX32, []>;
def : WriteRes<WriteVLDOX64, []>;
def : WriteRes<WriteVSTUX8, []>;
def : WriteRes<WriteVSTUX16, []>;
def : WriteRes<WriteVSTUX32, []>;
def : WriteRes<WriteVSTUX64, []>;
def : WriteRes<WriteVSTOX8, []>;
def : WriteRes<WriteVSTOX16, []>;
def : WriteRes<WriteVSTOX32, []>;
def : WriteRes<WriteVSTOX64, []>;
def : WriteRes<WriteVLDFF8, []>;
def : WriteRes<WriteVLDFF16, []>;
def : WriteRes<WriteVLDFF32, []>;
def : WriteRes<WriteVLDFF64, []>;
def : WriteRes<WriteVLD1R8, []>;
def : WriteRes<WriteVLD1R16, []>;
def : WriteRes<WriteVLD1R32, []>;
def : WriteRes<WriteVLD1R64, []>;
def : WriteRes<WriteVLD2R8, []>;
def : WriteRes<WriteVLD2R16, []>;
def : WriteRes<WriteVLD2R32, []>;
def : WriteRes<WriteVLD2R64, []>;
def : WriteRes<WriteVLD4R8, []>;
def : WriteRes<WriteVLD4R16, []>;
def : WriteRes<WriteVLD4R32, []>;
def : WriteRes<WriteVLD4R64, []>;
def : WriteRes<WriteVLD8R8, []>;
def : WriteRes<WriteVLD8R16, []>;
def : WriteRes<WriteVLD8R32, []>;
def : WriteRes<WriteVLD8R64, []>;
def : WriteRes<WriteVST1R, []>;
def : WriteRes<WriteVST2R, []>;
def : WriteRes<WriteVST4R, []>;
def : WriteRes<WriteVST8R, []>;
// 12. Vector Integer Arithmetic Instructions
def : WriteRes<WriteVIALUV, []>;
def : WriteRes<WriteVIALUX, []>;
def : WriteRes<WriteVIALUI, []>;
def : WriteRes<WriteVIWALUV, []>;
def : WriteRes<WriteVIWALUX, []>;
def : WriteRes<WriteVIWALUI, []>;
def : WriteRes<WriteVExtV, []>;
def : WriteRes<WriteVICALUV, []>;
def : WriteRes<WriteVICALUX, []>;
def : WriteRes<WriteVICALUI, []>;
def : WriteRes<WriteVShiftV, []>;
def : WriteRes<WriteVShiftX, []>;
def : WriteRes<WriteVShiftI, []>;
def : WriteRes<WriteVNShiftV, []>;
def : WriteRes<WriteVNShiftX, []>;
def : WriteRes<WriteVNShiftI, []>;
def : WriteRes<WriteVICmpV, []>;
def : WriteRes<WriteVICmpX, []>;
def : WriteRes<WriteVICmpI, []>;
def : WriteRes<WriteVIMulV, []>;
def : WriteRes<WriteVIMulX, []>;
def : WriteRes<WriteVIDivV, []>;
def : WriteRes<WriteVIDivX, []>;
def : WriteRes<WriteVIWMulV, []>;
def : WriteRes<WriteVIWMulX, []>;
def : WriteRes<WriteVIMulAddV, []>;
def : WriteRes<WriteVIMulAddX, []>;
def : WriteRes<WriteVIWMulAddV, []>;
def : WriteRes<WriteVIWMulAddX, []>;
def : WriteRes<WriteVIMergeV, []>;
def : WriteRes<WriteVIMergeX, []>;
def : WriteRes<WriteVIMergeI, []>;
def : WriteRes<WriteVIMovV, []>;
def : WriteRes<WriteVIMovX, []>;
def : WriteRes<WriteVIMovI, []>;
// 13. Vector Fixed-Point Arithmetic Instructions
def : WriteRes<WriteVSALUV, []>;
def : WriteRes<WriteVSALUX, []>;
def : WriteRes<WriteVSALUI, []>;
def : WriteRes<WriteVAALUV, []>;
def : WriteRes<WriteVAALUX, []>;
def : WriteRes<WriteVSMulV, []>;
def : WriteRes<WriteVSMulX, []>;
def : WriteRes<WriteVSShiftV, []>;
def : WriteRes<WriteVSShiftX, []>;
def : WriteRes<WriteVSShiftI, []>;
def : WriteRes<WriteVNClipV, []>;
def : WriteRes<WriteVNClipX, []>;
def : WriteRes<WriteVNClipI, []>;
// 14. Vector Floating-Point Instructions
def : WriteRes<WriteVFALUV, []>;
def : WriteRes<WriteVFALUF, []>;
def : WriteRes<WriteVFWALUV, []>;
def : WriteRes<WriteVFWALUF, []>;
def : WriteRes<WriteVFMulV, []>;
def : WriteRes<WriteVFMulF, []>;
def : WriteRes<WriteVFDivV, []>;
def : WriteRes<WriteVFDivF, []>;
def : WriteRes<WriteVFWMulV, []>;
def : WriteRes<WriteVFWMulF, []>;
def : WriteRes<WriteVFMulAddV, []>;
def : WriteRes<WriteVFMulAddF, []>;
def : WriteRes<WriteVFWMulAddV, []>;
def : WriteRes<WriteVFWMulAddF, []>;
def : WriteRes<WriteVFSqrtV, []>;
def : WriteRes<WriteVFRecpV, []>;
def : WriteRes<WriteVFCmpV, []>;
def : WriteRes<WriteVFCmpF, []>;
def : WriteRes<WriteVFSgnjV, []>;
def : WriteRes<WriteVFSgnjF, []>;
def : WriteRes<WriteVFClassV, []>;
def : WriteRes<WriteVFMergeV, []>;
def : WriteRes<WriteVFMovV, []>;
def : WriteRes<WriteVFCvtIToFV, []>;
def : WriteRes<WriteVFCvtFToIV, []>;
def : WriteRes<WriteVFCvtFToFV, []>;
def : WriteRes<WriteVFWCvtIToFV, []>;
def : WriteRes<WriteVFWCvtFToIV, []>;
def : WriteRes<WriteVFWCvtFToFV, []>;
def : WriteRes<WriteVFNCvtIToFV, []>;
def : WriteRes<WriteVFNCvtFToIV, []>;
def : WriteRes<WriteVFNCvtFToFV, []>;
// 15. Vector Reduction Operations
def : WriteRes<WriteVIRedV, []>;
def : WriteRes<WriteVIWRedV, []>;
def : WriteRes<WriteVFRedV, []>;
def : WriteRes<WriteVFRedOV, []>;
def : WriteRes<WriteVFWRedV, []>;
def : WriteRes<WriteVFWRedOV, []>;
// 16. Vector Mask Instructions
def : WriteRes<WriteVMALUV, []>;
def : WriteRes<WriteVMPopV, []>;
def : WriteRes<WriteVMFFSV, []>;
def : WriteRes<WriteVMSFSV, []>;
def : WriteRes<WriteVMIotV, []>;
def : WriteRes<WriteVMIdxV, []>;
// 17. Vector Permutation Instructions
def : WriteRes<WriteVIMovVX, []>;
def : WriteRes<WriteVIMovXV, []>;
def : WriteRes<WriteVFMovVF, []>;
def : WriteRes<WriteVFMovFV, []>;
def : WriteRes<WriteVISlideX, []>;
def : WriteRes<WriteVISlideI, []>;
def : WriteRes<WriteVISlide1X, []>;
def : WriteRes<WriteVFSlide1F, []>;
def : WriteRes<WriteVGatherV, []>;
def : WriteRes<WriteVGatherX, []>;
def : WriteRes<WriteVGatherI, []>;
def : WriteRes<WriteVCompressV, []>;
def : WriteRes<WriteVMov1V, []>;
def : WriteRes<WriteVMov2V, []>;
def : WriteRes<WriteVMov4V, []>;
def : WriteRes<WriteVMov8V, []>;
// 7. Vector Loads and Stores
def : ReadAdvance<ReadVLDX, 0>;
def : ReadAdvance<ReadVSTX, 0>;
def : ReadAdvance<ReadVSTE8V, 0>;
def : ReadAdvance<ReadVSTE16V, 0>;
def : ReadAdvance<ReadVSTE32V, 0>;
def : ReadAdvance<ReadVSTE64V, 0>;
def : ReadAdvance<ReadVSTM, 0>;
def : ReadAdvance<ReadVLDSX, 0>;
def : ReadAdvance<ReadVSTSX, 0>;
def : ReadAdvance<ReadVSTS8V, 0>;
def : ReadAdvance<ReadVSTS16V, 0>;
def : ReadAdvance<ReadVSTS32V, 0>;
def : ReadAdvance<ReadVSTS64V, 0>;
def : ReadAdvance<ReadVLDUXV, 0>;
def : ReadAdvance<ReadVLDOXV, 0>;
def : ReadAdvance<ReadVSTUXV, 0>;
def : ReadAdvance<ReadVSTUX8, 0>;
def : ReadAdvance<ReadVSTUX16, 0>;
def : ReadAdvance<ReadVSTUX32, 0>;
def : ReadAdvance<ReadVSTUX64, 0>;
def : ReadAdvance<ReadVSTUX8V, 0>;
def : ReadAdvance<ReadVSTUX16V, 0>;
def : ReadAdvance<ReadVSTUX32V, 0>;
def : ReadAdvance<ReadVSTUX64V, 0>;
def : ReadAdvance<ReadVSTOX8, 0>;
def : ReadAdvance<ReadVSTOX16, 0>;
def : ReadAdvance<ReadVSTOX32, 0>;
def : ReadAdvance<ReadVSTOX64, 0>;
def : ReadAdvance<ReadVSTOXV, 0>;
def : ReadAdvance<ReadVSTOX8V, 0>;
def : ReadAdvance<ReadVSTOX16V, 0>;
def : ReadAdvance<ReadVSTOX32V, 0>;
def : ReadAdvance<ReadVSTOX64V, 0>;
def : ReadAdvance<ReadVST1R, 0>;
def : ReadAdvance<ReadVST2R, 0>;
def : ReadAdvance<ReadVST4R, 0>;
def : ReadAdvance<ReadVST8R, 0>;
// 12. Vector Integer Arithmetic Instructions
def : ReadAdvance<ReadVIALUV, 0>;
def : ReadAdvance<ReadVIALUX, 0>;
def : ReadAdvance<ReadVIWALUV, 0>;
def : ReadAdvance<ReadVIWALUX, 0>;
def : ReadAdvance<ReadVExtV, 0>;
def : ReadAdvance<ReadVIALUCV, 0>;
def : ReadAdvance<ReadVIALUCX, 0>;
def : ReadAdvance<ReadVShiftV, 0>;
def : ReadAdvance<ReadVShiftX, 0>;
def : ReadAdvance<ReadVNShiftV, 0>;
def : ReadAdvance<ReadVNShiftX, 0>;
def : ReadAdvance<ReadVICmpV, 0>;
def : ReadAdvance<ReadVICmpX, 0>;
def : ReadAdvance<ReadVIMulV, 0>;
def : ReadAdvance<ReadVIMulX, 0>;
def : ReadAdvance<ReadVIDivV, 0>;
def : ReadAdvance<ReadVIDivX, 0>;
def : ReadAdvance<ReadVIWMulV, 0>;
def : ReadAdvance<ReadVIWMulX, 0>;
def : ReadAdvance<ReadVIMulAddV, 0>;
def : ReadAdvance<ReadVIMulAddX, 0>;
def : ReadAdvance<ReadVIWMulAddV, 0>;
def : ReadAdvance<ReadVIWMulAddX, 0>;
def : ReadAdvance<ReadVIMergeV, 0>;
def : ReadAdvance<ReadVIMergeX, 0>;
def : ReadAdvance<ReadVIMovV, 0>;
def : ReadAdvance<ReadVIMovX, 0>;
// 13. Vector Fixed-Point Arithmetic Instructions
def : ReadAdvance<ReadVSALUV, 0>;
def : ReadAdvance<ReadVSALUX, 0>;
def : ReadAdvance<ReadVAALUV, 0>;
def : ReadAdvance<ReadVAALUX, 0>;
def : ReadAdvance<ReadVSMulV, 0>;
def : ReadAdvance<ReadVSMulX, 0>;
def : ReadAdvance<ReadVSShiftV, 0>;
def : ReadAdvance<ReadVSShiftX, 0>;
def : ReadAdvance<ReadVNClipV, 0>;
def : ReadAdvance<ReadVNClipX, 0>;
// 14. Vector Floating-Point Instructions
def : ReadAdvance<ReadVFALUV, 0>;
def : ReadAdvance<ReadVFALUF, 0>;
def : ReadAdvance<ReadVFWALUV, 0>;
def : ReadAdvance<ReadVFWALUF, 0>;
def : ReadAdvance<ReadVFMulV, 0>;
def : ReadAdvance<ReadVFMulF, 0>;
def : ReadAdvance<ReadVFDivV, 0>;
def : ReadAdvance<ReadVFDivF, 0>;
def : ReadAdvance<ReadVFWMulV, 0>;
def : ReadAdvance<ReadVFWMulF, 0>;
def : ReadAdvance<ReadVFMulAddV, 0>;
def : ReadAdvance<ReadVFMulAddF, 0>;
def : ReadAdvance<ReadVFWMulAddV, 0>;
def : ReadAdvance<ReadVFWMulAddF, 0>;
def : ReadAdvance<ReadVFSqrtV, 0>;
def : ReadAdvance<ReadVFRecpV, 0>;
def : ReadAdvance<ReadVFCmpV, 0>;
def : ReadAdvance<ReadVFCmpF, 0>;
def : ReadAdvance<ReadVFSgnjV, 0>;
def : ReadAdvance<ReadVFSgnjF, 0>;
def : ReadAdvance<ReadVFClassV, 0>;
def : ReadAdvance<ReadVFMergeV, 0>;
def : ReadAdvance<ReadVFMergeF, 0>;
def : ReadAdvance<ReadVFMovF, 0>;
def : ReadAdvance<ReadVFCvtIToFV, 0>;
def : ReadAdvance<ReadVFCvtFToIV, 0>;
def : ReadAdvance<ReadVFWCvtIToFV, 0>;
def : ReadAdvance<ReadVFWCvtFToIV, 0>;
def : ReadAdvance<ReadVFWCvtFToFV, 0>;
def : ReadAdvance<ReadVFNCvtIToFV, 0>;
def : ReadAdvance<ReadVFNCvtFToIV, 0>;
def : ReadAdvance<ReadVFNCvtFToFV, 0>;
// 15. 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>;
// 16. Vector Mask Instructions
def : ReadAdvance<ReadVMALUV, 0>;
def : ReadAdvance<ReadVMPopV, 0>;
def : ReadAdvance<ReadVMFFSV, 0>;
def : ReadAdvance<ReadVMSFSV, 0>;
def : ReadAdvance<ReadVMIotV, 0>;
// 17. Vector Permutation Instructions
def : ReadAdvance<ReadVIMovVX, 0>;
def : ReadAdvance<ReadVIMovXV, 0>;
def : ReadAdvance<ReadVIMovXX, 0>;
def : ReadAdvance<ReadVFMovVF, 0>;
def : ReadAdvance<ReadVFMovFV, 0>;
def : ReadAdvance<ReadVFMovFX, 0>;
def : ReadAdvance<ReadVISlideV, 0>;
def : ReadAdvance<ReadVISlideX, 0>;
def : ReadAdvance<ReadVFSlideV, 0>;
def : ReadAdvance<ReadVFSlideF, 0>;
def : ReadAdvance<ReadVGatherV, 0>;
def : ReadAdvance<ReadVGatherX, 0>;
def : ReadAdvance<ReadVCompressV, 0>;
def : ReadAdvance<ReadVMov1V, 0>;
def : ReadAdvance<ReadVMov2V, 0>;
def : ReadAdvance<ReadVMov4V, 0>;
def : ReadAdvance<ReadVMov8V, 0>;
// Others
def : ReadAdvance<ReadVMask, 0>;
} // Unsupported
} // UnsupportedSchedV