[Mlir-commits] [mlir] 9d81cca - [mlir][x86] Fix - Instrincs selection for hf8 and bf8. (#216647)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Aug 17 02:56:45 PDT 2026
Author: Arun Thangamani
Date: 2026-08-17T15:26:40+05:30
New Revision: 9d81ccaf02ac2696f3912925e5145ee66110450f
URL: https://github.com/llvm/llvm-project/commit/9d81ccaf02ac2696f3912925e5145ee66110450f
DIFF: https://github.com/llvm/llvm-project/commit/9d81ccaf02ac2696f3912925e5145ee66110450f.diff
LOG: [mlir][x86] Fix - Instrincs selection for hf8 and bf8. (#216647)
This patch fixes the error instrincs selection for `bf8` and `hf8`
types.
- Intel AMX naming: `bf8 == E5M2`, `hf8 == E4M3FN`.
Added:
Modified:
mlir/include/mlir/Dialect/X86/X86.td
mlir/test/Dialect/X86/AMX/legalize-for-llvm.mlir
mlir/test/Target/LLVMIR/amx.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/X86/X86.td b/mlir/include/mlir/Dialect/X86/X86.td
index a152b5e7ae6db..20a0695126d4e 100644
--- a/mlir/include/mlir/Dialect/X86/X86.td
+++ b/mlir/include/mlir/Dialect/X86/X86.td
@@ -1005,9 +1005,9 @@ def TileMulFOp : AMX_Op<"tile_mulf", [Pure,
} else if (elementType.isBF16()) {
intr += "bf16";
} else if (elementType.isF8E4M3FN() || elementType.isF8E5M2()) {
- intr += elementType.isF8E4M3FN() ? "b" : "h";
+ intr += elementType.isF8E4M3FN() ? "h" : "b";
if (elementType != elementTypeRhs)
- intr += elementTypeRhs.isF8E4M3FN() ? "b" : "h";
+ intr += elementTypeRhs.isF8E4M3FN() ? "h" : "b";
intr += "f8";
}
diff --git a/mlir/test/Dialect/X86/AMX/legalize-for-llvm.mlir b/mlir/test/Dialect/X86/AMX/legalize-for-llvm.mlir
index 3b45135be35a7..a88a3b6b994c1 100644
--- a/mlir/test/Dialect/X86/AMX/legalize-for-llvm.mlir
+++ b/mlir/test/Dialect/X86/AMX/legalize-for-llvm.mlir
@@ -64,7 +64,7 @@ func.func @mulfp16(%arg0: memref<?x?xf16>, %arg1: memref<?x?xf32>) {
// CHECK: llvm.call_intrinsic "llvm.x86.tilezero.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
-// CHECK: llvm.call_intrinsic "llvm.x86.tdpbf8ps.internal"
+// CHECK: llvm.call_intrinsic "llvm.x86.tdphf8ps.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tilestored64.internal"
func.func @mulf8E4M3FN(%arg0: memref<?x?xf8E4M3FN>, %arg1: memref<?x?xf32>) {
%0 = arith.constant 0 : index
@@ -80,7 +80,7 @@ func.func @mulf8E4M3FN(%arg0: memref<?x?xf8E4M3FN>, %arg1: memref<?x?xf32>) {
// CHECK: llvm.call_intrinsic "llvm.x86.tilezero.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
-// CHECK: llvm.call_intrinsic "llvm.x86.tdpbhf8ps.internal"
+// CHECK: llvm.call_intrinsic "llvm.x86.tdphbf8ps.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tilestored64.internal"
func.func @mulf8E4M3FNxf8E5M2(%arg0: memref<?x?xf8E5M2>, %arg1: memref<?x?xf32>) {
%0 = arith.constant 0 : index
@@ -96,7 +96,7 @@ func.func @mulf8E4M3FNxf8E5M2(%arg0: memref<?x?xf8E5M2>, %arg1: memref<?x?xf32>)
// CHECK: llvm.call_intrinsic "llvm.x86.tilezero.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
-// CHECK: llvm.call_intrinsic "llvm.x86.tdphbf8ps.internal"
+// CHECK: llvm.call_intrinsic "llvm.x86.tdpbhf8ps.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tilestored64.internal"
func.func @mulf8E5M2xf8E4M3FN(%arg0: memref<?x?xf8E4M3FN>, %arg1: memref<?x?xf32>) {
%0 = arith.constant 0 : index
@@ -112,7 +112,7 @@ func.func @mulf8E5M2xf8E4M3FN(%arg0: memref<?x?xf8E4M3FN>, %arg1: memref<?x?xf32
// CHECK: llvm.call_intrinsic "llvm.x86.tilezero.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tileloadd64.internal"
-// CHECK: llvm.call_intrinsic "llvm.x86.tdphf8ps.internal"
+// CHECK: llvm.call_intrinsic "llvm.x86.tdpbf8ps.internal"
// CHECK: llvm.call_intrinsic "llvm.x86.tilestored64.internal"
func.func @mulf8E5M2(%arg0: memref<?x?xf8E5M2>, %arg1: memref<?x?xf32>) {
%0 = arith.constant 0 : index
diff --git a/mlir/test/Target/LLVMIR/amx.mlir b/mlir/test/Target/LLVMIR/amx.mlir
index be74dc199af72..f41fc59cccd16 100644
--- a/mlir/test/Target/LLVMIR/amx.mlir
+++ b/mlir/test/Target/LLVMIR/amx.mlir
@@ -86,10 +86,10 @@ func.func @amx_tile_mulf_f8(
%tB = x86.amx.tile_load %matB[%idx, %idx] : memref<?x?xf8E5M2> into !x86.amx.tile<16x64xf8E5M2>
%tA1 = x86.amx.tile_load %matA[%c0, %c0] : memref<?x?xf8E4M3FN> into !x86.amx.tile<16x64xf8E4M3FN>
%tB1 = x86.amx.tile_load %matB[%c0, %c0] : memref<?x?xf8E5M2> into !x86.amx.tile<16x64xf8E5M2>
- // CHECK: call x86_amx @llvm.x86.tdpbf8ps.internal
- // CHECK: call x86_amx @llvm.x86.tdpbhf8ps.internal
- // CHECK: call x86_amx @llvm.x86.tdphbf8ps.internal
// CHECK: call x86_amx @llvm.x86.tdphf8ps.internal
+ // CHECK: call x86_amx @llvm.x86.tdphbf8ps.internal
+ // CHECK: call x86_amx @llvm.x86.tdpbhf8ps.internal
+ // CHECK: call x86_amx @llvm.x86.tdpbf8ps.internal
%tRes = x86.amx.tile_mulf %tA, %tA1, %acc
: !x86.amx.tile<16x64xf8E4M3FN>, !x86.amx.tile<16x64xf8E4M3FN>, !x86.amx.tile<16x16xf32>
%tRes1 = x86.amx.tile_mulf %tA, %tB, %acc
More information about the Mlir-commits
mailing list