From 442b82f0ebeaa33e9ab705a4328c0dac89abbdd8 Mon Sep 17 00:00:00 2001 From: Michael Zolotukhin Date: Sun, 7 Aug 2016 01:56:54 +0000 Subject: Revert "Revert "[LoopSimplify] Fix updating LCSSA after separating nested loops."" This reverts commit r277901. Reaaply the commit as it looks like it has nothing to do with the bots failures. llvm-svn: 277946 --- llvm/lib/Transforms/Utils/LoopSimplify.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/Utils/LoopSimplify.cpp b/llvm/lib/Transforms/Utils/LoopSimplify.cpp index 2846e8f235b..fc5781fdf30 100644 --- a/llvm/lib/Transforms/Utils/LoopSimplify.cpp +++ b/llvm/lib/Transforms/Utils/LoopSimplify.cpp @@ -376,6 +376,21 @@ static Loop *separateNestedLoop(Loop *L, BasicBlock *Preheader, } } } + // We also need to check exit blocks of the outer loop - it might be using + // values from what now became an inner loop. + SmallVector ExitBlocks; + NewOuter->getExitBlocks(ExitBlocks); + for (BasicBlock *ExitBB: ExitBlocks) { + for (Instruction &I : *ExitBB) { + for (Value *Op : I.operands()) { + Instruction *OpI = dyn_cast(Op); + if (!OpI || !L->contains(OpI)) + continue; + WorklistSet.insert(OpI); + } + } + } + SmallVector Worklist(WorklistSet.begin(), WorklistSet.end()); formLCSSAForInstructions(Worklist, *DT, *LI); -- cgit v1.2.3