[Mlir-commits] [mlir] Enables textual IR roundtripping through `--verifyRoundtrip` (PR #82946)
Matteo Franciolini
llvmlistbot at llvm.org
Sun Feb 25 18:33:46 PST 2024
================
@@ -266,18 +266,62 @@ static LogicalResult doVerifyRoundTrip(Operation *op,
const MlirOptMainConfig &config,
bool useBytecode) {
// We use a new context to avoid resource handle renaming issue in the diff.
+ auto initializeNewContext = [&](MLIRContext &newContext) -> LogicalResult {
+ OwningOpRef<Operation *> roundtripModule;
+ newContext.appendDialectRegistry(op->getContext()->getDialectRegistry());
+ if (op->getContext()->allowsUnregisteredDialects())
+ newContext.allowUnregisteredDialects();
+ StringRef irdlFile = config.getIrdlFile();
+ if (!irdlFile.empty() && failed(loadIRDLDialects(irdlFile, newContext)))
+ return failure();
+ return success();
+ };
MLIRContext roundtripContext;
- OwningOpRef<Operation *> roundtripModule;
- roundtripContext.appendDialectRegistry(
- op->getContext()->getDialectRegistry());
- if (op->getContext()->allowsUnregisteredDialects())
- roundtripContext.allowUnregisteredDialects();
- StringRef irdlFile = config.getIrdlFile();
- if (!irdlFile.empty() && failed(loadIRDLDialects(irdlFile, roundtripContext)))
+ if (failed(initializeNewContext(roundtripContext)))
return failure();
+ auto parseMLIRString = [&](const std::string &stringBuffer,
+ MLIRContext &context) -> OwningOpRef<Operation *> {
+ FallbackAsmResourceMap fallbackResourceMap;
+ ParserConfig parseConfig(&context, /*verifyAfterParse=*/true,
+ &fallbackResourceMap);
+ OwningOpRef<Operation *> roundtripModule =
+ parseSourceString<Operation *>(stringBuffer, parseConfig);
+ return roundtripModule;
+ };
+
+ // Print the operation to string. If we are going to verify the roundtrip to
+ // bytecode, make sure first that a roundtrip to text of the same IR is
+ // possible.
+ std::string reference;
+ {
+ llvm::raw_string_ostream ostream(reference);
+ op->print(ostream,
+ OpPrintingFlags().printGenericOpForm().enableDebugInfo());
+ // When testing a bytecode roundtrip, we don't want to report failure if the
+ // textual roundtrip also fails.
----------------
mfrancio wrote:
Ah! it seems you had all already setup for this. Updated (as well as the scope of the patch).
https://github.com/llvm/llvm-project/pull/82946
More information about the Mlir-commits
mailing list