LLVM: llvm::InstVisitor< SubClass, RetTy > Class Template Reference (original) (raw)

Base class for instruction visitors. More...

#include "[llvm/IR/InstVisitor.h](InstVisitor%5F8h%5Fsource.html)"

Public Member Functions
template
void visit (Iterator Start, Iterator End)
void visit (Module &M)
void visit (Function &F)
void visit (BasicBlock &BB)
void visit (Module *M)
void visit (Function *F)
void visit (BasicBlock *BB)
RetTy visit (Instruction *I)
RetTy visit (Instruction &I)
void visitModule (Module &M)
void visitFunction (Function &F)
void visitBasicBlock (BasicBlock &BB)
RetTy visitICmpInst (ICmpInst &I)
RetTy visitFCmpInst (FCmpInst &I)
RetTy visitAllocaInst (AllocaInst &I)
RetTy visitLoadInst (LoadInst &I)
RetTy visitStoreInst (StoreInst &I)
RetTy visitAtomicCmpXchgInst (AtomicCmpXchgInst &I)
RetTy visitAtomicRMWInst (AtomicRMWInst &I)
RetTy visitFenceInst (FenceInst &I)
RetTy visitGetElementPtrInst (GetElementPtrInst &I)
RetTy visitPHINode (PHINode &I)
RetTy visitTruncInst (TruncInst &I)
RetTy visitZExtInst (ZExtInst &I)
RetTy visitSExtInst (SExtInst &I)
RetTy visitFPTruncInst (FPTruncInst &I)
RetTy visitFPExtInst (FPExtInst &I)
RetTy visitFPToUIInst (FPToUIInst &I)
RetTy visitFPToSIInst (FPToSIInst &I)
RetTy visitUIToFPInst (UIToFPInst &I)
RetTy visitSIToFPInst (SIToFPInst &I)
RetTy visitPtrToIntInst (PtrToIntInst &I)
RetTy visitPtrToAddrInst (PtrToAddrInst &I)
RetTy visitIntToPtrInst (IntToPtrInst &I)
RetTy visitBitCastInst (BitCastInst &I)
RetTy visitAddrSpaceCastInst (AddrSpaceCastInst &I)
RetTy visitSelectInst (SelectInst &I)
RetTy visitVAArgInst (VAArgInst &I)
RetTy visitExtractElementInst (ExtractElementInst &I)
RetTy visitInsertElementInst (InsertElementInst &I)
RetTy visitShuffleVectorInst (ShuffleVectorInst &I)
RetTy visitExtractValueInst (ExtractValueInst &I)
RetTy visitInsertValueInst (InsertValueInst &I)
RetTy visitLandingPadInst (LandingPadInst &I)
RetTy visitFuncletPadInst (FuncletPadInst &I)
RetTy visitCleanupPadInst (CleanupPadInst &I)
RetTy visitCatchPadInst (CatchPadInst &I)
RetTy visitFreezeInst (FreezeInst &I)
RetTy visitMemSetInst (MemSetInst &I)
RetTy visitMemSetPatternInst (MemSetPatternInst &I)
RetTy visitMemCpyInst (MemCpyInst &I)
RetTy visitMemMoveInst (MemMoveInst &I)
RetTy visitMemTransferInst (MemTransferInst &I)
RetTy visitMemIntrinsic (MemIntrinsic &I)
RetTy visitVAStartInst (VAStartInst &I)
RetTy visitVAEndInst (VAEndInst &I)
RetTy visitVACopyInst (VACopyInst &I)
RetTy visitIntrinsicInst (IntrinsicInst &I)
RetTy visitCallInst (CallInst &I)
RetTy visitInvokeInst (InvokeInst &I)
RetTy visitCallBrInst (CallBrInst &I)
RetTy visitReturnInst (ReturnInst &I)
RetTy visitBranchInst (BranchInst &I)
RetTy visitSwitchInst (SwitchInst &I)
RetTy visitIndirectBrInst (IndirectBrInst &I)
RetTy visitResumeInst (ResumeInst &I)
RetTy visitUnreachableInst (UnreachableInst &I)
RetTy visitCleanupReturnInst (CleanupReturnInst &I)
RetTy visitCatchReturnInst (CatchReturnInst &I)
RetTy visitCatchSwitchInst (CatchSwitchInst &I)
RetTy visitTerminator (Instruction &I)
RetTy visitCastInst (CastInst &I)
RetTy visitUnaryOperator (UnaryOperator &I)
RetTy visitBinaryOperator (BinaryOperator &I)
RetTy visitCmpInst (CmpInst &I)
RetTy visitUnaryInstruction (UnaryInstruction &I)
RetTy visitCallBase (CallBase &I)
void visitInstruction (Instruction &I)

