[LLVMdev] How to tell whether a GlobalValue is user-defined

David Majnemer
2014-08-28T04:32:50Z

On Wed, Aug 27, 2014 at 9:13 PM, Rafael Espíndola <
rafael.espindola at gmail.com> wrote:

> >> Agreed. If ld64 can drop support for .o produced by the old gcc
that
> >> would be awesome. Failing that, what is really needed is
> > Because of static archives, the linker has to support old .o files for
> quite a while.   I also don’t know when clang starting getting this right.
>
> r123585 (Jan 16 17:19:34 2011) I think.
>
> > Also, this seems like linker complexity for a very unlikely
optimization
> (two named constants with same value).  If someone cares about this level
> of optimization, they can use LTO which will do all the constant merging in
> LLVM.
> >
> >>
> >> LLVM should only put constants in mergeable sections only if
(among
> >> other things) they require only symbols that start with
'l' or 'L'.
> > Not sure what you mean here. What is "requiring”?  Are we talking
about
> this code in TargetLoweringObjectFileMachO::SelectSectionForGlobal()
>
> I mean "the correspoinding symbol name will start with".
>
> >  if (Kind.isMergeableConst()) {
> >     if (Kind.isMergeableConst4())
> >       return FourByteConstantSection;
> >     if (Kind.isMergeableConst8())
> >       return EightByteConstantSection;
> >     if (Kind.isMergeableConst16())
> >       return SixteenByteConstantSection;
> >   }
> >
> > Can’t we just change the first ‘if’ to:
> >
> >  if (Kind.isMergeableConst() && !GV.hasName()) {
> >
> > That should leave any “named” constants in the __const section instead
> of moving them to the __literal section. (Though I don’t actually know if
> anonymous constants were given some name earlier so hasName() is useless at
> this point).
>
> That seems too strict. A private GV can have a name, but it will be
> printed with a 'L' or 'l' prefix, so it should not be a
problem.
>
> In other words, it looks like you want something like the attached patch.
>

Rafael, would it be more correct to use hasLocalLinkage() instead of
hasPrivateLinkage() ?


>
> Cheers,
> Rafael
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20140827/7545274b/attachment.html>