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