template<typename SubClass, typename RetTy = void>
class llvm::InstVisitor< SubClass, RetTy >

Base class for instruction visitors.

Instruction visitors are used when you want to perform different actions for different kinds of instructions without having to use lots of casts and a big switch statement (in your code, that is).

To define your own visitor, inherit from this class, specifying your new type for the 'SubClass' template parameter, and "override" visitXXX functions in your class. I say "override" because this class is defined in terms of statically resolved overloading, not virtual functions.

For example, here is a visitor that counts the number of malloc instructions processed:

/// Declare the class. Note that we derive from InstVisitor instantiated /// with our new subclasses type. /// struct CountAllocaVisitor : public InstVisitor { unsigned Count; CountAllocaVisitor() : Count(0) {}

void visitAllocaInst(AllocaInst &AI) { ++Count; } };

And this class would be used like this: CountAllocaVisitor CAV; CAV.visit(function); NumAllocas = CAV.Count;

The defined has 'visit' methods for Instruction, and also for BasicBlock, Function, and Module, which recursively process all contained instructions.

Note that if you don't implement visitXXX for some instruction type, the visitXXX method for instruction superclass will be invoked. So if instructions are added in the future, they will be automatically supported, if you handle one of their superclasses.

The optional second template argument specifies the type that instruction visitation functions should return. If you specify this, you MUST provide an implementation of visitInstruction though!.

Note that this class is specifically designed as a template to avoid virtual function call overhead. Defining and using an InstVisitor is just as efficient as having your own switch statement over the instruction opcode.

Definition at line 78 of file InstVisitor.h.

visit() [1/9]

template<typename SubClass, typename RetTy = void>

visit() [2/9]

template<typename SubClass, typename RetTy = void>

visit() [3/9]

template<typename SubClass, typename RetTy = void>

visit() [4/9]

template<typename SubClass, typename RetTy = void>

visit() [5/9]

template<typename SubClass, typename RetTy = void>

visit() [6/9]

template<typename SubClass, typename RetTy = void>

visit() [7/9]

template<typename SubClass, typename RetTy = void>

template

Definition at line 87 of file InstVisitor.h.

