[llvm] c2a818f - [RISCV] Add scheduling info for XSfvqmaccdod/qoq and XSfvfwmaccqqq instructions (#147626)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 9 09:38:48 PDT 2025


Author: Min-Yih Hsu
Date: 2025-07-09T09:38:44-07:00
New Revision: c2a818f48bb5a1cda6d94f5e1956019678c67d89

URL: https://github.com/llvm/llvm-project/commit/c2a818f48bb5a1cda6d94f5e1956019678c67d89
DIFF: https://github.com/llvm/llvm-project/commit/c2a818f48bb5a1cda6d94f5e1956019678c67d89.diff

LOG: [RISCV] Add scheduling info for XSfvqmaccdod/qoq and XSfvfwmaccqqq instructions (#147626)

XSfvqmaccdod/qoq and XSfvfwmaccqqq are SiFive's small-size matrix
multiplication extensions. This patches add scheduling info for their
instructions along with six new SchedReadWrite.

Added: 
    llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvfwmacc.s
    llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvqmacc.s
    llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvfwmacc.s
    llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvqmacc.s

Modified: 
    llvm/lib/Target/RISCV/RISCVInstrInfoXSf.td
    llvm/lib/Target/RISCV/RISCVSchedAndes45.td
    llvm/lib/Target/RISCV/RISCVSchedGenericOOO.td
    llvm/lib/Target/RISCV/RISCVSchedMIPSP8700.td
    llvm/lib/Target/RISCV/RISCVSchedRocket.td
    llvm/lib/Target/RISCV/RISCVSchedSiFive7.td
    llvm/lib/Target/RISCV/RISCVSchedSiFiveP400.td
    llvm/lib/Target/RISCV/RISCVSchedSiFiveP500.td
    llvm/lib/Target/RISCV/RISCVSchedSiFiveP600.td
    llvm/lib/Target/RISCV/RISCVSchedSiFiveP800.td
    llvm/lib/Target/RISCV/RISCVSchedSpacemitX60.td
    llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR1.td
    llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td
    llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td
    llvm/lib/Target/RISCV/RISCVSchedTTAscalonD8.td
    llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td
    llvm/lib/Target/RISCV/RISCVScheduleXSf.td

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/RISCVInstrInfoXSf.td b/llvm/lib/Target/RISCV/RISCVInstrInfoXSf.td
index 2d8a47c08a5d2..17fb75eb851c4 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoXSf.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoXSf.td
@@ -167,10 +167,25 @@ multiclass CustomSiFiveVCIX<string suffix, VCIXType type,
                                              InTyRs1, 1>;
 }
 
+// For XSfvqmaccdod/qoq and XSfvfwmaccqqq
+class SiFiveVMACCScheds<string name> {
+  defvar n = !tolower(name);
+  defvar prefix = !if(!ne(!find(n, "fw"), -1), "FW", "Q");
+  defvar suffix = !if(!ne(!find(n, "2x8x2"), -1), "DOD",
+                      !if(!eq(prefix, "Q"), "QOQ", "QQQ"));
+
+  string read = "ReadSF_V" # prefix # "MACC_" # suffix;
+  string write = "WriteSF_V" # prefix # "MACC_" # suffix;
+}
+
 let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
 class CustomSiFiveVMACC<bits<6> funct6, RISCVVFormat opv, string opcodestr>
     : RVInstVCCustom2<funct6{5-2}, opv.Value, (outs VR:$rd), (ins VR:$rs1, VR:$rs2),
-                      opcodestr, "$rd, $rs1, $rs2"> {
+                      opcodestr, "$rd, $rs1, $rs2">,
+      SchedTernaryMC<SiFiveVMACCScheds<NAME>.write,
+                     SiFiveVMACCScheds<NAME>.read,
+                     SiFiveVMACCScheds<NAME>.read,
+                     SiFiveVMACCScheds<NAME>.read> {
   let vm = 1;
   let funct6_lo2 = funct6{1-0};
 }
@@ -374,9 +389,13 @@ multiclass VPseudoVC_XVW<LMULInfo m, DAGOperand RS1Class,
 }
 
 multiclass VPseudoSiFiveVMACC<string mx, VReg vd_type, VReg vs2_type> {
+  defvar SchedWriteName = SiFiveVMACCScheds<NAME>.write;
+  defvar SchedReadName = SiFiveVMACCScheds<NAME>.read;
   def "Pseudo" # NAME # "_" # mx
       : VPseudoTernaryNoMaskWithPolicy<vd_type, V_M1.vrclass, vs2_type,
-                                       "@earlyclobber $rd">;
+                                       "@earlyclobber $rd">,
+        SchedTernary<SchedWriteName, SchedReadName, SchedReadName,
+                     SchedReadName, mx>;
 }
 
 multiclass VPseudoSiFiveVQMACCDOD {

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedAndes45.td b/llvm/lib/Target/RISCV/RISCVSchedAndes45.td
index 58e9dc9c8535d..bd480aacc539e 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedAndes45.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedAndes45.td
@@ -332,6 +332,9 @@ defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedV;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 defm : UnsupportedSchedZabha;
 defm : UnsupportedSchedZbkb;
 defm : UnsupportedSchedZbkx;

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedGenericOOO.td b/llvm/lib/Target/RISCV/RISCVSchedGenericOOO.td
index 27871cb9d9f51..6ad5a008f11ab 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedGenericOOO.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedGenericOOO.td
@@ -499,4 +499,7 @@ defm : UnsupportedSchedZvk;
 defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedMIPSP8700.td b/llvm/lib/Target/RISCV/RISCVSchedMIPSP8700.td
index 85b5886587de7..4117d7a9f1d58 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedMIPSP8700.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedMIPSP8700.td
@@ -275,5 +275,8 @@ defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedZabha;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 defm : UnsupportedSchedZvk;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedRocket.td b/llvm/lib/Target/RISCV/RISCVSchedRocket.td
index 1db0922bf2c5d..b24801f6ecefe 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedRocket.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedRocket.td
@@ -264,5 +264,8 @@ defm : UnsupportedSchedZfhmin;
 defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 defm : UnsupportedSchedZvk;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td b/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td
index 26964d070e67c..9dbab43b6a4e3 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td
@@ -1072,6 +1072,36 @@ multiclass SiFive7WriteResBase<int VLEN,
     defm : LMULWriteResMX<"WriteSF_VFNRClipV", [VCQ, VA1], mx,
                           IsWorstCase=!eq(mx, "M2")>;
   }
+
+  // XSfvqmaccdod
+  foreach mx = ["M1", "M2", "M4", "M8"] in {
+    defvar Cycles = SiFive7GetCyclesDefault<mx>.c;
+    let Latency = 8,
+        AcquireAtCycles = [0, 1],
+        ReleaseAtCycles = [1, !add(1, Cycles)] in
+    defm : LMULWriteResMX<"WriteSF_VQMACC_DOD", [VCQ, VA1], mx,
+                          IsWorstCase=!eq(mx, "M8")>;
+  }
+
+  // XSfvqmaccqoq
+  foreach mx = ["MF2", "M1", "M2", "M4"] in {
+    defvar Cycles = SiFive7GetCyclesDefault<mx>.c;
+    let Latency = 8,
+        AcquireAtCycles = [0, 1],
+        ReleaseAtCycles = [1, !add(1, Cycles)] in
+    defm : LMULWriteResMX<"WriteSF_VQMACC_QOQ", [VCQ, VA1], mx,
+                          IsWorstCase=!eq(mx, "M4")>;
+  }
+
+  // XSfvfwmaccqqq
+  foreach mx = SchedMxListFW in {
+    defvar Cycles = SiFive7GetCyclesDefault<mx>.c;
+    defvar IsWorstCase = SiFive7IsWorstCaseMX<mx, SchedMxListFW>.c;
+    let Latency = 8,
+        AcquireAtCycles = [0, 1],
+        ReleaseAtCycles = [1, !add(1, Cycles)] in
+    defm : LMULWriteResMX<"WriteSF_VFWMACC_QQQ", [VCQ, VA1], mx, IsWorstCase>;
+  }
 }
 
 //===----------------------------------------------------------------------===//
