diff options
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Utils/CloneFunction.cpp | 7 | ||||
-rw-r--r-- | lib/Transforms/Utils/CloneTrace.cpp | 16 |
2 files changed, 10 insertions, 13 deletions
diff --git a/lib/Transforms/Utils/CloneFunction.cpp b/lib/Transforms/Utils/CloneFunction.cpp index 17ad8c5175..4aa1aaa0d2 100644 --- a/lib/Transforms/Utils/CloneFunction.cpp +++ b/lib/Transforms/Utils/CloneFunction.cpp @@ -42,8 +42,8 @@ static inline void RemapInstruction(Instruction *I, // CloneBasicBlock - See comments in Cloning.h BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB, std::map<const Value*, Value*> &ValueMap, - const char *NameSuffix) { - BasicBlock *NewBB = new BasicBlock(""); + const char *NameSuffix, Function *F) { + BasicBlock *NewBB = new BasicBlock("", F); if (BB->hasName()) NewBB->setName(BB->getName()+NameSuffix); // Loop over all instructions copying them over... @@ -82,8 +82,7 @@ void llvm::CloneFunctionInto(Function *NewFunc, const Function *OldFunc, const BasicBlock &BB = *BI; // Create a new basic block and copy instructions into it! - BasicBlock *CBB = CloneBasicBlock(&BB, ValueMap, NameSuffix); - NewFunc->getBasicBlockList().push_back(CBB); + BasicBlock *CBB = CloneBasicBlock(&BB, ValueMap, NameSuffix, NewFunc); ValueMap[&BB] = CBB; // Add basic block mapping. if (ReturnInst *RI = dyn_cast<ReturnInst>(CBB->getTerminator())) diff --git a/lib/Transforms/Utils/CloneTrace.cpp b/lib/Transforms/Utils/CloneTrace.cpp index 61186d38f9..7cdb20e18f 100644 --- a/lib/Transforms/Utils/CloneTrace.cpp +++ b/lib/Transforms/Utils/CloneTrace.cpp @@ -7,11 +7,11 @@ // //===----------------------------------------------------------------------===// // -// This file implements the CloneTrace interface, which is used -// when writing runtime optimizations. It takes a vector of basic blocks -// clones the basic blocks, removes internal phi nodes, adds it to the -// same function as the original (although there is no jump to it) and -// returns the new vector of basic blocks. +// This file implements the CloneTrace interface, which is used when writing +// runtime optimizations. It takes a vector of basic blocks clones the basic +// blocks, removes internal phi nodes, adds it to the same function as the +// original (although there is no jump to it) and returns the new vector of +// basic blocks. // //===----------------------------------------------------------------------===// @@ -34,7 +34,8 @@ llvm::CloneTrace(const std::vector<BasicBlock*> &origTrace) { End = origTrace.end(); T != End; ++T) { //Clone Basic Block - BasicBlock *clonedBlock = CloneBasicBlock(*T, ValueMap); + BasicBlock *clonedBlock = + CloneBasicBlock(*T, ValueMap, ".tr", (*T)->getParent()); //Add it to our new trace clonedTrace.push_back(clonedBlock); @@ -42,9 +43,6 @@ llvm::CloneTrace(const std::vector<BasicBlock*> &origTrace) { //Add this new mapping to our Value Map ValueMap[*T] = clonedBlock; - //Add this cloned BB to the old BB's function - (*T)->getParent()->getBasicBlockList().push_back(clonedBlock); - //Loop over the phi instructions and delete operands //that are from blocks not in the trace //only do this if we are NOT the first block |