diff options
Diffstat (limited to 'contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp')
| -rw-r--r-- | contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp b/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp index 85da3ba899a5..d3ea1564115b 100644 --- a/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp +++ b/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp @@ -302,17 +302,22 @@ static void CloneLoopBlocks(Loop *L, Value *NewIter,    }    NewLoopsMap NewLoops; -  NewLoops[L] = NewLoop; +  if (NewLoop) +    NewLoops[L] = NewLoop; +  else if (ParentLoop) +    NewLoops[L] = ParentLoop; +    // For each block in the original loop, create a new copy,    // and update the value map with the newly created values.    for (LoopBlocksDFS::RPOIterator BB = BlockBegin; BB != BlockEnd; ++BB) {      BasicBlock *NewBB = CloneBasicBlock(*BB, VMap, "." + suffix, F);      NewBlocks.push_back(NewBB); - -    if (NewLoop) { +    +    // If we're unrolling the outermost loop, there's no remainder loop, +    // and this block isn't in a nested loop, then the new block is not +    // in any loop. Otherwise, add it to loopinfo. +    if (CreateRemainderLoop || LI->getLoopFor(*BB) != L || ParentLoop)        addClonedBlockToLoopInfo(*BB, NewBB, LI, NewLoops); -    } else if (ParentLoop) -      ParentLoop->addBasicBlockToLoop(NewBB, *LI);      VMap[*BB] = NewBB;      if (Header == *BB) {  | 
