[MLIR][SPIRV] Create new ctx for deserialization in roundtrips.
authorergawy <kareem.ergawy@gmail.com>
Fri, 18 Sep 2020 15:47:37 +0000 (11:47 -0400)
committerLei Zhang <antiagainst@google.com>
Fri, 18 Sep 2020 15:53:51 +0000 (11:53 -0400)
Roundtripping SPIR-V modules used the same MLIRContext object for both
ways of the trip. This resulted in deserialization using a context
object already containing Types constructed during serialization.
This commit rectifies that by creating a new MLIRContext during
deserialization.

Reviewed By: mravishankar, antiagainst

Differential Revision: https://reviews.llvm.org/D87692

mlir/lib/Dialect/SPIRV/Serialization/TranslateRegistration.cpp

index 8a6032f8f417e5ce68c612df566e5d6802a81f9b..ee2a1e436446563920f4ad38ba36c9010b0425e0 100644 (file)
@@ -136,14 +136,17 @@ static LogicalResult roundTripModule(ModuleOp srcModule, bool emitDebugInfo,
   if (failed(spirv::serialize(*spirvModules.begin(), binary, emitDebugInfo)))
     return failure();
 
+  MLIRContext deserializationContext(false);
+  context->getDialectRegistry().loadAll(&deserializationContext);
   // Then deserialize to get back a SPIR-V module.
-  spirv::OwningSPIRVModuleRef spirvModule = spirv::deserialize(binary, context);
+  spirv::OwningSPIRVModuleRef spirvModule =
+      spirv::deserialize(binary, &deserializationContext);
   if (!spirvModule)
     return failure();
 
   // Wrap around in a new MLIR module.
   OwningModuleRef dstModule(ModuleOp::create(FileLineColLoc::get(
-      /*filename=*/"", /*line=*/0, /*column=*/0, context)));
+      /*filename=*/"", /*line=*/0, /*column=*/0, &deserializationContext)));
   dstModule->getBody()->push_front(spirvModule.release());
   dstModule->print(output);