| //===-- 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 |