//
if (!AliveBlocks.count(&Func->front())) {
BasicBlock *NewEntry = new BasicBlock();
- new BranchInst(&Func->front(), 0, 0, NewEntry);
+ new BranchInst(&Func->front(), NewEntry);
Func->getBasicBlockList().push_front(NewEntry);
AliveBlocks.insert(NewEntry); // This block is always alive!
LiveSet.insert(NewEntry->getTerminator()); // The branch is live
// us to branch back to the old entry block.
OldEntry = &F.getEntryBlock();
BasicBlock *NewEntry = new BasicBlock("tailrecurse", OldEntry);
- new BranchInst(OldEntry, 0, 0, NewEntry);
+ new BranchInst(OldEntry, 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.
BasicBlock *NewBB = new BasicBlock(TIBB->getName() + "." +
DestBB->getName() + "_crit_edge");
// Create our unconditional branch...
- new BranchInst(DestBB, 0, 0, NewBB);
+ new BranchInst(DestBB, NewBB);
// Branch to the new block, breaking the edge...
TI->setSuccessor(SuccNum, NewBB);
BasicBlock *NewBB = new BasicBlock(BB->getName()+Suffix, BB);
// The preheader first gets an unconditional branch to the loop header...
- BranchInst *BI = new BranchInst(BB, 0, 0, NewBB);
+ BranchInst *BI = new BranchInst(BB, 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
// Create and insert the new backedge block...
BasicBlock *BEBlock = new BasicBlock(Header->getName()+".backedge", F);
- BranchInst *BETerminator = new BranchInst(Header, 0, 0, BEBlock);
+ BranchInst *BETerminator = new BranchInst(Header, BEBlock);
// Move the new backedge block to right after the last backedge block.
Function::iterator InsertPos = BackedgeBlocks.back(); ++InsertPos;
// If there is only the default destination, don't bother with the code below.
if (SI->getNumOperands() == 2) {
- new BranchInst(SI->getDefaultDest(), 0, 0, CurBlock);
+ new BranchInst(SI->getDefaultDest(), CurBlock);
delete SI;
return;
}
BasicBlock* NewDefault = new BasicBlock("NewDefault");
F->getBasicBlockList().insert(Default, NewDefault);
- new BranchInst(Default, 0, 0, NewDefault);
+ new BranchInst(Default, NewDefault);
// If there is an entry in any PHI nodes for the default edge, make sure
// to update them as well.
OrigBlock, NewDefault);
// Branch to our shiny new if-then stuff...
- new BranchInst(SwitchBlock, 0, 0, OrigBlock);
+ new BranchInst(SwitchBlock, OrigBlock);
// We are now done with the switch instruction, delete it.
delete SI;
#include "llvm/iTerminators.h"
#include "llvm/iPHINode.h"
#include "llvm/Type.h"
-
-namespace llvm {
+using namespace llvm;
static RegisterOpt<UnifyFunctionExitNodes>
X("mergereturn", "Unify function exit nodes");
-Pass *createUnifyFunctionExitNodesPass() {
+Pass *llvm::createUnifyFunctionExitNodesPass() {
return new UnifyFunctionExitNodes();
}
// 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);
- new ReturnInst(PN, NewRetBlock);
- } else {
- // If it returns void, just add a return void instruction to the block
- new ReturnInst(0, NewRetBlock);
}
+ new ReturnInst(PN, NewRetBlock);
// Loop over all of the blocks, replacing the return instruction with an
// unconditional branch.
if (PN) PN->addIncoming(BB->getTerminator()->getOperand(0), BB);
BB->getInstList().pop_back(); // Remove the return insn
- new BranchInst(NewRetBlock, 0, 0, BB);
+ new BranchInst(NewRetBlock, BB);
}
ReturnBlock = NewRetBlock;
return true;
}
-
-} // End llvm namespace
#include "Support/LeakDetector.h"
#include "SymbolTableListTraitsImpl.h"
#include <algorithm>
+using namespace llvm;
+
+namespace {
+ /// DummyInst - An instance of this class is used to mark the end of the
+ /// instruction list. This is not a real instruction.
+ struct DummyInst : public Instruction {
+ DummyInst() : Instruction(Type::VoidTy, OtherOpsEnd) {
+ // This should not be garbage monitored.
+ LeakDetector::removeGarbageObject(this);
+ }
-namespace llvm {
-
-// DummyInst - An instance of this class is used to mark the end of the
-// instruction list. This is not a real instruction.
-//
-struct DummyInst : public Instruction {
- DummyInst() : Instruction(Type::VoidTy, OtherOpsEnd) {
- // This should not be garbage monitored.
- LeakDetector::removeGarbageObject(this);
- }
-
- virtual Instruction *clone() const {
- assert(0 && "Cannot clone EOL");abort();
- return 0;
- }
- virtual const char *getOpcodeName() const { return "*end-of-list-inst*"; }
+ virtual Instruction *clone() const {
+ assert(0 && "Cannot clone EOL");abort();
+ return 0;
+ }
+ virtual const char *getOpcodeName() const { return "*end-of-list-inst*"; }
- // Methods for support type inquiry through isa, cast, and dyn_cast...
- static inline bool classof(const DummyInst *) { return true; }
- static inline bool classof(const Instruction *I) {
- return I->getOpcode() == OtherOpsEnd;
- }
- static inline bool classof(const Value *V) {
- return isa<Instruction>(V) && classof(cast<Instruction>(V));
- }
-};
+ // Methods for support type inquiry through isa, cast, and dyn_cast...
+ static inline bool classof(const DummyInst *) { return true; }
+ static inline bool classof(const Instruction *I) {
+ return I->getOpcode() == OtherOpsEnd;
+ }
+ static inline bool classof(const Value *V) {
+ return isa<Instruction>(V) && classof(cast<Instruction>(V));
+ }
+ };
+}
Instruction *ilist_traits<Instruction>::createNode() {
return new DummyInst();
} while (Inst != &*I); // Loop until we move the specified instruction.
// Add a branch instruction to the newly formed basic block.
- new BranchInst(New, 0, 0, this);
+ new BranchInst(New, 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
}
return New;
}
-
-} // End llvm namespace