With the option -outline-optional-branches, LLVM will place optional branches out of line (more details on r231230).
With this patch, this is not done for short optional branches. A short optional branch is a branch containing a single block with an instruction count below a certain threshold (defaulting to 3). Still everything is guarded under -outline-optional-branches).
Outlining a short branch can't significantly improve code locality. It can however decrease performance because of the additional jmp and in cases where the optional branch is hot. This fixes a compile time regression I have observed in a benchmark.
Shouldn't this be disabling the return of Succ here rather than arbitrarily returning Pred?
And in general, it seems very strange to look at all of the predecessors' predecessors here. That seems really expensive and it isn't clear why. This at least needs some serious commenting to clarify the algorithm used.