27#include "llvm-c/Core.h"
28#include "llvm-c/DataTypes.h"
30#include "llvm-c/Target.h"
37struct EnzymeOpaqueTypeAnalysis;
40struct EnzymeOpaqueLogic;
43struct EnzymeOpaqueAugmentedReturn;
46struct EnzymeOpaqueTraceInterface;
97 int64_t offset, int64_t maxSize,
150 size_t , LLVMValueRef,
153 char **customRuleNames,
164 LLVMContextRef C, LLVMValueRef getTraceFunction,
165 LLVMValueRef getChoiceFunction, LLVMValueRef insertCallFunction,
166 LLVMValueRef insertChoiceFunction, LLVMValueRef insertArgumentFunction,
167 LLVMValueRef insertReturnFunction, LLVMValueRef insertFunctionFunction,
168 LLVMValueRef insertChoiceGradientFunction,
169 LLVMValueRef insertArgumentGradientFunction, LLVMValueRef newTraceFunction,
170 LLVMValueRef freeTraceFunction, LLVMValueRef hasCallFunction,
171 LLVMValueRef hasChoiceFunction);
181 uint8_t *existed,
size_t len);
191 size_t , LLVMValueRef *,
220 uint8_t
strongZero,
unsigned width, LLVMTypeRef additionalArg,
221 CFnTypeInfo typeInfo, uint8_t subsequent_calls_may_write,
222 uint8_t *_overwritten_args,
size_t overwritten_args_size,
230 uint8_t
strongZero,
unsigned width, uint8_t freeMemory,
231 LLVMTypeRef additionalArg, uint8_t forceAnonymousTape,
CFnTypeInfo typeInfo,
232 uint8_t subsequent_calls_may_write, uint8_t *_overwritten_args,
uint8_t(* CustomFunctionForward)(LLVMBuilderRef, LLVMValueRef, GradientUtils *, LLVMValueRef *, LLVMValueRef *)
void * EnzymeLogicGetExternalContext(EnzymeLogicRef)
EnzymeTypeAnalysisRef EnzymeGetTypeAnalysisFromTypeAnalyzer(void *TAR)
void EnzymeSetCLBool(void *, uint8_t)
void * EnzymeGradientUtilsGetExternalContext(GradientUtils *gutils)
struct EnzymeOpaqueTypeAnalysis * EnzymeTypeAnalysisRef
struct EnzymeOpaqueTraceInterface * EnzymeTraceInterfaceRef
struct EnzymeTypeTree * CTypeTreeRef
EnzymeTraceInterfaceRef CreateEnzymeDynamicTraceInterface(LLVMValueRef interface, LLVMValueRef F)
void EnzymeTypeTreeData0Eq(CTypeTreeRef dst)
void EnzymeTypeTreeInsertEq(CTypeTreeRef dst, const int64_t *indices, size_t len, CConcreteType ct, LLVMContextRef ctx)
void EnzymeFreeTypeTree(CTypeTreeRef CTT)
EnzymeTraceInterfaceRef FindEnzymeStaticTraceInterface(LLVMModuleRef M)
void EnzymeSetCLString(void *, const char *)
void EnzymeTypeTreeToStringFree(const char *cstr)
EnzymeLogicRef CreateEnzymeLogic(uint8_t PostOpt)
CTypeTreeRef EnzymeNewTypeTreeTR(CTypeTreeRef)
void EnzymeLogicSetExternalContext(EnzymeLogicRef, void *ExternalContext)
void ClearTypeAnalysis(EnzymeTypeAnalysisRef)
uint8_t EnzymeGradientUtilsGetAtomicAdd(GradientUtils *gutils)
uint8_t(* CustomAugmentedFunctionForward)(LLVMBuilderRef, LLVMValueRef, GradientUtils *, LLVMValueRef *, LLVMValueRef *, LLVMValueRef *)
LLVMValueRef EnzymeGradientUtilsNewFromOriginal(GradientUtils *gutils, LLVMValueRef val)
void EnzymeSetCLInteger(void *, int64_t)
CTypeTreeRef EnzymeNewTypeTree()
uint8_t(* CustomRuleType)(int, CTypeTreeRef, CTypeTreeRef *, struct IntList *, size_t, LLVMValueRef, void *)
void EnzymeRegisterCallHandler(const char *Name, CustomAugmentedFunctionForward FwdHandle, CustomFunctionReverse RevHandle)
uint8_t(* CustomFunctionDiffUse)(LLVMValueRef, const GradientUtils *, LLVMValueRef, uint8_t, CDerivativeMode, uint8_t *)
LLVMValueRef EnzymeCreateForwardDiff(EnzymeLogicRef Logic, LLVMValueRef request_req, LLVMBuilderRef request_ip, LLVMValueRef todiff, CDIFFE_TYPE retType, CDIFFE_TYPE *constant_args, size_t constant_args_size, EnzymeTypeAnalysisRef TA, uint8_t returnValue, CDerivativeMode mode, uint8_t freeMemory, uint8_t runtimeActivity, uint8_t strongZero, unsigned width, LLVMTypeRef additionalArg, CFnTypeInfo typeInfo, uint8_t subsequent_calls_may_write, uint8_t *_overwritten_args, size_t overwritten_args_size, EnzymeAugmentedReturnPtr augmented)
uint8_t EnzymeSetTypeTree(CTypeTreeRef dst, CTypeTreeRef src)
EnzymeLogicRef EnzymeTypeAnalysisGetLogic(EnzymeTypeAnalysisRef TAR)
LLVMValueRef EnzymeCreatePrimalAndGradient(EnzymeLogicRef Logic, LLVMValueRef request_req, LLVMBuilderRef request_ip, LLVMValueRef todiff, CDIFFE_TYPE retType, CDIFFE_TYPE *constant_args, size_t constant_args_size, EnzymeTypeAnalysisRef TA, uint8_t returnValue, uint8_t dretUsed, CDerivativeMode mode, uint8_t runtimeActivity, uint8_t strongZero, unsigned width, uint8_t freeMemory, LLVMTypeRef additionalArg, uint8_t forceAnonymousTape, CFnTypeInfo typeInfo, uint8_t subsequent_calls_may_write, uint8_t *_overwritten_args, size_t overwritten_args_size, EnzymeAugmentedReturnPtr augmented, uint8_t AtomicAdd)
void EnzymeTypeTreeOnlyEq(CTypeTreeRef dst, int64_t x)
void(* CustomFunctionReverse)(LLVMBuilderRef, LLVMValueRef, DiffeGradientUtils *, LLVMValueRef)
void FreeTypeAnalysis(EnzymeTypeAnalysisRef)
LLVMTypeRef EnzymeExtractTapeTypeFromAugmentation(EnzymeAugmentedReturnPtr ret)
EnzymeTraceInterfaceRef CreateEnzymeStaticTraceInterface(LLVMContextRef C, LLVMValueRef getTraceFunction, LLVMValueRef getChoiceFunction, LLVMValueRef insertCallFunction, LLVMValueRef insertChoiceFunction, LLVMValueRef insertArgumentFunction, LLVMValueRef insertReturnFunction, LLVMValueRef insertFunctionFunction, LLVMValueRef insertChoiceGradientFunction, LLVMValueRef insertArgumentGradientFunction, LLVMValueRef newTraceFunction, LLVMValueRef freeTraceFunction, LLVMValueRef hasCallFunction, LLVMValueRef hasChoiceFunction)
void EnzymeTypeTreeShiftIndiciesEq(CTypeTreeRef dst, const char *datalayout, int64_t offset, int64_t maxSize, uint64_t addOffset)
uint8_t EnzymeMergeTypeTree(CTypeTreeRef dst, CTypeTreeRef src)
@ DEM_ReverseModeGradient
@ DEM_ReverseModeCombined
void ClearEnzymeLogic(EnzymeLogicRef)
EnzymeTypeAnalysisRef CreateTypeAnalysis(EnzymeLogicRef Log, char **customRuleNames, CustomRuleType *customRules, size_t numRules)
LLVMValueRef EnzymeExtractFunctionFromAugmentation(EnzymeAugmentedReturnPtr ret)
void EnzymeExtractReturnInfo(EnzymeAugmentedReturnPtr ret, int64_t *data, uint8_t *existed, size_t len)
LLVMValueRef(* CustomShadowFree)(LLVMBuilderRef, LLVMValueRef)
const char * EnzymeTypeTreeToString(CTypeTreeRef src)
CTypeTreeRef EnzymeNewTypeTreeCT(CConcreteType, LLVMContextRef ctx)
void FreeEnzymeLogic(EnzymeLogicRef)
struct EnzymeOpaqueLogic * EnzymeLogicRef
void EnzymeRegisterAllocationHandler(char *Name, CustomShadowAlloc AHandle, CustomShadowFree FHandle)
LLVMValueRef(* CustomShadowAlloc)(LLVMBuilderRef, LLVMValueRef, size_t, LLVMValueRef *, GradientUtils *)
struct EnzymeOpaqueAugmentedReturn * EnzymeAugmentedReturnPtr
struct IntList * KnownValues
The specific constant(s) known to represented by an argument, if constant.
CTypeTreeRef * Arguments
Types of arguments, assumed of size len(Arguments)
CTypeTreeRef Return
Type of return.