https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108358
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot gnu.org Depends on| |14295 --- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I have a fix for this but it is part of copy prop for arg patch set. With that fix we get: ``` int main () { int i.0_1; int _2; int i.1_3; <bb 2> [local count: 118111600]: goto <bb 4>; [100.00%] <bb 3> [local count: 955630224]: bar31_ (); i.0_1 = i; _2 = i.0_1 + 1; i = _2; <bb 4> [local count: 1073741824]: i.1_3 = i; if (i.1_3 != 0) goto <bb 3>; [89.00%] else goto <bb 5>; [11.00%] <bb 5> [local count: 118111600]: return 0; } ``` Basically we can convert: ``` j = l; m = j; k = m; _4 = k.h.b; ``` into: ``` j = l; m = l; k = l; _4 = l.h.b; ``` Which is exactly what you need to optimize this without SRA's help for copy prop. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14295 [Bug 14295] [tree-ssa] copy propagation for aggregates