This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: How to avoid constant propagation into functions?
- From: Alexander Monakov <amonakov at ispras dot ru>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: Florian Weimer <fw at deneb dot enyo dot de>, Segher Boessenkool <segher at kernel dot crashing dot org>, Georg-Johann Lay <avr at gjlay dot de>, Tim Prince <n8tm at aol dot com>, gcc at gcc dot gnu dot org
- Date: Wed, 7 Dec 2016 21:04:52 +0300 (MSK)
- Subject: Re: How to avoid constant propagation into functions?
- Authentication-results: sourceware.org; auth=none
- References: <nvi02s93wk5vagpi308y18xq.1480955596148@email.android.com> <2a24da63-8776-2f69-283a-cd11e63d7241@gjlay.de> <ab1d7722-ba83-5ddc-de7a-631e3ea971ee@gjlay.de> <20161207121400.GM2767@gate.crashing.org> <a9965b35-2dff-6d95-d95b-2f1720b53383@gjlay.de> <20161207124232.GN2767@gate.crashing.org> <alpine.LNX.2.20.13.1612071558360.19597@monopod.intra.ispras.ru> <87inqv4pk3.fsf@mid.deneb.enyo.de> <AF361A33-8414-48A0-81E2-3D391D38FFA8@gmail.com>
On Wed, 7 Dec 2016, Richard Biener wrote:
> >Agreed, that's what I've been using in the past for glibc test cases.
> >
> >If that doesn't work, we'll need something else. Separate compilation
> >of test cases just to thwart compiler optimizations is a significant
> >burden, and will stop working once we have LTO anyway.
> >
> >What about making the function definitions weak? Would that be more
> >reliable?
>
> Adding attribute((used)) should do the trick. It introduces unknown callers and thus without cloning disables IPA.
Hm, depending on the case I think this may be not enough: it thwarts IPA on the
callee side, but still allows the compiler to optimize the caller: for example,
deduce that callee is pure/const (in which case optimizations in the caller may
cause it to be called fewer times than intended or never at all), apply IPA-RA, or
(perhaps in future) deduce that the callee always returns non-NULL and optimize
the caller accordingly. I think attribute-weak works to suppress IPA on the
caller side, but that is not a good solution because it also has an effect on
linking semantics, may be not available on non-ELF platforms, etc.
Alexander