[llvm-commits] [llvm] r135172 - /llvm/trunk/lib/Transforms/Utils/ValueMapper.cpp

Chris Lattner clattner at apple.com
Thu Jul 14 14:27:44 PDT 2011


On Jul 14, 2011, at 1:39 PM, Devang Patel wrote:
>> Thanks for the review Devang.  I'm pretty sure it's true (and only get two subprograms for your example) because the MDNodes backing the DebugLoc are uniqued at the LLVMContext level just like the two loaded modules.
>> 
>> After linking, I get:
>> 
>> $  llvm-link a.ll b.ll -S |& grep subpro
>> !2 = metadata !{i32 589870, i32 0, metadata !3, metadata !"foo", metadata !"foo", metadata !"", metadata !3, i32 2, metadata !4, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, i32 ()* @foo, null, null} ; [ DW_TAG_subprogram ]
>> !7 = metadata !{i32 589870, i32 0, metadata !8, metadata !"bar", metadata !"bar", metadata !"", metadata !8, i32 1, metadata !9, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, i32 ()* @bar, null, null} ; [ DW_TAG_subprogram ]
>> 
>> Linking the other way I get the same result:
>> $ llvm-link b.ll a.ll -S | & grep subpro
>> !2 = metadata !{i32 589870, i32 0, metadata !3, metadata !"bar", metadata !"bar", metadata !"", metadata !3, i32 1, metadata !4, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, i32 ()* @bar, null, null} ; [ DW_TAG_subprogram ]
>> !7 = metadata !{i32 589870, i32 0, metadata !8, metadata !"foo", metadata !"foo", metadata !"", metadata !8, i32 2, metadata !9, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, i32 ()* @foo, null, null} ; [ DW_TAG_subprogram ]
>> 
>> Am I missing something here?
> 

FYI, I reverted the patch in r135191 to make sure that the tree isn't broken, but...

> I get following
> 
> $ llvm-link a.ll b.ll -S |grep subprogram
> !2 = metadata !{i32 589870, i32 0, metadata !3, metadata !"foo", metadata !"foo", metadata !"", metadata !3, i32 2, metadata !4, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, i32 ()* @foo, null, null} ; [ DW_TAG_subprogram ]
> !7 = metadata !{i32 589870, i32 0, metadata !8, metadata !"bar", metadata !"bar", metadata !"", metadata !8, i32 1, metadata !9, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, i32 ()* @bar, null, null} ; [ DW_TAG_subprogram ]
> !16 = metadata !{i32 589870, i32 0, metadata !8, metadata !"bar", metadata !"bar", metadata !"", metadata !8, i32 1, metadata !9, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, null, null, null} ; [ DW_TAG_subprogram ]
> 
> These subprogram nodes are reachable through DebugLoc and they are also part of named metadata node !llvm.dbg.sp. So if DebugLoc is not mapped then it'd not point to mapped !llvm.dbg.sp nodes.  Here in my case, !7 is an !llvm.dbg.sp element and !16 is reached through ret instructions's DebugLoc.

Are you building with mainline?  Do you have any idea why this isn't happening for me?  Do you have another suggested way of doing this?

If I call DebugLoc::getScopeAndInlinedAt() will that avoid unpacking the debugloc?

-Chris



More information about the llvm-commits mailing list