Author: Brandon Wu
Date: 2026-05-27T14:21:31Z
New Revision: d25ec4b8448767d33330b66805f876355b948efe

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

LOG: [llvm][RISCV] Support batched dot product extensions MC layer (#196467)

spec:

https://github.com/aswaterman/riscv-misc/blob/main/isa/ldot-bdot/ldot-bdot.adoc#zvdota-and-zvbdota-families-of-dot-product-extensions-version-02

Added: 
    llvm/lib/Target/RISCV/RISCVInstrInfoZvbdota.td
    llvm/test/MC/RISCV/rvv/zvfbdota32f-invalid.s
    llvm/test/MC/RISCV/rvv/zvfbdota32f.s
    llvm/test/MC/RISCV/rvv/zvfqwbdota8f-invalid.s
    llvm/test/MC/RISCV/rvv/zvfqwbdota8f.s
    llvm/test/MC/RISCV/rvv/zvfwbdota16bf-invalid.s
    llvm/test/MC/RISCV/rvv/zvfwbdota16bf.s
    llvm/test/MC/RISCV/rvv/zvqwbdota-invalid.s
    llvm/test/MC/RISCV/rvv/zvqwbdota.s

Modified: 
    clang/test/Driver/print-supported-extensions-riscv.c
    clang/test/Preprocessor/riscv-target-features.c
    llvm/docs/RISCVUsage.rst
    llvm/docs/ReleaseNotes.md
    llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
    llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
    llvm/lib/Target/RISCV/RISCVFeatures.td
    llvm/lib/Target/RISCV/RISCVInstrInfo.td
    llvm/test/CodeGen/RISCV/attributes.ll
    llvm/test/CodeGen/RISCV/features-info.ll
    llvm/test/MC/RISCV/attribute-arch.s
    llvm/unittests/TargetParser/RISCVISAInfoTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/test/Driver/print-supported-extensions-riscv.c 
b/clang/test/Driver/print-supported-extensions-riscv.c
index ebee9f3c11910..3f4acf3667eea 100644
--- a/clang/test/Driver/print-supported-extensions-riscv.c
+++ b/clang/test/Driver/print-supported-extensions-riscv.c
@@ -251,9 +251,14 @@
 // CHECK-NEXT:     zvabd                0.7       'Zvabd' (Vector Absolute 
Difference)
 // CHECK-NEXT:     zvbc32e              0.7       'Zvbc32e' (Vector Carryless 
Multiplication with 32-bits elements)
 // CHECK-NEXT:     zvdot4a8i            0.1       'Zvdot4a8i' (Vector 
4-element Dot Product of packed 8-bit Integers)
+// CHECK-NEXT:     zvfbdota32f          0.2       'Zvfbdota32f' (FP32 batched 
dot-product extension)
 // CHECK-NEXT:     zvfbfa               0.1       'Zvfbfa' (Additional BF16 
vector compute support)
 // CHECK-NEXT:     zvfofp8min           0.2       'Zvfofp8min' (Vector OFP8 
Converts)
+// CHECK-NEXT:     zvfqwbdota8f         0.2       'Zvfqwbdota8f' (OCP FP8 
batched dot-product extension)
+// CHECK-NEXT:     zvfwbdota16bf        0.2       'Zvfwbdota16bf' (BF16 
batched dot-product extension)
 // CHECK-NEXT:     zvkgs                0.7       'Zvkgs' (Vector-Scalar GCM 
instructions for Cryptography)
+// CHECK-NEXT:     zvqwbdota16i         0.2       'Zvqwbdota16i' (16-bit 
integer batched dot-product extension)
+// CHECK-NEXT:     zvqwbdota8i          0.2       'Zvqwbdota8i' (8-bit integer 
batched dot-product extension)
 // CHECK-NEXT:     zvvfmm               0.1       'Zvvfmm' (Floating-Point 
Matrix Multiply-Accumulate)
 // CHECK-NEXT:     zvvmm                0.1       'Zvvmm' (Integer Matrix 
Multiply-Accumulate)
 // CHECK-NEXT:     zvzip                0.1       'Zvzip' (Vector Reordering 
Structured Data)

diff  --git a/clang/test/Preprocessor/riscv-target-features.c 
b/clang/test/Preprocessor/riscv-target-features.c
index 4880e02dc2e74..b35ba6fa094a0 100644
--- a/clang/test/Preprocessor/riscv-target-features.c
+++ b/clang/test/Preprocessor/riscv-target-features.c
@@ -1807,3 +1807,43 @@
 // RUN: %clang --target=riscv64-unknown-linux-gnu -mcpu=sifive-p450 -E -dM %s \
 // RUN:  -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-FAST
 // CHECK-MISALIGNED-FAST: __riscv_misaligned_fast 1
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN:   -march=rv32i_zvqwbdota8i0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVQWBDOTA8I-EXT %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN:   -march=rv64i_zvqwbdota8i0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVQWBDOTA8I-EXT %s
+// CHECK-ZVQWBDOTA8I-EXT: __riscv_zvqwbdota8i 2000{{$}}
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN:   -march=rv32i_zvqwbdota16i0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVQWBDOTA16I-EXT %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN:   -march=rv64i_zvqwbdota16i0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVQWBDOTA16I-EXT %s
+// CHECK-ZVQWBDOTA16I-EXT: __riscv_zvqwbdota16i 2000{{$}}
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN:   -march=rv32i_zvfwbdota16bf0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVFWBDOTA16BF-EXT %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN:   -march=rv64i_zvfwbdota16bf0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVFWBDOTA16BF-EXT %s
+// CHECK-ZVFWBDOTA16BF-EXT: __riscv_zvfwbdota16bf 2000{{$}}
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN:   -march=rv32i_zvfqwbdota8f0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVFQWBDOTA8F-EXT %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN:   -march=rv64i_zvfqwbdota8f0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVFQWBDOTA8F-EXT %s
+// CHECK-ZVFQWBDOTA8F-EXT: __riscv_zvfqwbdota8f 2000{{$}}
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN:   -march=rv32i_zvfbdota32f0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVFBDOTA32F-EXT %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN:   -march=rv64i_zvfbdota32f0p2 -E -dM %s \
+// RUN:   -o - | FileCheck --check-prefix=CHECK-ZVFBDOTA32F-EXT %s
+// CHECK-ZVFBDOTA32F-EXT: __riscv_zvfbdota32f 2000{{$}}

diff  --git a/llvm/docs/RISCVUsage.rst b/llvm/docs/RISCVUsage.rst
index 389f15227d470..103c9114c272d 100644
--- a/llvm/docs/RISCVUsage.rst
+++ b/llvm/docs/RISCVUsage.rst
@@ -369,6 +369,9 @@ The primary goal of experimental support is to assist in 
the process of ratifica
 ``experimental-zvvmm``
   LLVM implements the `0.1 draft specification 
<https://github.com/riscv/integrated-matrix-extension/releases/tag/riscv-isa-release-fa55752-2026-05-04>`__.
 
+``experimental-zvqwbdota8i``, ``experimental-zvqwbdota16i``, 
``experimental-zvfqwbdota8f``, ``experimental-zvfwbdota16bf``, 
``experimental-zvfbdota32f``
+  LLVM implements the `0.2 draft specification 
<https://github.com/aswaterman/riscv-misc/blob/main/isa/ldot-bdot/ldot-bdot.adoc>`__.
+
 To use an experimental extension from `clang`, you must add 
`-menable-experimental-extensions` to the command line, and specify the exact 
version of the experimental extension you are using.  To use an experimental 
extension with LLVM's internal developer tools (e.g. `llc`, `llvm-objdump`, 
`llvm-mc`), you must prefix the extension name with `experimental-`.  Note that 
you don't need to specify the version with internal tools, and shouldn't 
include the `experimental-` prefix with `clang`.
 
 Vendor Extensions

diff  --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index d413cbf0fe326..d15159924dba4 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -219,6 +219,7 @@ Makes programs 10x faster by doing Special New Thing.
 * Adds support for 'Ziccid' (Instruction/Data Coherence and Consistency) 
extension.
 * Adds experimental assembler support for the `Xqccmt` (Qualcomm 16-bit Table 
Jump) vendor extension.
 * `-mcpu=sifive-870` has been renamed `-mcpu=sifive-p870-d`.
+* Adds experimental assembler support for batched dot-product 
extensions(Zvqwbdota8i, Zvqwbdota16i, Zvfwbdota16bf, Zvfqwbdota8f and 
Zvfbdota32f).
 
 ### Changes to the WebAssembly Backend
 

diff  --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp 
b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index 1b2742c76da05..543b04df50634 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -2433,7 +2433,11 @@ ParseStatus RISCVAsmParser::parseVTypeI(OperandVector 
&Operands) {
 bool RISCVAsmParser::generateVTypeError(SMLoc ErrorLoc) {
   if (STI->hasFeature(RISCV::FeatureStdExtZvfbfa) ||
       STI->hasFeature(RISCV::FeatureStdExtZvfofp8min) ||
-      STI->hasFeature(RISCV::FeatureVendorXSfvfbfexp16e))
+      STI->hasFeature(RISCV::FeatureVendorXSfvfbfexp16e) ||
+      STI->hasFeature(RISCV::FeatureStdExtZvqwbdota8i) ||
+      STI->hasFeature(RISCV::FeatureStdExtZvqwbdota16i) ||
+      STI->hasFeature(RISCV::FeatureStdExtZvfqwbdota8f) ||
+      STI->hasFeature(RISCV::FeatureStdExtZvfwbdota16bf))
     return Error(
         ErrorLoc,
         "operand must be "

diff  --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp 
b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
index e2416f832aecc..aa7ce5bf5e2a2 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
@@ -227,7 +227,11 @@ void RISCVInstPrinter::printVTypeI(const MCInst *MI, 
unsigned OpNo,
       (RISCVVType::isAltFmt(Imm) &&
        !(STI.hasFeature(RISCV::FeatureStdExtZvfbfa) ||
          STI.hasFeature(RISCV::FeatureStdExtZvfofp8min) ||
-         STI.hasFeature(RISCV::FeatureVendorXSfvfbfexp16e))) ||
+         STI.hasFeature(RISCV::FeatureVendorXSfvfbfexp16e) ||
+         STI.hasFeature(RISCV::FeatureStdExtZvqwbdota8i) ||
+         STI.hasFeature(RISCV::FeatureStdExtZvqwbdota16i) ||
+         STI.hasFeature(RISCV::FeatureStdExtZvfqwbdota8f) ||
+         STI.hasFeature(RISCV::FeatureStdExtZvfwbdota16bf))) ||
       (Imm >> 9) != 0) {
     O << formatImm(Imm);
     return;

diff  --git a/llvm/lib/Target/RISCV/RISCVFeatures.td 
b/llvm/lib/Target/RISCV/RISCVFeatures.td
index 82d67c6e646a1..e831be2344fa6 100644
--- a/llvm/lib/Target/RISCV/RISCVFeatures.td
+++ b/llvm/lib/Target/RISCV/RISCVFeatures.td
@@ -906,6 +906,49 @@ def HasStdExtZvvfmm : 
Predicate<"Subtarget->hasStdExtZvvfmm()">,
                       AssemblerPredicate<(all_of FeatureStdExtZvvfmm),
                           "'Zvvfmm' (Floating-Point Matrix 
Multiply-Accumulate)">;
 
+// Zvbdota family of batched dot-product extensions
+def FeatureStdExtZvqwbdota8i
+    : RISCVExperimentalExtension<0, 2,
+                                 "8-bit integer batched dot-product extension",
+                                 [FeatureStdExtZve32x]>;
+def FeatureStdExtZvqwbdota16i
+    : RISCVExperimentalExtension<0, 2,
+                                 "16-bit integer batched dot-product 
extension",
+                                 [FeatureStdExtZve64x]>;
+def HasStdExtZvqwbdota8iOrZvqwbdota16i
+    : Predicate<"Subtarget->hasStdExtZvqwbdota8i() || 
Subtarget->hasStdExtZvqwbdota16i()">,
+      AssemblerPredicate<(any_of FeatureStdExtZvqwbdota8i,
+                                 FeatureStdExtZvqwbdota16i),
+                         "'Zvqwbdota8i' or 'Zvqwbdota16i' (8-bit or 16-bit "
+                         "integer batched dot-product extension)">;
+
+def FeatureStdExtZvfwbdota16bf
+    : RISCVExperimentalExtension<0, 2,
+                                 "BF16 batched dot-product extension",
+                                 [FeatureStdExtZve32f]>;
+def HasStdExtZvfwbdota16bf
+    : Predicate<"Subtarget->hasStdExtZvfwbdota16bf()">,
+      AssemblerPredicate<(all_of FeatureStdExtZvfwbdota16bf),
+                         "'Zvfwbdota16bf' (BF16 batched dot-product 
extension)">;
+
+def FeatureStdExtZvfqwbdota8f
+    : RISCVExperimentalExtension<0, 2,
+                                 "OCP FP8 batched dot-product extension",
+                                 [FeatureStdExtZve32f]>;
+def HasStdExtZvfqwbdota8f
+    : Predicate<"Subtarget->hasStdExtZvfqwbdota8f()">,
+      AssemblerPredicate<(all_of FeatureStdExtZvfqwbdota8f),
+                         "'Zvfqwbdota8f' (OCP FP8 batched dot-product 
extension)">;
+
+def FeatureStdExtZvfbdota32f
+    : RISCVExperimentalExtension<0, 2,
+                                 "FP32 batched dot-product extension",
+                                 [FeatureStdExtZve32f]>;
+def HasStdExtZvfbdota32f
+    : Predicate<"Subtarget->hasStdExtZvfbdota32f()">,
+      AssemblerPredicate<(all_of FeatureStdExtZvfbdota32f),
+                         "'Zvfbdota32f' (FP32 batched dot-product extension)">;
+
 // Vector instruction predicates
 
 def HasVInstructions    : Predicate<"Subtarget->hasVInstructions()">,

diff  --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td 
b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
index 4f60a367b711a..5354cbad78ce1 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
@@ -2352,6 +2352,7 @@ include "RISCVInstrInfoZvdot4a8i.td"
 include "RISCVInstrInfoZvfofp8min.td"
 include "RISCVInstrInfoZvzip.td"
 include "RISCVInstrInfoZvvm.td"
+include "RISCVInstrInfoZvbdota.td"
 
 // Packed SIMD
 include "RISCVInstrInfoP.td"

diff  --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZvbdota.td 
b/llvm/lib/Target/RISCV/RISCVInstrInfoZvbdota.td
new file mode 100644
index 0000000000000..673e0ba85161d
--- /dev/null
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZvbdota.td
@@ -0,0 +1,65 @@
+//===-- RISCVInstrInfoZvbdota.td - 'Zvbdota' instructions --*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file describes the RISC-V instructions from the standard 'Zvbdota'
+// extension, providing vector batched dot-product instructions.
+// This version is still experimental as the 'Zvbdota' extension hasn't been
+// ratified yet. Version 0.2.
+//
+//===----------------------------------------------------------------------===//
+
+//===----------------------------------------------------------------------===//
+// Instruction class definitions
+//===----------------------------------------------------------------------===//
+
+// Base class for Zvbdota integer instructions (uses OPC_OP_VE)
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0,
+    VS1VS2Constraint = Vrgather, Constraints = "@earlyclobber $vd_wb, $vd = 
$vd_wb" in
+class ZvbdotaVV<bits<6> funct6, RISCVVFormat opv, string opcodestr>
+    : RVInstVV<funct6, opv, (outs VR:$vd_wb),
+               (ins VR:$vd, VRM8:$vs2, VR:$vs1, uimm3:$ci, VMaskOp:$vm),
+               opcodestr, "$vd, $vs2, $vs1, $ci$vm"> {
+  bits<3> ci;
+  let Inst{24-23} = vs2{4-3};
+  let Inst{22-20} = ci;
+  let Inst{6-0} = OPC_OP_VE.Value;
+}
+
+//===----------------------------------------------------------------------===//
+// Instructions
+//===----------------------------------------------------------------------===//
+
+// Integer batched dot-product
+multiclass VBdotVV<string opcodestr, bits<6> funct6> {
+  def _VV : ZvbdotaVV<funct6, OPIVV, opcodestr>;
+}
+
+// Floating-point batched dot-product
+multiclass VBdotFVV<string opcodestr, bits<6> funct6> {
+  def _VV : ZvbdotaVV<funct6, OPFVV, opcodestr>;
+}
+
+// Integer Batched Dot-Product Instructions for 8-bit elements
+let Predicates = [HasStdExtZvqwbdota8iOrZvqwbdota16i] in {
+defm VQWBDOTAU : VBdotVV<"vqwbdotau.vv", 0b101110>;  // Unsigned (funct6 = 
0x2e)
+defm VQWBDOTAS : VBdotVV<"vqwbdotas.vv", 0b101111>;  // Signed (funct6 = 0x2f)
+} // Predicates = [HasStdExtZvqwbdota8iOrZvqwbdota16i]
+
+// BF16 Batched Dot-Product Instructions
+let Predicates = [HasStdExtZvfwbdota16bf] in
+defm VFWBDOTA : VBdotFVV<"vfwbdota.vv", 0b101100>; // funct6 = 0x2c
+
+// OCP FP8 Batched Dot-Product Instructions
+let Predicates = [HasStdExtZvfqwbdota8f] in {
+defm VFQWBDOTA : VBdotFVV<"vfqwbdota.vv", 0b101110>;         // E4M3 (funct6 = 
0x2e)
+defm VFQWBDOTA_ALT : VBdotFVV<"vfqwbdota.alt.vv", 0b101111>; // E5M2 (funct6 = 
0x2f)
+} // Predicates = [HasStdExtZvfqwbdota8f]
+
+// FP32 Batched Dot-Product Instructions
+let Predicates = [HasStdExtZvfbdota32f] in
+defm VFBDOTA : VBdotFVV<"vfbdota.vv", 0b101011>;  // funct6 = 0x2b

diff  --git a/llvm/test/CodeGen/RISCV/attributes.ll 
b/llvm/test/CodeGen/RISCV/attributes.ll
index fb2d4e37bb08a..0ff44f4d233cf 100644
--- a/llvm/test/CodeGen/RISCV/attributes.ll
+++ b/llvm/test/CodeGen/RISCV/attributes.ll
@@ -152,6 +152,11 @@
 ; RUN: llc -mtriple=riscv32 -mattr=+ssctr  %s -o - | FileCheck 
--check-prefix=RV32SSCTR %s
 ; RUN: llc -mtriple=riscv32 -mattr=+experimental-p %s -o - | FileCheck 
--check-prefix=RV32P %s
 ; RUN: llc -mtriple=riscv32 -mattr=+experimental-zibi %s -o - | FileCheck 
--check-prefix=RV32ZIBI %s
+; RUN: llc -mtriple=riscv32 -mattr=+experimental-zvqwbdota8i %s -o - | 
FileCheck --check-prefixes=CHECK,RV32ZVQWBDOTA8I %s
+; RUN: llc -mtriple=riscv32 -mattr=+experimental-zvqwbdota16i %s -o - | 
FileCheck --check-prefixes=CHECK,RV32ZVQWBDOTA16I %s
+; RUN: llc -mtriple=riscv32 -mattr=+experimental-zvfwbdota16bf %s -o - | 
FileCheck --check-prefixes=CHECK,RV32ZVFWBDOTA16BF %s
+; RUN: llc -mtriple=riscv32 -mattr=+experimental-zvfqwbdota8f %s -o - | 
FileCheck --check-prefixes=CHECK,RV32ZVFQWBDOTA8F %s
+; RUN: llc -mtriple=riscv32 -mattr=+experimental-zvfbdota32f %s -o - | 
FileCheck --check-prefixes=CHECK,RV32ZVFBDOTA32F %s
 
 ; RUN: llc -mtriple=riscv64 %s -o - | FileCheck %s
 ; RUN: llc -mtriple=riscv64 -mattr=+m %s -o - | FileCheck 
--check-prefixes=CHECK,RV64M %s
@@ -311,6 +316,11 @@
 ; RUN: llc -mtriple=riscv64 -mattr=+experimental-p %s -o - | FileCheck 
--check-prefix=RV64P %s
 ; RUN: llc -mtriple=riscv64 -mattr=+experimental-y %s -o - | FileCheck 
--check-prefix=RV64Y %s
 ; RUN: llc -mtriple=riscv64 -mattr=+experimental-zibi %s -o - | FileCheck 
--check-prefix=RV64ZIBI %s
+; RUN: llc -mtriple=riscv64 -mattr=+experimental-zvqwbdota8i %s -o - | 
FileCheck --check-prefixes=CHECK,RV64ZVQWBDOTA8I %s
+; RUN: llc -mtriple=riscv64 -mattr=+experimental-zvqwbdota16i %s -o - | 
FileCheck --check-prefixes=CHECK,RV64ZVQWBDOTA16I %s
+; RUN: llc -mtriple=riscv64 -mattr=+experimental-zvfwbdota16bf %s -o - | 
FileCheck --check-prefixes=CHECK,RV64ZVFWBDOTA16BF %s
+; RUN: llc -mtriple=riscv64 -mattr=+experimental-zvfqwbdota8f %s -o - | 
FileCheck --check-prefixes=CHECK,RV64ZVFQWBDOTA8F %s
+; RUN: llc -mtriple=riscv64 -mattr=+experimental-zvfbdota32f %s -o - | 
FileCheck --check-prefixes=CHECK,RV64ZVFBDOTA32F %s
 
 
 ; Tests for profile features.
@@ -479,6 +489,11 @@
 ; RV32SSCTR: .attribute 5, "rv32i2p1_sscsrind1p0_ssctr1p0"
 ; RV32P: .attribute 5, "rv32i2p1_p0p21_zicsr2p0_zmmul1p0_zba1p0_zbb1p0"
 ; RV32ZIBI: .attribute 5, "rv32i2p1_zibi0p1"
+; RV32ZVQWBDOTA8I: .attribute 5, 
"rv32i2p1_zicsr2p0_zve32x1p0_zvl32b1p0_zvqwbdota8i0p2"
+; RV32ZVQWBDOTA16I: .attribute 5, 
"rv32i2p1_zicsr2p0_zve32x1p0_zve64x1p0_zvl32b1p0_zvl64b1p0_zvqwbdota16i0p2"
+; RV32ZVFWBDOTA16BF: .attribute 5, 
"rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfwbdota16bf0p2_zvl32b1p0"
+; RV32ZVFQWBDOTA8F: .attribute 5, 
"rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfqwbdota8f0p2_zvl32b1p0"
+; RV32ZVFBDOTA32F: .attribute 5, 
"rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbdota32f0p2_zvl32b1p0"
 
 ; RV64M: .attribute 5, "rv64i2p1_m2p0_zmmul1p0"
 ; RV64ZMMUL: .attribute 5, "rv64i2p1_zmmul1p0"
@@ -636,6 +651,11 @@
 ; RV64P: .attribute 5, "rv64i2p1_p0p21_zicsr2p0_zmmul1p0_zba1p0_zbb1p0"
 ; RV64Y: .attribute 5, "rv64i2p1_y0p96"
 ; RV64ZIBI: .attribute 5, "rv64i2p1_zibi0p1"
+; RV64ZVQWBDOTA8I: .attribute 5, 
"rv64i2p1_zicsr2p0_zve32x1p0_zvl32b1p0_zvqwbdota8i0p2"
+; RV64ZVQWBDOTA16I: .attribute 5, 
"rv64i2p1_zicsr2p0_zve32x1p0_zve64x1p0_zvl32b1p0_zvl64b1p0_zvqwbdota16i0p2"
+; RV64ZVFWBDOTA16BF: .attribute 5, 
"rv64i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfwbdota16bf0p2_zvl32b1p0"
+; RV64ZVFQWBDOTA8F: .attribute 5, 
"rv64i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfqwbdota8f0p2_zvl32b1p0"
+; RV64ZVFBDOTA32F: .attribute 5, 
"rv64i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvfbdota32f0p2_zvl32b1p0"
 
 ; RVI20U32: .attribute 5, "rv32i2p1"
 ; RVI20U64: .attribute 5, "rv64i2p1"

diff  --git a/llvm/test/CodeGen/RISCV/features-info.ll 
b/llvm/test/CodeGen/RISCV/features-info.ll
index aadbabbbb92db..610152c3a1f22 100644
--- a/llvm/test/CodeGen/RISCV/features-info.ll
+++ b/llvm/test/CodeGen/RISCV/features-info.ll
@@ -37,9 +37,14 @@
 ; CHECK-NEXT:   experimental-zvabd               - 'Zvabd' (Vector Absolute 
Difference).
 ; CHECK-NEXT:   experimental-zvbc32e             - 'Zvbc32e' (Vector Carryless 
Multiplication with 32-bits elements).
 ; CHECK-NEXT:   experimental-zvdot4a8i           - 'Zvdot4a8i' (Vector 
4-element Dot Product of packed 8-bit Integers).
+; CHECK-NEXT:   experimental-zvfbdota32f         - 'Zvfbdota32f' (FP32 batched 
dot-product extension).
 ; CHECK-NEXT:   experimental-zvfbfa              - 'Zvfbfa' (Additional BF16 
vector compute support).
 ; CHECK-NEXT:   experimental-zvfofp8min          - 'Zvfofp8min' (Vector OFP8 
Converts).
+; CHECK-NEXT:   experimental-zvfqwbdota8f        - 'Zvfqwbdota8f' (OCP FP8 
batched dot-product extension).
+; CHECK-NEXT:   experimental-zvfwbdota16bf       - 'Zvfwbdota16bf' (BF16 
batched dot-product extension).
 ; CHECK-NEXT:   experimental-zvkgs               - 'Zvkgs' (Vector-Scalar GCM 
instructions for Cryptography).
+; CHECK-NEXT:   experimental-zvqwbdota16i        - 'Zvqwbdota16i' (16-bit 
integer batched dot-product extension).
+; CHECK-NEXT:   experimental-zvqwbdota8i         - 'Zvqwbdota8i' (8-bit 
integer batched dot-product extension).
 ; CHECK-NEXT:   experimental-zvvfmm              - 'Zvvfmm' (Floating-Point 
Matrix Multiply-Accumulate).
 ; CHECK-NEXT:   experimental-zvvmm               - 'Zvvmm' (Integer Matrix 
Multiply-Accumulate).
 ; CHECK-NEXT:   experimental-zvzip               - 'Zvzip' (Vector Reordering 
Structured Data).

diff  --git a/llvm/test/MC/RISCV/attribute-arch.s 
b/llvm/test/MC/RISCV/attribute-arch.s
index 5bd0546016e3d..367ec6f04d953 100644
--- a/llvm/test/MC/RISCV/attribute-arch.s
+++ b/llvm/test/MC/RISCV/attribute-arch.s
@@ -521,3 +521,19 @@
 
 .attribute arch, "rv64i_p0p21"
 # CHECK: attribute      5, "rv64i2p1_p0p21_zicsr2p0_zmmul1p0_zba1p0_zbb1p0"
+
+.attribute arch, "rv32iv_zvqwbdota8i0p2"
+# CHECK: attribute      5, 
"rv32i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0_zvqwbdota8i0p2"
+
+.attribute arch, "rv32iv_zvqwbdota16i0p2"
+# CHECK: attribute      5, 
"rv32i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0_zvqwbdota16i0p2"
+
+.attribute arch, "rv32iv_zvfwbdota16bf0p2"
+
+# CHECK: attribute      5, 
"rv32i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfwbdota16bf0p2_zvl128b1p0_zvl32b1p0_zvl64b1p0"
+
+.attribute arch, "rv32iv_zvfqwbdota8f0p2"
+# CHECK: attribute      5, 
"rv32i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfqwbdota8f0p2_zvl128b1p0_zvl32b1p0_zvl64b1p0"
+
+.attribute arch, "rv32iv_zvfbdota32f0p2"
+# CHECK: attribute      5, 
"rv32i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvfbdota32f0p2_zvl128b1p0_zvl32b1p0_zvl64b1p0"

diff  --git a/llvm/test/MC/RISCV/rvv/zvfbdota32f-invalid.s 
b/llvm/test/MC/RISCV/rvv/zvfbdota32f-invalid.s
new file mode 100644
index 0000000000000..125ffd7cfecc0
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvfbdota32f-invalid.s
@@ -0,0 +1,18 @@
+# RUN: not llvm-mc -triple=riscv64 -mattr=+experimental-zvfbdota32f %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+
+# Invalid vsetvli
+# CHECK-ERROR: operand must be 
e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
+vsetvli a0, zero, e888, m1, ta, ma
+
+# Invalid ci
+# CHECK-ERROR: immediate must be an integer in the range [0, 7]{{$}}
+vfbdota.vv v8, v16, v12, 8
+
+# Invalid vs2
+# CHECK-ERROR: invalid operand for instruction{{$}}
+vfbdota.vv v8, v17, v12, 1
+
+# Invalid vs2 and ci
+# CHECK-ERROR: :[[@LINE+1]]:16: error: invalid operand for instruction{{$}}
+vfbdota.vv v8, v17, v12, 8

diff  --git a/llvm/test/MC/RISCV/rvv/zvfbdota32f.s 
b/llvm/test/MC/RISCV/rvv/zvfbdota32f.s
new file mode 100644
index 0000000000000..afa8e441c1d27
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvfbdota32f.s
@@ -0,0 +1,17 @@
+# RUN: llvm-mc -triple=riscv64 -show-encoding -mattr=+experimental-zvfbdota32f 
%s \
+# RUN:   | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: not llvm-mc -triple=riscv64 -show-encoding -mattr=+v %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+# RUN: llvm-mc -triple=riscv64 -filetype=obj -mattr=+experimental-zvfbdota32f 
%s \
+# RUN:    | llvm-objdump -d --mattr=+experimental-zvfbdota32f 
--no-print-imm-hex - \
+# RUN:    | FileCheck %s --check-prefix=CHECK-INST
+
+# CHECK-INST: vfbdota.vv v8, v16, v12, 1
+# CHECK-ENCODING: [0x77,0x14,0x16,0xaf]
+# CHECK-ERROR: instruction requires the following: 'Zvfbdota32f' (FP32 batched 
dot-product extension){{$}}
+vfbdota.vv v8, v16, v12, 1
+
+# CHECK-INST: vfbdota.vv v8, v16, v12, 2, v0.t
+# CHECK-ENCODING: [0x77,0x14,0x26,0xad]
+# CHECK-ERROR: instruction requires the following: 'Zvfbdota32f' (FP32 batched 
dot-product extension){{$}}
+vfbdota.vv v8, v16, v12, 2, v0.t

diff  --git a/llvm/test/MC/RISCV/rvv/zvfqwbdota8f-invalid.s 
b/llvm/test/MC/RISCV/rvv/zvfqwbdota8f-invalid.s
new file mode 100644
index 0000000000000..d1288674dfd1d
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvfqwbdota8f-invalid.s
@@ -0,0 +1,18 @@
+# RUN: not llvm-mc -triple=riscv64 -mattr=+experimental-zvfqwbdota8f %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+
+# Invalid vsetvli
+# CHECK-ERROR: operand must be 
e[8|8alt|16|16alt|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]{{$}}
+vsetvli a0, zero, e888, m1, ta, ma
+
+# Invalid ci
+# CHECK-ERROR: immediate must be an integer in the range [0, 7]{{$}}
+vfqwbdota.vv v8, v16, v12, 8
+
+# Invalid vs2
+# CHECK-ERROR: invalid operand for instruction{{$}}
+vfqwbdota.vv v8, v17, v12, 1
+
+# Invalid vs2 and ci
+# CHECK-ERROR: :[[@LINE+1]]:18: error: invalid operand for instruction{{$}}
+vfqwbdota.vv v8, v17, v12, 8

