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:80

Templates

SubClass
RetTy = void

Method Overview

Methods

void visit(llvm::Function& F)

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

Parameters

llvm::Function& F

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

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

Templates

Iterator

Parameters

Iterator Start
Iterator End

RetTy visit(llvm::Instruction& I)

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

Parameters

llvm::Instruction& I

RetTy visit(llvm::Instruction* I)

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

Parameters

llvm::Instruction* I

void visit(llvm::BasicBlock* BB)

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

Parameters

llvm::BasicBlock* BB

void visit(llvm::Module* M)

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

Parameters

llvm::Module* M

void visit(llvm::Module& M)

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

Parameters

llvm::Module& M

void visit(llvm::Function* F)

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

Parameters

llvm::Function* F

void visit(llvm::BasicBlock& BB)

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

Parameters

llvm::BasicBlock& BB

RetTy visitAddrSpaceCastInst(
    llvm::AddrSpaceCastInst& I)

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

Parameters

llvm::AddrSpaceCastInst& I

RetTy visitAllocaInst(llvm::AllocaInst& I)

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

Parameters

llvm::AllocaInst& I

RetTy visitAtomicCmpXchgInst(
    llvm::AtomicCmpXchgInst& I)

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

Parameters

llvm::AtomicCmpXchgInst& I

RetTy visitAtomicRMWInst(llvm::AtomicRMWInst& I)

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

Parameters

llvm::AtomicRMWInst& I

void visitBasicBlock(llvm::BasicBlock& BB)

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

Parameters

llvm::BasicBlock& BB

RetTy visitBinaryOperator(llvm::BinaryOperator& I)

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

Parameters

llvm::BinaryOperator& I

RetTy visitBitCastInst(llvm::BitCastInst& I)

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

Parameters

llvm::BitCastInst& I

RetTy visitBranchInst(llvm::BranchInst& I)

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

Parameters

llvm::BranchInst& I

RetTy visitCallBase(llvm::CallBase& I)

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

Parameters

llvm::CallBase& I

RetTy visitCallBrInst(llvm::CallBrInst& I)

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

Parameters

llvm::CallBrInst& I

RetTy visitCallInst(llvm::CallInst& I)

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

Parameters

llvm::CallInst& I

RetTy visitCallSite(llvm::CallSite CS)

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

Parameters

llvm::CallSite CS

RetTy visitCastInst(llvm::CastInst& I)

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

Parameters

llvm::CastInst& I

RetTy visitCatchPadInst(llvm::CatchPadInst& I)

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

Parameters

llvm::CatchPadInst& I

RetTy visitCatchReturnInst(
    llvm::CatchReturnInst& I)

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

Parameters

llvm::CatchReturnInst& I

RetTy visitCatchSwitchInst(
    llvm::CatchSwitchInst& I)

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

Parameters

llvm::CatchSwitchInst& I

RetTy visitCleanupPadInst(llvm::CleanupPadInst& I)

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

Parameters

llvm::CleanupPadInst& I

RetTy visitCleanupReturnInst(
    llvm::CleanupReturnInst& I)

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

Parameters

llvm::CleanupReturnInst& I

RetTy visitCmpInst(llvm::CmpInst& I)

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

Parameters

llvm::CmpInst& I

RetTy visitDbgDeclareInst(llvm::DbgDeclareInst& I)

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

Parameters

llvm::DbgDeclareInst& I

RetTy visitDbgInfoIntrinsic(
    llvm::DbgInfoIntrinsic& I)

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

Parameters

llvm::DbgInfoIntrinsic& I

RetTy visitDbgLabelInst(llvm::DbgLabelInst& I)

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

Parameters

llvm::DbgLabelInst& I

RetTy visitDbgValueInst(llvm::DbgValueInst& I)

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

Parameters

llvm::DbgValueInst& I

RetTy visitDbgVariableIntrinsic(
    llvm::DbgVariableIntrinsic& I)

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

Parameters

llvm::DbgVariableIntrinsic& I

RetTy visitExtractElementInst(
    llvm::ExtractElementInst& I)

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

Parameters

llvm::ExtractElementInst& I

RetTy visitExtractValueInst(
    llvm::ExtractValueInst& I)

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

Parameters

llvm::ExtractValueInst& I

RetTy visitFCmpInst(llvm::FCmpInst& I)

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

Parameters

llvm::FCmpInst& I

RetTy visitFPExtInst(llvm::FPExtInst& I)

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

Parameters

llvm::FPExtInst& I

RetTy visitFPToSIInst(llvm::FPToSIInst& I)

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

Parameters

llvm::FPToSIInst& I

RetTy visitFPToUIInst(llvm::FPToUIInst& I)

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

Parameters

llvm::FPToUIInst& I

RetTy visitFPTruncInst(llvm::FPTruncInst& I)

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

Parameters

llvm::FPTruncInst& I

RetTy visitFenceInst(llvm::FenceInst& I)

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

Parameters

llvm::FenceInst& I

