https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82905
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Status|UNCONFIRMED |NEW Last reconfirmed| |2017-11-09 Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- _1 = p[i_7]; _2 = (short unsigned int) _1; _3 = m_11(D) * _2; _4 = (int) _3; _5 = _4 >> 8; _6 = (unsigned char) _5; p[i_7] = _6; i_13 = i_7 + 1; The problem is: _4 = (int) _3; _5 = _4 >> 8; _6 = (unsigned char) _5; Should have been optimized to: (unsigned char) (_3 >> 8) (without the cast which is required by the C promotion rules).