Referenced by llvm::findIndirectCalls(), llvm::findVTableAddrs(), DataScalarizerVisitor::visit(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visit(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visit(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visit(), and llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visit().

visit() [8/9]

template<typename SubClass, typename RetTy = void>

visit() [9/9]

template<typename SubClass, typename RetTy = void>

visitAddrSpaceCastInst()

template<typename SubClass, typename RetTy = void>

visitAllocaInst()

template<typename SubClass, typename RetTy = void>

visitAtomicCmpXchgInst()

template<typename SubClass, typename RetTy = void>

visitAtomicRMWInst()

template<typename SubClass, typename RetTy = void>

visitBasicBlock()

template<typename SubClass, typename RetTy = void>

visitBinaryOperator()

template<typename SubClass, typename RetTy = void>

visitBitCastInst()

template<typename SubClass, typename RetTy = void>

visitBranchInst()

template<typename SubClass, typename RetTy = void>

visitCallBase()

template<typename SubClass, typename RetTy = void>

visitCallBrInst()

template<typename SubClass, typename RetTy = void>

visitCallInst()

template<typename SubClass, typename RetTy = void>

visitCastInst()

template<typename SubClass, typename RetTy = void>

visitCatchPadInst()

template<typename SubClass, typename RetTy = void>

visitCatchReturnInst()

template<typename SubClass, typename RetTy = void>

visitCatchSwitchInst()

template<typename SubClass, typename RetTy = void>

visitCleanupPadInst()

template<typename SubClass, typename RetTy = void>

visitCleanupReturnInst()

template<typename SubClass, typename RetTy = void>

visitCmpInst()

template<typename SubClass, typename RetTy = void>

visitExtractElementInst()

template<typename SubClass, typename RetTy = void>

visitExtractValueInst()

template<typename SubClass, typename RetTy = void>

visitFCmpInst()

template<typename SubClass, typename RetTy = void>

visitFenceInst()

template<typename SubClass, typename RetTy = void>

visitFPExtInst()

template<typename SubClass, typename RetTy = void>

visitFPToSIInst()

template<typename SubClass, typename RetTy = void>

visitFPToUIInst()

template<typename SubClass, typename RetTy = void>

visitFPTruncInst()

template<typename SubClass, typename RetTy = void>

visitFreezeInst()

template<typename SubClass, typename RetTy = void>

visitFuncletPadInst()

template<typename SubClass, typename RetTy = void>

visitFunction()

template<typename SubClass, typename RetTy = void>

visitGetElementPtrInst()

template<typename SubClass, typename RetTy = void>

visitICmpInst()

template<typename SubClass, typename RetTy = void>

visitIndirectBrInst()

template<typename SubClass, typename RetTy = void>

visitInsertElementInst()

template<typename SubClass, typename RetTy = void>

visitInsertValueInst()

template<typename SubClass, typename RetTy = void>

visitInstruction()

template<typename SubClass, typename RetTy = void>

visitIntrinsicInst()

template<typename SubClass, typename RetTy = void>

visitIntToPtrInst()

template<typename SubClass, typename RetTy = void>

visitInvokeInst()

template<typename SubClass, typename RetTy = void>

visitLandingPadInst()

template<typename SubClass, typename RetTy = void>

visitLoadInst()

template<typename SubClass, typename RetTy = void>

visitMemCpyInst()

template<typename SubClass, typename RetTy = void>

visitMemIntrinsic()

template<typename SubClass, typename RetTy = void>

visitMemMoveInst()

template<typename SubClass, typename RetTy = void>

visitMemSetInst()

template<typename SubClass, typename RetTy = void>

visitMemSetPatternInst()

template<typename SubClass, typename RetTy = void>

visitMemTransferInst()

template<typename SubClass, typename RetTy = void>

visitModule()

template<typename SubClass, typename RetTy = void>

visitPHINode()

template<typename SubClass, typename RetTy = void>

visitPtrToAddrInst()

template<typename SubClass, typename RetTy = void>

visitPtrToIntInst()

template<typename SubClass, typename RetTy = void>

visitResumeInst()

template<typename SubClass, typename RetTy = void>

visitReturnInst()

template<typename SubClass, typename RetTy = void>

visitSelectInst()

template<typename SubClass, typename RetTy = void>

visitSExtInst()

template<typename SubClass, typename RetTy = void>

visitShuffleVectorInst()

template<typename SubClass, typename RetTy = void>

visitSIToFPInst()

template<typename SubClass, typename RetTy = void>

visitStoreInst()

template<typename SubClass, typename RetTy = void>

visitSwitchInst()

template<typename SubClass, typename RetTy = void>

visitTerminator()

template<typename SubClass, typename RetTy = void>

Definition at line 248 of file InstVisitor.h.

Referenced by llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitBranchInst(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitCallBase(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitCatchReturnInst(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitCatchSwitchInst(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitCleanupReturnInst(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitIndirectBrInst(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitResumeInst(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitReturnInst(), llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitSwitchInst(), and llvm::InstVisitor< UnrolledInstAnalyzer, bool >::visitUnreachableInst().

visitTruncInst()

template<typename SubClass, typename RetTy = void>

visitUIToFPInst()

template<typename SubClass, typename RetTy = void>

visitUnaryInstruction()

template<typename SubClass, typename RetTy = void>

visitUnaryOperator()

template<typename SubClass, typename RetTy = void>

visitUnreachableInst()

template<typename SubClass, typename RetTy = void>

visitVAArgInst()

template<typename SubClass, typename RetTy = void>

visitVACopyInst()

template<typename SubClass, typename RetTy = void>

visitVAEndInst()

template<typename SubClass, typename RetTy = void>

visitVAStartInst()

template<typename SubClass, typename RetTy = void>

visitZExtInst()

template<typename SubClass, typename RetTy = void>


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