On Fri, Oct 11, 2013 at 12:40 PM, Eric Christopher
<echr...@gmail.com> wrote:
>> It depends upon the goals. If the goal is to make debug information
>> post-link smaller then just using the type hashing machinery for
>> structs will be sufficient.
>
>
> By "the type hashing machinery for structs", are you referring to the type
> hashing at the back end?
>
I am, yes, since there's no other place we do currently.
>>
>> However, if it's to save space during an
>> LTO link then we'll want to do it in the front end.
>
>
> Yes, my purpose here is to save memory space in number of MDNodes (also # of
> DIEs) generated in a LTO build.
> Type hashing at the DIE level can reduce the dwarf size.
>
I agree with both of these statements.
I also agree with the desire to help LTO memory consumption so we'll
need something from the front end for this since we'd like to continue
to use the folding set to do the uniquing.
Hi Eric,
Assume that we need to do type hashing (i.e. assume Doug's rules for merging C types do not apply), would you
like it to be done on AST types or IR debug info metadata types?
One possibility is to hash the IR debug info types in DIBuilder::finalize.
When we are creating the MD nodes, we can provide a simple identifier that is unique within the DIBuider. In finailize(),
we update the identifier to include a hash value (prepend the type name), so types constructed by one DIBuilder will be unique
from types constructed by another DIBUilder unless they are structurally equivalent by having the same hash.
We can then use the folding set to do the uniquing across CUs.
Thanks,
Manman
-eric