diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -2251,7 +2251,7 @@ bool Changed = false; if (HaveNonUnconditionalPredecessors) { - if (!followedByDeoptOrUnreachable) { + if (!followedByDeoptOrUnreachable && ScanIdx < 2) { // It is always legal to sink common instructions from unconditional // predecessors. However, if not all predecessors are unconditional, // this transformation might be pessimizing. So as a rule of thumb,