LLVM API Documentation

llvm::InstVisitor< SubClass, RetTy > Class Template Reference

Base class for instruction visitors. More...

#include <InstVisitor.h>

Inheritance diagram for llvm::InstVisitor< SubClass, RetTy >:

Inheritance graph
[legend]
Collaboration diagram for llvm::InstVisitor< SubClass, RetTy >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

template<class Iterator>
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)
 HANDLE_MEMORY_INST (21, Malloc, MallocInst) HANDLE_MEMORY_INST(23
AllocaInst HANDLE_MEMORY_INST (24, Load, LoadInst) HANDLE_OTHER_INST(27
AllocaInst PHINode HANDLE_OTHER_INST (28, Cast, CastInst) HANDLE_OTHER_INST(29
AllocaInst PHINode CallInst HANDLE_OTHER_INST (30, Shl, ShiftInst) HANDLE_OTHER_INST(34
AllocaInst PHINode CallInst
SelectInst 
HANDLE_OTHER_INST (35, UserOp1, Instruction) HANDLE_OTHER_INST(37
AllocaInst PHINode CallInst
SelectInst VAArgInst 
HANDLE_OTHER_INST (38, ExtractElement, ExtractElementInst) HANDLE_OTHER_INST(39
AllocaInst PHINode CallInst
SelectInst VAArgInst InsertElementInst 
HANDLE_OTHER_INST (40, ShuffleVector, ShuffleVectorInst) RetTy visitReturnInst(ReturnInst &I)
RetTy visitBranchInst (BranchInst &I)
RetTy visitSwitchInst (SwitchInst &I)
RetTy visitInvokeInst (InvokeInst &I)
RetTy visitUnwindInst (UnwindInst &I)
RetTy visitUnreachableInst (UnreachableInst &I)
RetTy visitSetCondInst (SetCondInst &I)
RetTy visitMallocInst (MallocInst &I)
RetTy visitAllocaInst (AllocaInst &I)
RetTy visitFreeInst (FreeInst &I)
RetTy visitLoadInst (LoadInst &I)
RetTy visitStoreInst (StoreInst &I)
RetTy visitGetElementPtrInst (GetElementPtrInst &I)
RetTy visitPHINode (PHINode &I)
RetTy visitCastInst (CastInst &I)
RetTy visitSelectInst (SelectInst &I)
RetTy visitCallInst (CallInst &I)
RetTy visitShiftInst (ShiftInst &I)
RetTy visitVAArgInst (VAArgInst &I)
RetTy visitExtractElementInst (ExtractElementInst &I)
RetTy visitInsertElementInst (InsertElementInst &I)
RetTy visitShuffleVectorInst (ShuffleVectorInst &I)
RetTy visitTerminatorInst (TerminatorInst &I)
RetTy visitBinaryOperator (BinaryOperator &I)
RetTy visitAllocationInst (AllocationInst &I)
void visitInstruction (Instruction &I)

Public Attributes

 Alloca
AllocaInst PHI
AllocaInst PHINode Call
AllocaInst PHINode CallInst Select
AllocaInst PHINode CallInst
SelectInst 
VAArg
AllocaInst PHINode CallInst
SelectInst VAArgInst 
InsertElement

Detailed Description

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 action for different kinds of instruction without 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 "overriding" 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 CountMallocVisitor : public InstVisitor<CountMallocVisitor> { unsigned Count; CountMallocVisitor() : Count(0) {}

void visitMallocInst(MallocInst *MI) { ++Count; } };

And this class would be used like this: CountMallocVistor CMV; CMV.visit(function); NumMallocs = CMV.Count;

The defined has 'visit' methods for Instruction, and also for BasicBlock, Function, and Module, which recursively process all conained 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 on 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 241 of file InstVisitor.h.


Member Function Documentation

template<typename SubClass, typename RetTy = void>
template<class Iterator>
void llvm::InstVisitor< SubClass, RetTy >::visit ( Iterator  Start,
Iterator  End 
) [inline]

Definition at line 250 of file InstVisitor.h.

Referenced by SCCPSolver::ResolveBranchesIn(), llvm::Interpreter::run(), and SCCPSolver::Solve().

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visit ( Module M  )  [inline]

Definition at line 257 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visit ( Function F  )  [inline]

Definition at line 261 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visit ( BasicBlock BB  )  [inline]

Definition at line 265 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visit ( Module M  )  [inline]

Definition at line 271 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visit ( Function F  )  [inline]

Definition at line 272 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visit ( BasicBlock BB  )  [inline]

Definition at line 273 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visit ( Instruction I  )  [inline]

Definition at line 274 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visit ( Instruction I  )  [inline]

Definition at line 278 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visitModule ( Module M  )  [inline]

Definition at line 462 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visitFunction ( Function F  )  [inline]

Definition at line 463 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visitBasicBlock ( BasicBlock BB  )  [inline]

Definition at line 464 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
llvm::InstVisitor< SubClass, RetTy >::HANDLE_MEMORY_INST ( 21  ,
Malloc  ,
MallocInst   
)

template<typename SubClass, typename RetTy = void>
AllocaInst llvm::InstVisitor< SubClass, RetTy >::HANDLE_MEMORY_INST ( 24  ,
Load  ,
LoadInst   
)

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode llvm::InstVisitor< SubClass, RetTy >::HANDLE_OTHER_INST ( 28  ,
Cast  ,
CastInst   
)

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode CallInst llvm::InstVisitor< SubClass, RetTy >::HANDLE_OTHER_INST ( 30  ,
Shl  ,
ShiftInst   
)

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode CallInst SelectInst llvm::InstVisitor< SubClass, RetTy >::HANDLE_OTHER_INST ( 35  ,
UserOp1  ,
Instruction   
)

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode CallInst SelectInst VAArgInst llvm::InstVisitor< SubClass, RetTy >::HANDLE_OTHER_INST ( 38  ,
ExtractElement  ,
ExtractElementInst   
)

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode CallInst SelectInst VAArgInst InsertElementInst llvm::InstVisitor< SubClass, RetTy >::HANDLE_OTHER_INST ( 40  ,
ShuffleVector  ,
ShuffleVectorInst   
) [inline]

Definition at line 619 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitBranchInst ( BranchInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 646 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitSwitchInst ( SwitchInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 647 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitInvokeInst ( InvokeInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 648 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitUnwindInst ( UnwindInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 649 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitUnreachableInst ( UnreachableInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 650 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitSetCondInst ( SetCondInst I  )  [inline]

Definition at line 651 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitMallocInst ( MallocInst I  )  [inline]

Definition at line 652 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitAllocaInst ( AllocaInst I  )  [inline]

Definition at line 653 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitFreeInst ( FreeInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 654 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitLoadInst ( LoadInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 655 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitStoreInst ( StoreInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 656 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitGetElementPtrInst ( GetElementPtrInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 657 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitPHINode ( PHINode I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 658 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitCastInst ( CastInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 659 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitSelectInst ( SelectInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 660 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitCallInst ( CallInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 661 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitShiftInst ( ShiftInst I  )  [inline]

Definition at line 662 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitVAArgInst ( VAArgInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 663 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitExtractElementInst ( ExtractElementInst I  )  [inline]

Definition at line 664 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitInsertElementInst ( InsertElementInst I  )  [inline]

Definition at line 665 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitShuffleVectorInst ( ShuffleVectorInst I  )  [inline]

Definition at line 666 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitTerminatorInst ( TerminatorInst I  )  [inline]

Definition at line 672 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitBinaryOperator ( BinaryOperator I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 673 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
RetTy llvm::InstVisitor< SubClass, RetTy >::visitAllocationInst ( AllocationInst I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 674 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
void llvm::InstVisitor< SubClass, RetTy >::visitInstruction ( Instruction I  )  [inline]

Reimplemented in llvm::Interpreter.

Definition at line 682 of file InstVisitor.h.


Member Data Documentation

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

Definition at line 596 of file InstVisitor.h.

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

Definition at line 604 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode llvm::InstVisitor< SubClass, RetTy >::Call

Definition at line 606 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode CallInst llvm::InstVisitor< SubClass, RetTy >::Select

Definition at line 612 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode CallInst SelectInst llvm::InstVisitor< SubClass, RetTy >::VAArg

Definition at line 616 of file InstVisitor.h.

template<typename SubClass, typename RetTy = void>
AllocaInst PHINode CallInst SelectInst VAArgInst llvm::InstVisitor< SubClass, RetTy >::InsertElement

Definition at line 618 of file InstVisitor.h.


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