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.