47 llvm::Value *observations;
48 llvm::Value *likelihood;
59 "enzyme_observations";
67 llvm::Function *
newFunc, llvm::Argument *trace,
68 llvm::Argument *observations, llvm::Argument *likelihood,
76 llvm::ValueMap<const llvm::Value *, llvm::WeakTrackingVH>
82 static std::pair<llvm::Value *, llvm::Constant *>
83 ValueToVoidPtrAndSize(llvm::IRBuilder<> &Builder, llvm::Value *val,
84 llvm::Type *size_type);
95 llvm::CallInst *
CreateTrace(llvm::IRBuilder<> &Builder,
96 const llvm::Twine &Name =
"trace");
98 llvm::CallInst *
FreeTrace(llvm::IRBuilder<> &Builder);
100 llvm::CallInst *
InsertChoice(llvm::IRBuilder<> &Builder, llvm::Value *address,
101 llvm::Value *score, llvm::Value *choice);
103 llvm::CallInst *
InsertCall(llvm::IRBuilder<> &Builder, llvm::Value *address,
104 llvm::Value *subtrace);
106 llvm::CallInst *
InsertArgument(llvm::IRBuilder<> &Builder, llvm::Value *name,
107 llvm::Value *argument);
109 llvm::CallInst *
InsertReturn(llvm::IRBuilder<> &Builder, llvm::Value *ret);
112 llvm::Function *function);
114 static llvm::CallInst *
116 llvm::FunctionType *interface_type,
117 llvm::Value *interface_function, llvm::Value *address,
118 llvm::Value *choice, llvm::Value *trace);
120 static llvm::CallInst *
122 llvm::FunctionType *interface_type,
123 llvm::Value *interface_function, llvm::Value *name,
124 llvm::Value *argument, llvm::Value *trace);
126 llvm::CallInst *
GetTrace(llvm::IRBuilder<> &Builder, llvm::Value *address,
127 const llvm::Twine &Name =
"");
129 llvm::Instruction *
GetChoice(llvm::IRBuilder<> &Builder, llvm::Value *address,
130 llvm::Type *choiceType,
131 const llvm::Twine &Name =
"");
133 llvm::Instruction *
HasChoice(llvm::IRBuilder<> &Builder, llvm::Value *address,
134 const llvm::Twine &Name =
"");
136 llvm::Instruction *
HasCall(llvm::IRBuilder<> &Builder, llvm::Value *address,
137 const llvm::Twine &Name =
"");
141 llvm::ArrayRef<llvm::Value *> sample_args,
142 llvm::Value *address,
const llvm::Twine &Name =
"");
145 llvm::IRBuilder<> &Builder,
146 llvm::function_ref<
void(llvm::IRBuilder<> &,
TraceUtils *,
147 llvm::ArrayRef<llvm::Value *>)>
149 llvm::Type *RetTy, llvm::ArrayRef<llvm::Value *> Arguments,
150 bool needsLikelihood =
true,
const llvm::Twine &Name =
"");
static TraceUtils * FromClone(ProbProgMode mode, const llvm::SmallPtrSetImpl< llvm::Function * > &sampleFunctions, const llvm::SmallPtrSetImpl< llvm::Function * > &observeFunctions, TraceInterface *interface, llvm::Function *oldFunc, llvm::ValueMap< const llvm::Value *, llvm::WeakTrackingVH > &originalToNewFn)
TraceUtils(ProbProgMode mode, const llvm::SmallPtrSetImpl< llvm::Function * > &sampleFunctions, const llvm::SmallPtrSetImpl< llvm::Function * > &observeFunctions, llvm::Function *newFunc, llvm::Argument *trace, llvm::Argument *observations, llvm::Argument *likelihood, TraceInterface *interface)
llvm::CallInst * CreateOutlinedFunction(llvm::IRBuilder<> &Builder, llvm::function_ref< void(llvm::IRBuilder<> &, TraceUtils *, llvm::ArrayRef< llvm::Value * >)> Outlined, llvm::Type *RetTy, llvm::ArrayRef< llvm::Value * > Arguments, bool needsLikelihood=true, const llvm::Twine &Name="")