[LLVMdev] Linking Modules

Chris Lattner clattner at apple.com
Sat Feb 4 17:23:47 PST 2012


On Feb 3, 2012, at 10:05 AM, David Greene wrote:

> I've hacked around this problem in the past but I would like to
> do things the "right" way.
> 
> Suppose I have this scenario:
> 
> - A data structure that maps LLVM Values off to the side.
> - We link two Modules together
> 
> The data structure is a map from one IR to another, so when we see
> objects in one IR we know which LLVM Values represent them.  Somehow the
> data structure needs to be updated with the new Values created as a
> result of the linking.
> 
> I was hoping a TrackingVH could do this but it's not enough.  For one
> thing, RAUW is not called for everything during linking, specifically,
> when copying from the source module.  To my surprise LLVM actually
> creates whole new Values in some cases and just copies the bits from the
> source Module Value to the new Value.  RAUW is never called, only the
> linker's ValueMap is updated.
> 
> I used to hack this by sending down my own ValueMap and using the
> resulting mapping to update the data structure.  But that requires
> changing the interface to LinkModules and some of its guts.
> 
> How do I do this the "right" way?  Do I need a custome CallbackcVH or
> does something already exist to do this?

One option is to make a named metadata node in the module with a list of everything you care about.  After linking is done, zip down the list to see what got updated.

-Chris



More information about the llvm-dev mailing list