diff options
Diffstat (limited to 'contrib/llvm/lib/Transforms/Utils/CloneLoop.cpp')
-rw-r--r-- | contrib/llvm/lib/Transforms/Utils/CloneLoop.cpp | 45 |
1 files changed, 11 insertions, 34 deletions
diff --git a/contrib/llvm/lib/Transforms/Utils/CloneLoop.cpp b/contrib/llvm/lib/Transforms/Utils/CloneLoop.cpp index 551b630..87dd141 100644 --- a/contrib/llvm/lib/Transforms/Utils/CloneLoop.cpp +++ b/contrib/llvm/lib/Transforms/Utils/CloneLoop.cpp @@ -19,15 +19,14 @@ using namespace llvm; -/// CloneDominatorInfo - Clone basicblock's dominator tree and, if available, -/// dominance info. It is expected that basic block is already cloned. +/// CloneDominatorInfo - Clone a basic block's dominator tree. It is expected +/// that the basic block is already cloned. static void CloneDominatorInfo(BasicBlock *BB, - ValueMap<const Value *, Value *> &VMap, - DominatorTree *DT, - DominanceFrontier *DF) { + ValueToValueMapTy &VMap, + DominatorTree *DT) { assert (DT && "DominatorTree is not available"); - ValueMap<const Value *, Value*>::iterator BI = VMap.find(BB); + ValueToValueMapTy::iterator BI = VMap.find(BB); assert (BI != VMap.end() && "BasicBlock clone is missing"); BasicBlock *NewBB = cast<BasicBlock>(BI->second); @@ -42,45 +41,23 @@ static void CloneDominatorInfo(BasicBlock *BB, // NewBB's dominator is either BB's dominator or BB's dominator's clone. BasicBlock *NewBBDom = BBDom; - ValueMap<const Value *, Value*>::iterator BBDomI = VMap.find(BBDom); + ValueToValueMapTy::iterator BBDomI = VMap.find(BBDom); if (BBDomI != VMap.end()) { NewBBDom = cast<BasicBlock>(BBDomI->second); if (!DT->getNode(NewBBDom)) - CloneDominatorInfo(BBDom, VMap, DT, DF); + CloneDominatorInfo(BBDom, VMap, DT); } DT->addNewBlock(NewBB, NewBBDom); - - // Copy cloned dominance frontiner set - if (DF) { - DominanceFrontier::DomSetType NewDFSet; - DominanceFrontier::iterator DFI = DF->find(BB); - if ( DFI != DF->end()) { - DominanceFrontier::DomSetType S = DFI->second; - for (DominanceFrontier::DomSetType::iterator I = S.begin(), E = S.end(); - I != E; ++I) { - BasicBlock *DB = *I; - ValueMap<const Value*, Value*>::iterator IDM = VMap.find(DB); - if (IDM != VMap.end()) - NewDFSet.insert(cast<BasicBlock>(IDM->second)); - else - NewDFSet.insert(DB); - } - } - DF->addBasicBlock(NewBB, NewDFSet); - } } /// CloneLoop - Clone Loop. Clone dominator info. Populate VMap /// using old blocks to new blocks mapping. Loop *llvm::CloneLoop(Loop *OrigL, LPPassManager *LPM, LoopInfo *LI, - ValueMap<const Value *, Value *> &VMap, Pass *P) { + ValueToValueMapTy &VMap, Pass *P) { DominatorTree *DT = NULL; - DominanceFrontier *DF = NULL; - if (P) { + if (P) DT = P->getAnalysisIfAvailable<DominatorTree>(); - DF = P->getAnalysisIfAvailable<DominanceFrontier>(); - } SmallVector<BasicBlock *, 16> NewBlocks; @@ -116,7 +93,7 @@ Loop *llvm::CloneLoop(Loop *OrigL, LPPassManager *LPM, LoopInfo *LI, for (Loop::block_iterator I = L->block_begin(), E = L->block_end(); I != E; ++I) { BasicBlock *BB = *I; - CloneDominatorInfo(BB, VMap, DT, DF); + CloneDominatorInfo(BB, VMap, DT); } // Process sub loops @@ -134,7 +111,7 @@ Loop *llvm::CloneLoop(Loop *OrigL, LPPassManager *LPM, LoopInfo *LI, for (unsigned index = 0, num_ops = Insn->getNumOperands(); index != num_ops; ++index) { Value *Op = Insn->getOperand(index); - ValueMap<const Value *, Value *>::iterator OpItr = VMap.find(Op); + ValueToValueMapTy::iterator OpItr = VMap.find(Op); if (OpItr != VMap.end()) Insn->setOperand(index, OpItr->second); } |