Consider:
extern unsigned int strlen (const char *) __attribute__ ((__pure__));
void
foo (const char *str)
{
unsigned int a = strlen (str);
unsigned int b = strlen (str);
if (a != b)
link_error ();
}
FRE does not eliminate the second call to strlen.
--
Summary: FRE does not catch eliminate a redundant pute call.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P2
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: kazu at cs dot umass dot edu
CC: dberlin at gcc dot gnu dot org,gcc-bugs at gcc dot gnu
dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21705