From: Uday Bondhugula Date: Tue, 8 Jan 2019 02:07:28 +0000 (-0800) Subject: Fix 0-d memref corner case for getMemRefRegion() X-Git-Tag: llvmorg-11-init~1466^2~2681 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e94ba6815a23de5a19df0e8e68cdae8d6410ceea;p=platform%2Fupstream%2Fllvm.git Fix 0-d memref corner case for getMemRefRegion() - fix crash on test/Transforms/canonicalize.mlir with -memref-bound-check PiperOrigin-RevId: 228268486 --- diff --git a/mlir/lib/Analysis/Utils.cpp b/mlir/lib/Analysis/Utils.cpp index d3beb78eb926..8b241ede3646 100644 --- a/mlir/lib/Analysis/Utils.cpp +++ b/mlir/lib/Analysis/Utils.cpp @@ -134,6 +134,15 @@ bool mlir::getMemRefRegion(OperationInst *opInst, unsigned loopDepth, // Build the constraints for this region. FlatAffineConstraints *regionCst = region->getConstraints(); + if (rank == 0) { + // A rank 0 memref has a 0-d region. + SmallVector ivs; + getLoopIVs(*opInst, &ivs); + SmallVector regionSymbols(ivs.begin(), ivs.end()); + regionCst->reset(0, loopDepth, 0, regionSymbols); + return true; + } + FuncBuilder b(opInst); auto idMap = b.getMultiDimIdentityMap(rank); diff --git a/mlir/test/Transforms/memref-bound-check.mlir b/mlir/test/Transforms/memref-bound-check.mlir index 757844994276..75bc25d326ac 100644 --- a/mlir/test/Transforms/memref-bound-check.mlir +++ b/mlir/test/Transforms/memref-bound-check.mlir @@ -160,3 +160,11 @@ func @delinearize_mod_floordiv() { } return } + +// CHECK-LABEL: func @zero_d_memref +func @zero_d_memref(%arg0: memref) { + %c0 = constant 0 : i32 + // A 0-d memref always has in-bound accesses! + store %c0, %arg0[] : memref + return +}