This is a pre-req for fixing 80520. Essentially the goal here is to keep the key code in this form: [ ... ] if (_20 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 531502203]: _18 = _25 ^ 2567483615; [local count: 1063004407]: # prephitmp_49 = PHI <_25(3), _18(4)> _2 = (void *) ivtmp.8_30; MEM[base: _2, offset: 0B] = prephitmp_49; ivtmp.8_29 = ivtmp.8_30 + 8; if (ivtmp.8_29 != _6) goto ; [98.99%] else goto ; [1.01%] Split-paths wants to duplicate bb5 into bb4. It's just not all that profitable to do so. We can get ever-so-slightly better code on a target like microblaze and perhaps others with delay slots and no conditional move/execution capabilities. But that seems more like something we should be tackling at the RTL level. To finish fixing 80520 we will need to improve the RTL if-conversion where we presumably can cost things and make a good choice between the branchy code we have vs straightline code with a conditional move or conditional execution. I'm not tackling that yet. Note that split-path-5 has the same basic structure. A half-diamond with a single statement in the middle block that should be trivially if-convertable if profitable. So I adjusted that testcase. Bootstrapped and regression tested on x86_64. Installing on the trunk momentarily.