------- Comment #3 from pinskia at gcc dot gnu dot org 2008-08-26 21:16 ------- >This could be due to array indexing lowered to POINTER_PLUS_EXPR.
Array indexing is never lowered using POINTER_PLUS_EXPR, only for pointers it is. Though it looks like we are doing the math in unsigned in one case but signed in another but we don't consider them the same for PRE. Simple testcase: int f(int a) { unsigned b = a; b++; a++; return a + b; } We should just get return a*2 + 2; (which we do at the RTL level) but we get: b = (unsigned int) a; return (int) ((b + 1) + (unsigned int) (a + 1)); -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2008-08-26 21:16:06 date| | Summary|missed FRE opportunity |missed FRE opportunity | |because of signedness of | |addition http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37242