[Mlir-commits] [mlir] [mlir][memref] Verify out-of-bounds access for `memref.subview` (PR #131876)
Matthias Springer
llvmlistbot at llvm.org
Tue Mar 18 11:08:47 PDT 2025
================
@@ -36,6 +36,64 @@ LogicalResult mlir::verifyListOfOperandsOrIntegers(Operation *op,
return success();
}
+SliceBoundsVerificationResult mlir::verifyInBoundsSlice(
+ ArrayRef<int64_t> shape, ArrayRef<int64_t> staticOffsets,
+ ArrayRef<int64_t> staticSizes, ArrayRef<int64_t> staticStrides,
+ bool generateErrorMessage) {
+ SliceBoundsVerificationResult result;
+ result.isValid = true;
+ for (int64_t i = 0, e = shape.size(); i < e; ++i) {
+ // Nothing to verify for dynamic source dims.
+ if (ShapedType::isDynamic(shape[i]))
+ continue;
+ // Nothing to verify if the offset is dynamic.
+ if (ShapedType::isDynamic(staticOffsets[i]))
+ continue;
+ if (staticOffsets[i] >= shape[i]) {
+ result.errorMessage =
+ std::string("offset ") + std::to_string(i) +
+ " is out-of-bounds: " + std::to_string(staticOffsets[i]) +
+ " >= " + std::to_string(shape[i]);
+ result.isValid = false;
+ return result;
+ }
+ if (ShapedType::isDynamic(staticSizes[i]) ||
+ ShapedType::isDynamic(staticStrides[i]))
+ continue;
+ int64_t lastPos =
+ staticOffsets[i] + (staticSizes[i] - 1) * staticStrides[i];
+ if (lastPos >= shape[i]) {
+ result.errorMessage = std::string("slice along dimension ") +
+ std::to_string(i) +
+ " runs out-of-bounds: " + std::to_string(lastPos) +
+ " >= " + std::to_string(shape[i]);
+ result.isValid = false;
+ return result;
+ }
+ }
+ return result;
+}
+
+SliceBoundsVerificationResult mlir::verifyInBoundsSlice(
+ ArrayRef<int64_t> shape, ArrayRef<OpFoldResult> mixedOffsets,
+ ArrayRef<OpFoldResult> mixedSizes, ArrayRef<OpFoldResult> mixedStrides,
+ bool generateErrorMessage) {
+ auto getStaticValues = [](ArrayRef<OpFoldResult> ofrs) {
----------------
matthias-springer wrote:
Note: We have something like this in `Dialect/Utils/StaticValueUtils.h`, but it cannot be used due to layering constraints. (Interfaces should not depend on dialects.)
https://github.com/llvm/llvm-project/pull/131876
More information about the Mlir-commits
mailing list