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)
 
void declArgs ()
 
auto getArgs ()
 
template<std::size_t Idx>
autogetArg ()
 
auto getCompiledFunc () const
 
void setCompiledFunc (RetT(*CompiledFuncIn)(ArgT...))
 
- Public Member Functions inherited from proteus::FuncBase
 FuncBase (JitModule &J, FunctionCallee FC)
 
TargetModelType getTargetModel () const
 
FunctiongetFunction ()
 
AllocaInstemitAlloca (Type *Ty, StringRef Name, AddressSpace AS=AddressSpace::DEFAULT)
 
Value * emitArrayCreate (Type *Ty, AddressSpace AT, StringRef Name)
 
IRBuilderBasegetIRBuilder ()
 
template<typename T >
Var< TdeclVar (StringRef Name="var")
 
template<typename T >
Var< TdeclVar (size_t NElem, AddressSpace AS=AddressSpace::DEFAULT, StringRef Name="array_var")
 
template<typename T >
Var< TdefVar (const T &Val, StringRef Name="var")
 
template<typename T , typename U >
Var< TdefVar (const Var< U > &Var, StringRef Name="var")
 
template<typename T >
Var< TdefRuntimeConst (const T &Val, StringRef Name="run.const.var")
 
template<typename... ArgT>
auto defRuntimeConsts (ArgT &&...Args)
 
void beginFunction (const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endFunction ()
 
void beginIf (const Var< bool > &CondVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endIf ()
 
template<typename T >
void beginFor (Var< T > &IterVar, const Var< T > &InitVar, const Var< T > &UpperBound, const Var< T > &IncVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endFor ()
 
template<typename CondLambda >
void beginWhile (CondLambda &&Cond, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endWhile ()
 
template<typename Sig >
std::enable_if_t<!std::is_void_v< typename FnSig< Sig >::RetT >, Var< typename FnSig< Sig >::RetT > > 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< typename FnSig< Sig >::RetT > > 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)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var< T > > atomicAdd (const Var< T * > &Addr, const Var< T > &Val)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var< T > > atomicSub (const Var< T * > &Addr, const Var< T > &Val)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var< T > > atomicMax (const Var< T * > &Addr, const Var< T > &Val)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var< T > > atomicMin (const Var< T * > &Addr, const Var< T > &Val)
 
template<typename T , typename BodyLambda = EmptyLambda>
auto forLoop (std::initializer_list< Var< T > > Bounds, BodyLambda &&Body={})
 
template<typename... LoopBuilders>
auto buildLoopNest (LoopBuilders &&...Loops)
 
template<typename T >
void ret (const Var< T > &RetVal)
 
void ret ()
 
StringRef getName () const
 
void setName (StringRef NewName)
 
template<typename U , typename T >
std::enable_if_t< std::is_convertible_v< T, U >, Var< U > > convert (const Var< T > &V)
 

Additional Inherited Members

- Protected Types inherited from proteus::FuncBase
enum class  ScopeKind { FUNCTION , IF , FOR , WHILE }
 
- Protected Member Functions inherited from proteus::FuncBase
std::string toString (ScopeKind Kind)
 
template<typename T >
Var< TemitAtomic (AtomicRMWInst::BinOp Op, const Var< T * > &Addr, const Var< T > &Val)
 
- Protected Attributes inherited from proteus::FuncBase
JitModuleJ
 
FunctionCallee FC
 
IRBuilder IRB
 
IRBuilderBase::InsertPoint IP
 
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

◆ declArgs()

template<typename RetT , typename... ArgT>
void proteus::Func< RetT, ArgT >::declArgs ( )
inline

◆ getArg()

template<typename RetT , typename... ArgT>
template<std::size_t Idx>
auto & proteus::Func< RetT, ArgT >::getArg ( )
inline

◆ 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: