[Mlir-commits] [mlir] Add options to generate-runtime-verification to enable faster pass running (PR #160331)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Oct 1 05:26:48 PDT 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions h,cpp -- mlir/include/mlir/Transforms/Passes.h mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp mlir/lib/Dialect/Tensor/Transforms/RuntimeOpVerification.cpp mlir/lib/Interfaces/RuntimeVerifiableOpInterface.cpp mlir/lib/Transforms/GenerateRuntimeVerification.cpp
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp
index 6c45bccb2..15eb51a6d 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/RuntimeOpVerification.cpp
@@ -31,8 +31,10 @@ template <typename T>
struct StructuredOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<
StructuredOpInterface<T>, T> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto linalgOp = llvm::cast<LinalgOp>(op);
SmallVector<Range> loopRanges = linalgOp.createLoopRanges(builder, loc);
diff --git a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp
index 66d4df230..291da1f76 100644
--- a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp
+++ b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp
@@ -37,8 +37,10 @@ Value generateInBoundsCheck(OpBuilder &builder, Location loc, Value value,
struct AssumeAlignmentOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<
AssumeAlignmentOpInterface, AssumeAlignmentOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto assumeOp = cast<AssumeAlignmentOp>(op);
Value ptr = ExtractAlignedPointerAsIndexOp::create(builder, loc,
assumeOp.getMemref());
@@ -48,9 +50,9 @@ struct AssumeAlignmentOpInterface
Value isAligned =
arith::CmpIOp::create(builder, loc, arith::CmpIPredicate::eq, rest,
arith::ConstantIndexOp::create(builder, loc, 0));
- cf::AssertOp::create(builder, loc, isAligned,
- generateErrorMessage(
- op, "memref is not aligned to " +
+ cf::AssertOp::create(
+ builder, loc, isAligned,
+ generateErrorMessage(op, "memref is not aligned to " +
std::to_string(assumeOp.getAlignment())));
}
};
@@ -58,8 +60,10 @@ struct AssumeAlignmentOpInterface
struct CastOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<CastOpInterface,
CastOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto castOp = cast<CastOp>(op);
auto srcType = cast<BaseMemRefType>(castOp.getSource().getType());
@@ -115,8 +119,8 @@ struct CastOpInterface
builder, loc, arith::CmpIPredicate::eq, srcDimSz, resultDimSz);
cf::AssertOp::create(
builder, loc, isSameSz,
- generateErrorMessage(
- op, "size mismatch of dim " + std::to_string(it.index())));
+ generateErrorMessage(op, "size mismatch of dim " +
+ std::to_string(it.index())));
}
// Get result offset and strides.
@@ -151,8 +155,8 @@ struct CastOpInterface
builder, loc, arith::CmpIPredicate::eq, srcStride, resultStrideVal);
cf::AssertOp::create(
builder, loc, isSameStride,
- generateErrorMessage(
- op, "stride mismatch of dim " + std::to_string(it.index())));
+ generateErrorMessage(op, "stride mismatch of dim " +
+ std::to_string(it.index())));
}
}
};
@@ -160,8 +164,10 @@ struct CastOpInterface
struct CopyOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<CopyOpInterface,
CopyOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto copyOp = cast<CopyOp>(op);
BaseMemRefType sourceType = copyOp.getSource().getType();
BaseMemRefType targetType = copyOp.getTarget().getType();
@@ -191,9 +197,9 @@ struct CopyOpInterface
Value targetDim = getDimSize(copyOp.getTarget(), rankedTargetType, i);
Value sameDimSize = arith::CmpIOp::create(
builder, loc, arith::CmpIPredicate::eq, sourceDim, targetDim);
- cf::AssertOp::create(builder, loc, sameDimSize,
- generateErrorMessage(
- op, "size of " + std::to_string(i) +
+ cf::AssertOp::create(
+ builder, loc, sameDimSize,
+ generateErrorMessage(op, "size of " + std::to_string(i) +
"-th source/target dim does not match"));
}
}
@@ -202,8 +208,10 @@ struct CopyOpInterface
struct DimOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<DimOpInterface,
DimOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto dimOp = cast<DimOp>(op);
Value rank = RankOp::create(builder, loc, dimOp.getSource());
Value zero = arith::ConstantIndexOp::create(builder, loc, 0);
@@ -220,8 +228,10 @@ template <typename LoadStoreOp>
struct LoadStoreOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<
LoadStoreOpInterface<LoadStoreOp>, LoadStoreOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto loadStoreOp = cast<LoadStoreOp>(op);
auto memref = loadStoreOp.getMemref();
@@ -249,8 +259,10 @@ struct LoadStoreOpInterface
struct SubViewOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<SubViewOpInterface,
SubViewOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto subView = cast<SubViewOp>(op);
MemRefType sourceType = subView.getSource().getType();
@@ -273,10 +285,10 @@ struct SubViewOpInterface
Value dimSize = metadataOp.getSizes()[i];
Value offsetInBounds =
generateInBoundsCheck(builder, loc, offset, zero, dimSize);
- cf::AssertOp::create(
- builder, loc, offsetInBounds,
- generateErrorMessage(
- op, "offset " + std::to_string(i) + " is out-of-bounds"));
+ cf::AssertOp::create(builder, loc, offsetInBounds,
+ generateErrorMessage(op, "offset " +
+ std::to_string(i) +
+ " is out-of-bounds"));
// Verify that slice does not run out-of-bounds.
Value sizeMinusOne = arith::SubIOp::create(builder, loc, size, one);
@@ -288,9 +300,9 @@ struct SubViewOpInterface
generateInBoundsCheck(builder, loc, lastPos, zero, dimSize);
cf::AssertOp::create(
builder, loc, lastPosInBounds,
- generateErrorMessage(
- op, "subview runs out-of-bounds along dimension " +
- std::to_string(i)));
+ generateErrorMessage(op,
+ "subview runs out-of-bounds along dimension " +
+ std::to_string(i)));
}
}
};
@@ -298,8 +310,10 @@ struct SubViewOpInterface
struct ExpandShapeOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<ExpandShapeOpInterface,
ExpandShapeOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto expandShapeOp = cast<ExpandShapeOp>(op);
// Verify that the expanded dim sizes are a product of the collapsed dim
@@ -329,9 +343,9 @@ struct ExpandShapeOpInterface
Value isModZero = arith::CmpIOp::create(
builder, loc, arith::CmpIPredicate::eq, mod,
arith::ConstantIndexOp::create(builder, loc, 0));
- cf::AssertOp::create(builder, loc, isModZero,
- generateErrorMessage(
- op, "static result dims in reassoc group do not "
+ cf::AssertOp::create(
+ builder, loc, isModZero,
+ generateErrorMessage(op, "static result dims in reassoc group do not "
"divide src dim evenly"));
}
}
diff --git a/mlir/lib/Dialect/Tensor/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/Tensor/Transforms/RuntimeOpVerification.cpp
index fd51f5010..c03111860 100644
--- a/mlir/lib/Dialect/Tensor/Transforms/RuntimeOpVerification.cpp
+++ b/mlir/lib/Dialect/Tensor/Transforms/RuntimeOpVerification.cpp
@@ -35,8 +35,10 @@ Value generateInBoundsCheck(OpBuilder &builder, Location loc, Value value,
struct CastOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<CastOpInterface,
CastOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto castOp = cast<CastOp>(op);
auto srcType = cast<TensorType>(castOp.getSource().getType());
@@ -75,8 +77,8 @@ struct CastOpInterface
builder, loc, arith::CmpIPredicate::eq, srcDimSz, resultDimSz);
cf::AssertOp::create(
builder, loc, isSameSz,
- generateErrorMessage(
- op, "size mismatch of dim " + std::to_string(it.index())));
+ generateErrorMessage(op, "size mismatch of dim " +
+ std::to_string(it.index())));
}
}
};
@@ -84,8 +86,10 @@ struct CastOpInterface
struct DimOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<DimOpInterface,
DimOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto dimOp = cast<DimOp>(op);
Value rank = RankOp::create(builder, loc, dimOp.getSource());
Value zero = arith::ConstantIndexOp::create(builder, loc, 0);
@@ -102,8 +106,10 @@ template <typename OpTy>
struct ExtractInsertOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<
ExtractInsertOpInterface<OpTy>, OpTy> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto extractInsertOp = cast<OpTy>(op);
Value tensor;
@@ -140,8 +146,10 @@ struct ExtractInsertOpInterface
struct ExtractSliceOpInterface
: public RuntimeVerifiableOpInterface::ExternalModel<
ExtractSliceOpInterface, ExtractSliceOp> {
- void generateRuntimeVerification(Operation *op, OpBuilder &builder,
- Location loc, function_ref<std::string(Operation *, StringRef)> generateErrorMessage) const {
+ void
+ generateRuntimeVerification(Operation *op, OpBuilder &builder, Location loc,
+ function_ref<std::string(Operation *, StringRef)>
+ generateErrorMessage) const {
auto extractSliceOp = cast<ExtractSliceOp>(op);
RankedTensorType sourceType = extractSliceOp.getSource().getType();
@@ -163,10 +171,10 @@ struct ExtractSliceOpInterface
loc, extractSliceOp.getSource(), i);
Value offsetInBounds =
generateInBoundsCheck(builder, loc, offset, zero, dimSize);
- cf::AssertOp::create(
- builder, loc, offsetInBounds,
- generateErrorMessage(
- op, "offset " + std::to_string(i) + " is out-of-bounds"));
+ cf::AssertOp::create(builder, loc, offsetInBounds,
+ generateErrorMessage(op, "offset " +
+ std::to_string(i) +
+ " is out-of-bounds"));
// Verify that slice does not run out-of-bounds.
Value sizeMinusOne = arith::SubIOp::create(builder, loc, size, one);
diff --git a/mlir/lib/Transforms/GenerateRuntimeVerification.cpp b/mlir/lib/Transforms/GenerateRuntimeVerification.cpp
index e3098a4c6..cfe531385 100644
--- a/mlir/lib/Transforms/GenerateRuntimeVerification.cpp
+++ b/mlir/lib/Transforms/GenerateRuntimeVerification.cpp
@@ -31,7 +31,7 @@ void GenerateRuntimeVerificationPass::runOnOperation() {
// Check verboseLevel is in range [0, 2].
if (verboseLevel > 2) {
getOperation()->emitError(
- "generate-runtime-verification pass: set verboseLevel to 0, 1 or 2");
+ "generate-runtime-verification pass: set verboseLevel to 0, 1 or 2");
signalPassFailure();
return;
}
@@ -45,7 +45,8 @@ void GenerateRuntimeVerificationPass::runOnOperation() {
});
// Create error message generator based on verboseLevel
- auto errorMsgGenerator = [vLevel = verboseLevel.getValue()](Operation *op, StringRef msg) -> std::string {
+ auto errorMsgGenerator = [vLevel = verboseLevel.getValue()](
+ Operation *op, StringRef msg) -> std::string {
std::string buffer;
llvm::raw_string_ostream stream(buffer);
OpPrintingFlags flags;
@@ -83,7 +84,7 @@ void GenerateRuntimeVerificationPass::runOnOperation() {
for (RuntimeVerifiableOpInterface verifiableOp : ops) {
builder.setInsertionPoint(verifiableOp);
verifiableOp.generateRuntimeVerification(builder, verifiableOp.getLoc(),
- errorMsgGenerator);
+ errorMsgGenerator);
};
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/160331
More information about the Mlir-commits
mailing list