@@ -1353,6 +1383,11 @@ multiclass SiFive7ReadAdvance {
   defm : LMULReadAdvance<"ReadSF_VFNRClipV", 0>;
   defm : LMULReadAdvance<"ReadSF_VFNRClipF", 0>;
 
+  // SiFive VMACC
+  defm : LMULReadAdvance<"ReadSF_VQMACC_DOD",  0>;
+  defm : LMULReadAdvance<"ReadSF_VQMACC_QOQ",  0>;
+  defm : LMULReadAdvance<"ReadSF_VFWMACC_QQQ", 0>;
+
   // Others
   def : ReadAdvance<ReadVMask, 0>;
   def : ReadAdvance<ReadVPassthru_WorstCase, 0>;

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP400.td b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP400.td
index e542d0e2301d0..cb6619b198374 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP400.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP400.td
@@ -1240,4 +1240,7 @@ defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedZfa;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP500.td b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP500.td
index 184773f943bb1..7dc007f986398 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP500.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP500.td
@@ -360,4 +360,7 @@ defm : UnsupportedSchedZfa;
 defm : UnsupportedSchedZvk;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP600.td b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP600.td
index 535c639c3150f..a608c23c11a02 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP600.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP600.td
@@ -1496,4 +1496,7 @@ defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedZfa;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP800.td b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP800.td
index 0bd73a0b80163..26439df3199ce 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSiFiveP800.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSiFiveP800.td
@@ -1185,4 +1185,7 @@ defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedZfaWithQ;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSpacemitX60.td b/llvm/lib/Target/RISCV/RISCVSchedSpacemitX60.td
index ea6e47260166c..85429ad1806c9 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSpacemitX60.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSpacemitX60.td
@@ -347,6 +347,9 @@ defm : UnsupportedSchedQ;
 defm : UnsupportedSchedV;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 defm : UnsupportedSchedZabha;
 defm : UnsupportedSchedZbkb;
 defm : UnsupportedSchedZbkx;

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR1.td b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR1.td
index 18c463500b961..727b8d2152c22 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR1.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR1.td
@@ -118,5 +118,8 @@ defm : UnsupportedSchedZbkx;
 defm : UnsupportedSchedZfa;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 defm : UnsupportedSchedZvk;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td
index 6b3d6b24b8017..3949eee4a96e8 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td
@@ -184,6 +184,9 @@ multiclass SCR_Unsupported :
   UnsupportedSchedV,
   UnsupportedSchedXsfvcp,
   UnsupportedSchedXSfvfnrclipxfqf,
+  UnsupportedSchedXSfvfwmaccqqq,
+  UnsupportedSchedXSfvqmaccdod,
+  UnsupportedSchedXSfvqmaccqoq,
   UnsupportedSchedZabha,
   UnsupportedSchedZba,
   UnsupportedSchedZbb,

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td
index ee25c961515c0..f3aae307eb717 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td
@@ -246,6 +246,9 @@ multiclass SCR7_Unsupported {
   defm : UnsupportedSchedV;
   defm : UnsupportedSchedXsfvcp;
   defm : UnsupportedSchedXSfvfnrclipxfqf;
+  defm : UnsupportedSchedXSfvfwmaccqqq;
+  defm : UnsupportedSchedXSfvqmaccdod;
+  defm : UnsupportedSchedXSfvqmaccqoq;
   defm : UnsupportedSchedZabha;
   defm : UnsupportedSchedZfa;
   defm : UnsupportedSchedZfhmin;

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedTTAscalonD8.td b/llvm/lib/Target/RISCV/RISCVSchedTTAscalonD8.td
index d4f0d904b8e89..2a2fc854ea296 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedTTAscalonD8.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedTTAscalonD8.td
@@ -322,6 +322,9 @@ defm : UnsupportedSchedQ;
 defm : UnsupportedSchedV;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 defm : UnsupportedSchedZabha;
 defm : UnsupportedSchedZbc;
 defm : UnsupportedSchedZbkb;

diff  --git a/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td b/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td
index 735316e48745d..5aad7f5b9e65d 100644
--- a/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td
+++ b/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td
@@ -314,5 +314,8 @@ defm : UnsupportedSchedSFB;
 defm : UnsupportedSchedZabha;
 defm : UnsupportedSchedXsfvcp;
 defm : UnsupportedSchedXSfvfnrclipxfqf;
+defm : UnsupportedSchedXSfvfwmaccqqq;
+defm : UnsupportedSchedXSfvqmaccdod;
+defm : UnsupportedSchedXSfvqmaccqoq;
 defm : UnsupportedSchedZvk;
 }

diff  --git a/llvm/lib/Target/RISCV/RISCVScheduleXSf.td b/llvm/lib/Target/RISCV/RISCVScheduleXSf.td
index 56be7a1308a1c..99632e410b4c7 100644
--- a/llvm/lib/Target/RISCV/RISCVScheduleXSf.td
+++ b/llvm/lib/Target/RISCV/RISCVScheduleXSf.td
@@ -69,3 +69,33 @@ defm : LMULReadAdvance<"ReadSF_VFNRClipV", 0>;
 defm : LMULReadAdvance<"ReadSF_VFNRClipF", 0>;
 } // Unsupported = true
 }
+
+defm "" : LMULSchedWritesImpl<"WriteSF_VQMACC_DOD", ["M1", "M2", "M4", "M8"]>;
+defm "" : LMULSchedReadsImpl<"ReadSF_VQMACC_DOD",   ["M1", "M2", "M4", "M8"]>;
+
+multiclass UnsupportedSchedXSfvqmaccdod {
+let Unsupported = true in {
+defm : LMULWriteRes<"WriteSF_VQMACC_DOD", []>;
+defm : LMULReadAdvance<"ReadSF_VQMACC_DOD", 0>;
+} // Unsupported = true
+}
+
+defm "" : LMULSchedWritesImpl<"WriteSF_VQMACC_QOQ", ["MF2", "M1", "M2", "M4"]>;
+defm "" : LMULSchedReadsImpl<"ReadSF_VQMACC_QOQ",   ["MF2", "M1", "M2", "M4"]>;
+
+multiclass UnsupportedSchedXSfvqmaccqoq {
+let Unsupported = true in {
+defm : LMULWriteRes<"WriteSF_VQMACC_QOQ", []>;
+defm : LMULReadAdvance<"ReadSF_VQMACC_QOQ", 0>;
+} // Unsupported = true
+}
+
+defm "" : LMULSchedWritesImpl<"WriteSF_VFWMACC_QQQ", SchedMxListFW>;
+defm "" : LMULSchedReadsImpl<"ReadSF_VFWMACC_QQQ",   SchedMxListFW>;
+
+multiclass UnsupportedSchedXSfvfwmaccqqq {
+let Unsupported = true in {
+defm : LMULWriteRes<"WriteSF_VFWMACC_QQQ", []>;
+defm : LMULReadAdvance<"ReadSF_VFWMACC_QQQ", 0>;
+} // Unsupported = true
+}

