[PATCH] D28978: [ThinLTO] Add an auto-hide feature

Mehdi AMINI via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 30 14:52:28 PST 2017


mehdi_amini added a comment.

In https://reviews.llvm.org/D28978#660963, @pcc wrote:

> Does this need to be in the summary?


The part that is  in the summary is not set in the compiler phase, but after the think-link, in order to communicate the *result* of the auto-hide analysis to the parallel backends.

>   I would have thought that the linker can use `canBeOmittedFromSymbolTable()` to implement its own auto-hiding logic. That is what ELF lld currently does.

That's kind of what this patch is doing :)

Especially we're using `Res.VisibleToRegularObj` as an input information, and this is set in gold for example there:

  case LDPR_PREVAILING_DEF_IRONLY_EXP:
    R.Prevailing = true;
    if (!Res.CanOmitFromDynSym)
      R.VisibleToRegularObj = true;
    break;

And the `Res.CanOmitFromDynSym` is set this way: `Res.CanOmitFromDynSym &= Sym.canBeOmittedFromSymbolTable();`.

I haven't checked Gold, but I think you get the point: this is only using the symbol resolution API and no "side-information" from the summary.

That said, I'm not totally happy by the resolution API right now, and especially how we derived the partition. We don't have all the information we want I believe.
I discussed it this morning with Teresa and what I think my current frustration is with the lack of precise enough lattice in the partitions resolution. I think we should be able to get this:

  External 
        | > Regular Object
        | > Outside of the DSO
        | > PartitionLTO
              | > RegularLTO
              | > PartitionThinLTO
                    | > Individual ThinLTO Module

To get this, I believe right now we need one mode field in the symbol resolution API (example: `unsigned VisibleOutsideDSO : 1`) to distinguish  between the two first cases,


https://reviews.llvm.org/D28978





More information about the llvm-commits mailing list