http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55108
Richard Earnshaw <rearnsha at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-10-30 Ever Confirmed|0 |1 Known to fail| |4.6.3, 4.7.0 --- Comment #2 from Richard Earnshaw <rearnsha at gcc dot gnu.org> 2012-10-30 14:13:15 UTC --- Confirmed. It seems the compiler is incorrectly eliminating some zero-extend operations. We have Ra:SI = Rx:SI >> 8 Rb:QI = subreg:QI (Ra:SI 0) Rc:SI = subreg:SI (Rb:QI 0) Rd:SI = Rc:SI & 255 cse1 pass then decides incorrectly (and presumably because of the paradoxical subreg) that Rd == Rc and discards the mask operation. Also seen in 4.7, haven't been able to test trunk.