http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51783
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-01-07 18:25:19 UTC --- I think that would be an invalid transformation except when -fwrapv is used. The reason is: x.0_2 = (unsigned int) x_1(D); D.2715_4 = z_3(D) + x.0_2; <--- wrapping semantics c_5 = (int) D.2715_4; While: D.1720_10 = (int) z_3(D); c_5 = x_1(D) + D.1720_10; Was undefined semantics for overflow. This cannot happen until we have signed operations which also have wrapping semantics.