[llvm-dev] IPRA, interprocedural register allocation, question

Mehdi Amini via llvm-dev llvm-dev at lists.llvm.org
Wed Jul 13 16:25:54 PDT 2016


> On Jul 13, 2016, at 4:24 PM, Lawrence, Peter <c_plawre at qca.qualcomm.com> wrote:
> 
> Mehdi,
>                I am perusing the 3.8 trunk sources, and don’t find evidence where I
> would expect it for LLVM “downgrading” a function’s calling convention.

IPRA is a project started ~ 2 months ago, there is nothing like that in 3.8 (neither downgrading, nor upgrading).

— 
Mehdi



>  
> PrologEpilogEmitter() {         “CodeGen/”
>      ...
>      TFI->determineCalleeSaves() {        “Target/XYZ/”
>            TargetFrameLowering::determineCalleeSaves() {   “CodeGen/”
>                 Return <<< some object derived from “*CallingConv.td” >>>;     “build/lib/Target/XYX/”
>            }
>            ...
>            SavedRegs.set(Reg);  // to “add” a reg, EG for ‘hasFP’, ETC
>            ...
>      }
> }
>  
> The SavedRegs set always starts out with a predefined calling-convention value
> That comes typically from “*CallingConv.td” hence is not function-specific.
>  
> The only time SavedRegs.reset() is ever called (which is rarely to begin with)
> are for target-specific, calling-conventions-specific reasons, never function-specific.
>  
> Perhaps I’m looking in the wrong place ?
>  
> But I think while we both agree that in principle LLVM could “downgrade” a function,
> Given that it can provably see every call-site to it, it does not seem like this is actually
> Happening, unless I’m missing something ???
>  
>  
> (even if true I’m not claiming we’re missing an important case, I don’t have any
> Logical arguments either way and don’t have any evidence either way.  I’m just
> Trying to understand what LLVM actually does or does not do).
>  
>  
> --Peter Lawrence.
>  
>  
>  
>  
> 2) it seems that LLVM currently limits itself to “upgrades” calling convention changes,
> The reason being so that not all call sites are required to be changed,
> therefore calls through function pointers can use the default calling convention
> If for example there is insufficient analysis to know for sure what functions can be
> called from that site.
>  
> Is my understanding #2 of IPRA in LLVM correct ?
>  
>  
> I don’t believe this is correct, currently IPRA will limit itself to this for function that can be called from another module.
> I will freely change the calling convention, including downgrades, when it knows that it can see all call sites (+ extra conditions, like no recursion being involved I think).

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


More information about the llvm-dev mailing list