diff --git a/mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td b/mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td index c2335eecc3781..7560ede058faa 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