================
@@ -251,32 +255,50 @@ bool BackendConsumer::LinkInModules(llvm::Module *M, bool
ShouldLinkFiles) {
}
CurLinkModule = LM.Module.get();
-
- // TODO: If CloneModule() is updated to support cloning of unmaterialized
- // modules, we can remove this
bool Err;
- if (Error E = CurLinkModule->materializeAll())
- return false;
// Create a Clone to move to the linker, which preserves the original
// linking modules, allowing them to be linked again in the future
- // TODO: Add a ShouldCleanup option to make Cloning optional. When
- // set, we can pass the original modules to the linker for cleanup
- std::unique_ptr<llvm::Module> Clone = llvm::CloneModule(*LM.Module);
+ if (ClRelinkBuiltinBitcodePostop) {
----------------
lamb-j wrote:
Open to suggestions on a cleaner way to do this. Ideally we could do something
like the following, instead of duplicating the functionality twice:
```
std::unique_ptr<llvm::Module> LinkMod;
if (ClRelinkBuiltinBitcodePostop)
LinkMod = Clone
else
LinkMod = Original
// Link with LinkMod
```
But due to `llvm::Module` not having a default constructor, I haven't figured
out a way to do something like the above. That is, creating a single variable
that can represent both the Original and the Clone, and set it depending on the
provided boolean.
https://github.com/llvm/llvm-project/pull/72478
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits