Skip to content

Commit

Permalink
[NFC] Cleanup: BasicBlock::getInstList() and BasicBlock::getSublistAc…
Browse files Browse the repository at this point in the history
…cess() 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
  • Loading branch information
vporpo committed Dec 14, 2022
1 parent 70174b8 commit c143b77
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
21 changes: 16 additions & 5 deletions llvm/include/llvm/IR/BasicBlock.h
Expand Up @@ -89,6 +89,14 @@ class BasicBlock final : public Value, // Basic blocks are data objects also
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
Expand Down Expand Up @@ -366,18 +374,21 @@ class BasicBlock final : public Value, // Basic blocks are data objects also
}
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();

Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/IR/BasicBlock.cpp
Expand Up @@ -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) {
Expand Down

0 comments on commit c143b77

Please sign in to comment.