RetTy visitFreezeInst(llvm::FreezeInst& I)

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

Parameters

llvm::FreezeInst& I

RetTy visitFuncletPadInst(llvm::FuncletPadInst& I)

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

Parameters

llvm::FuncletPadInst& I

void visitFunction(llvm::Function& F)

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

Parameters

llvm::Function& F

RetTy visitGetElementPtrInst(
    llvm::GetElementPtrInst& I)

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

Parameters

llvm::GetElementPtrInst& I

RetTy visitICmpInst(llvm::ICmpInst& I)

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

Parameters

llvm::ICmpInst& I

RetTy visitIndirectBrInst(llvm::IndirectBrInst& I)

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

Parameters

llvm::IndirectBrInst& I

RetTy visitInsertElementInst(
    llvm::InsertElementInst& I)

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

Parameters

llvm::InsertElementInst& I

RetTy visitInsertValueInst(
    llvm::InsertValueInst& I)

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

Parameters

llvm::InsertValueInst& I

void visitInstruction(llvm::Instruction& I)

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

Parameters

llvm::Instruction& I

RetTy visitIntToPtrInst(llvm::IntToPtrInst& I)

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

Parameters

llvm::IntToPtrInst& I

RetTy visitIntrinsicInst(llvm::IntrinsicInst& I)

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

Parameters

llvm::IntrinsicInst& I

RetTy visitInvokeInst(llvm::InvokeInst& I)

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

Parameters

llvm::InvokeInst& I

RetTy visitLandingPadInst(llvm::LandingPadInst& I)

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

Parameters

llvm::LandingPadInst& I

RetTy visitLoadInst(llvm::LoadInst& I)

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

Parameters

llvm::LoadInst& I

RetTy visitMemCpyInst(llvm::MemCpyInst& I)

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

Parameters

llvm::MemCpyInst& I

RetTy visitMemIntrinsic(llvm::MemIntrinsic& I)

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

Parameters

llvm::MemIntrinsic& I

RetTy visitMemMoveInst(llvm::MemMoveInst& I)

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

Parameters

llvm::MemMoveInst& I

RetTy visitMemSetInst(llvm::MemSetInst& I)

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

Parameters

llvm::MemSetInst& I

RetTy visitMemTransferInst(
    llvm::MemTransferInst& I)

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

Parameters

llvm::MemTransferInst& I

void visitModule(llvm::Module& M)

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

Parameters

llvm::Module& M

RetTy visitPHINode(llvm::PHINode& I)

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

Parameters

llvm::PHINode& I

RetTy visitPtrToIntInst(llvm::PtrToIntInst& I)

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

Parameters

llvm::PtrToIntInst& I

RetTy visitResumeInst(llvm::ResumeInst& I)

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

Parameters

llvm::ResumeInst& I

RetTy visitReturnInst(llvm::ReturnInst& I)

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

Parameters

llvm::ReturnInst& I

RetTy visitSExtInst(llvm::SExtInst& I)

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

Parameters

llvm::SExtInst& I

RetTy visitSIToFPInst(llvm::SIToFPInst& I)

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

Parameters

llvm::SIToFPInst& I

RetTy visitSelectInst(llvm::SelectInst& I)

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

Parameters

llvm::SelectInst& I

RetTy visitShuffleVectorInst(
    llvm::ShuffleVectorInst& I)

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

Parameters

llvm::ShuffleVectorInst& I

RetTy visitStoreInst(llvm::StoreInst& I)

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

Parameters

llvm::StoreInst& I

RetTy visitSwitchInst(llvm::SwitchInst& I)

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

Parameters

llvm::SwitchInst& I

RetTy visitTerminator(llvm::Instruction& I)

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

Parameters

llvm::Instruction& I

RetTy visitTruncInst(llvm::TruncInst& I)

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

Parameters

llvm::TruncInst& I

RetTy visitUIToFPInst(llvm::UIToFPInst& I)

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

Parameters

llvm::UIToFPInst& I

RetTy visitUnaryInstruction(
    llvm::UnaryInstruction& I)

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

Parameters

llvm::UnaryInstruction& I

RetTy visitUnaryOperator(llvm::UnaryOperator& I)

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

Parameters

llvm::UnaryOperator& I

RetTy visitUnreachableInst(
    llvm::UnreachableInst& I)

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

Parameters

llvm::UnreachableInst& I

RetTy visitVAArgInst(llvm::VAArgInst& I)

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

Parameters

llvm::VAArgInst& I

RetTy visitVACopyInst(llvm::VACopyInst& I)

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

Parameters

llvm::VACopyInst& I

RetTy visitVAEndInst(llvm::VAEndInst& I)

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

Parameters

llvm::VAEndInst& I

RetTy visitVAStartInst(llvm::VAStartInst& I)

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

Parameters

llvm::VAStartInst& I

RetTy visitZExtInst(llvm::ZExtInst& I)

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

Parameters

llvm::ZExtInst& I