[Bug ipa/93940] [8/9/10 Regression] crazy codegen bug on Og with builtin_constant_p, coverage, and pthread
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Feb 26 09:43:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93940
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |hubicka at gcc dot gnu.org,
| |jakub at gcc dot gnu.org
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This happens in edge_set_predicate:
271 if (predicate && *predicate == false
272 /* When handling speculative edges, we need to do the redirection
273 just once. Do it always on the direct edge, so we do not
274 attempt to resolve speculation while duplicating the edge. */
275 && (!e->speculative || e->callee))
276 e = redirect_to_unreachable (e);
I bet the inliner assumes that __builtin_constant_p will evaluate to true,
D.2273.b = 0;
k = D.2273;
...
_8 = k.b;
_9 = __builtin_constant_p (_8);
but while fre3 with -O2 propagates the 0 into __builtin_constant_p and folds it
to 1, with -Og we do fewer optimizations and don't propagate the constant to
it.
With -O2 -fno-tree-fre it will fail the same way.
More information about the Gcc-bugs
mailing list