[llvm-dev] [RFC] Adding function attributes to represent codegen optimization level

Martin J. O'Riordan via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 4 08:42:08 PDT 2018


Sorry, my reply “to all” left out LLVM-Dev

 

From: Martin J. O'Riordan [mailto:MartinO at theheart.ie] 
Sent: 04 April 2018 16:41
To: 'David Blaikie' <dblaikie at gmail.com>; 'mcrosier at codeaurora.org' <mcrosier at codeaurora.org>; 'Chandler Carruth' <chandlerc at gmail.com>; 'Eric Christopher' <echristo at gmail.com>
Subject: RE: [llvm-dev] [RFC] Adding function attributes to represent codegen optimization level

 

Would implementing GCC’s ‘__attribute__((optimize(...)))’ help?

 

I can’t find any good documentation for this attribute, but it seems that GCC supports this in two forms:

 

__attribute__((optimize(2)))

meaning optimise equivalent to ‘-O2’, and:

 

__attribute_((optimize("fblah", "O1")))

meaning optimise with the provided discrete options.

 

            MartinO

 

From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of David Blaikie via llvm-dev
Sent: 04 April 2018 15:41
To: mcrosier at codeaurora.org <mailto:mcrosier at codeaurora.org> ; Chandler Carruth <chandlerc at gmail.com <mailto:chandlerc at gmail.com> >; Eric Christopher <echristo at gmail.com <mailto:echristo at gmail.com> >
Cc: llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> 
Subject: Re: [llvm-dev] [RFC] Adding function attributes to represent codegen optimization level

 

 

On Tue, Apr 3, 2018 at 12:47 PM via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> > wrote:

All,
A recent commit, D43040/r324557, changed the behavior of the gold plugin
when compiling with LTO.  The change now causes the codegen optimization
level to default to CodeGenOpt::Default (i.e., -O2) rather than use the
LTO optimization level.  The argument was made that the LTO optimization
level should control the amount of cross-module optimizations done by
LTO, but it should not control the codegen optimization level; that
should be based off of the optimization level used during the initial
compilation phase (i.e., bitcode generation).


At least as I recall the discussion around optnone/optsize in the pass was that these were in some way special semantically distinct properties (optnone being "good for debugging" (or good for debugging compilers - what's the baseline behavior before optimizations are applied), optsize being "make this fit into something it wouldn't otherwise fit into") but that the gradiations of -ON didn't fit into this kind of model & wouldn't ever be implemented as function attributes.

CC'd Chandler & Eric who I think had opinions/were involved in those previous discussions.
 


Assuming the argument is reasonable (it make sense to me), I was hoping
to solicit feedback on how to proceed.  The suggestion in D43040/r324557
was to add function attributes to represent the compile-time
optimization level (which also seems reasonable to me).

As a first step, I've put together two patches: 1) an llvm patch that
adds the function attributes to the LLVM IR and 2) a clang patch that
attaches these attributes to each function based on the codegen
optimization level.  I then use the function level attributes to
"reconstruct" to codegen optimization level used with LTO.

Please understand this is very much a WIP and just a very small step
towards a final solution.

Here are the patches for reference:
Clang: D45226
LLVM: D45225

Regards,
  Chad


_______________________________________________
LLVM Developers mailing list
llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org> 
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

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


More information about the llvm-dev mailing list