class InstVisitor

Declaration

template <typename SubClass, typename RetTy = void>
class InstVisitor { /* full declaration omitted */ };

Description

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 <CountAllocaVisitor > { 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.

Declared at: llvm/include/llvm/IR/InstVisitor.h:78

Templates

SubClass
RetTy = void

Method Overview

Methods

RetTy delegateCallInst(llvm::Instruction& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:306

Parameters

llvm::Instruction& I

RetTy delegateCallInst(llvm::CallInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:285

Parameters

llvm::CallInst& I

void visit(llvm::Function& F)

Declared at: llvm/include/llvm/IR/InstVisitor.h:98

Parameters

llvm::Function& F

template <class Iterator>
void visit(Iterator Start, Iterator End)

Declared at: llvm/include/llvm/IR/InstVisitor.h:87

Templates

Iterator

Parameters

Iterator Start
Iterator End

RetTy visit(llvm::Instruction& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:115

Parameters

llvm::Instruction& I

RetTy visit(llvm::Instruction* I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:111

Parameters

llvm::Instruction* I

void visit(llvm::Function* F)

Declared at: llvm/include/llvm/IR/InstVisitor.h:109

Parameters

llvm::Function* F

void visit(llvm::Module& M)

Declared at: llvm/include/llvm/IR/InstVisitor.h:94

Parameters

llvm::Module& M

void visit(llvm::BasicBlock& BB)

Declared at: llvm/include/llvm/IR/InstVisitor.h:102

Parameters

llvm::BasicBlock& BB

void visit(llvm::Module* M)

Declared at: llvm/include/llvm/IR/InstVisitor.h:108

Parameters

llvm::Module* M

void visit(llvm::BasicBlock* BB)

Declared at: llvm/include/llvm/IR/InstVisitor.h:110

Parameters

llvm::BasicBlock* BB

RetTy visitAddrSpaceCastInst(
    llvm::AddrSpaceCastInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:188

Parameters

llvm::AddrSpaceCastInst& I

RetTy visitAllocaInst(llvm::AllocaInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:168

Parameters

llvm::AllocaInst& I

RetTy visitAtomicCmpXchgInst(
    llvm::AtomicCmpXchgInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:171

Parameters

llvm::AtomicCmpXchgInst& I

RetTy visitAtomicRMWInst(llvm::AtomicRMWInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:172

Parameters

llvm::AtomicRMWInst& I

void visitBasicBlock(llvm::BasicBlock& BB)

Declared at: llvm/include/llvm/IR/InstVisitor.h:143

Parameters

llvm::BasicBlock& BB

RetTy visitBinaryOperator(llvm::BinaryOperator& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:262

Parameters

llvm::BinaryOperator& I

RetTy visitBitCastInst(llvm::BitCastInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:187

Parameters

llvm::BitCastInst& I

RetTy visitBranchInst(llvm::BranchInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:230

Parameters

llvm::BranchInst& I

RetTy visitCallBase(llvm::CallBase& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:268

Parameters

llvm::CallBase& I

RetTy visitCallBrInst(llvm::CallBrInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:223

Parameters

llvm::CallBrInst& I

RetTy visitCallInst(llvm::CallInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:221

Parameters

llvm::CallInst& I

RetTy visitCastInst(llvm::CastInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:260

Parameters

llvm::CastInst& I

RetTy visitCatchPadInst(llvm::CatchPadInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:199

Parameters

llvm::CatchPadInst& I

RetTy visitCatchReturnInst(
    llvm::CatchReturnInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:248

Parameters

llvm::CatchReturnInst& I

RetTy visitCatchSwitchInst(
    llvm::CatchSwitchInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:251

Parameters

llvm::CatchSwitchInst& I

RetTy visitCleanupPadInst(llvm::CleanupPadInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:198

Parameters

llvm::CleanupPadInst& I

RetTy visitCleanupReturnInst(
    llvm::CleanupReturnInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:245

Parameters

llvm::CleanupReturnInst& I

RetTy visitCmpInst(llvm::CmpInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:263

Parameters

llvm::CmpInst& I

RetTy visitDbgDeclareInst(llvm::DbgDeclareInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:203

Parameters

llvm::DbgDeclareInst& I

RetTy visitDbgInfoIntrinsic(
    llvm::DbgInfoIntrinsic& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:208

Parameters

llvm::DbgInfoIntrinsic& I

RetTy visitDbgLabelInst(llvm::DbgLabelInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:207

Parameters

llvm::DbgLabelInst& I

RetTy visitDbgValueInst(llvm::DbgValueInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:204

Parameters

llvm::DbgValueInst& I

RetTy visitDbgVariableIntrinsic(
    llvm::DbgVariableIntrinsic& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:205

Parameters

llvm::DbgVariableIntrinsic& I

RetTy visitExtractElementInst(
    llvm::ExtractElementInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:191

Parameters

llvm::ExtractElementInst& I

RetTy visitExtractValueInst(
    llvm::ExtractValueInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:194

Parameters

llvm::ExtractValueInst& I

RetTy visitFCmpInst(llvm::FCmpInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:167

Parameters

llvm::FCmpInst& I

RetTy visitFPExtInst(llvm::FPExtInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:180

Parameters

llvm::FPExtInst& I

RetTy visitFPToSIInst(llvm::FPToSIInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:182

Parameters

llvm::FPToSIInst& I

RetTy visitFPToUIInst(llvm::FPToUIInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:181

Parameters

llvm::FPToUIInst& I

RetTy visitFPTruncInst(llvm::FPTruncInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:179

Parameters

llvm::FPTruncInst& I

RetTy visitFenceInst(llvm::FenceInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:173

Parameters

llvm::FenceInst& I

RetTy visitFreezeInst(llvm::FreezeInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:200

Parameters

llvm::FreezeInst& I

RetTy visitFuncletPadInst(llvm::FuncletPadInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:197

Parameters

llvm::FuncletPadInst& I

void visitFunction(llvm::Function& F)

Declared at: llvm/include/llvm/IR/InstVisitor.h:142

Parameters

llvm::Function& F

RetTy visitGetElementPtrInst(
    llvm::GetElementPtrInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:174

Parameters

llvm::GetElementPtrInst& I

RetTy visitICmpInst(llvm::ICmpInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:166

Parameters

llvm::ICmpInst& I

RetTy visitIndirectBrInst(llvm::IndirectBrInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:236

Parameters

llvm::IndirectBrInst& I

RetTy visitInsertElementInst(
    llvm::InsertElementInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:192

Parameters

llvm::InsertElementInst& I

RetTy visitInsertValueInst(
    llvm::InsertValueInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:195

Parameters

llvm::InsertValueInst& I

void visitInstruction(llvm::Instruction& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:281

Parameters

llvm::Instruction& I

RetTy visitIntToPtrInst(llvm::IntToPtrInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:186

Parameters

llvm::IntToPtrInst& I

RetTy visitIntrinsicInst(llvm::IntrinsicInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:220

Parameters

llvm::IntrinsicInst& I

RetTy visitInvokeInst(llvm::InvokeInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:222

Parameters

llvm::InvokeInst& I

RetTy visitLandingPadInst(llvm::LandingPadInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:196

Parameters

llvm::LandingPadInst& I

RetTy visitLoadInst(llvm::LoadInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:169

Parameters

llvm::LoadInst& I

RetTy visitMemCpyInlineInst(
    llvm::MemCpyInlineInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:211

Parameters

llvm::MemCpyInlineInst& I

RetTy visitMemCpyInst(llvm::MemCpyInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:210

Parameters

llvm::MemCpyInst& I

RetTy visitMemIntrinsic(llvm::MemIntrinsic& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:216

Parameters

llvm::MemIntrinsic& I

RetTy visitMemMoveInst(llvm::MemMoveInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:214

Parameters

llvm::MemMoveInst& I

RetTy visitMemSetInst(llvm::MemSetInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:209

Parameters

llvm::MemSetInst& I

RetTy visitMemTransferInst(
    llvm::MemTransferInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:215

Parameters

llvm::MemTransferInst& I

void visitModule(llvm::Module& M)

Declared at: llvm/include/llvm/IR/InstVisitor.h:141

Parameters

llvm::Module& M

RetTy visitPHINode(llvm::PHINode& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:175

Parameters

llvm::PHINode& I

RetTy visitPtrToIntInst(llvm::PtrToIntInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:185

Parameters

llvm::PtrToIntInst& I

RetTy visitResumeInst(llvm::ResumeInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:239

Parameters

llvm::ResumeInst& I

RetTy visitReturnInst(llvm::ReturnInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:227

Parameters

llvm::ReturnInst& I

RetTy visitSExtInst(llvm::SExtInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:178

Parameters

llvm::SExtInst& I

RetTy visitSIToFPInst(llvm::SIToFPInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:184

Parameters

llvm::SIToFPInst& I

RetTy visitSelectInst(llvm::SelectInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:189

Parameters

llvm::SelectInst& I

RetTy visitShuffleVectorInst(
    llvm::ShuffleVectorInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:193

Parameters

llvm::ShuffleVectorInst& I

RetTy visitStoreInst(llvm::StoreInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:170

Parameters

llvm::StoreInst& I

RetTy visitSwitchInst(llvm::SwitchInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:233

Parameters

llvm::SwitchInst& I

RetTy visitTerminator(llvm::Instruction& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:254

Parameters

llvm::Instruction& I

RetTy visitTruncInst(llvm::TruncInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:176

Parameters

llvm::TruncInst& I

RetTy visitUIToFPInst(llvm::UIToFPInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:183

Parameters

llvm::UIToFPInst& I

RetTy visitUnaryInstruction(
    llvm::UnaryInstruction& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:264

Parameters

llvm::UnaryInstruction& I

RetTy visitUnaryOperator(llvm::UnaryOperator& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:261

Parameters

llvm::UnaryOperator& I

RetTy visitUnreachableInst(
    llvm::UnreachableInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:242

Parameters

llvm::UnreachableInst& I

RetTy visitVAArgInst(llvm::VAArgInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:190

Parameters

llvm::VAArgInst& I

RetTy visitVACopyInst(llvm::VACopyInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:219

Parameters

llvm::VACopyInst& I

RetTy visitVAEndInst(llvm::VAEndInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:218

Parameters

llvm::VAEndInst& I

RetTy visitVAStartInst(llvm::VAStartInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:217

Parameters

llvm::VAStartInst& I

RetTy visitZExtInst(llvm::ZExtInst& I)

Declared at: llvm/include/llvm/IR/InstVisitor.h:177

Parameters

llvm::ZExtInst& I