helping the compiler with asserts-hints to optimize

Jeff Law law@redhat.com
Wed Apr 23 15:58:00 GMT 2014


On 04/23/14 09:45, Agustin Perez Paladini wrote:
> Hi,
> I was wondering the existence of some kind of builtins methods to help
> the compiler to increase the optimization giving information of
> possible values for certain variables.
>
> For example, in many cases we use assert(); to ensure some constraints
> (some variable will contain certain values or ranges). I think this
> will be very helpful information for the compiler to do better
> optimizations.
>
> I saw the expected builtin function but is only for expressions and is
> not necessary the same.
There's a variety of builtins and other mechanisms to give hints to the 
optimizer.

As you noted, assert() conveys certain information to the analysis 
phases.  Specifically, it can allow the compiler to narrow the range of 
the expression in the assert which may allow simplifications to be 
performed.

__builtin_unreachable/__builtin_abort come immediately to mind.  They 
primarily affect the CFG -- but simplifications in the CFG from 
__builtin_unreachable/__builtin_abort usage also allow the compiler to 
do range narrowing on the conditionals leading to the unreachable/abort. 
  The net effect is similar to asserts.

There's hints for branch probability, alignments, etc.  Others control 
the characteristics of functions (pure, const, non-returning, 
malloc-like, etc).

I'd suggest reading the GCC manual with particular attention to the 
extensions section.

jeff



More information about the Gcc-help mailing list