32 #ifndef TESLA_INSTRUMENTATION_H
33 #define TESLA_INSTRUMENTATION_H
35 #include "llvm/ADT/SmallVector.h"
36 #include "llvm/ADT/StringRef.h"
37 #include "llvm/IR/Function.h"
38 #include "llvm/IR/IRBuilder.h"
59 class FieldAssignTransition;
72 : M(M), TargetFn(TargetFn), InstrFn(InstrFn), Dir(Dir)
87 virtual bool Instrument(llvm::Instruction&) = 0;
91 typedef llvm::SmallVector<llvm::Value*,3>
ArgVector;
110 llvm::LLVMContext& Ctx);
113 llvm::BasicBlock*
FindBlock(llvm::StringRef Name, llvm::Function&);
117 llvm::Type *IntType);
125 llvm::Value*
Cast(llvm::Value *From, llvm::StringRef Name,
126 llvm::Type *NewType, llvm::IRBuilder<>&);
135 const llvm::Twine& Prefix,
136 bool SuppressDebugInstrumentation);
139 llvm::Value*
ConstructKey(llvm::IRBuilder<>&, llvm::Module&,
140 llvm::ArrayRef<llvm::Value*> Args);
153 FunctionEvent::CallContext,
154 bool SuppressDebugInstr);
158 llvm::StringRef FieldName,
size_t Index,
159 bool Store,
bool SuppressDebugInstr);