The second instance of a1+a2 is not PREed due to missing expression reassociation.
int foo(int a1, int a2, int a3) { int b1,b2; b1 = a3 + a2 + a1; b2 = a1 + a2; return b1 + b2; } -- Summary: Expression reassociation problem Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: xinliangli at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35288