>
> 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)
We perform discovery of functions/variables with no address taken and
optimizations that are not valid otherwise such as duplicating them
or doing skipping them for alias analysis (no flag to disable)
Identical code folding merges function bodies that are semanticaly equivalent
and thus one can't patch one without patching another, -fno-ipa-icf
Unreachable code/variable removal may be concern too (no flag to disable)
Write only global variable discovery (no flag to dosable)
Visibility changes with -flto and/or -fwhole-program
We also have profile propagation (discovery of cuntions used only in cold
regions,
but that I guess is only performance issue not correctness)
No flag to disable
Honza
>
> Martin
>
> >
> >thanks.
> >
> >Qing
> >
>