LLVM 20.0.0git
Public Member Functions | Protected Member Functions | List of all members
llvm::InstructionPrecedenceTracking Class Referenceabstract

#include "llvm/Analysis/InstructionPrecedenceTracking.h"

Inheritance diagram for llvm::InstructionPrecedenceTracking:
Inheritance graph
[legend]

Public Member Functions

void insertInstructionTo (const Instruction *Inst, const BasicBlock *BB)
 Notifies this tracking that we are going to insert a new instruction Inst to the basic block BB.
 
void removeInstruction (const Instruction *Inst)
 Notifies this tracking that we are going to remove the instruction Inst It makes all necessary updates to internal caches to keep them consistent.
 
void removeUsersOf (const Instruction *Inst)
 Notifies this tracking that we are going to replace all uses of Inst.
 
void clear ()
 Invalidates all information from this tracking.
 

Protected Member Functions

const InstructiongetFirstSpecialInstruction (const BasicBlock *BB)
 Returns the topmost special instruction from the block BB.
 
bool hasSpecialInstructions (const BasicBlock *BB)
 Returns true iff at least one instruction from the basic block BB is special.
 
bool isPreceededBySpecialInstruction (const Instruction *Insn)
 Returns true iff the first special instruction of Insn's block exists and dominates Insn.
 
virtual bool isSpecialInstruction (const Instruction *Insn) const =0
 A predicate that defines whether or not the instruction Insn is considered special and needs to be tracked.
 
virtual ~InstructionPrecedenceTracking ()=default
 

Detailed Description

Definition at line 30 of file InstructionPrecedenceTracking.h.

Constructor & Destructor Documentation

◆ ~InstructionPrecedenceTracking()

virtual llvm::InstructionPrecedenceTracking::~InstructionPrecedenceTracking ( )
protectedvirtualdefault

Member Function Documentation

◆ clear()

void InstructionPrecedenceTracking::clear ( )

Invalidates all information from this tracking.

Definition at line 129 of file InstructionPrecedenceTracking.cpp.

Referenced by llvm::ICFLoopSafetyInfo::computeLoopSafetyInfo().

◆ getFirstSpecialInstruction()

const Instruction * InstructionPrecedenceTracking::getFirstSpecialInstruction ( const BasicBlock BB)
protected

Returns the topmost special instruction from the block BB.

Returns nullptr if there is no special instructions in the block.

Definition at line 39 of file InstructionPrecedenceTracking.cpp.

References assert(), and ExpensiveAsserts.

Referenced by llvm::ImplicitControlFlowTracking::getFirstICFI(), llvm::MemoryWriteTracking::getFirstMemoryWrite(), hasSpecialInstructions(), and isPreceededBySpecialInstruction().

◆ hasSpecialInstructions()

bool InstructionPrecedenceTracking::hasSpecialInstructions ( const BasicBlock BB)
protected

Returns true iff at least one instruction from the basic block BB is special.

Definition at line 57 of file InstructionPrecedenceTracking.cpp.

References getFirstSpecialInstruction().

Referenced by llvm::ImplicitControlFlowTracking::hasICF(), and llvm::MemoryWriteTracking::mayWriteToMemory().

◆ insertInstructionTo()

void InstructionPrecedenceTracking::insertInstructionTo ( const Instruction Inst,
const BasicBlock BB 
)

Notifies this tracking that we are going to insert a new instruction Inst to the basic block BB.

It makes all necessary updates to internal caches to keep them consistent.

Definition at line 109 of file InstructionPrecedenceTracking.cpp.

References isSpecialInstruction().

Referenced by llvm::ICFLoopSafetyInfo::insertInstructionTo().

◆ isPreceededBySpecialInstruction()

bool InstructionPrecedenceTracking::isPreceededBySpecialInstruction ( const Instruction Insn)
protected

Returns true iff the first special instruction of Insn's block exists and dominates Insn.

Definition at line 62 of file InstructionPrecedenceTracking.cpp.

References llvm::Instruction::comesBefore(), getFirstSpecialInstruction(), and Insn.

Referenced by llvm::ImplicitControlFlowTracking::isDominatedByICFIFromSameBlock(), and llvm::MemoryWriteTracking::isDominatedByMemoryWriteFromSameBlock().

◆ isSpecialInstruction()

virtual bool llvm::InstructionPrecedenceTracking::isSpecialInstruction ( const Instruction Insn) const
protectedpure virtual

A predicate that defines whether or not the instruction Insn is considered special and needs to be tracked.

Implementing this method in children classes allows to implement tracking of implicit control flow, memory writing instructions or any other kinds of instructions we might be interested in.

Implemented in llvm::ImplicitControlFlowTracking, and llvm::MemoryWriteTracking.

Referenced by insertInstructionTo().

◆ removeInstruction()

void InstructionPrecedenceTracking::removeInstruction ( const Instruction Inst)

Notifies this tracking that we are going to remove the instruction Inst It makes all necessary updates to internal caches to keep them consistent.

Definition at line 115 of file InstructionPrecedenceTracking.cpp.

References assert(), and llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent().

Referenced by llvm::ICFLoopSafetyInfo::removeInstruction(), and removeUsersOf().

◆ removeUsersOf()

void InstructionPrecedenceTracking::removeUsersOf ( const Instruction Inst)

Notifies this tracking that we are going to replace all uses of Inst.

It makes all necessary updates to internal caches to keep them consistent. Should typically be called before a RAUW.

Definition at line 122 of file InstructionPrecedenceTracking.cpp.

References removeInstruction(), and llvm::Value::users().


The documentation for this class was generated from the following files: