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