diff  --git a/llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvfwmacc.s b/llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvfwmacc.s
new file mode 100644
index 0000000000000..76666c82af208
--- /dev/null
+++ b/llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvfwmacc.s
@@ -0,0 +1,75 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-x280 -mattr='+xsfvfwmaccqqq' -instruction-tables=full -iterations=1 %s | \
+# RUN:   FileCheck %s
+
+vsetvli zero, zero, e16, mf4, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, mf2, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, m1, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, m2, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, m4, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN512SiFive7FDiv:1
+# CHECK-NEXT: [1]   - VLEN512SiFive7IDiv:1
+# CHECK-NEXT: [2]   - VLEN512SiFive7PipeA:1
+# CHECK-NEXT: [3]   - VLEN512SiFive7PipeAB:2 VLEN512SiFive7PipeA, VLEN512SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN512SiFive7PipeB:1
+# CHECK-NEXT: [5]   - VLEN512SiFive7VA:1
+# CHECK-NEXT: [6]   - VLEN512SiFive7VCQ:1
+# CHECK-NEXT: [7]   - VLEN512SiFive7VL:1
+# CHECK-NEXT: [8]   - VLEN512SiFive7VS:1
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+# CHECK-NEXT: [7]: Bypass Latency
+# CHECK-NEXT: [8]: Resources (<Name> | <Name>[<ReleaseAtCycle>] | <Name>[<AcquireAtCycle>,<ReleaseAtCycle])
+# CHECK-NEXT: [9]: LLVM Opcode Name
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]                                        [9]                        Instructions:
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e16, mf4, ta, ma
+# CHECK-NEXT:  1      8     1.00                         8     VLEN512SiFive7VA[1,2],VLEN512SiFive7VCQ    SF_VFWMACC_4x4x4           sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e16, mf2, ta, ma
+# CHECK-NEXT:  1      8     1.00                         8     VLEN512SiFive7VA[1,2],VLEN512SiFive7VCQ    SF_VFWMACC_4x4x4           sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e16, m1, ta, ma
+# CHECK-NEXT:  1      8     2.00                         8     VLEN512SiFive7VA[1,3],VLEN512SiFive7VCQ    SF_VFWMACC_4x4x4           sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e16, m2, ta, ma
+# CHECK-NEXT:  1      8     4.00                         8     VLEN512SiFive7VA[1,5],VLEN512SiFive7VCQ    SF_VFWMACC_4x4x4           sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e16, m4, ta, ma
+# CHECK-NEXT:  1      8     8.00                         8     VLEN512SiFive7VA[1,9],VLEN512SiFive7VCQ    SF_VFWMACC_4x4x4           sf.vfwmacc.4x4x4	v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN512SiFive7FDiv
+# CHECK-NEXT: [1]   - VLEN512SiFive7IDiv
+# CHECK-NEXT: [2]   - VLEN512SiFive7PipeA
+# CHECK-NEXT: [3]   - VLEN512SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN512SiFive7VA
+# CHECK-NEXT: [5]   - VLEN512SiFive7VCQ
+# CHECK-NEXT: [6]   - VLEN512SiFive7VL
+# CHECK-NEXT: [7]   - VLEN512SiFive7VS
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -      -     5.00    -     21.00  5.00    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    Instructions:
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e16, mf4, ta, ma
+# CHECK-NEXT:  -      -      -      -     2.00   1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e16, mf2, ta, ma
+# CHECK-NEXT:  -      -      -      -     2.00   1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e16, m1, ta, ma
+# CHECK-NEXT:  -      -      -      -     3.00   1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e16, m2, ta, ma
+# CHECK-NEXT:  -      -      -      -     5.00   1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e16, m4, ta, ma
+# CHECK-NEXT:  -      -      -      -     9.00   1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8

