The splitIndirectCriticalEdges transformation generates an invalid CFG when the 'Target' basic block is a loop to itself. When this occurs, the code that updates the predecessor terminators needs to update the terminator in the split basic block.
This occurs when there is an edge from 'D' to 'D'. Since D is split into D0 and D1, the code needs to update the terminator in D1, but D1 isn't in the OtherPreds vector so it doesn't get updated.