One would think that the temporaries created when gimplifying the following 2 functions would be the same:
void hhh (int a, int b, int c){ bar (a?b:c); } int iii (int a, int b, int c){ return (a?b:c); } But they are not: hhh (a, b, c) { int iftmp.0; if (a != 0) { iftmp.0 = b; } else { iftmp.0 = c; } bar (iftmp.0); } This one is fine. But this one: iii (a, b, c) { int D.2128; int iftmp.1; if (a != 0) { iftmp.1 = b; } else { iftmp.1 = c; } D.2128 = iftmp.1; return D.2128; } creates an extra temporary for the return expression. It would be more memory efficient if it would just use "iftmp.1" as the first function does. -- Summary: extra temprorary created when gimplifying return Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dann at godzilla dot ics dot uci dot edu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27800