diff  --git a/llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvqmacc.s b/llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvqmacc.s
new file mode 100644
index 0000000000000..a30ee119899a3
--- /dev/null
+++ b/llvm/test/tools/llvm-mca/RISCV/SiFive7/xsfvqmacc.s
@@ -0,0 +1,94 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-x280 -mattr='+xsfvqmaccqoq,+xsfvqmaccdod' -instruction-tables=full -iterations=1 %s | \
+# RUN:   FileCheck %s
+
+vsetvli zero, zero, e8, m1, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+vsetvli zero, zero, e8, m2, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+vsetvli zero, zero, e8, m4, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+vsetvli zero, zero, e8, m8, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+
+vsetvli zero, zero, e8, mf2, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+vsetvli zero, zero, e8, m1, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+vsetvli zero, zero, e8, m2, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+vsetvli zero, zero, e8, m4, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN512SiFive7FDiv:1
+# CHECK-NEXT: [1]   - VLEN512SiFive7IDiv:1
+# CHECK-NEXT: [2]   - VLEN512SiFive7PipeA:1
+# CHECK-NEXT: [3]   - VLEN512SiFive7PipeAB:2 VLEN512SiFive7PipeA, VLEN512SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN512SiFive7PipeB:1
+# CHECK-NEXT: [5]   - VLEN512SiFive7VA:1
+# CHECK-NEXT: [6]   - VLEN512SiFive7VCQ:1
+# CHECK-NEXT: [7]   - VLEN512SiFive7VL:1
+# CHECK-NEXT: [8]   - VLEN512SiFive7VS:1
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+# CHECK-NEXT: [7]: Bypass Latency
+# CHECK-NEXT: [8]: Resources (<Name> | <Name>[<ReleaseAtCycle>] | <Name>[<AcquireAtCycle>,<ReleaseAtCycle])
+# CHECK-NEXT: [9]: LLVM Opcode Name
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]                                        [9]                        Instructions:
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  1      8     2.00                         8     VLEN512SiFive7VA[1,3],VLEN512SiFive7VCQ    SF_VQMACC_2x8x2            sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  1      8     4.00                         8     VLEN512SiFive7VA[1,5],VLEN512SiFive7VCQ    SF_VQMACC_2x8x2            sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  1      8     8.00                         8     VLEN512SiFive7VA[1,9],VLEN512SiFive7VCQ    SF_VQMACC_2x8x2            sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, m8, ta, ma
+# CHECK-NEXT:  1      8     16.00                        8     VLEN512SiFive7VA[1,17],VLEN512SiFive7VCQ   SF_VQMACC_2x8x2            sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, mf2, ta, ma
+# CHECK-NEXT:  1      8     1.00                         8     VLEN512SiFive7VA[1,2],VLEN512SiFive7VCQ    SF_VQMACC_4x8x4            sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  1      8     2.00                         8     VLEN512SiFive7VA[1,3],VLEN512SiFive7VCQ    SF_VQMACC_4x8x4            sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  1      8     4.00                         8     VLEN512SiFive7VA[1,5],VLEN512SiFive7VCQ    SF_VQMACC_4x8x4            sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN512SiFive7PipeA,VLEN512SiFive7PipeAB   VSETVLI                    vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  1      8     8.00                         8     VLEN512SiFive7VA[1,9],VLEN512SiFive7VCQ    SF_VQMACC_4x8x4            sf.vqmacc.4x8x4	v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN512SiFive7FDiv
+# CHECK-NEXT: [1]   - VLEN512SiFive7IDiv
+# CHECK-NEXT: [2]   - VLEN512SiFive7PipeA
+# CHECK-NEXT: [3]   - VLEN512SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN512SiFive7VA
+# CHECK-NEXT: [5]   - VLEN512SiFive7VCQ
+# CHECK-NEXT: [6]   - VLEN512SiFive7VL
+# CHECK-NEXT: [7]   - VLEN512SiFive7VS
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -      -     8.00    -     53.00  8.00    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    Instructions:
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  -      -      -      -     3.00   1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  -      -      -      -     5.00   1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  -      -      -      -     9.00   1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, m8, ta, ma
+# CHECK-NEXT:  -      -      -      -     17.00  1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, mf2, ta, ma
+# CHECK-NEXT:  -      -      -      -     2.00   1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  -      -      -      -     3.00   1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  -      -      -      -     5.00   1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -     vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  -      -      -      -     9.00   1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8

