------- Comment #1 from pinskia at gcc dot gnu dot org 2005-11-30 18:32 ------- It also should be done for: int f1(void) { *a = (short)(((int)(unsigned short)*a) << 1); }
Which is a little more complicated on the tree level than the RTL level: tree level: *a.1 = (short int) ((int) (short unsigned int) *a.1 << 1); RTL level just has a zero_extend. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25186