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.h>

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, CodeBuilder &CB, const std::string &Name, Dispatcher &Dispatch)
 
RetT operator() (ArgT... Args)
 
void declArgs ()
 
auto getArgs ()
 
template<std::size_t Idx>
auto & getArg ()
 
auto getCompiledFunc () const
 
void setCompiledFunc (RetT(*CompiledFuncIn)(ArgT...))
 
- Public Member Functions inherited from proteus::FuncBase
JitModulegetJitModule ()
 
CodeBuildergetCodeBuilder ()
 Get the underlying CodeBuilder for direct IR generation.
 
 FuncBase (JitModule &J, CodeBuilder &CB, const std::string &Name, IRType RetTy, const std::vector< IRType > &ArgTys)
 
 ~FuncBase ()
 
IRFunctiongetFunction ()
 
IRValuegetArg (size_t Idx)
 
template<typename T >
Var< T > declVar (const std::string &Name="var")
 
template<typename T >
Var< T > declVar (size_t NElem, AddressSpace AS=AddressSpace::DEFAULT, const std::string &Name="array_var")
 
template<typename... Ts>
auto declVars ()
 
template<typename... Ts, typename... NameTs>
auto declVars (NameTs &&...Names)
 
template<typename T >
Var< T > defVar (const T &Val, const std::string &Name="var")
 
template<typename T , typename U >
Var< T > defVar (const Var< U > &Val, const std::string &Name="var")
 
template<typename U >
Var< U > defVar (const Var< U > &Val, const std::string &Name="var")
 
template<typename T , typename NameT , typename = std::enable_if_t<std::is_convertible_v<NameT, std::string>>>
auto defVar (std::pair< T, NameT > P)
 
template<typename... ArgT>
auto defVars (ArgT &&...Args)
 
template<typename T >
Var< const T > defRuntimeConst (const T &Val, const std::string &Name="run.const.var")
 
template<typename T , typename NameT , typename = std::enable_if_t<std::is_convertible_v<NameT, std::string>>>
Var< const T > defRuntimeConst (std::pair< T, NameT > P)
 
template<typename... ArgT>
auto defRuntimeConsts (ArgT &&...Args)
 
void beginFunction (const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endFunction ()
 
template<typename BodyLambda >
void function (BodyLambda &&Body, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void beginIf (const Var< bool > &CondVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endIf ()
 
template<typename BodyLambda >
void ifThen (const Var< bool > &CondVar, BodyLambda &&Body, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
template<typename IterT , typename InitT , typename UpperT , typename IncT >
void beginFor (Var< IterT > &IterVar, const Var< InitT > &InitVar, const Var< UpperT > &UpperBound, const Var< IncT > &IncVar, const char *File=__builtin_FILE(), int Line=__builtin_LINE(), LoopHints Hints={})
 
void endFor ()
 
template<typename CondLambda >
void beginWhile (CondLambda &&Cond, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
void endWhile ()
 
template<typename CondLambda , typename BodyLambda >
void whileLoop (CondLambda &&Cond, BodyLambda &&Body, const char *File=__builtin_FILE(), int Line=__builtin_LINE())
 
template<typename Sig >
std::enable_if_t<!std::is_void_v< typename FnSig< Sig >::RetT >, Var< typename FnSig< Sig >::RetT > > call (const std::string &Name)
 
template<typename Sig >
std::enable_if_t< std::is_void_v< typename FnSig< Sig >::RetT >, void > call (const std::string &Name)
 
template<typename Sig , typename... ArgVars>
std::enable_if_t<!std::is_void_v< typename FnSig< Sig >::RetT >, Var< typename FnSig< Sig >::RetT > > call (const std::string &Name, ArgVars &&...ArgsVars)
 
template<typename Sig , typename... ArgVars>
std::enable_if_t< std::is_void_v< typename FnSig< Sig >::RetT >, void > call (const std::string &Name, ArgVars &&...ArgsVars)
 
template<typename BuiltinFuncT >
decltype(auto) callBuiltin (BuiltinFuncT &&BuiltinFunc)
 
template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > atomicAdd (const Var< T * > &Addr, const Var< T > &Val)
 
template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > atomicSub (const Var< T * > &Addr, const Var< T > &Val)
 
template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > atomicMax (const Var< T * > &Addr, const Var< T > &Val)
 
template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > atomicMin (const Var< T * > &Addr, const Var< T > &Val)
 
template<EmissionPolicy Policy = EmissionPolicy::Eager, typename IterT , typename InitT , typename UpperT , typename IncT , typename BodyLambda = EmptyLambda>
auto forLoop (Var< IterT > &Iter, const Var< InitT > &Init, const Var< UpperT > &Upper, const Var< IncT > &Inc, BodyLambda &&Body={})
 
template<typename... LoopBuilders>
auto buildLoopNest (LoopBuilders &&...Loops)
 
template<typename T >
void ret (const Var< T > &RetVal)
 
void ret ()
 
const std::string & getName () const
 
void setName (const std::string &NewName)
 
template<typename U , typename T >
auto convert (const Var< T > &V)
 

Additional Inherited Members

- Protected Attributes inherited from proteus::FuncBase
JitModuleJ
 
std::string Name
 
CodeBuilderCB
 
IRFunctionFunc
 

Constructor & Destructor Documentation

◆ Func()

template<typename RetT , typename... ArgT>
proteus::Func< RetT, ArgT >::Func ( JitModule J,
CodeBuilder CB,
const std::string &  Name,
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: