https://github.com/shiltian updated 
https://github.com/llvm/llvm-project/pull/217506

>From 5fff9d0d7075a5309ce36d0d3fc906f494387697 Mon Sep 17 00:00:00 2001
From: Shilei Tian <[email protected]>
Date: Wed, 19 Aug 2026 22:35:22 -0400
Subject: [PATCH] [NFC][AMDGPU] Introduce a new target feature for N=16 WMMAs

---
 clang/include/clang/Basic/BuiltinsAMDGPU.td   | 56 +++++++++---------
 .../include/clang/Basic/BuiltinsAMDGPUDocs.td | 20 +++++++
 llvm/include/llvm/IR/IntrinsicsAMDGPU.td      | 58 ++++++++++---------
 llvm/lib/Target/AMDGPU/AMDGPU.td              |  8 ++-
 llvm/lib/Target/AMDGPU/VOP3PInstructions.td   | 15 +++--
 5 files changed, 95 insertions(+), 62 deletions(-)

diff --git a/clang/include/clang/Basic/BuiltinsAMDGPU.td 
b/clang/include/clang/Basic/BuiltinsAMDGPU.td
index da67dc4c9314b..794fa517016a6 100644
--- a/clang/include/clang/Basic/BuiltinsAMDGPU.td
+++ b/clang/include/clang/Basic/BuiltinsAMDGPU.td
@@ -1135,115 +1135,115 @@ def __builtin_amdgcn_wmma_f32_16x16x4_f32 : 
AMDGPUBuiltin<"_ExtVector<8, float>(
   let Documentation = [DocWMMA_f32_16x16x4_f32_GFX1250];
   let ArgNames = ["a_neg", "a", "b_neg", "b", "c_mod", "c", "matrix_a_reuse", 
"matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x32_bf16 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_Constant bool, _ExtVector<16, __bf16>, _Constant bool, _ExtVector<16, 
__bf16>, _Constant short, _ExtVector<8, float>, _Constant bool, _Constant 
bool)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x32_bf16 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_Constant bool, _ExtVector<16, __bf16>, _Constant bool, _ExtVector<16, 
__bf16>, _Constant short, _ExtVector<8, float>, _Constant bool, _Constant 
bool)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_f32_16x16x32_GFX1250];
   let ArgNames = ["a_neg", "a", "b_neg", "b", "c_mod", "c", "matrix_a_reuse", 
"matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_bf16_16x16x32_bf16 : AMDGPUBuiltin<"_ExtVector<8, 
__bf16>(_Constant bool, _ExtVector<16, __bf16>, _Constant bool, _ExtVector<16, 
__bf16>, _Constant short, _ExtVector<8, __bf16>, _Constant bool, _Constant 
bool)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_bf16_16x16x32_bf16 : AMDGPUBuiltin<"_ExtVector<8, 
__bf16>(_Constant bool, _ExtVector<16, __bf16>, _Constant bool, _ExtVector<16, 
__bf16>, _Constant short, _ExtVector<8, __bf16>, _Constant bool, _Constant 
bool)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_half_16x16x32_GFX1250];
   let ArgNames = ["a_neg", "a", "b_neg", "b", "c_mod", "c", "matrix_a_reuse", 
"matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_bf16f32_16x16x32_bf16 : AMDGPUBuiltin<"_ExtVector<8, 
__bf16>(_Constant bool, _ExtVector<16, __bf16>, _Constant bool, _ExtVector<16, 
__bf16>, _Constant short, _ExtVector<8, float>, _Constant bool, _Constant 
bool)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_bf16f32_16x16x32_bf16 : AMDGPUBuiltin<"_ExtVector<8, 
__bf16>(_Constant bool, _ExtVector<16, __bf16>, _Constant bool, _ExtVector<16, 
__bf16>, _Constant short, _ExtVector<8, float>, _Constant bool, _Constant 
bool)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_bf16f32_16x16x32_GFX1250];
   let ArgNames = ["a_neg", "a", "b_neg", "b", "c_mod", "c", "matrix_a_reuse", 
"matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<8, int>, _ExtVector<8, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x64_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_i32_16x16x64_iu8 : AMDGPUBuiltin<"_ExtVector<8, 
int>(_Constant bool, _ExtVector<8, int>, _Constant bool, _ExtVector<8, int>, 
_ExtVector<8, int>, _Constant bool, _Constant bool, ...)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_i32_16x16x64_iu8 : AMDGPUBuiltin<"_ExtVector<8, 
int>(_Constant bool, _ExtVector<8, int>, _Constant bool, _ExtVector<8, int>, 
_ExtVector<8, int>, _Constant bool, _Constant bool, ...)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_i32_16x16x64_iu8_GFX1250];
   let ArgNames = ["a_sign", "a", "b_sign", "b", "c", "matrix_a_reuse", 
"matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, 
_ExtVector<8, _Float16>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x128_f8f6f4 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_Constant int, _ExtVector<16, int>, _Constant int, _ExtVector<16, int>, 
_Constant short, _ExtVector<8, float>)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x128_f8f6f4 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_Constant int, _ExtVector<16, int>, _Constant int, _ExtVector<16, int>, 
_Constant short, _ExtVector<8, float>)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_f8f6f4_GFX1250];
   let ArgNames = ["matrix_a_fmt", "a", "matrix_b_fmt", "b", "c_mod", "c"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_ExtVector<16, int>, _ExtVector<16, int>, _Constant short, _ExtVector<8, 
float>, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_fp8_16x16x128_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4 : 
AMDGPUBuiltin<"_ExtVector<8, float>(_Constant int, _ExtVector<16, int>, 
_Constant int, _ExtVector<16, int>, _Constant short, _ExtVector<8, float>, 
_Constant int, _Constant int, int, _Constant int, _Constant int, int, _Constant 
bool, _Constant bool)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4 : 
AMDGPUBuiltin<"_ExtVector<8, float>(_Constant int, _ExtVector<16, int>, 
_Constant int, _ExtVector<16, int>, _Constant short, _ExtVector<8, float>, 
_Constant int, _Constant int, int, _Constant int, _Constant int, int, _Constant 
bool, _Constant bool)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_scale_GFX1250];
   let ArgNames = ["matrix_a_fmt", "a", "matrix_b_fmt", "b", "c_mod", "c", 
"matrix_a_scale", "matrix_a_scale_fmt", "matrix_a_scale_exp", "matrix_b_scale", 
"matrix_b_scale_fmt", "matrix_b_scale_exp", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4 : 
AMDGPUBuiltin<"_ExtVector<8, float>(_Constant int, _ExtVector<16, int>, 
_Constant int, _ExtVector<16, int>, _Constant short, _ExtVector<8, float>, 
_Constant int, _Constant int, long int, _Constant int, _Constant int, long int, 
_Constant bool, _Constant bool)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4 : 
AMDGPUBuiltin<"_ExtVector<8, float>(_Constant int, _ExtVector<16, int>, 
_Constant int, _ExtVector<16, int>, _Constant short, _ExtVector<8, float>, 
_Constant int, _Constant int, long int, _Constant int, _Constant int, long int, 
_Constant bool, _Constant bool)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_scale16_GFX1250];
   let ArgNames = ["matrix_a_fmt", "a", "matrix_b_fmt", "b", "c_mod", "c", 
"matrix_a_scale", "matrix_a_scale_fmt", "matrix_a_scale_exp", "matrix_b_scale", 
"matrix_b_scale_fmt", "matrix_b_scale_exp", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_16x16x32_f16 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_Constant bool, _ExtVector<16, _Float16>, _Constant bool, _ExtVector<16, 
_Float16>, _Constant short, _ExtVector<8, float>, _Constant bool, _Constant 
bool)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_16x16x32_f16 : AMDGPUBuiltin<"_ExtVector<8, 
float>(_Constant bool, _ExtVector<16, _Float16>, _Constant bool, _ExtVector<16, 
_Float16>, _Constant short, _ExtVector<8, float>, _Constant bool, _Constant 
bool)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_f32_16x16x32_GFX1250];
   let ArgNames = ["a_neg", "a", "b_neg", "b", "c_mod", "c", "matrix_a_reuse", 
"matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f16_16x16x32_f16 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_Constant bool, _ExtVector<16, _Float16>, _Constant bool, 
_ExtVector<16, _Float16>, _Constant short, _ExtVector<8, _Float16>, _Constant 
bool, _Constant bool)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f16_16x16x32_f16 : AMDGPUBuiltin<"_ExtVector<8, 
_Float16>(_Constant bool, _ExtVector<16, _Float16>, _Constant bool, 
_ExtVector<16, _Float16>, _Constant short, _ExtVector<8, _Float16>, _Constant 
bool, _Constant bool)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_half_16x16x32_GFX1250];
   let ArgNames = ["a_neg", "a", "b_neg", "b", "c_mod", "c", "matrix_a_reuse", 
"matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_f32_32x16x128_f4 : AMDGPUBuiltin<"_ExtVector<16, 
float>(_ExtVector<16, int>, _ExtVector<8, int>, _Constant short, _ExtVector<16, 
float>)", [Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_f32_32x16x128_f4 : AMDGPUBuiltin<"_ExtVector<16, 
float>(_ExtVector<16, int>, _ExtVector<8, int>, _Constant short, _ExtVector<16, 
float>)", [Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_f4_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c"];
 }
-def __builtin_amdgcn_wmma_scale_f32_32x16x128_f4 : 
AMDGPUBuiltin<"_ExtVector<16, float>(_ExtVector<16, int>, _ExtVector<8, int>, 
_Constant short, _ExtVector<16, float>, _Constant int, _Constant int, int, 
_Constant int, _Constant int, int, _Constant bool, _Constant bool)", [Const], 
"gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_scale_f32_32x16x128_f4 : 
AMDGPUBuiltin<"_ExtVector<16, float>(_ExtVector<16, int>, _ExtVector<8, int>, 
_Constant short, _ExtVector<16, float>, _Constant int, _Constant int, int, 
_Constant int, _Constant int, int, _Constant bool, _Constant bool)", [Const], 
"wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_scale_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_scale", 
"matrix_a_scale_fmt", "matrix_a_scale_exp", "matrix_b_scale", 
"matrix_b_scale_fmt", "matrix_b_scale_exp", "matrix_a_reuse", "matrix_b_reuse"];
 }
-def __builtin_amdgcn_wmma_scale16_f32_32x16x128_f4 : 
AMDGPUBuiltin<"_ExtVector<16, float>(_ExtVector<16, int>, _ExtVector<8, int>, 
_Constant short, _ExtVector<16, float>, _Constant int, _Constant int, long int, 
_Constant int, _Constant int, long int, _Constant bool, _Constant bool)", 
[Const], "gfx1250-insts,wavefrontsize32"> {
+def __builtin_amdgcn_wmma_scale16_f32_32x16x128_f4 : 
AMDGPUBuiltin<"_ExtVector<16, float>(_ExtVector<16, int>, _ExtVector<8, int>, 
_Constant short, _ExtVector<16, float>, _Constant int, _Constant int, long int, 
_Constant int, _Constant int, long int, _Constant bool, _Constant bool)", 
[Const], "wmma-n16-insts,wavefrontsize32"> {
   let Documentation = [DocWMMA_scale16_GFX1250];
   let ArgNames = ["a", "b", "c_mod", "c", "matrix_a_scale", 
"matrix_a_scale_fmt", "matrix_a_scale_exp", "matrix_b_scale", 
"matrix_b_scale_fmt", "matrix_b_scale_exp", "matrix_a_reuse", "matrix_b_reuse"];
 }
