From 413fa68c135692b70d3c9809ba22fed552e540a8 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Thu, 5 Dec 2024 14:24:25 -0800 Subject: [PATCH] [MLIR][GPU] Fix memref.dim folding with out-of-bound index Fixes #118760 --- mlir/lib/Dialect/GPU/IR/GPUDialect.cpp | 3 ++- mlir/test/Dialect/GPU/canonicalize.mlir | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp index 2f96f10b662f8..ee00fbeb28b61 100644 --- a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp +++ b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp @@ -2075,7 +2075,8 @@ struct SimplifyDimOfAllocOp : public OpRewritePattern { return failure(); auto memrefType = llvm::dyn_cast(dimOp.getSource().getType()); - if (!memrefType || !memrefType.isDynamicDim(index.value())) + if (!memrefType || index.value() >= memrefType.getRank() || + !memrefType.isDynamicDim(index.value())) return failure(); auto alloc = dimOp.getSource().getDefiningOp(); diff --git a/mlir/test/Dialect/GPU/canonicalize.mlir b/mlir/test/Dialect/GPU/canonicalize.mlir index d342ae9df10ee..33ce98e6da0ed 100644 --- a/mlir/test/Dialect/GPU/canonicalize.mlir +++ b/mlir/test/Dialect/GPU/canonicalize.mlir @@ -152,6 +152,17 @@ func.func @gpu_dim_of_alloc(%size: index) -> index { // ----- +// CHECK-LABEL: func @out_of_bound_memref.dim +// CHECK: %[[MEMREF:.[a-z0-9A-Z_]+]] = memref.dim +// CHECK: return %[[MEMREF]] : index +func.func @out_of_bound_memref.dim(%arg : memref, %size: index) -> index { + %c2 = arith.constant 2 : index + %1 = memref.dim %arg, %c2 : memref + return %1 : index +} + +// ----- + // CHECK-LABEL: func @simplify_gpu_launch func.func @simplify_gpu_launch() attributes {llvm.emit_c_interface} { %cst = arith.constant 0.000000e+00 : f32