diff  --git a/llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvfwmacc.s b/llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvfwmacc.s
new file mode 100644
index 0000000000000..4d1d968518890
--- /dev/null
+++ b/llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvfwmacc.s
@@ -0,0 +1,78 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-x390 -mattr='+xsfvfwmaccqqq' -instruction-tables=full -iterations=1 %s | \
+# RUN:   FileCheck %s
+
+vsetvli zero, zero, e16, mf4, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, mf2, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, m1, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, m2, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+vsetvli zero, zero, e16, m4, ta, ma
+sf.vfwmacc.4x4x4 v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN1024X300SiFive7FDiv:1
+# CHECK-NEXT: [1]   - VLEN1024X300SiFive7IDiv:1
+# CHECK-NEXT: [2]   - VLEN1024X300SiFive7PipeA:1
+# CHECK-NEXT: [3]   - VLEN1024X300SiFive7PipeAB:2 VLEN1024X300SiFive7PipeA, VLEN1024X300SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN1024X300SiFive7PipeB:1
+# CHECK-NEXT: [5]   - VLEN1024X300SiFive7VA1:1
+# CHECK-NEXT: [6]   - VLEN1024X300SiFive7VA1OrVA2:2 VLEN1024X300SiFive7VA1, VLEN1024X300SiFive7VA2
+# CHECK-NEXT: [7]   - VLEN1024X300SiFive7VA2:1
+# CHECK-NEXT: [8]   - VLEN1024X300SiFive7VCQ:1
+# CHECK-NEXT: [9]   - VLEN1024X300SiFive7VL:1
+# CHECK-NEXT: [10]  - VLEN1024X300SiFive7VS:1
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+# CHECK-NEXT: [7]: Bypass Latency
+# CHECK-NEXT: [8]: Resources (<Name> | <Name>[<ReleaseAtCycle>] | <Name>[<AcquireAtCycle>,<ReleaseAtCycle])
+# CHECK-NEXT: [9]: LLVM Opcode Name
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]                                        [9]                        Instructions:
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e16, mf4, ta, ma
+# CHECK-NEXT:  1      8     1.00                         8     VLEN1024X300SiFive7VA1[1,2],VLEN1024X300SiFive7VA1OrVA2[1,2],VLEN1024X300SiFive7VCQ SF_VFWMACC_4x4x4 sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e16, mf2, ta, ma
+# CHECK-NEXT:  1      8     1.00                         8     VLEN1024X300SiFive7VA1[1,2],VLEN1024X300SiFive7VA1OrVA2[1,2],VLEN1024X300SiFive7VCQ SF_VFWMACC_4x4x4 sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e16, m1, ta, ma
+# CHECK-NEXT:  1      8     2.00                         8     VLEN1024X300SiFive7VA1[1,3],VLEN1024X300SiFive7VA1OrVA2[1,3],VLEN1024X300SiFive7VCQ SF_VFWMACC_4x4x4 sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e16, m2, ta, ma
+# CHECK-NEXT:  1      8     4.00                         8     VLEN1024X300SiFive7VA1[1,5],VLEN1024X300SiFive7VA1OrVA2[1,5],VLEN1024X300SiFive7VCQ SF_VFWMACC_4x4x4 sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e16, m4, ta, ma
+# CHECK-NEXT:  1      8     8.00                         8     VLEN1024X300SiFive7VA1[1,9],VLEN1024X300SiFive7VA1OrVA2[1,9],VLEN1024X300SiFive7VCQ SF_VFWMACC_4x4x4 sf.vfwmacc.4x4x4	v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN1024X300SiFive7FDiv
+# CHECK-NEXT: [1]   - VLEN1024X300SiFive7IDiv
+# CHECK-NEXT: [2]   - VLEN1024X300SiFive7PipeA
+# CHECK-NEXT: [3]   - VLEN1024X300SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN1024X300SiFive7VA1
+# CHECK-NEXT: [5]   - VLEN1024X300SiFive7VA2
+# CHECK-NEXT: [6]   - VLEN1024X300SiFive7VCQ
+# CHECK-NEXT: [7]   - VLEN1024X300SiFive7VL
+# CHECK-NEXT: [8]   - VLEN1024X300SiFive7VS
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]
+# CHECK-NEXT:  -      -     5.00    -     21.00   -     5.00    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    Instructions:
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e16, mf4, ta, ma
+# CHECK-NEXT:  -      -      -      -     2.00    -     1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e16, mf2, ta, ma
+# CHECK-NEXT:  -      -      -      -     2.00    -     1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e16, m1, ta, ma
+# CHECK-NEXT:  -      -      -      -     3.00    -     1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e16, m2, ta, ma
+# CHECK-NEXT:  -      -      -      -     5.00    -     1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e16, m4, ta, ma
+# CHECK-NEXT:  -      -      -      -     9.00    -     1.00    -      -     sf.vfwmacc.4x4x4	v16, v0, v8

