LLVM: include/llvm/IR/InstVisitor.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10#ifndef LLVM_IR_INSTVISITOR_H
11#define LLVM_IR_INSTVISITOR_H
12
18
19namespace llvm {
20
21
22
23
24#define HANDLE_INST(NUM, OPCODE, CLASS) class CLASS;
25#include "llvm/IR/Instruction.def"
26
27#define DELEGATE(CLASS_TO_VISIT) \
28 return static_cast<SubClass*>(this)-> \
29 visit##CLASS_TO_VISIT(static_cast<CLASS_TO_VISIT&>(I))
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77template<typename SubClass, typename RetTy=void>
79
80
81
82
83
84public:
85
86 template
87 void visit(Iterator Start, Iterator End) {
88 while (Start != End)
89 static_cast<SubClass*>(this)->visit(*Start++);
90 }
91
92
93
95 static_cast<SubClass*>(this)->visitModule(M);
96 visit(M.begin(), M.end());
97 }
100 visit(F.begin(), F.end());
101 }
106
107
112
113
114
116 static_assert(std::is_base_of<InstVisitor, SubClass>::value,
117 "Must pass the derived type to this template!");
118
119 switch (I.getOpcode()) {
120 default: llvm_unreachable("Unknown instruction type encountered!");
121
122#define HANDLE_INST(NUM, OPCODE, CLASS) \
123 case Instruction::OPCODE: return \
124 static_cast<SubClass*>(this)-> \
125 visit##OPCODE(static_cast<CLASS&>(I));
126#include "llvm/IR/Instruction.def"
127 }
128 }
129
130
131
132
133
134
135
136
137
138
139
140
144
145
146
147
148
149
150
151
152
153
154#define HANDLE_INST(NUM, OPCODE, CLASS) \
155 RetTy visit##OPCODE(CLASS &I) { \
156 if (NUM == Instruction::Call) \
157 return delegateCallInst(I); \
158 else \
159 DELEGATE(CLASS); \
160 }
161#include "llvm/IR/Instruction.def"
162
163
164
165
202
218
219
220
249
250
251
252
253
259
260
261
268
269
270
271
272
273
274
276
277private:
278
279 RetTy delegateCallInst(CallInst &I) {
280 if (const Function *F = I.getCalledFunction()) {
281 switch (F->getIntrinsicID()) {
283 case Intrinsic::memcpy:
284 case Intrinsic::memcpy_inline:
287 case Intrinsic::memset:
288 case Intrinsic::memset_inline:
290 case Intrinsic::experimental_memset_pattern:
296 }
297 }
299 }
300
301
302
303 RetTy delegateCallInst(Instruction &I) {
304 llvm_unreachable("delegateCallInst called for non-CallInst");
305 }
306};
307
308#undef DELEGATE
309
310}
311
312#endif
Module.h This file contains the declarations for the Module class.
#define DELEGATE(CLASS_TO_VISIT)
Definition InstVisitor.h:27
This class represents a conversion between pointers from one address space to another.
an instruction to allocate memory on the stack
An instruction that atomically checks whether a specified value is in a memory location,...
an instruction that atomically reads a memory location, combines it with another value,...
LLVM Basic Block Representation.
iterator begin()
Instruction iterator methods.
This class represents a no-op cast from one type to another.
Conditional or Unconditional Branch instruction.
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
CallBr instruction, tracking function calls that may not return control but instead transfer it to a ...
This class represents a function call, abstracting a target machine's calling convention.
This is the base class for all instructions that perform data casts.
This class is the base class for the comparison instructions.
This instruction compares its operands according to the predicate given to the constructor.
This class represents an extension of floating point types.
This class represents a cast from floating point to signed integer.
This class represents a cast from floating point to unsigned integer.
This class represents a truncation of floating point types.
An instruction for ordering other memory operations.
This class represents a freeze function that returns random concrete value if an operand is either a ...
an instruction for type-safe pointer arithmetic to access elements of arrays and structs
This instruction compares its operands according to the predicate given to the constructor.
Indirect Branch Instruction.
This instruction inserts a single (scalar) element into a VectorType value.
This instruction inserts a struct field of array element value into an aggregate value.
Base class for instruction visitors.
Definition InstVisitor.h:78
RetTy visitCallBrInst(CallBrInst &I)
Definition InstVisitor.h:217
RetTy visitIndirectBrInst(IndirectBrInst &I)
Definition InstVisitor.h:230
RetTy visitFreezeInst(FreezeInst &I)
Definition InstVisitor.h:201
RetTy visitPtrToIntInst(PtrToIntInst &I)
Definition InstVisitor.h:185
RetTy visitCmpInst(CmpInst &I)
Definition InstVisitor.h:257
RetTy visitMemIntrinsic(MemIntrinsic &I)
Definition InstVisitor.h:210
RetTy visitInvokeInst(InvokeInst &I)
Definition InstVisitor.h:216
RetTy visitFPToSIInst(FPToSIInst &I)
Definition InstVisitor.h:182
RetTy visitVACopyInst(VACopyInst &I)
Definition InstVisitor.h:213
RetTy visitFCmpInst(FCmpInst &I)
Definition InstVisitor.h:167
RetTy visitTerminator(Instruction &I)
Definition InstVisitor.h:248
RetTy visitExtractElementInst(ExtractElementInst &I)
Definition InstVisitor.h:192
RetTy visitVAStartInst(VAStartInst &I)
Definition InstVisitor.h:211
RetTy visitMemCpyInst(MemCpyInst &I)
Definition InstVisitor.h:207
RetTy visitCallBase(CallBase &I)
Definition InstVisitor.h:262
RetTy visitTruncInst(TruncInst &I)
Definition InstVisitor.h:176
void visitFunction(Function &F)
Definition InstVisitor.h:142
void visit(Module *M)
Definition InstVisitor.h:108
RetTy visitCleanupReturnInst(CleanupReturnInst &I)
Definition InstVisitor.h:239
RetTy visitInsertValueInst(InsertValueInst &I)
Definition InstVisitor.h:196
RetTy visit(Instruction &I)
Definition InstVisitor.h:115
RetTy visitCatchPadInst(CatchPadInst &I)
Definition InstVisitor.h:200
RetTy visitIntrinsicInst(IntrinsicInst &I)
Definition InstVisitor.h:214
RetTy visitShuffleVectorInst(ShuffleVectorInst &I)
Definition InstVisitor.h:194
RetTy visitLandingPadInst(LandingPadInst &I)
Definition InstVisitor.h:197
void visitBasicBlock(BasicBlock &BB)
Definition InstVisitor.h:143
RetTy visitUnreachableInst(UnreachableInst &I)
Definition InstVisitor.h:236
RetTy visitAtomicCmpXchgInst(AtomicCmpXchgInst &I)
Definition InstVisitor.h:171
RetTy visitIntToPtrInst(IntToPtrInst &I)
Definition InstVisitor.h:187
RetTy visitSExtInst(SExtInst &I)
Definition InstVisitor.h:178
RetTy visitBitCastInst(BitCastInst &I)
Definition InstVisitor.h:188
RetTy visitSwitchInst(SwitchInst &I)
Definition InstVisitor.h:227
RetTy visitCleanupPadInst(CleanupPadInst &I)
Definition InstVisitor.h:199
void visit(Iterator Start, Iterator End)
Definition InstVisitor.h:87
RetTy visit(Instruction *I)
Definition InstVisitor.h:111
RetTy visitPHINode(PHINode &I)
Definition InstVisitor.h:175
RetTy visitReturnInst(ReturnInst &I)
Definition InstVisitor.h:221
RetTy visitExtractValueInst(ExtractValueInst &I)
Definition InstVisitor.h:195
RetTy visitVAEndInst(VAEndInst &I)
Definition InstVisitor.h:212
void visit(Function &F)
Definition InstVisitor.h:98
RetTy visitFPToUIInst(FPToUIInst &I)
Definition InstVisitor.h:181
RetTy visitUnaryOperator(UnaryOperator &I)
Definition InstVisitor.h:255
RetTy visitStoreInst(StoreInst &I)
Definition InstVisitor.h:170
RetTy visitFuncletPadInst(FuncletPadInst &I)
Definition InstVisitor.h:198
RetTy visitInsertElementInst(InsertElementInst &I)
Definition InstVisitor.h:193
void visit(BasicBlock *BB)
Definition InstVisitor.h:110
RetTy visitMemMoveInst(MemMoveInst &I)
Definition InstVisitor.h:208
RetTy visitAtomicRMWInst(AtomicRMWInst &I)
Definition InstVisitor.h:172
void visit(BasicBlock &BB)
Definition InstVisitor.h:102
RetTy visitUnaryInstruction(UnaryInstruction &I)
Definition InstVisitor.h:258
RetTy visitAddrSpaceCastInst(AddrSpaceCastInst &I)
Definition InstVisitor.h:189
RetTy visitFPTruncInst(FPTruncInst &I)
Definition InstVisitor.h:179
RetTy visitAllocaInst(AllocaInst &I)
Definition InstVisitor.h:168
RetTy visitBinaryOperator(BinaryOperator &I)
Definition InstVisitor.h:256
RetTy visitSIToFPInst(SIToFPInst &I)
Definition InstVisitor.h:184
RetTy visitResumeInst(ResumeInst &I)
Definition InstVisitor.h:233
RetTy visitFPExtInst(FPExtInst &I)
Definition InstVisitor.h:180
RetTy visitICmpInst(ICmpInst &I)
Definition InstVisitor.h:166
RetTy visitCatchReturnInst(CatchReturnInst &I)
Definition InstVisitor.h:242
RetTy visitPtrToAddrInst(PtrToAddrInst &I)
Definition InstVisitor.h:186
void visit(Module &M)
Definition InstVisitor.h:94
RetTy visitMemSetPatternInst(MemSetPatternInst &I)
Definition InstVisitor.h:204
RetTy visitMemTransferInst(MemTransferInst &I)
Definition InstVisitor.h:209
RetTy visitMemSetInst(MemSetInst &I)
Definition InstVisitor.h:203
RetTy visitCallInst(CallInst &I)
Definition InstVisitor.h:215
void visitModule(Module &M)
Definition InstVisitor.h:141
RetTy visitCatchSwitchInst(CatchSwitchInst &I)
Definition InstVisitor.h:245
RetTy visitCastInst(CastInst &I)
Definition InstVisitor.h:254
RetTy visitBranchInst(BranchInst &I)
Definition InstVisitor.h:224
RetTy visitSelectInst(SelectInst &I)
Definition InstVisitor.h:190
RetTy visitGetElementPtrInst(GetElementPtrInst &I)
Definition InstVisitor.h:174
RetTy visitUIToFPInst(UIToFPInst &I)
Definition InstVisitor.h:183
RetTy visitFenceInst(FenceInst &I)
Definition InstVisitor.h:173
void visitInstruction(Instruction &I)
Definition InstVisitor.h:275
void visit(Function *F)
Definition InstVisitor.h:109
RetTy visitLoadInst(LoadInst &I)
Definition InstVisitor.h:169
RetTy visitVAArgInst(VAArgInst &I)
Definition InstVisitor.h:191
RetTy visitZExtInst(ZExtInst &I)
Definition InstVisitor.h:177
This class represents a cast from an integer to a pointer.
A wrapper class for inspecting calls to intrinsic functions.
The landingpad instruction holds all of the information necessary to generate correct exception handl...
An instruction for reading from memory.
This class wraps the llvm.memcpy intrinsic.
This is the common base class for memset/memcpy/memmove.
This class wraps the llvm.memmove intrinsic.
This class wraps the llvm.memset and llvm.memset.inline intrinsics.
This class wraps the llvm.experimental.memset.pattern intrinsic.
This class wraps the llvm.memcpy/memmove intrinsics.
A Module instance is used to store all the information related to an LLVM module.
This class represents a cast from a pointer to an address (non-capturing ptrtoint).
This class represents a cast from a pointer to an integer.
Resume the propagation of an exception.
Return a value (possibly void), from a function.
This class represents a sign extension of integer types.
This class represents a cast from signed integer to floating point.
This class represents the LLVM 'select' instruction.
This instruction constructs a fixed permutation of two input vectors.
An instruction for storing to memory.
This class represents a truncation of integer types.
This class represents a cast unsigned integer to floating point.
This function has undefined behavior.
This class represents the va_arg llvm instruction, which returns an argument of the specified type gi...
This represents the llvm.va_copy intrinsic.
This represents the llvm.va_end intrinsic.
This represents the llvm.va_start intrinsic.
This class represents zero extension of integer types.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
bool isa(const From &Val)
isa - Return true if the parameter to the template is an instance of one of the template type argu...