From f8485c643412dbff46fe87ea2867445169a5c28e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 20 Nov 2003 18:25:24 +0000 Subject: [PATCH] Start using the nicer terminator auto-insertion API git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10111 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/LowerSetJmp.cpp | 11 ++++------- .../Instrumentation/ProfilePaths/CombineBranch.cpp | 4 +--- .../Instrumentation/ProfilePaths/EdgeCode.cpp | 6 ++---- .../Instrumentation/ProfilePaths/InstLoops.cpp | 6 ++---- lib/Transforms/Scalar/ADCE.cpp | 6 +++--- lib/Transforms/Scalar/TailRecursionElimination.cpp | 10 +++++----- lib/Transforms/Utils/BreakCriticalEdges.cpp | 3 +-- lib/Transforms/Utils/InlineFunction.cpp | 2 +- lib/Transforms/Utils/LoopSimplify.cpp | 6 ++---- lib/Transforms/Utils/LowerSwitch.cpp | 12 +++++------- lib/Transforms/Utils/UnifyFunctionExitNodes.cpp | 10 +++++----- lib/VMCore/BasicBlock.cpp | 2 +- 12 files changed, 32 insertions(+), 46 deletions(-) diff --git a/lib/Transforms/IPO/LowerSetJmp.cpp b/lib/Transforms/IPO/LowerSetJmp.cpp index 276523b00b7..f18fb929b34 100644 --- a/lib/Transforms/IPO/LowerSetJmp.cpp +++ b/lib/Transforms/IPO/LowerSetJmp.cpp @@ -314,12 +314,11 @@ BasicBlock* LowerSetJmp::GetRethrowBB(Function* Func) // The basic block we're going to jump to if we need to rethrow the // exception. BasicBlock* Rethrow = new BasicBlock("RethrowExcept", Func); - BasicBlock::InstListType& RethrowBlkIL = Rethrow->getInstList(); // Fill in the "Rethrow" BB with a call to rethrow the exception. This // is the last instruction in the BB since at this point the runtime // should exit this function and go to the next function. - RethrowBlkIL.push_back(new UnwindInst()); + new UnwindInst(Rethrow); return RethrowBBMap[Func] = Rethrow; } @@ -348,7 +347,7 @@ LowerSetJmp::SwitchValuePair LowerSetJmp::GetSJSwitch(Function* Func, BasicBlock* DecisionBB = new BasicBlock("LJDecisionBB", Func); BasicBlock::InstListType& DecisionBBIL = DecisionBB->getInstList(); - LongJmpPreIL.push_back(new BranchInst(DecisionBB, Rethrow, Cond)); + new BranchInst(DecisionBB, Rethrow, Cond, LongJmpPre); // Fill in the "decision" basic block. CallInst* LJVal = new CallInst(GetLJValue, std::vector(), "LJVal"); @@ -357,8 +356,7 @@ LowerSetJmp::SwitchValuePair LowerSetJmp::GetSJSwitch(Function* Func, CallInst(TryCatchLJ, make_vector(GetSetJmpMap(Func), 0), "SJNum"); DecisionBBIL.push_back(SJNum); - SwitchInst* SI = new SwitchInst(SJNum, Rethrow); - DecisionBBIL.push_back(SI); + SwitchInst* SI = new SwitchInst(SJNum, Rethrow, DecisionBB); return SwitchValMap[Func] = SwitchValuePair(SI, LJVal); } @@ -511,8 +509,7 @@ void LowerSetJmp::visitInvokeInst(InvokeInst& II) CallInst(IsLJException, std::vector(), "IsLJExcept"); InstList.push_back(IsLJExcept); - BranchInst* BR = new BranchInst(PrelimBBMap[Func], ExceptBB, IsLJExcept); - InstList.push_back(BR); + new BranchInst(PrelimBBMap[Func], ExceptBB, IsLJExcept, NewExceptBB); II.setExceptionalDest(NewExceptBB); ++InvokesTransformed; diff --git a/lib/Transforms/Instrumentation/ProfilePaths/CombineBranch.cpp b/lib/Transforms/Instrumentation/ProfilePaths/CombineBranch.cpp index 04207820a53..b178b5dedf0 100644 --- a/lib/Transforms/Instrumentation/ProfilePaths/CombineBranch.cpp +++ b/lib/Transforms/Instrumentation/ProfilePaths/CombineBranch.cpp @@ -122,9 +122,7 @@ void CombineBranches::removeRedundant(std::map &be){ sameTarget.push_back(MI->first); BasicBlock *newBB = new BasicBlock("newCommon", MI->first->getParent()); - BranchInst *newBranch = new BranchInst(MI->second); - - newBB->getInstList().push_back(newBranch); + BranchInst *newBranch = new BranchInst(MI->second, 0, 0, newBB); std::map > phiMap; diff --git a/lib/Transforms/Instrumentation/ProfilePaths/EdgeCode.cpp b/lib/Transforms/Instrumentation/ProfilePaths/EdgeCode.cpp index 3cb5698a11b..51bc42535c5 100644 --- a/lib/Transforms/Instrumentation/ProfilePaths/EdgeCode.cpp +++ b/lib/Transforms/Instrumentation/ProfilePaths/EdgeCode.cpp @@ -344,12 +344,10 @@ void insertBB(Edge ed, newBB->getInstList().push_back(newBI2); //triggerBB->getInstList().push_back(triggerInst); - Instruction *triggerBranch = new BranchInst(BB2); - triggerBB->getInstList().push_back(triggerBranch); + new BranchInst(BB2, 0, 0, triggerBB); } else{ - Instruction *newBI2=new BranchInst(BB2); - newBB->getInstList().push_back(newBI2); + new BranchInst(BB2, 0, 0, newBB); } //now iterate over BB2, and set its Phi nodes right diff --git a/lib/Transforms/Instrumentation/ProfilePaths/InstLoops.cpp b/lib/Transforms/Instrumentation/ProfilePaths/InstLoops.cpp index 9d6107cd2d2..8331781b073 100644 --- a/lib/Transforms/Instrumentation/ProfilePaths/InstLoops.cpp +++ b/lib/Transforms/Instrumentation/ProfilePaths/InstLoops.cpp @@ -145,10 +145,8 @@ void InstLoops::findAndInstrumentBackEdges(Function &F){ ti->setSuccessor(index, newBB); BasicBlock::InstListType < = newBB->getInstList(); - - Instruction *call = new CallInst(inCountMth); - lt.push_back(call); - lt.push_back(new BranchInst(BB)); + lt.push_back(new CallInst(inCountMth)); + new BranchInst(BB, newBB); //now iterate over *vl, and set its Phi nodes right for(BasicBlock::iterator BB2Inst = BB->begin(), BBend = BB->end(); diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp index 941cc2dc09c..5a5151e8b64 100644 --- a/lib/Transforms/Scalar/ADCE.cpp +++ b/lib/Transforms/Scalar/ADCE.cpp @@ -302,7 +302,7 @@ bool ADCE::doADCE() { // if (!AliveBlocks.count(&Func->front())) { BasicBlock *NewEntry = new BasicBlock(); - NewEntry->getInstList().push_back(new BranchInst(&Func->front())); + new BranchInst(&Func->front(), 0, 0, NewEntry); Func->getBasicBlockList().push_front(NewEntry); AliveBlocks.insert(NewEntry); // This block is always alive! LiveSet.insert(NewEntry->getTerminator()); // The branch is live @@ -432,8 +432,8 @@ bool ADCE::doADCE() { // Delete the old terminator instruction... BB->getInstList().pop_back(); const Type *RetTy = Func->getReturnType(); - BB->getInstList().push_back(new ReturnInst(RetTy != Type::VoidTy ? - Constant::getNullValue(RetTy) : 0)); + new ReturnInst(RetTy != Type::VoidTy ? + Constant::getNullValue(RetTy) : 0, BB); } } diff --git a/lib/Transforms/Scalar/TailRecursionElimination.cpp b/lib/Transforms/Scalar/TailRecursionElimination.cpp index dbe91a79407..87cd27d22be 100644 --- a/lib/Transforms/Scalar/TailRecursionElimination.cpp +++ b/lib/Transforms/Scalar/TailRecursionElimination.cpp @@ -33,7 +33,7 @@ #include "llvm/Pass.h" #include "Support/Statistic.h" -namespace llvm { +using namespace llvm; namespace { Statistic<> NumEliminated("tailcallelim", "Number of tail calls removed"); @@ -45,7 +45,9 @@ namespace { } // Public interface to the TailCallElimination pass -FunctionPass *createTailCallEliminationPass() { return new TailCallElim(); } +FunctionPass *llvm::createTailCallEliminationPass() { + return new TailCallElim(); +} bool TailCallElim::runOnFunction(Function &F) { @@ -74,7 +76,7 @@ bool TailCallElim::runOnFunction(Function &F) { // us to branch back to the old entry block. OldEntry = &F.getEntryBlock(); BasicBlock *NewEntry = new BasicBlock("tailrecurse", OldEntry); - NewEntry->getInstList().push_back(new BranchInst(OldEntry)); + new BranchInst(OldEntry, 0, 0, NewEntry); // Now that we have created a new block, which jumps to the entry // block, insert a PHI node for each argument of the function. @@ -107,5 +109,3 @@ bool TailCallElim::runOnFunction(Function &F) { return MadeChange; } - -} // End llvm namespace diff --git a/lib/Transforms/Utils/BreakCriticalEdges.cpp b/lib/Transforms/Utils/BreakCriticalEdges.cpp index e8201cc3915..0b597102d87 100644 --- a/lib/Transforms/Utils/BreakCriticalEdges.cpp +++ b/lib/Transforms/Utils/BreakCriticalEdges.cpp @@ -106,8 +106,7 @@ bool SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P) { BasicBlock *NewBB = new BasicBlock(TIBB->getName() + "." + DestBB->getName() + "_crit_edge"); // Create our unconditional branch... - BranchInst *BI = new BranchInst(DestBB); - NewBB->getInstList().push_back(BI); + new BranchInst(DestBB, 0, 0, NewBB); // Branch to the new block, breaking the edge... TI->setSuccessor(SuccNum, NewBB); diff --git a/lib/Transforms/Utils/InlineFunction.cpp b/lib/Transforms/Utils/InlineFunction.cpp index 265d5c419ac..a0fc9bf1cff 100644 --- a/lib/Transforms/Utils/InlineFunction.cpp +++ b/lib/Transforms/Utils/InlineFunction.cpp @@ -238,7 +238,7 @@ bool InlineFunction(CallSite CS) { // invoke site. Once this happens, we know that the unwind would cause // a control transfer to the invoke exception destination, so we can // transform it into a direct branch to the exception destination. - BranchInst *BI = new BranchInst(InvokeDest, UI); + new BranchInst(InvokeDest, UI); // Delete the unwind instruction! UI->getParent()->getInstList().pop_back(); diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp index b999ed40cc9..46f2beb34b0 100644 --- a/lib/Transforms/Utils/LoopSimplify.cpp +++ b/lib/Transforms/Utils/LoopSimplify.cpp @@ -153,8 +153,7 @@ BasicBlock *LoopSimplify::SplitBlockPredecessors(BasicBlock *BB, BasicBlock *NewBB = new BasicBlock(BB->getName()+Suffix, BB); // The preheader first gets an unconditional branch to the loop header... - BranchInst *BI = new BranchInst(BB); - NewBB->getInstList().push_back(BI); + BranchInst *BI = new BranchInst(BB, 0, 0, NewBB); // For every PHI node in the block, insert a PHI node into NewBB where the // incoming values from the out of loop edges are moved to NewBB. We have two @@ -380,8 +379,7 @@ void LoopSimplify::InsertUniqueBackedgeBlock(Loop *L) { // Create and insert the new backedge block... BasicBlock *BEBlock = new BasicBlock(Header->getName()+".backedge", F); - Instruction *BETerminator = new BranchInst(Header); - BEBlock->getInstList().push_back(BETerminator); + BranchInst *BETerminator = new BranchInst(Header, 0, 0, BEBlock); // Move the new backedge block to right after the last backedge block. Function::iterator InsertPos = BackedgeBlocks.back(); ++InsertPos; diff --git a/lib/Transforms/Utils/LowerSwitch.cpp b/lib/Transforms/Utils/LowerSwitch.cpp index 1d0e47145ac..bec23fffc85 100644 --- a/lib/Transforms/Utils/LowerSwitch.cpp +++ b/lib/Transforms/Utils/LowerSwitch.cpp @@ -132,8 +132,7 @@ BasicBlock* LowerSwitch::switchConvert(CaseItr Begin, CaseItr End, SetCondInst* Comp = new SetCondInst(Instruction::SetLT, Val, Pivot.first, "Pivot"); NewNode->getInstList().push_back(Comp); - BranchInst* Br = new BranchInst(LBranch, RBranch, Comp); - NewNode->getInstList().push_back(Br); + new BranchInst(LBranch, RBranch, Comp, NewNode); return NewNode; } @@ -158,8 +157,7 @@ BasicBlock* LowerSwitch::newLeafBlock(Case& Leaf, Value* Val, // Make the conditional branch... BasicBlock* Succ = Leaf.second; - Instruction* Br = new BranchInst(Succ, Default, Comp); - NewLeaf->getInstList().push_back(Br); + new BranchInst(Succ, Default, Comp, NewLeaf); // If there were any PHI nodes in this successor, rewrite one entry // from OrigBlock to come from NewLeaf. @@ -188,7 +186,7 @@ void LowerSwitch::processSwitchInst(SwitchInst *SI) { // If there is only the default destination, don't bother with the code below. if (SI->getNumOperands() == 2) { - CurBlock->getInstList().push_back(new BranchInst(SI->getDefaultDest())); + new BranchInst(SI->getDefaultDest(), 0, 0, CurBlock); delete SI; return; } @@ -198,7 +196,7 @@ void LowerSwitch::processSwitchInst(SwitchInst *SI) { BasicBlock* NewDefault = new BasicBlock("NewDefault"); F->getBasicBlockList().insert(Default, NewDefault); - NewDefault->getInstList().push_back(new BranchInst(Default)); + new BranchInst(Default, 0, 0, NewDefault); // If there is an entry in any PHI nodes for the default edge, make sure // to update them as well. @@ -221,7 +219,7 @@ void LowerSwitch::processSwitchInst(SwitchInst *SI) { OrigBlock, NewDefault); // Branch to our shiny new if-then stuff... - OrigBlock->getInstList().push_back(new BranchInst(SwitchBlock)); + new BranchInst(SwitchBlock, 0, 0, OrigBlock); // We are now done with the switch instruction, delete it. delete SI; diff --git a/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp b/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp index 2591ffd6d72..18164220f84 100644 --- a/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp +++ b/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp @@ -61,13 +61,13 @@ bool UnifyFunctionExitNodes::runOnFunction(Function &F) { UnwindBlock = UnwindingBlocks.front(); } else { UnwindBlock = new BasicBlock("UnifiedUnwindBlock", &F); - UnwindBlock->getInstList().push_back(new UnwindInst()); + new UnwindInst(UnwindBlock); for (std::vector::iterator I = UnwindingBlocks.begin(), E = UnwindingBlocks.end(); I != E; ++I) { BasicBlock *BB = *I; BB->getInstList().pop_back(); // Remove the return insn - BB->getInstList().push_back(new BranchInst(UnwindBlock)); + new BranchInst(UnwindBlock, 0, 0, BB); } } @@ -91,10 +91,10 @@ bool UnifyFunctionExitNodes::runOnFunction(Function &F) { // If the function doesn't return void... add a PHI node to the block... PN = new PHINode(F.getReturnType(), "UnifiedRetVal"); NewRetBlock->getInstList().push_back(PN); - NewRetBlock->getInstList().push_back(new ReturnInst(PN)); + new ReturnInst(PN, NewRetBlock); } else { // If it returns void, just add a return void instruction to the block - NewRetBlock->getInstList().push_back(new ReturnInst()); + new ReturnInst(0, NewRetBlock); } // Loop over all of the blocks, replacing the return instruction with an @@ -109,7 +109,7 @@ bool UnifyFunctionExitNodes::runOnFunction(Function &F) { if (PN) PN->addIncoming(BB->getTerminator()->getOperand(0), BB); BB->getInstList().pop_back(); // Remove the return insn - BB->getInstList().push_back(new BranchInst(NewRetBlock)); + new BranchInst(NewRetBlock, 0, 0, BB); } ReturnBlock = NewRetBlock; return true; diff --git a/lib/VMCore/BasicBlock.cpp b/lib/VMCore/BasicBlock.cpp index 63a722b33e4..b00ce51f2f7 100644 --- a/lib/VMCore/BasicBlock.cpp +++ b/lib/VMCore/BasicBlock.cpp @@ -243,7 +243,7 @@ BasicBlock *BasicBlock::splitBasicBlock(iterator I, const std::string &BBName) { } while (Inst != &*I); // Loop until we move the specified instruction. // Add a branch instruction to the newly formed basic block. - InstList.push_back(new BranchInst(New)); + new BranchInst(New, 0, 0, this); // Now we must loop through all of the successors of the New block (which // _were_ the successors of the 'this' block), and update any PHI nodes in -- 2.34.1