28 "Unify function exit nodes",
false,
false)
52 std::vector<BasicBlock*> ReturningBlocks;
53 std::vector<BasicBlock*> UnreachableBlocks;
55 if (isa<ReturnInst>(
I->getTerminator()))
56 ReturningBlocks.push_back(
I);
57 else if (isa<UnreachableInst>(
I->getTerminator()))
58 UnreachableBlocks.push_back(
I);
61 if (UnreachableBlocks.empty()) {
63 }
else if (UnreachableBlocks.size() == 1) {
67 "UnifiedUnreachableBlock", &
F);
70 for (std::vector<BasicBlock*>::iterator
I = UnreachableBlocks.begin(),
71 E = UnreachableBlocks.end();
I != E; ++
I) {
79 if (ReturningBlocks.empty()) {
82 }
else if (ReturningBlocks.size() == 1) {
92 "UnifiedReturnBlock", &
F);
108 for (std::vector<BasicBlock*>::iterator
I = ReturningBlocks.begin(),
109 E = ReturningBlocks.end();
I != E; ++
I) {
AnalysisUsage & addPreserved()
LLVMContext & getContext() const
virtual void getAnalysisUsage(AnalysisUsage &AU) const
Type * getReturnType() const
const Instruction & front() const
void push_back(NodeTy *val)
static BranchInst * Create(BasicBlock *IfTrue, Instruction *InsertBefore=0)
BasicBlock * UnreachableBlock
AnalysisUsage & addPreservedID(const void *ID)
Pass * createUnifyFunctionExitNodesPass()
LLVM Basic Block Representation.
char & BreakCriticalEdgesID
INITIALIZE_PASS(UnifyFunctionExitNodes,"mergereturn","Unify function exit nodes", false, false) Pass *llvm
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", Instruction *InsertBefore=0)
const InstListType & getInstList() const
Return the underlying instruction list container.
Value * getOperand(unsigned i) const
TerminatorInst * getTerminator()
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=0, BasicBlock *InsertBefore=0)
Creates a new BasicBlock.
static ReturnInst * Create(LLVMContext &C, Value *retVal=0, Instruction *InsertBefore=0)
virtual bool runOnFunction(Function &F)
bool isVoidTy() const
isVoidTy - Return true if this is 'void'.