[llvm-dev] [RFC][LLVM] New Constant type for representing function PLT entries

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Fri Aug 21 08:20:03 PDT 2020


On 8/21/20 1:34 AM, Renato Golin via llvm-dev wrote:
> +1 to Eric's point. We could get into a state where we must get the 
> relocation right in the IR to get a good (or worse, any) lowering.
>
> I'd rather have a canonical representation, relocation friendly, that 
> we try to keep and back ends know how to lower well.
>
> --renato


FWIW, I think that we all agree to that. I don't see that what's being 
proposed changes this general philosophy. The general problem is: what 
happens when that lowering has multiple good options, and the ABI 
requires particular choices under certain circumstances?

Thanks again,

Hal


>
> On Fri, 21 Aug 2020, 04:35 Eric Christopher via llvm-dev, 
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
>     I do have concerns about the amount of object level modeling that
>     we want to do in the IR though. While it isn't the highest level
>     IR we've managed to mostly avoid these kinds of
>     features/complications in the past. I'm definitely interested in
>     hearing some alternate implementations here and there rather than
>     a full set of constants for relocations. Keeping the IR abstract
>     enough over the object file level other than in generalizable
>     cases still feels like a win.
>
>     -eric
>
>     On Thu, Aug 20, 2020 at 8:44 PM Chris Lattner via llvm-dev
>     <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
>         Hi Leonard,
>
>         I haven’t looked at your patch in detail, but I think that
>         this is a step in the right direction.  I would like to see
>         new “Constant*”’s that directly map onto the relocations that
>         various object formats use (for example, macho has a
>         relocation for “&g1-&g2+cst”).  This would get us to a more
>         principled lowering in many cases as well as make the backend
>         modeling more specific.
>
>         -Chris
>
>>         On Aug 20, 2020, at 11:29 AM, Leonard Chan via llvm-dev
>>         <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>>         Hi all,
>>
>>         We would like to propose a new Constant type in LLVM for
>>         representing entries in the Procedure Linkage Table (PLT).
>>
>>         The PLT is a data structure used for dispatching
>>         position-independent function calls to appropriate functions
>>         where the address of the function is not known statically.
>>         Right now, if a call is made to a function, it may be lowered
>>         to a direct call to the function itself or the PLT entry for
>>         that function. LLVM has checks that dictate if the function
>>         call should be a direct reference or PLT entry, but we don’t
>>         have a way in IR to semantically represent that the PLT entry
>>         should be used.
>>
>>         The proposed constant would be analogous to BlockAddress, but
>>         instead represent the PLT entry for functions. The usage
>>         could look something like:
>>
>>         pltentry(@function)
>>
>>         and would always have the same type as the function. A
>>         pltentrywould operate exactly like a function, but the main
>>         difference is that it’s lowered to the PLT entry
>>         (function at plt) on targets that support PLT relocations. The
>>         linker can then decide if it should be relaxed into a direct
>>         reference or remain a PLT entry.
>>
>>         I have a very rough WIP implementation at
>>         https://reviews.llvm.org/D77248
>>         <https://reviews.llvm.org/D77248>.
>>
>>         Thoughts and opinions?
>>
>>         Thanks,
>>         Leonard
>>
>>         _______________________________________________
>>         LLVM Developers mailing list
>>         llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>         https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>         <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>         _______________________________________________
>         LLVM Developers mailing list
>         llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>         https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>         <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>     _______________________________________________
>     LLVM Developers mailing list
>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>     https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>     <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200821/6d5d3154/attachment.html>


More information about the llvm-dev mailing list