diff --git a/clang/include/clang/Basic/BuiltinsAMDGPUDocs.td 
b/clang/include/clang/Basic/BuiltinsAMDGPUDocs.td
index 8dafa45cbbd99..a835f0e010fdc 100644
--- a/clang/include/clang/Basic/BuiltinsAMDGPUDocs.td
+++ b/clang/include/clang/Basic/BuiltinsAMDGPUDocs.td
@@ -457,6 +457,8 @@ matrix ``B`` and adds the 16x16 f32 accumulator ``C``.
   3 = neg(abs)).
 - ``matrix_a_reuse`` / ``matrix_b_reuse``: hints to the hardware that
   matrix A or B data can be reused from a previous WMMA instruction.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -473,6 +475,8 @@ result to bf16.
   3 = neg(abs)).
 - ``matrix_a_reuse`` / ``matrix_b_reuse``: hints to the hardware that
   matrix A or B data can be reused from a previous WMMA instruction.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -488,6 +492,8 @@ matrix ``A`` by a 32x16 matrix ``B`` and adds the 16x16 
accumulator ``C``.
   3 = neg(abs)).
 - ``matrix_a_reuse`` / ``matrix_b_reuse``: hints to the hardware that
   matrix A or B data can be reused from a previous WMMA instruction.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -504,6 +510,8 @@ A and B contain packed 8-bit floats passed as integer 
vectors.
   3 = neg(abs)).
 - ``matrix_a_reuse`` / ``matrix_b_reuse``: hints to the hardware that
   matrix A or B data can be reused from a previous WMMA instruction.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -520,6 +528,8 @@ A and B contain packed 8-bit floats passed as integer 
vectors.
   3 = neg(abs)).
 - ``matrix_a_reuse`` / ``matrix_b_reuse``: hints to the hardware that
   matrix A or B data can be reused from a previous WMMA instruction.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -538,6 +548,8 @@ matrix ``B`` and adds the i32 accumulator ``C``.
   a compile-time constant integer expression convertible to bool. If true,
   the result saturates instead of wrapping on overflow. If omitted, defaults
   to false.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -553,6 +565,8 @@ independently per operand.
   (FP8, BF8, FP6, BF6, or FP4). Must be compile-time constants.
 - ``c_mod``: accumulator modifier (0 = none, 1 = neg, 2 = abs,
   3 = neg(abs)).
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -565,6 +579,8 @@ and adds the 32x16 f32 accumulator ``C``.
 
 - ``c_mod``: accumulator modifier (0 = none, 1 = neg, 2 = abs,
   3 = neg(abs)).
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -584,6 +600,8 @@ WMMA with per-operand scale factors applied during the 
computation.
 - ``matrix_a_scale_exp`` / ``matrix_b_scale_exp``: 32-bit scale exponents.
 - ``matrix_a_reuse`` / ``matrix_b_reuse``: hints to the hardware that
   matrix A or B data can be reused from a previous WMMA instruction.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
@@ -656,6 +674,8 @@ scale variant.
 - ``matrix_a_scale_exp`` / ``matrix_b_scale_exp``: 64-bit scale exponents.
 - ``matrix_a_reuse`` / ``matrix_b_reuse``: hints to the hardware that
   matrix A or B data can be reused from a previous WMMA instruction.
+
+Requires target feature ``wmma-n16-insts`` and wave32.
 }];
 }
 
