Handling of metadata in llvm::CloneModule

Sorry if this has been discussed already...

I am trying to understand whether there is an underlying reason why llvm::CloneModule takes argument function ShouldCloneDefinition to discriminate on objects being cloned, but blindly copies all named metadata...?

In my case this results in debug nodes that are creating uses/relocations for global objects that were _not_ copied per ShouldCloneDefinition...

Before I jump head on into unfamiliar code, I would like to understand why this wheel was not invented in the first place :slight_smile:


Sergei Larin

P.S. Also, if this does need fixing, please suggest the proper strategy for it... Thanks.

Hi Sergei,

The issue of importing only the minimum amount metadata is really non-trivial. You may want to have a look at:

Login [ThinLTO] Link in only necessary DICompileUnit operands

I was afraid of that...

Can I approach it from a different direction and clean up "dead" debug nodes in the module split code? That should be possible in the fashion of StripDeadDebugInfo (lib/Transforms/IPO/StripSymbols.cpp)

I currently is unable to link splitted module when -g is used...