Hi,

On Wed, Oct 03 2018, Jan Hubicka wrote:
>> 
>> That was promised to be done by Honza Hubička. He's very skilled in IPA 
>> optimizations and he's aware
>> of optimizations that cause troubles for live-patching.
>
> :) I am not sure how skilful I am, but here is what I arrived to.
>
>  We have transformations that are modeled as clonning, which are
>   - inlining  (can't be disabled completely because of always inline, but 
> -fno-inline
>     does most of stuff)
>   - cloning (disabled via -fno-ipa-cp)
>   - ipa-sra (-fno-ipa-sra)
>   - splitting (-fno-partial-inlining)
>  These should play well with Martin's tracking code
>
>  We propagate info about side effects of function:
>   - function attribute discovery (pure, const, nothrow, malloc)
>     Some of this can be disabled by -fno-ipa-pure-const, but not all
>     of it.  Nothrow does not have flag but it is obviously not a concern
>     for C++
>   - ipa-pta (disabled by default, -fno-ipa-pta)
>   - ipa-reference (list of accessed/modified global vars), disable by 
> -fno-ipa-refernece
>   - stack alignment requirements (no flag to disable)
>   - inter-procedural register allocation (-fno-ipa-ra)

I was thinking a bit more about this and recalled that not all stuff
that IPA-CP nowadays does involves creating clones, so we have to add
also:
  - -fno-ipa-bit-cp, and
  - -fno-ipa-vrp.

These two just record info in the parameters of *callees* of functions
from which it extracted info, without any cloning involved.  Both were
introduced in GCC 7.

Thanks,

Martin

Reply via email to