Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
Public Member Functions | List of all members
proteus::Func< RetT, ArgT > Class Template Referencefinal

#include <Func.hpp>

Inheritance diagram for proteus::Func< RetT, ArgT >:
Inheritance graph
[legend]
Collaboration diagram for proteus::Func< RetT, ArgT >:
Collaboration graph
[legend]

Public Member Functions

 Func (JitModule &J, FunctionCallee FC, Dispatcher &Dispatch)
 
RetT operator() (ArgT... Args)
 
auto getArgs ()
 
auto getCompiledFunc () const
 
void setCompiledFunc (RetT(*CompiledFuncIn)(ArgT...))
 
- Public Member Functions inherited from proteus::FuncBase
 FuncBase (JitModule &J, FunctionCallee FC)
 
FunctiongetFunction ()
 
AllocaInstemitAlloca (Type *Ty, StringRef Name, AddressSpace AS=AddressSpace::DEFAULT)
 
Value * emitArrayCreate (Type *Ty, AddressSpace AT, StringRef Name)
 
IRBuilderBasegetIRBuilder ()
 
VardeclVarInternal (StringRef Name, Type *Ty, Type *PointerElemType=nullptr)
 
template<typename T >
VardeclVar (StringRef Name="var")
 
template<typename T >
VardeclVar (size_t NElem, AddressSpace AS=AddressSpace::DEFAULT, StringRef Name="array_var")
 
template<typename T >
VardefVar (T Val, StringRef Name="var")
 
VardefVar (const Var &Val, StringRef Name="var")
 
template<typename T >
VardefRuntimeConst (T Val, StringRef Name="run.const.var")
 
template<typename... ArgT>
auto defRuntimeConsts (ArgT &&...Args)
 
template<typename... Ts>
void declArgs ()
 
VargetArg (unsigned int ArgNo)
 
void beginFunction (const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endFunction ()
 
void beginIf (Var &CondVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endIf ()
 
void beginFor (Var &IterVar, Var &InitVar, Var &UpperBound, Var &IncVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endFor ()
 
template<typename Sig >
std::enable_if_t<!std::is_void_v< typename FnSig< Sig >::RetT >, Var & > call (StringRef Name)
 
template<typename Sig >
std::enable_if_t< std::is_void_v< typename FnSig< Sig >::RetT >, voidcall (StringRef Name)
 
template<typename Sig , typename... ArgVars>
std::enable_if_t<!std::is_void_v< typename FnSig< Sig >::RetT >, Var & > call (StringRef Name, ArgVars &&...ArgsVars)
 
template<typename Sig , typename... ArgVars>
std::enable_if_t< std::is_void_v< typename FnSig< Sig >::RetT >, voidcall (StringRef Name, ArgVars &&...ArgsVars)
 
template<typename BuiltinFuncT >
decltype(autocallBuiltin (BuiltinFuncT &&BuiltinFunc)
 
VaratomicAdd (Var &Addr, Var &Val)
 
VaratomicSub (Var &Addr, Var &Val)
 
VaratomicMax (Var &Addr, Var &Val)
 
VaratomicMin (Var &Addr, Var &Val)
 
template<typename BodyLambda = EmptyLambda>
auto forLoop (const LoopBoundInfo &Bounds, BodyLambda &&Body={})
 
template<typename... LoopBuilders>
auto buildLoopNest (LoopBuilders &&...Loops)
 
void ret (std::optional< std::reference_wrapper< Var > > OptRet=std::nullopt)
 
StringRef getName () const
 
void setName (StringRef NewName)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > convert (Var &V)
 

Additional Inherited Members

- Protected Types inherited from proteus::FuncBase
enum class  ScopeKind { FUNCTION , IF , FOR }
 
- Protected Member Functions inherited from proteus::FuncBase
std::string toString (ScopeKind Kind)
 
VaremitAtomic (AtomicRMWInst::BinOp Op, Var &Addr, Var &Val)
 
- Protected Attributes inherited from proteus::FuncBase
JitModuleJ
 
FunctionCallee FC
 
IRBuilder IRB
 
IRBuilderBase::InsertPoint IP
 
std::deque< std::unique_ptr< Var > > Arguments
 
std::deque< std::unique_ptr< Var > > Variables
 
std::deque< std::unique_ptr< Var > > RuntimeConstants
 
std::string Name
 
std::vector< ScopeScopes
 

Constructor & Destructor Documentation

◆ Func()

template<typename RetT , typename... ArgT>
proteus::Func< RetT, ArgT >::Func ( JitModule J,
FunctionCallee  FC,
Dispatcher Dispatch 
)
inline

Member Function Documentation

◆ getArgs()

template<typename RetT , typename... ArgT>
auto proteus::Func< RetT, ArgT >::getArgs ( )
inline

◆ getCompiledFunc()

template<typename RetT , typename... ArgT>
auto proteus::Func< RetT, ArgT >::getCompiledFunc ( ) const
inline

◆ operator()()

template<typename RetT , typename... ArgT>
RetT proteus::Func< RetT, ArgT >::operator() ( ArgT...  Args)

◆ setCompiledFunc()

template<typename RetT , typename... ArgT>
void proteus::Func< RetT, ArgT >::setCompiledFunc ( RetT(*)(ArgT...)  CompiledFuncIn)
inline

The documentation for this class was generated from the following files: