------- Comment #7 from rguenth at gcc dot gnu dot org 2008-01-27 14:14 ------- One important structure copy propagation that SRA is not able to handle is
struct X { int i; int j; }; void foo(struct X); inline void wrap(struct X w) { foo(w); } void bar(struct X x) { wrap(x); } where a copy from the parameter x in bar to the temporary used as parameter to the call to foo remains (because both cannot be decomposed by SRA as they need to live in memory): bar (x) { int x$j; int x$i; struct X w; <bb 2>: x$i_8 = x.i; x$j_9 = x.j; w.j = x$j_9; w.i = x$i_8; foo (w) [tail call]; return; } In this case expansion works anyway because the call to foo is marked as tail-call before SRA comes along. SRA heuristics also doesn't work very well here, as it is clearly not profitable to do element-copy here; in fact it probably makes structure copy-prop more difficult to implement. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- OtherBugsDependingO|23782 | nThis| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295