[llvm-dev] IPRA, interprocedural register allocation, question
Mehdi Amini via llvm-dev
llvm-dev at lists.llvm.org
Mon Jul 11 18:53:50 PDT 2016
> On Jul 11, 2016, at 6:51 PM, Lawrence, Peter <c_plawre at qca.qualcomm.com> wrote:
>
> Mehdi,
> The external functions I need to call are all hand-written assembly language,
> How would/could LTO handle that ?
I thought about inline asm function, not pure .s files.
—
Mehdi
>
> --Peter Lawrence.
>
>
> From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com]
> Sent: Friday, July 08, 2016 10:58 AM
> 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
> Subject: Re: [llvm-dev] IPRA, interprocedural register allocation, question
>
>
> On Jul 7, 2016, at 9:17 PM, Lawrence, Peter via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> Vivek,
> I am looking into these function attributes in the clang docs
> Preserve_most
> Preserve_all
> They are not available in the 3.6.2 that I am currently using, but I hope they exist in 3.8
>
> These should provide enough info to solve my problem,
> at the MC level calls to functions with these attributes
> with be code-gen’ed through different “calling conventions”,
> and CALL instructions to them should have different register USE and DEF info,
>
> This CALL instruction register USE and DEF info should already be useful
> to the intra-procedural register allocator (allowing values live across these
> calls to be in what are otherwise caller-save registers),
> at least that’s how I read the MC dumps, every call instruction seems to have
> every caller-save register flagged as “imp-def”, IE implicitly-defined by the instruction,
> and hopefully what is considered a caller-save register at a call-site is defined by the callee.
> And this should be the information that IPRA takes advantage of in its bottom-up analysis.
>
> The idea of IPRA is to *produce* more accurate list of clobbered register by a functions, so that at call site the caller needs to only save/restore the minimum amount of registers across the call.
>
>
>
> Which leads me to this question, when compiling an entire whole program at one time,
> so there is no linking and no LTO, will there ever be IPRA that works within LLC for this scenario,
> and is this an objective of your project, or are you focusing only on LTO ?
>
>
> LTO is just a way of exposing more to the analysis: IPRA can only “optimize” calls to function that are codegen’d during the same compilation. With LTO since you codegen the full program at once you can basically optimize “every” call.
>
> So IPRA works well without LTO, but will be able to operate only on calls to function that are part of the current compilation.
>
>
> I know this is not the typical “linux” scenario (dynamic linking of not only standard libraries,
> but also sometimes even application libraries, and lots of static linking because of program
> size), but it is a typical “embedded” scenario, which is where I am currently.
>
>
> Other thoughts or comments ?
>
> Any reason *not* to use LTO in your case?
>
> —
> Mehdi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160711/c135d123/attachment.html>
More information about the llvm-dev
mailing list