[llvm-dev] IPRA, interprocedural register allocation, question
Mehdi Amini via llvm-dev
llvm-dev at lists.llvm.org
Wed Jul 13 16:47:52 PDT 2016
You mentioned 3.8 earlier, and I doubt the code you are referring to here is in there, it is probably in trunk.
Now, anyway the patch wasn’t actually committed yet, it is as of r275347.
—
Mehdi
> On Jul 13, 2016, at 4:28 PM, Lawrence, Peter <c_plawre at qca.qualcomm.com> wrote:
>
> Mehdi,
> I’m seeing lots of “upgrading” logic,
>
> If (UseIPRA)
> createPass(new DummyCGSCCPass);
>
> if (UseIPRA)
> addPass(createRegUsageInfoPropPass());
>
> if (UseIPRA)
> addPass(createRegUsageInfoCollector());
>
> ???
>
>
> --Peter.
>
>
> From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com]
> Sent: Wednesday, July 13, 2016 4:26 PM
> To: Lawrence, Peter <c_plawre at qca.qualcomm.com>
> Cc: vivek pandya <vivekvpandya at gmail.com>; llvm-dev <llvm-dev at lists.llvm.org>; llvm-dev-request at lists.llvm.org; Hal Finkel <hfinkel at anl.gov>
> Subject: Re: [llvm-dev] IPRA, interprocedural register allocation, question
>
>
> On Jul 13, 2016, at 4:24 PM, Lawrence, Peter <c_plawre at qca.qualcomm.com <mailto: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/057be890/attachment-0001.html>
More information about the llvm-dev
mailing list