forked from OSchip/llvm-project
Return iterator from BasicBlock::eraseFromParent
Summary: Same as the last patch, but for BasicBlock (Requires same code movement) Reviewers: chandlerc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8801 llvm-svn: 233992
This commit is contained in:
parent
56cbe4f077
commit
0bf7ff56a6
|
@ -28,6 +28,23 @@ class LandingPadInst;
|
|||
class TerminatorInst;
|
||||
class LLVMContext;
|
||||
class BlockAddress;
|
||||
class Function;
|
||||
|
||||
// Traits for intrusive list of basic blocks...
|
||||
template<> struct ilist_traits<BasicBlock>
|
||||
: public SymbolTableListTraits<BasicBlock, Function> {
|
||||
|
||||
BasicBlock *createSentinel() const;
|
||||
static void destroySentinel(BasicBlock*) {}
|
||||
|
||||
BasicBlock *provideInitialHead() const { return createSentinel(); }
|
||||
BasicBlock *ensureHead(BasicBlock*) const { return createSentinel(); }
|
||||
static void noteHead(BasicBlock*, BasicBlock*) {}
|
||||
|
||||
static ValueSymbolTable *getSymTab(Function *ItemParent);
|
||||
private:
|
||||
mutable ilist_half_node<BasicBlock> Sentinel;
|
||||
};
|
||||
|
||||
|
||||
/// \brief LLVM Basic Block Representation
|
||||
|
@ -151,7 +168,9 @@ public:
|
|||
void removeFromParent();
|
||||
|
||||
/// \brief Unlink 'this' from the containing function and delete it.
|
||||
void eraseFromParent();
|
||||
///
|
||||
// \returns an iterator pointing to the element after the erased one.
|
||||
iplist<BasicBlock>::iterator eraseFromParent();
|
||||
|
||||
/// \brief Unlink this basic block from its current function and insert it
|
||||
/// into the function that \p MovePos lives in, right before \p MovePos.
|
||||
|
@ -307,6 +326,12 @@ private:
|
|||
}
|
||||
};
|
||||
|
||||
// createSentinel is used to get hold of the node that marks the end of the
|
||||
// list... (same trick used here as in ilist_traits<Instruction>)
|
||||
inline BasicBlock *ilist_traits<BasicBlock>::createSentinel() const {
|
||||
return static_cast<BasicBlock*>(&Sentinel);
|
||||
}
|
||||
|
||||
// Create wrappers for C Binding types (see CBindingWrapping.h).
|
||||
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef)
|
||||
|
||||
|
|
|
@ -31,26 +31,6 @@ namespace llvm {
|
|||
class FunctionType;
|
||||
class LLVMContext;
|
||||
|
||||
// Traits for intrusive list of basic blocks...
|
||||
template<> struct ilist_traits<BasicBlock>
|
||||
: public SymbolTableListTraits<BasicBlock, Function> {
|
||||
|
||||
// createSentinel is used to get hold of the node that marks the end of the
|
||||
// list... (same trick used here as in ilist_traits<Instruction>)
|
||||
BasicBlock *createSentinel() const {
|
||||
return static_cast<BasicBlock*>(&Sentinel);
|
||||
}
|
||||
static void destroySentinel(BasicBlock*) {}
|
||||
|
||||
BasicBlock *provideInitialHead() const { return createSentinel(); }
|
||||
BasicBlock *ensureHead(BasicBlock*) const { return createSentinel(); }
|
||||
static void noteHead(BasicBlock*, BasicBlock*) {}
|
||||
|
||||
static ValueSymbolTable *getSymTab(Function *ItemParent);
|
||||
private:
|
||||
mutable ilist_half_node<BasicBlock> Sentinel;
|
||||
};
|
||||
|
||||
template<> struct ilist_traits<Argument>
|
||||
: public SymbolTableListTraits<Argument, Function> {
|
||||
|
||||
|
|
|
@ -94,8 +94,8 @@ void BasicBlock::removeFromParent() {
|
|||
getParent()->getBasicBlockList().remove(this);
|
||||
}
|
||||
|
||||
void BasicBlock::eraseFromParent() {
|
||||
getParent()->getBasicBlockList().erase(this);
|
||||
iplist<BasicBlock>::iterator BasicBlock::eraseFromParent() {
|
||||
return getParent()->getBasicBlockList().erase(this);
|
||||
}
|
||||
|
||||
/// Unlink this basic block from its current function and
|
||||
|
|
Loading…
Reference in New Issue