diff  --git a/llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvqmacc.s b/llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvqmacc.s
new file mode 100644
index 0000000000000..262af54508a1d
--- /dev/null
+++ b/llvm/test/tools/llvm-mca/RISCV/SiFiveX390/xsfvqmacc.s
@@ -0,0 +1,97 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-x390 -mattr='+xsfvqmaccqoq,+xsfvqmaccdod' -instruction-tables=full -iterations=1 %s | \
+# RUN:   FileCheck %s
+
+vsetvli zero, zero, e8, m1, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+vsetvli zero, zero, e8, m2, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+vsetvli zero, zero, e8, m4, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+vsetvli zero, zero, e8, m8, ta, ma
+sf.vqmacc.2x8x2 v16, v0, v8
+
+vsetvli zero, zero, e8, mf2, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+vsetvli zero, zero, e8, m1, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+vsetvli zero, zero, e8, m2, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+vsetvli zero, zero, e8, m4, ta, ma
+sf.vqmacc.4x8x4 v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN1024X300SiFive7FDiv:1
+# CHECK-NEXT: [1]   - VLEN1024X300SiFive7IDiv:1
+# CHECK-NEXT: [2]   - VLEN1024X300SiFive7PipeA:1
+# CHECK-NEXT: [3]   - VLEN1024X300SiFive7PipeAB:2 VLEN1024X300SiFive7PipeA, VLEN1024X300SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN1024X300SiFive7PipeB:1
+# CHECK-NEXT: [5]   - VLEN1024X300SiFive7VA1:1
+# CHECK-NEXT: [6]   - VLEN1024X300SiFive7VA1OrVA2:2 VLEN1024X300SiFive7VA1, VLEN1024X300SiFive7VA2
+# CHECK-NEXT: [7]   - VLEN1024X300SiFive7VA2:1
+# CHECK-NEXT: [8]   - VLEN1024X300SiFive7VCQ:1
+# CHECK-NEXT: [9]   - VLEN1024X300SiFive7VL:1
+# CHECK-NEXT: [10]  - VLEN1024X300SiFive7VS:1
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+# CHECK-NEXT: [7]: Bypass Latency
+# CHECK-NEXT: [8]: Resources (<Name> | <Name>[<ReleaseAtCycle>] | <Name>[<AcquireAtCycle>,<ReleaseAtCycle])
+# CHECK-NEXT: [9]: LLVM Opcode Name
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]                                        [9]                        Instructions:
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  1      8     2.00                         8     VLEN1024X300SiFive7VA1[1,3],VLEN1024X300SiFive7VA1OrVA2[1,3],VLEN1024X300SiFive7VCQ SF_VQMACC_2x8x2 sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  1      8     4.00                         8     VLEN1024X300SiFive7VA1[1,5],VLEN1024X300SiFive7VA1OrVA2[1,5],VLEN1024X300SiFive7VCQ SF_VQMACC_2x8x2 sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  1      8     8.00                         8     VLEN1024X300SiFive7VA1[1,9],VLEN1024X300SiFive7VA1OrVA2[1,9],VLEN1024X300SiFive7VCQ SF_VQMACC_2x8x2 sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, m8, ta, ma
+# CHECK-NEXT:  1      8     16.00                        8     VLEN1024X300SiFive7VA1[1,17],VLEN1024X300SiFive7VA1OrVA2[1,17],VLEN1024X300SiFive7VCQ SF_VQMACC_2x8x2 sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, mf2, ta, ma
+# CHECK-NEXT:  1      8     1.00                         8     VLEN1024X300SiFive7VA1[1,2],VLEN1024X300SiFive7VA1OrVA2[1,2],VLEN1024X300SiFive7VCQ SF_VQMACC_4x8x4 sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  1      8     2.00                         8     VLEN1024X300SiFive7VA1[1,3],VLEN1024X300SiFive7VA1OrVA2[1,3],VLEN1024X300SiFive7VCQ SF_VQMACC_4x8x4 sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  1      8     4.00                         8     VLEN1024X300SiFive7VA1[1,5],VLEN1024X300SiFive7VA1OrVA2[1,5],VLEN1024X300SiFive7VCQ SF_VQMACC_4x8x4 sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  1      3     1.00                  U      1     VLEN1024X300SiFive7PipeA,VLEN1024X300SiFive7PipeAB VSETVLI            vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  1      8     8.00                         8     VLEN1024X300SiFive7VA1[1,9],VLEN1024X300SiFive7VA1OrVA2[1,9],VLEN1024X300SiFive7VCQ SF_VQMACC_4x8x4 sf.vqmacc.4x8x4	v16, v0, v8
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - VLEN1024X300SiFive7FDiv
+# CHECK-NEXT: [1]   - VLEN1024X300SiFive7IDiv
+# CHECK-NEXT: [2]   - VLEN1024X300SiFive7PipeA
+# CHECK-NEXT: [3]   - VLEN1024X300SiFive7PipeB
+# CHECK-NEXT: [4]   - VLEN1024X300SiFive7VA1
+# CHECK-NEXT: [5]   - VLEN1024X300SiFive7VA2
+# CHECK-NEXT: [6]   - VLEN1024X300SiFive7VCQ
+# CHECK-NEXT: [7]   - VLEN1024X300SiFive7VL
+# CHECK-NEXT: [8]   - VLEN1024X300SiFive7VS
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]
+# CHECK-NEXT:  -      -     8.00    -     53.00   -     8.00    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    Instructions:
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  -      -      -      -     3.00    -     1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  -      -      -      -     5.00    -     1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  -      -      -      -     9.00    -     1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, m8, ta, ma
+# CHECK-NEXT:  -      -      -      -     17.00   -     1.00    -      -     sf.vqmacc.2x8x2	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, mf2, ta, ma
+# CHECK-NEXT:  -      -      -      -     2.00    -     1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, m1, ta, ma
+# CHECK-NEXT:  -      -      -      -     3.00    -     1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, m2, ta, ma
+# CHECK-NEXT:  -      -      -      -     5.00    -     1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -     vsetvli	zero, zero, e8, m4, ta, ma
+# CHECK-NEXT:  -      -      -      -     9.00    -     1.00    -      -     sf.vqmacc.4x8x4	v16, v0, v8


        


More information about the llvm-commits mailing list