------- Comment #1 from ramana at gcc dot gnu dot org 2009-06-18 12:58 -------
I'm not sure about the best way of fixing this without looking at bigger trees at expand time or for combine to be able to do something smart about this one. Essentially you fold the previous zero extension with the current operation because the current operation doesn't care about the higher order bits and there is a zero extension afterwards that puts it into the right shape. x = zextb (y) z = x ^ (x << #n) w = zextb (z) into x = y ^ (y << #n) w = zextb (x) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40487