[Mlir-commits] [mlir] ce4da0c - Enables textual IR roundtripping through `--verifyRoundtrip` (#82946)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Sun Feb 25 20:34:59 PST 2024
Author: Matteo Franciolini
Date: 2024-02-25T20:34:56-08:00
New Revision: ce4da0c4ee6e414ddb771d45b68bc7e31b12970e
URL: https://github.com/llvm/llvm-project/commit/ce4da0c4ee6e414ddb771d45b68bc7e31b12970e
DIFF: https://github.com/llvm/llvm-project/commit/ce4da0c4ee6e414ddb771d45b68bc7e31b12970e.diff
LOG: Enables textual IR roundtripping through `--verifyRoundtrip` (#82946)
The patch enables roundtrip to textual file when running
`--verifyRoundtrip`. The verification is successful if both textual and
bytecode formats can roundtrip successfully.
Added:
Modified:
mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
index f01c7631decb77..2755a949fb947c 100644
--- a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
+++ b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
@@ -276,6 +276,7 @@ static LogicalResult doVerifyRoundTrip(Operation *op,
if (!irdlFile.empty() && failed(loadIRDLDialects(irdlFile, roundtripContext)))
return failure();
+ std::string testType = (useBytecode) ? "bytecode" : "textual";
// Print a first time with custom format (or bytecode) and parse it back to
// the roundtripModule.
{
@@ -289,7 +290,7 @@ static LogicalResult doVerifyRoundTrip(Operation *op,
}
} else {
op->print(ostream,
- OpPrintingFlags().printGenericOpForm(false).enableDebugInfo());
+ OpPrintingFlags().printGenericOpForm().enableDebugInfo());
}
FallbackAsmResourceMap fallbackResourceMap;
ParserConfig parseConfig(&roundtripContext, /*verifyAfterParse=*/true,
@@ -297,8 +298,8 @@ static LogicalResult doVerifyRoundTrip(Operation *op,
roundtripModule =
parseSourceString<Operation *>(ostream.str(), parseConfig);
if (!roundtripModule) {
- op->emitOpError()
- << "failed to parse bytecode back, cannot verify round-trip.\n";
+ op->emitOpError() << "failed to parse " << testType
+ << " content back, cannot verify round-trip.\n";
return failure();
}
}
@@ -317,10 +318,12 @@ static LogicalResult doVerifyRoundTrip(Operation *op,
}
if (reference != roundtrip) {
// TODO implement a
diff .
- return op->emitOpError() << "roundTrip testing roundtripped module
diff ers "
- "from reference:\n<<<<<<Reference\n"
- << reference << "\n=====\n"
- << roundtrip << "\n>>>>>roundtripped\n";
+ return op->emitOpError()
+ << testType
+ << " roundTrip testing roundtripped module
diff ers "
+ "from reference:\n<<<<<<Reference\n"
+ << reference << "\n=====\n"
+ << roundtrip << "\n>>>>>roundtripped\n";
}
return success();
@@ -328,10 +331,9 @@ static LogicalResult doVerifyRoundTrip(Operation *op,
static LogicalResult doVerifyRoundTrip(Operation *op,
const MlirOptMainConfig &config) {
- // Textual round-trip isn't fully robust at the moment (for example implicit
- // terminator are losing location informations).
-
- return doVerifyRoundTrip(op, config, /*useBytecode=*/true);
+ auto txtStatus = doVerifyRoundTrip(op, config, /*useBytecode=*/false);
+ auto bcStatus = doVerifyRoundTrip(op, config, /*useBytecode=*/true);
+ return success(succeeded(txtStatus) && succeeded(bcStatus));
}
/// Perform the actions on the input file indicated by the command line flags
More information about the Mlir-commits
mailing list