diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUnroll.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUnroll.cpp | 37 |
1 files changed, 2 insertions, 35 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUnroll.cpp b/llvm/lib/Transforms/Utils/LoopUnroll.cpp index bb0b6ed..d835cb6 100644 --- a/llvm/lib/Transforms/Utils/LoopUnroll.cpp +++ b/llvm/lib/Transforms/Utils/LoopUnroll.cpp @@ -63,39 +63,6 @@ UnrollVerifyDomtree("unroll-verify-domtree", cl::Hidden, #endif ); -/// Convert the instruction operands from referencing the current values into -/// those specified by VMap. -void llvm::remapInstruction(Instruction *I, ValueToValueMapTy &VMap) { - for (unsigned op = 0, E = I->getNumOperands(); op != E; ++op) { - Value *Op = I->getOperand(op); - - // Unwrap arguments of dbg.value intrinsics. - bool Wrapped = false; - if (auto *V = dyn_cast<MetadataAsValue>(Op)) - if (auto *Unwrapped = dyn_cast<ValueAsMetadata>(V->getMetadata())) { - Op = Unwrapped->getValue(); - Wrapped = true; - } - - auto wrap = [&](Value *V) { - auto &C = I->getContext(); - return Wrapped ? MetadataAsValue::get(C, ValueAsMetadata::get(V)) : V; - }; - - ValueToValueMapTy::iterator It = VMap.find(Op); - if (It != VMap.end()) - I->setOperand(op, wrap(It->second)); - } - - if (PHINode *PN = dyn_cast<PHINode>(I)) { - for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { - ValueToValueMapTy::iterator It = VMap.find(PN->getIncomingBlock(i)); - if (It != VMap.end()) - PN->setIncomingBlock(i, cast<BasicBlock>(It->second)); - } - } -} - /// Check if unrolling created a situation where we need to insert phi nodes to /// preserve LCSSA form. /// \param Blocks is a vector of basic blocks representing unrolled loop. @@ -601,7 +568,7 @@ LoopUnrollResult llvm::UnrollLoop(Loop *L, UnrollLoopOptions ULO, LoopInfo *LI, } for (unsigned It = 1; It != ULO.Count; ++It) { - std::vector<BasicBlock*> NewBlocks; + SmallVector<BasicBlock *, 8> NewBlocks; SmallDenseMap<const Loop *, Loop *, 4> NewLoops; NewLoops[L] = L; @@ -683,9 +650,9 @@ LoopUnrollResult llvm::UnrollLoop(Loop *L, UnrollLoopOptions ULO, LoopInfo *LI, } // Remap all instructions in the most recent iteration + remapInstructionsInBlocks(NewBlocks, LastValueMap); for (BasicBlock *NewBlock : NewBlocks) { for (Instruction &I : *NewBlock) { - ::remapInstruction(&I, LastValueMap); if (auto *II = dyn_cast<IntrinsicInst>(&I)) if (II->getIntrinsicID() == Intrinsic::assume) AC->registerAssumption(II); |