struct X { int i; }; int foo (int x) { struct X a; struct X b; struct X *p; a.i = 1; b.i = 2; if (x) p = &a; else p = &b; return p->i; }
should be optimized to return 1 or 2, removing the loads on both paths. One piece that is missing is that PHI-translation does not optimize the reference ops vector after phi-translating the operands. So we end up looking up (*(&a)).i instead of a.i. If you fix that we still have mismatched virtual operands. This will be fixed on the alias-improvements branch. -- Summary: phi-translation and SCCVN do not optimize *& Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: missed-optimization, alias Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37892