[Bug tree-optimization/84859] [8 Regression] bogus -Warray-bounds on a memcpy in a loop
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Mar 15 13:59:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84859
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Depends on| |33315
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
The patch for PR33315 manages to transform
if (n_21 > 255)
goto <bb 6>; [50.00%]
else
goto <bb 7>; [50.00%]
<bb 6> [local count: 477815112]:
a[0] = 255;
goto <bb 8>; [100.00%]
<bb 7> [local count: 477815112]:
_1 = (unsigned char) n_21;
a[0] = _1;
<bb 8> [local count: 955630225]:
_2 = a[0];
to
if (n_21 > 255)
goto <bb 7>; [50.00%]
else
goto <bb 6>; [50.00%]
<bb 6> [local count: 477815112]:
_1 = (unsigned char) n_21;
<bb 7> [local count: 955630225]:
# _23 = PHI <255(5), _1(6)>
a[0] = _23;
_2 = a[0];
but as proposed that would happen too late (we've already threaded the jump
and PRE already would have done sth similar via the load from a[0]). As
given it looks like sinking should be performed before the first phiopt pass
(which also runs quite late - there was talk of an early phiopt pass).
Possibly cselim could be enhanced to catch the above as well. In fact its
comments say it would handle the above. Ah, we do
/* Set PARAM_MAX_STORES_TO_SINK to 0 if either vectorization or if-conversion
is disabled. */
if ((!opts->x_flag_tree_loop_vectorize && !opts->x_flag_tree_slp_vectorize)
|| !opts->x_flag_tree_loop_if_convert)
maybe_set_param_value (PARAM_MAX_STORES_TO_SINK, 0,
opts->x_param_values, opts_set->x_param_values);
for whatever reason :/ --param max-stores-to-sink=2 fixes the testcase.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=33315
[Bug 33315] stores not commoned by sinking
More information about the Gcc-bugs
mailing list