diff --git a/llvm/include/llvm/IR/IntrinsicsAMDGPU.td 
b/llvm/include/llvm/IR/IntrinsicsAMDGPU.td
index 62c5d3c3f44ff..b07c9657753ec 100644
--- a/llvm/include/llvm/IR/IntrinsicsAMDGPU.td
+++ b/llvm/include/llvm/IR/IntrinsicsAMDGPU.td
@@ -4215,34 +4215,36 @@ class AMDGPUWmmaScaleF4IntrinsicModsC<LLVMType 
scale_ty> :
 defset list<Intrinsic> AMDGPUWMMAIntrinsicsGFX1250 = {
 def int_amdgcn_wmma_f64_16x16x4_f64       : 
AMDGPUWmmaIntrinsicModsAll<llvm_anyfloat_ty, llvm_anyfloat_ty>;
 def int_amdgcn_wmma_f32_16x16x4_f32       : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x32_bf16     : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x32_f16      : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x32_f16      : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_bf16_16x16x32_bf16    : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_bf16f32_16x16x32_bf16 : 
AMDGPUWmmaIntrinsicModsCDiff<llvm_anyfloat_ty, llvm_anyfloat_ty, 
llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x64_fp8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x64_fp8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x64_bf8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x64_bf8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x64_fp8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x64_fp8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x64_bf8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x64_bf8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x128_fp8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x128_fp8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x128_bf8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f16_16x16x128_bf8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x128_fp8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x128_fp8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x128_bf8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_f32_16x16x128_bf8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_i32_16x16x64_iu8      : 
AMDGPUWmmaIntrinsicModsABClamp<llvm_anyint_ty, llvm_anyint_ty>;
-def int_amdgcn_wmma_f32_16x16x128_f8f6f4  : AMDGPUWmmaIntrinsicModsC_MatrixFMT;
-def int_amdgcn_wmma_scale_f32_16x16x128_f8f6f4   : 
AMDGPUWmmaScaleIntrinsicModsC<llvm_i32_ty>;
-def int_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4 : 
AMDGPUWmmaScaleIntrinsicModsC<llvm_i64_ty>;
-def int_amdgcn_wmma_f32_32x16x128_f4       : 
AMDGPUWmmaIntrinsicF4ModsC<llvm_anyint_ty, llvm_anyint_ty, llvm_anyfloat_ty>;
-def int_amdgcn_wmma_scale_f32_32x16x128_f4 : 
AMDGPUWmmaScaleF4IntrinsicModsC<llvm_i32_ty>;
-def int_amdgcn_wmma_scale16_f32_32x16x128_f4 : 
AMDGPUWmmaScaleF4IntrinsicModsC<llvm_i64_ty>;
+let TargetFeatures = "wmma-n16-insts" in {
+  def int_amdgcn_wmma_f32_16x16x32_bf16     : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x32_f16      : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x32_f16      : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_bf16_16x16x32_bf16    : 
AMDGPUWmmaIntrinsicModsC<llvm_anyfloat_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_bf16f32_16x16x32_bf16 : 
AMDGPUWmmaIntrinsicModsCDiff<llvm_anyfloat_ty, llvm_anyfloat_ty, 
llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x64_fp8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x64_fp8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x64_bf8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x64_bf8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x64_fp8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x64_fp8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x64_bf8_fp8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x64_bf8_bf8  : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x128_fp8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x128_fp8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x128_bf8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f16_16x16x128_bf8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x128_fp8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x128_fp8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x128_bf8_fp8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_f32_16x16x128_bf8_bf8 : 
AMDGPUWmmaIntrinsicModsC<llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_i32_16x16x64_iu8      : 
AMDGPUWmmaIntrinsicModsABClamp<llvm_anyint_ty, llvm_anyint_ty>;
+  def int_amdgcn_wmma_f32_16x16x128_f8f6f4  : 
AMDGPUWmmaIntrinsicModsC_MatrixFMT;
+  def int_amdgcn_wmma_scale_f32_16x16x128_f8f6f4   : 
AMDGPUWmmaScaleIntrinsicModsC<llvm_i32_ty>;
+  def int_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4 : 
AMDGPUWmmaScaleIntrinsicModsC<llvm_i64_ty>;
+  def int_amdgcn_wmma_f32_32x16x128_f4       : 
AMDGPUWmmaIntrinsicF4ModsC<llvm_anyint_ty, llvm_anyint_ty, llvm_anyfloat_ty>;
+  def int_amdgcn_wmma_scale_f32_32x16x128_f4 : 
AMDGPUWmmaScaleF4IntrinsicModsC<llvm_i32_ty>;
+  def int_amdgcn_wmma_scale16_f32_32x16x128_f4 : 
AMDGPUWmmaScaleF4IntrinsicModsC<llvm_i64_ty>;
+} // End TargetFeatures = "wmma-n16-insts"
 }
 
 class AMDGPUSWmmacIntrinsicABIdx<LLVMType A, LLVMType B, LLVMType CD, LLVMType 
