1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

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:
Daniel Berlin 2015-04-03 01:20:33 +00:00
parent dad445edfc
commit 585bd68759
3 changed files with 28 additions and 23 deletions

View File

@ -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)

View File

@ -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> {

View File

@ -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