diff  --git a/llvm/test/MC/RISCV/rvv/zvfqwbdota8f.s 
b/llvm/test/MC/RISCV/rvv/zvfqwbdota8f.s
new file mode 100644
index 0000000000000..896a5f617b406
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvfqwbdota8f.s
@@ -0,0 +1,31 @@
+# RUN: llvm-mc -triple=riscv64 -show-encoding 
-mattr=+experimental-zvfqwbdota8f %s \
+# RUN:   | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: not llvm-mc -triple=riscv64 -show-encoding -mattr=+v %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+# RUN: llvm-mc -triple=riscv64 -filetype=obj -mattr=+experimental-zvfqwbdota8f 
%s \
+# RUN:    | llvm-objdump -d --mattr=+experimental-zvfqwbdota8f 
--no-print-imm-hex - \
+# RUN:    | FileCheck %s --check-prefix=CHECK-INST
+
+# CHECK-INST: vsetvli zero, zero, e8alt, m1, ta, ma
+# CHECK-ENCODING: [0x57,0x70,0x00,0x1c]
+vsetvli zero, zero, e8alt, m1, ta, ma
+
+# CHECK-INST: vfqwbdota.vv v8, v16, v12, 1
+# CHECK-ENCODING: [0x77,0x14,0x16,0xbb]
+# CHECK-ERROR: instruction requires the following: 'Zvfqwbdota8f' (OCP FP8 
batched dot-product extension){{$}}
+vfqwbdota.vv v8, v16, v12, 1
+
+# CHECK-INST: vfqwbdota.vv v8, v16, v12, 2, v0.t
+# CHECK-ENCODING: [0x77,0x14,0x26,0xb9]
+# CHECK-ERROR: instruction requires the following: 'Zvfqwbdota8f' (OCP FP8 
batched dot-product extension){{$}}
+vfqwbdota.vv v8, v16, v12, 2, v0.t
+
+# CHECK-INST: vfqwbdota.alt.vv v8, v16, v12, 1
+# CHECK-ENCODING: [0x77,0x14,0x16,0xbf]
+# CHECK-ERROR: instruction requires the following: 'Zvfqwbdota8f' (OCP FP8 
batched dot-product extension){{$}}
+vfqwbdota.alt.vv v8, v16, v12, 1
+
+# CHECK-INST: vfqwbdota.alt.vv v8, v16, v12, 2, v0.t
+# CHECK-ENCODING: [0x77,0x14,0x26,0xbd]
+# CHECK-ERROR: instruction requires the following: 'Zvfqwbdota8f' (OCP FP8 
batched dot-product extension){{$}}
+vfqwbdota.alt.vv v8, v16, v12, 2, v0.t

diff  --git a/llvm/test/MC/RISCV/rvv/zvfwbdota16bf-invalid.s 
b/llvm/test/MC/RISCV/rvv/zvfwbdota16bf-invalid.s
new file mode 100644
index 0000000000000..2132e4eaa28f0
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvfwbdota16bf-invalid.s
@@ -0,0 +1,18 @@
+# RUN: not llvm-mc -triple=riscv64 -mattr=+experimental-zvfwbdota16bf %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+
+# Invalid vsetvli
+# CHECK-ERROR: operand must be 
e[8|8alt|16|16alt|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]{{$}}
+vsetvli a0, zero, e888, m1, ta, ma
+
+# Invalid ci
+# CHECK-ERROR: immediate must be an integer in the range [0, 7]{{$}}
+vfwbdota.vv v8, v16, v12, 8
+
+# Invalid vs2
+# CHECK-ERROR: invalid operand for instruction{{$}}
+vfwbdota.vv v8, v17, v12, 1
+
+# Invalid vs2 and ci
+# CHECK-ERROR: :[[@LINE+1]]:17: error: invalid operand for instruction{{$}}
+vfwbdota.vv v8, v17, v12, 8

diff  --git a/llvm/test/MC/RISCV/rvv/zvfwbdota16bf.s 
b/llvm/test/MC/RISCV/rvv/zvfwbdota16bf.s
new file mode 100644
index 0000000000000..1a4f5481c6fdf
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvfwbdota16bf.s
@@ -0,0 +1,21 @@
+# RUN: llvm-mc -triple=riscv64 -show-encoding 
-mattr=+experimental-zvfwbdota16bf %s \
+# RUN:   | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: not llvm-mc -triple=riscv64 -show-encoding -mattr=+v %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+# RUN: llvm-mc -triple=riscv64 -filetype=obj 
-mattr=+experimental-zvfwbdota16bf %s \
+# RUN:    | llvm-objdump -d --mattr=+experimental-zvfwbdota16bf 
--no-print-imm-hex - \
+# RUN:    | FileCheck %s --check-prefix=CHECK-INST
+
+# CHECK-INST: vsetvli zero, zero, e16alt, m1, ta, ma
+# CHECK-ENCODING: [0x57,0x70,0x80,0x1c]
+vsetvli zero, zero, e16alt, m1, ta, ma
+
+# CHECK-INST: vfwbdota.vv v8, v16, v12, 1
+# CHECK-ENCODING: [0x77,0x14,0x16,0xb3]
+# CHECK-ERROR: instruction requires the following: 'Zvfwbdota16bf' (BF16 
batched dot-product extension){{$}}
+vfwbdota.vv v8, v16, v12, 1
+
+# CHECK-INST: vfwbdota.vv v8, v16, v12, 2, v0.t
+# CHECK-ENCODING: [0x77,0x14,0x26,0xb1]
+# CHECK-ERROR: instruction requires the following: 'Zvfwbdota16bf' (BF16 
batched dot-product extension){{$}}
+vfwbdota.vv v8, v16, v12, 2, v0.t

