https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31873
Eric Gallager <egallager at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dberlin at gcc dot gnu.org, | |kazu at codesourcery dot com, | |roger at eyesopen dot com See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=25125 --- Comment #3 from Eric Gallager <egallager at gcc dot gnu.org> --- (In reply to Dorit Naishlos from comment #0) > This PR was originally opened against PRE (PR25809), but turns out PRE can't > solve this problem, so here's a new PR instead: > > In testcases that have reduction, like gcc.dg/vect/vect-reduc-2char.c and > gcc.dg/vect-reduc-2short.c, the following casts appear: > > signed char sdiff; > unsigned char ux, udiff; > sdiff_0 = ... > loop: > # sdiff_41 = PHI <sdiff_39, sdiff_0>; > ..... > ux_36 = .... > udiff_37 = (unsigned char) sdiff_41; > udiff_38 = x_36 + udiff_37; > sdiff_39 = (signed char) udiff_38; > end_loop > > although these casts could be taken out of loop all together. i.e., transform > the code into something like the following: > > signed char sdiff; > unsigned char ux, udiff; > sdiff_0 = ... > udiff_1 = (unsigned char) sdiff_0; > loop: > # udiff_3 = PHI <udiff_2, udiff_1>; > ..... > ux_36 = .... > udiff_2 = ux_36 + udiff_3; > end_loop > sdiff_39 = (signed char) udiff_2; > > see this discussion thread: > http://gcc.gnu.org/ml/gcc-patches/2005-12/msg01827.html thread says this is related to bug 25125; adding that under "See Also" (also adding some people from the thread on cc)