[NFC] Cleanup: BasicBlock::getInstList() and BasicBlock::getSublistAccess() are now private

We now have an adequate set of API functions, including BasicBlock::splice(),
BasicBlock::erase(), Instruction::insertAt() etc. that we shouldn't need access
to the underlying instruction list.

Differential Revision: https://reviews.llvm.org/D139905
This commit is contained in:
Vasileios Porpodas 2022-11-28 14:59:35 -08:00
parent 70174b8035
commit c143b77b30
2 changed files with 17 additions and 6 deletions

View File

@ -89,6 +89,14 @@ public:
using reverse_iterator = InstListType::reverse_iterator;
using const_reverse_iterator = InstListType::const_reverse_iterator;
// These functions and classes need access to the instruction list.
friend void Instruction::removeFromParent();
friend iplist<Instruction>::iterator Instruction::eraseFromParent();
friend BasicBlock::iterator Instruction::insertAt(BasicBlock *BB,
BasicBlock::iterator It);
friend class llvm::SymbolTableListTraits<llvm::Instruction>;
friend class llvm::ilist_node_with_parent<llvm::Instruction, llvm::BasicBlock>;
/// Creates a new BasicBlock.
///
/// If the Parent parameter is specified, the basic block is automatically
@ -366,18 +374,21 @@ public:
}
iterator_range<phi_iterator> phis();
private:
/// Return the underlying instruction list container.
///
/// Currently you need to access the underlying instruction list container
/// directly if you want to modify it.
/// This is deliberately private because we have implemented an adequate set
/// of functions to modify the list, including BasicBlock::splice(),
/// BasicBlock::erase(), Instruction::insertAt() etc.
const InstListType &getInstList() const { return InstList; }
InstListType &getInstList() { return InstList; }
InstListType &getInstList() { return InstList; }
/// Returns a pointer to a member of the instruction list.
static InstListType BasicBlock::*getSublistAccess(Instruction*) {
/// This is private on purpose, just like `getInstList()`.
static InstListType BasicBlock::*getSublistAccess(Instruction *) {
return &BasicBlock::InstList;
}
public:
/// Returns a pointer to the symbol table if one exists.
ValueSymbolTable *getValueSymbolTable();

View File

@ -482,7 +482,7 @@ void BasicBlock::splice(BasicBlock::iterator ToIt, BasicBlock *FromBB,
BasicBlock::iterator BasicBlock::erase(BasicBlock::iterator FromIt,
BasicBlock::iterator ToIt) {
return getInstList().erase(FromIt, ToIt);
return InstList.erase(FromIt, ToIt);
}
void BasicBlock::replacePhiUsesWith(BasicBlock *Old, BasicBlock *New) {