diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 909a72c2afd..e5da77e6319 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -1401,9 +1401,11 @@ static bool canSinkInstructions( // we're contemplating sinking, it must already be determined to be sinkable. if (!isa<StoreInst>(I0)) { auto *PNUse = dyn_cast<PHINode>(*I0->user_begin()); - if (!all_of(Insts, [&PNUse](const Instruction *I) -> bool { + auto *Succ = I0->getParent()->getTerminator()->getSuccessor(0); + if (!all_of(Insts, [&PNUse,&Succ](const Instruction *I) -> bool { auto *U = cast<Instruction>(*I->user_begin()); return (PNUse && + PNUse->getParent() == Succ && PNUse->getIncomingValueForBlock(I->getParent()) == I) || U->getParent() == I->getParent(); })) |