http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55802
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-02 11:00:54 UTC --- The sink issue is that we cannot sink PHI nodes: <bb 4>: ... if (_11 < _20) goto <bb 5>; else goto <bb 6>; <bb 5>: _26 = _19->block_info; _27 = (long unsigned int) _11; _28 = _27 * 8; _29 = _26 + _28; <bb 6>: # _30 = PHI <0B(4), _29(5)> ... if (_14 != 0) goto <bb 8>; else goto <bb 7>; <bb 7>: op2_12 = &_30->out; ... to be able to sink the definition of _30 into basic-block 7 we'd have to sink the whole control structure. Similar to how we only (very) weakly handle hoisting loop invaraint conditional code we cannot at all sink conditional code. -> more specific bug