Index> :
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td
index 80f61814c4f2c..a0cf0a654e29f 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPU.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td
@@ -938,6 +938,10 @@ defm WMMA128bInsts : 
AMDGPUSubtargetFeature<"wmma-128b-insts",
   "Has WMMA instructions where A and B matrices do not have duplicated data"
 >;
 
+defm WMMAN16Insts : AMDGPUSubtargetFeature<"wmma-n16-insts",
+  "Has WMMA instructions with N = 16"
+>;
+
 defm SWMMACGfx1200Insts : AMDGPUSubtargetFeature<"swmmac-gfx1200-insts",
   "Has GFX1200 SWMMAC instructions"
 >;
@@ -2374,6 +2378,7 @@ def FeatureISAVersion12_50_Common : FeatureSet<
 def FeatureISAVersion12_50 : FeatureSet<
   !listconcat(FeatureISAVersion12_50_Common.Features,
   [FeatureAddressableLocalMemorySize327680,
+   FeatureWMMAN16Insts,
    FeatureVOP3PX2IncrementsVaVdstTwice,
    FeatureSetregVGPRMSBFixup,
    FeatureCubeInsts,
@@ -2398,6 +2403,7 @@ def FeatureISAVersion12_50 : FeatureSet<
 def FeatureISAVersion12_51 : FeatureSet<
   !listconcat(FeatureISAVersion12_50_Common.Features,
   [FeatureAddressableLocalMemorySize327680,
+   FeatureWMMAN16Insts,
    FeatureFullRate64Ops,
    FeatureVOP3PX2IncrementsVaVdstTwice,
    FeatureDPALU_DPP,
@@ -3123,7 +3129,7 @@ def AMDGPUFrontendVisibleFeatures {
   FeatureSadInsts, FeatureSetPrioIncWgInst, FeatureSmemPrefetchInsts,
   FeatureTanhInsts, FeatureTensorCvtLutInsts, FeatureTransposeLoadF4F6Insts,
   FeatureVMemToLDSLoad, FeatureVmemPrefInsts, FeatureWMMA128bInsts,
-  FeatureWMMA256bInsts, FeatureXF32Insts,
+  FeatureWMMA256bInsts, FeatureWMMAN16Insts, FeatureXF32Insts,
   FeatureWavefrontSize32, FeatureWavefrontSize64, FeatureSupportsWGP,
   FeatureSupportsWave32, FeatureFastFMAF32, FeatureFastDenormalF32
   ];
diff --git a/llvm/lib/Target/AMDGPU/VOP3PInstructions.td 
b/llvm/lib/Target/AMDGPU/VOP3PInstructions.td
index 6af74a3a7e1c4..807d52eb0cdbb 100644
--- a/llvm/lib/Target/AMDGPU/VOP3PInstructions.td
+++ b/llvm/lib/Target/AMDGPU/VOP3PInstructions.td
@@ -2104,7 +2104,7 @@ multiclass WMMAInst_SrcFormats_mc<string OpName, string 
Profile> {
 
 let WaveSizePredicate = isWave32 in {
   let is_wmma_xdl = 1 in {
-    let SubtargetPredicate = isGFX125xOnly in {
+    let SubtargetPredicate = HasWMMAN16Insts in {
       defm V_WMMA_F32_16X16X32_BF16_w32     : 
WMMAInstGFX12<"v_wmma_f32_16x16x32_bf16",     F32_BF16X32_WMMA_w32, "_w32">;
       defm V_WMMA_BF16_16X16X32_BF16_w32    : 
WMMAInstGFX12<"v_wmma_bf16_16x16x32_bf16",    BF16_BF16X32_WMMA_w32, "_w32">;
       defm V_WMMA_BF16F32_16X16X32_BF16_w32 : 
WMMAInstGFX12<"v_wmma_bf16f32_16x16x32_bf16", BF16F32_BF16_WMMA_w32, "_w32", 1>;
@@ -2135,7 +2135,7 @@ let WaveSizePredicate = isWave32 in {
 
       defm V_WMMA_SCALE_F32_32X16X128_F4_w32   : 
WMMAInstGFX12<"v_wmma_scale_f32_32x16x128_f4",   F32_32X16X128_F4_SCALE_w32, 
"_w32">;
       defm V_WMMA_SCALE16_F32_32X16X128_F4_w32 : 
WMMAInstGFX12<"v_wmma_scale16_f32_32x16x128_f4", F32_32X16X128_F4_SCALE16_w32, 
"_w32">;
-    } // End SubtargetPredicate = isGFX125xOnly
+    } // End SubtargetPredicate = HasWMMAN16Insts
 
     let SubtargetPredicate = HasSWMMACGfx1250Insts in {
       defm V_SWMMAC_F32_16X16X64_BF16_w32     : 
SWMMACInstGFX12<"v_swmmac_f32_16x16x64_bf16",     F32_BF16X64_SWMMAC_w32, 
"_w32">;
@@ -2301,6 +2301,9 @@ let WaveSizePredicate = isWave64, SubtargetPredicate = 
HasSWMMACGfx1200Insts in
 let WaveSizePredicate = isWave32 in {
 let SubtargetPredicate = isGFX125xOnly in {
   defm : WMMAPat<"V_WMMA_F32_16X16X4_F32_w32",          
int_amdgcn_wmma_f32_16x16x4_f32,          F32_F32_WMMA_w32>;
+} // End SubtargetPredicate = isGFX125xOnly
+
+let SubtargetPredicate = HasWMMAN16Insts in {
   defm : WMMAPat<"V_WMMA_F32_16X16X32_BF16_w32",        
int_amdgcn_wmma_f32_16x16x32_bf16,        F32_BF16X32_WMMA_w32>;
   defm : WMMAPat<"V_WMMA_BF16_16X16X32_BF16_w32",       
int_amdgcn_wmma_bf16_16x16x32_bf16,       BF16_BF16X32_WMMA_w32>;
   defm : WMMAPat<"V_WMMA_BF16F32_16X16X32_BF16_w32",    
int_amdgcn_wmma_bf16f32_16x16x32_bf16,    BF16F32_BF16_WMMA_w32>;
@@ -2332,7 +2335,9 @@ let SubtargetPredicate = isGFX125xOnly in {
     defm : WMMAPat<"V_WMMA_SCALE_F32_16X16X128_F8F6F4_" # I # "_w32",   
int_amdgcn_wmma_scale_f32_16x16x128_f8f6f4,   
!cast<VOP3PWMMA_Profile>("F32_16X16X128_F8F6F4_SCALE_" # I # "_w32")>;
     defm : WMMAPat<"V_WMMA_SCALE16_F32_16X16X128_F8F6F4_" # I # "_w32", 
int_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4, 
!cast<VOP3PWMMA_Profile>("F32_16X16X128_F8F6F4_SCALE16_" # I # "_w32")>;
   }
+} // End SubtargetPredicate = HasWMMAN16Insts
 
+let SubtargetPredicate = HasSWMMACGfx1250Insts in {
   def : SWMMACPat<V_SWMMAC_F32_16X16X64_BF16_w32_twoaddr,     
int_amdgcn_swmmac_f32_16x16x64_bf16,     F32_BF16X64_SWMMAC_w32>;
   def : SWMMACPat<V_SWMMAC_BF16_16X16X64_BF16_w32_twoaddr,    
int_amdgcn_swmmac_bf16_16x16x64_bf16,    BF16_BF16X64_SWMMAC_w32>;
   def : SWMMACPat<V_SWMMAC_BF16F32_16X16X64_BF16_w32_twoaddr, 
int_amdgcn_swmmac_bf16f32_16x16x64_bf16, F32_BF16X64_SWMMAC_w32>;
@@ -2347,7 +2352,7 @@ let SubtargetPredicate = isGFX125xOnly in {
   def : SWMMACPat<V_SWMMAC_I32_16X16X128_IU8_w32_twoaddr,     
int_amdgcn_swmmac_i32_16x16x128_iu8,     I32_IU8X128_SWMMAC_w32>;
   def : SWMMACPat<V_SWMMAC_F32_16X16X64_F16_w32_twoaddr,      
int_amdgcn_swmmac_f32_16x16x64_f16,      F32_F16X64_SWMMAC_w32>;
   def : SWMMACPat<V_SWMMAC_F16_16X16X64_F16_w32_twoaddr,      
int_amdgcn_swmmac_f16_16x16x64_f16,      F16_F16X64_SWMMAC_w32>;
-} // End SubtargetPredicate = isGFX125xOnly
+} // End SubtargetPredicate = HasSWMMACGfx1250Insts
 
 let SubtargetPredicate = HasGFX1251GEMMInsts in {
   defm : WMMAPat<"V_WMMA_F64_16X16X4_F64_w32",  
int_amdgcn_wmma_f64_16x16x4_f64,  F64_F64X4_WMMA_w32>;
@@ -2643,14 +2648,14 @@ defm V_WMMA_F16_16X16X128_BF8_FP8_w32 : 
VOP3P_Real_WMMA_gfx1250 <0x086, F16_FP8B
 defm V_WMMA_F16_16X16X128_BF8_BF8_w32 : VOP3P_Real_WMMA_gfx1250 <0x087, 
F16_FP8BF8X128_WMMA_w32>;
 defm V_WMMA_F32_32X16X128_F4_w32      : VOP3P_Real_WMMA_gfx1250 <0x088, 
F32_32X16X128_F4_WMMA_w32>;
 
-let WaveSizePredicate = isWave32, SubtargetPredicate = isGFX1250Plus, 
DecoderNamespace = "GFX1250" in {
+let WaveSizePredicate = isWave32, SubtargetPredicate = HasWMMAN16Insts, 
DecoderNamespace = "GFX1250" in {
 defm V_WMMA_F32_16X16X128_F8F6F4         : VOP3P_Real_WMMA_SrcFormats 
<"gfx1250", 0x033, "F32_16X16X128_F8F6F4">;
 defm V_WMMA_SCALE_F32_16X16X128_F8F6F4   : VOP3PX2_Real_ScaledWMMA_SrcFormats 
<"gfx1250", 0x033, 0x35, "F32_16X16X128_F8F6F4_SCALE">;
 defm V_WMMA_SCALE16_F32_16X16X128_F8F6F4 : VOP3PX2_Real_ScaledWMMA_SrcFormats 
<"gfx1250", 0x033, 0x3a, "F32_16X16X128_F8F6F4_SCALE16">;
 
 defm V_WMMA_SCALE_F32_32X16X128_F4_w32   : VOP3PX2_Real_ScaledWMMA_F4 
<"gfx1250", 0x088, 0x35, F32_32X16X128_F4_SCALE_w32>;
 defm V_WMMA_SCALE16_F32_32X16X128_F4_w32 : VOP3PX2_Real_ScaledWMMA_F4 
<"gfx1250", 0x088, 0x3a, F32_32X16X128_F4_SCALE16_w32>;
-} // End WaveSizePredicate = isWave32, SubtargetPredicate = isGFX1250Plus, 
DecoderNamespace = "GFX1250"
+} // End WaveSizePredicate = isWave32, SubtargetPredicate = HasWMMAN16Insts, 
DecoderNamespace = "GFX1250"
 
 let SubtargetPredicate = HasSWMMACGfx1250Insts in {
   defm V_SWMMAC_F32_16X16X64_F16_w32      : VOP3P_Real_WMMA_gfx1250 <0x065, 
F32_F16X64_SWMMAC_w32>;

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

Reply via email to