summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-02-04 01:19:43 +0000
committerChris Lattner <sabre@nondot.org>2004-02-04 01:19:43 +0000
commita6578ef318690f70db555a537680703f560e6da1 (patch)
tree8c7af2c45ee63aa2aff8aa72ae454c851c154d3f /llvm/lib/Transforms/Utils
parentd8a232b716412d536f3340e7e7e6be82bd0669df (diff)
downloadbcm5719-llvm-a6578ef318690f70db555a537680703f560e6da1.tar.gz
bcm5719-llvm-a6578ef318690f70db555a537680703f560e6da1.zip
Give CloneBasicBlock an optional function argument to specify which function
to add the cloned block to. This allows the block to be added to the function immediately, and all of the instructions to be immediately added to the function symbol table, which speeds up the inliner from 3.7 -> 3.38s on the PR209. llvm-svn: 11107
Diffstat (limited to 'llvm/lib/Transforms/Utils')
-rw-r--r--llvm/lib/Transforms/Utils/CloneFunction.cpp7
-rw-r--r--llvm/lib/Transforms/Utils/CloneTrace.cpp16
2 files changed, 10 insertions, 13 deletions
diff --git a/llvm/lib/Transforms/Utils/CloneFunction.cpp b/llvm/lib/Transforms/Utils/CloneFunction.cpp
index 17ad8c5175d..4aa1aaa0d28 100644
--- a/llvm/lib/Transforms/Utils/CloneFunction.cpp
+++ b/llvm/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/llvm/lib/Transforms/Utils/CloneTrace.cpp b/llvm/lib/Transforms/Utils/CloneTrace.cpp
index 61186d38f9e..7cdb20e18fa 100644
--- a/llvm/lib/Transforms/Utils/CloneTrace.cpp
+++ b/llvm/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
OpenPOWER on IntegriCloud