[Mlir-commits] [mlir] 2b4b4c0 - [mlir][XeGPU] Add MemoryEffectsOpInterface for XeGPU memory related ops. (#125314)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Feb 3 10:57:04 PST 2025
Author: Charitha Saumya
Date: 2025-02-03T19:56:59+01:00
New Revision: 2b4b4c03899ab10df82528a05520dba3971f39e5
URL: https://github.com/llvm/llvm-project/commit/2b4b4c03899ab10df82528a05520dba3971f39e5
DIFF: https://github.com/llvm/llvm-project/commit/2b4b4c03899ab10df82528a05520dba3971f39e5.diff
LOG: [mlir][XeGPU] Add MemoryEffectsOpInterface for XeGPU memory related ops. (#125314)
`MemoryEffectsOpInterface` is needed for cleaning up the remaining
(dead) operations after XeGPU distribution into SIMT.
Added:
Modified:
mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td b/mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td
index c2335eecc3781d..7560ede058faa3 100644
--- a/mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td
+++ b/mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td
@@ -276,7 +276,9 @@ def XeGPU_PrefetchNdOp : XeGPU_Op<"prefetch_nd", []> {
}
-def XeGPU_LoadNdOp : XeGPU_Op<"load_nd", [AllElementTypesMatch<["value", "TensorDesc"]>]> {
+def XeGPU_LoadNdOp : XeGPU_Op<"load_nd", [
+ AllElementTypesMatch<["value", "TensorDesc"]>, MemoryEffects<[MemRead]>
+ ]> {
let summary = "loads a n-D block from memory (represented by TensorDesc)"
"to registers (represented by vector)";
let description = [{
@@ -327,7 +329,9 @@ def XeGPU_LoadNdOp : XeGPU_Op<"load_nd", [AllElementTypesMatch<["value", "Tensor
let hasVerifier = 1;
}
-def XeGPU_StoreNdOp : XeGPU_Op<"store_nd", [AllElementTypesMatch<["value", "TensorDesc"]>]> {
+def XeGPU_StoreNdOp : XeGPU_Op<"store_nd", [
+ AllElementTypesMatch<["value", "TensorDesc"]>, MemoryEffects<[MemWrite]>
+ ]> {
let summary = "stores a n-D block register region back to memory, currently only supports 2D";
let description = [{
@@ -548,7 +552,9 @@ def XeGPU_PrefetchOp : XeGPU_Op<"prefetch", []> {
let hasVerifier = 1;
}
-def XeGPU_LoadGatherOp : XeGPU_Op<"load", [AllElementTypesMatch<["value", "TensorDesc"]>]> {
+def XeGPU_LoadGatherOp : XeGPU_Op<"load", [
+ AllElementTypesMatch<["value", "TensorDesc"]>, MemoryEffects<[MemRead]>
+ ]> {
let summary = "load a set of scattered data points from memory.";
let description = [{ It (aka. load) load data per each work-item. The output
@@ -618,7 +624,9 @@ def XeGPU_LoadGatherOp : XeGPU_Op<"load", [AllElementTypesMatch<["value", "Tenso
let hasVerifier = 1;
}
-def XeGPU_StoreScatterOp : XeGPU_Op<"store", [AllElementTypesMatch<["value", "TensorDesc"]>]> {
+def XeGPU_StoreScatterOp : XeGPU_Op<"store", [
+ AllElementTypesMatch<["value", "TensorDesc"]>, MemoryEffects<[MemWrite]>
+ ]> {
let summary = "store data to scattered memory locations.";
let description = [{ It (aka. store) stores data to scattered memory locations. The value is
typically a 1D vector. But when the chunk size of the TensorDesc is larger than 1, it will be
More information about the Mlir-commits
mailing list