http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50382
Bug #: 50382 Summary: Reassoc doesn't optimize pointer arithmetics Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: ja...@gcc.gnu.org This is something I've noticed while writing strlen optimization. Reassoc doesn't optimize: typedef __UINTPTR_TYPE__ uintptr_t; char * foo (char *p, const char *q, const char *r) { char *a = p + __builtin_strlen (p); char *b = __builtin_stpcpy (a, q); uintptr_t c = (uintptr_t) b - (uintptr_t) p; __builtin_memcpy (b, "abcd", 4); uintptr_t d = c + 4; return __builtin_stpcpy (p + d, r); } and only RTL passes figure out that p + d is b + 4.