diff  --git a/llvm/test/MC/RISCV/rvv/zvqwbdota-invalid.s 
b/llvm/test/MC/RISCV/rvv/zvqwbdota-invalid.s
new file mode 100644
index 0000000000000..f7fddad9680e7
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvqwbdota-invalid.s
@@ -0,0 +1,18 @@
+# RUN: not llvm-mc -triple=riscv64 -mattr=+experimental-zvqwbdota8i %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+
+# Invalid vsetvli
+# CHECK-ERROR: operand must be 
e[8|8alt|16|16alt|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]{{$}}
+vsetvli a0, zero, e888, m1, ta, ma
+
+# Invalid ci
+# CHECK-ERROR: immediate must be an integer in the range [0, 7]{{$}}
+vqwbdotau.vv v8, v16, v12, 8
+
+# Invalid vs2
+# CHECK-ERROR: invalid operand for instruction{{$}}
+vqwbdotau.vv v8, v17, v12, 1
+
+# Invalid vs2 and ci
+# CHECK-ERROR: :[[@LINE+1]]:18: error: invalid operand for instruction{{$}}
+vqwbdotau.vv v8, v17, v12, 8

diff  --git a/llvm/test/MC/RISCV/rvv/zvqwbdota.s 
b/llvm/test/MC/RISCV/rvv/zvqwbdota.s
new file mode 100644
index 0000000000000..373eb280af75a
--- /dev/null
+++ b/llvm/test/MC/RISCV/rvv/zvqwbdota.s
@@ -0,0 +1,38 @@
+# RUN: llvm-mc -triple=riscv64 -show-encoding -mattr=+experimental-zvqwbdota8i 
%s \
+# RUN:   | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: not llvm-mc -triple=riscv64 -show-encoding -mattr=+v %s 2>&1 \
+# RUN:   | FileCheck %s --check-prefix=CHECK-ERROR
+# RUN: llvm-mc -triple=riscv64 -filetype=obj -mattr=+experimental-zvqwbdota8i 
%s \
+# RUN:    | llvm-objdump -d --mattr=+experimental-zvqwbdota8i 
--no-print-imm-hex - \
+# RUN:    | FileCheck %s --check-prefix=CHECK-INST
+# RUN: llvm-mc -triple=riscv64 -filetype=obj -mattr=+experimental-zvqwbdota16i 
%s \
+# RUN:    | llvm-objdump -d --mattr=+experimental-zvqwbdota16i 
--no-print-imm-hex - \
+# RUN:    | FileCheck %s --check-prefix=CHECK-INST
+
+# CHECK-INST: vsetvli zero, zero, e8alt, m1, ta, ma
+# CHECK-ENCODING: [0x57,0x70,0x00,0x1c]
+vsetvli zero, zero, e8alt, m1, ta, ma
+
+# CHECK-INST: vsetvli zero, zero, e16alt, m1, ta, ma
+# CHECK-ENCODING: [0x57,0x70,0x80,0x1c]
+vsetvli zero, zero, e16alt, m1, ta, ma
+
+# CHECK-INST: vqwbdotau.vv v8, v16, v12, 1
+# CHECK-ENCODING: [0x77,0x04,0x16,0xbb]
+# CHECK-ERROR: instruction requires the following: 'Zvqwbdota8i' or 
'Zvqwbdota16i' (8-bit or 16-bit integer batched dot-product extension){{$}}
+vqwbdotau.vv v8, v16, v12, 1
+
+# CHECK-INST: vqwbdotau.vv v8, v16, v12, 2, v0.t
+# CHECK-ENCODING: [0x77,0x04,0x26,0xb9]
+# CHECK-ERROR: instruction requires the following: 'Zvqwbdota8i' or 
'Zvqwbdota16i' (8-bit or 16-bit integer batched dot-product extension){{$}}
+vqwbdotau.vv v8, v16, v12, 2, v0.t
+
+# CHECK-INST: vqwbdotas.vv v8, v16, v12, 1
+# CHECK-ENCODING: [0x77,0x04,0x16,0xbf]
+# CHECK-ERROR: instruction requires the following: 'Zvqwbdota8i' or 
'Zvqwbdota16i' (8-bit or 16-bit integer batched dot-product extension){{$}}
+vqwbdotas.vv v8, v16, v12, 1
+
+# CHECK-INST: vqwbdotas.vv v8, v16, v12, 2, v0.t
+# CHECK-ENCODING: [0x77,0x04,0x26,0xbd]
+# CHECK-ERROR: instruction requires the following: 'Zvqwbdota8i' or 
'Zvqwbdota16i' (8-bit or 16-bit integer batched dot-product extension){{$}}
+vqwbdotas.vv v8, v16, v12, 2, v0.t

diff  --git a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp 
b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
index 2e37a3d70c9da..cb8c53271bf1f 100644
--- a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
+++ b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
@@ -1387,9 +1387,14 @@ Experimental extensions
     zvabd                0.7
     zvbc32e              0.7
     zvdot4a8i            0.1
+    zvfbdota32f          0.2
     zvfbfa               0.1
     zvfofp8min           0.2
+    zvfqwbdota8f         0.2
+    zvfwbdota16bf        0.2
     zvkgs                0.7
+    zvqwbdota16i         0.2
+    zvqwbdota8i          0.2
     zvvfmm               0.1
     zvvmm                0.1
     zvzip                0.1


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to