http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55731
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-12-18 Ever Confirmed|0 |1 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-18 15:34:51 UTC --- The reason is that unrolling early can be harmful to for example vectorization and thus cunrolli restricts itself to "obviously" profitable cases. In this case the loop is not an "inner" loop - it doesn't have a containing loop and so growth is not allowed even with -O3 (we otherwise will fail to vectorize if the unrolled body ends up as part of other basic-blocks). It's a know issue that after cunroll there is no strong value-numbering pass that handles memory (there is DOM which only has weak memory handling). So, it's a trade-off we make, mostly for the sake of loop optimizations that do not handle unrolled loops well.