Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
proteus::FuncBase Class Reference

#include <Func.h>

Inheritance diagram for proteus::FuncBase:
Inheritance graph
[legend]
Collaboration diagram for proteus::FuncBase:
Collaboration graph
[legend]

Public Member Functions

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)
 

Protected Attributes

JitModuleJ
 
std::string Name
 
CodeBuilderCB
 
IRFunctionFunc
 

Constructor & Destructor Documentation

◆ FuncBase()

proteus::FuncBase::FuncBase ( JitModule J,
CodeBuilder CB,
const std::string &  Name,
IRType  RetTy,
const std::vector< IRType > &  ArgTys 
)

◆ ~FuncBase()

proteus::FuncBase::~FuncBase ( )
default

Member Function Documentation

◆ atomicAdd()

template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > proteus::FuncBase::atomicAdd ( const Var< T * > &  Addr,
const Var< T > &  Val 
)

◆ atomicMax()

template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > proteus::FuncBase::atomicMax ( const Var< T * > &  Addr,
const Var< T > &  Val 
)

◆ atomicMin()

template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > proteus::FuncBase::atomicMin ( const Var< T * > &  Addr,
const Var< T > &  Val 
)

◆ atomicSub()

template<typename T >
std::enable_if_t< is_arithmetic_unref_v< T >, Var< T > > proteus::FuncBase::atomicSub ( const Var< T * > &  Addr,
const Var< T > &  Val 
)

◆ beginFor()

template<typename IterT , typename InitT , typename UpperT , typename IncT >
void proteus::FuncBase::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 = {} 
)

◆ beginFunction()

void proteus::FuncBase::beginFunction ( const char *  File = __builtin_FILE(),
int  Line = __builtin_LINE() 
)

◆ beginIf()

void proteus::FuncBase::beginIf ( const Var< bool > &  CondVar,
const char *  File = __builtin_FILE(),
int  Line = __builtin_LINE() 
)

◆ beginWhile()

template<typename CondLambda >
void proteus::FuncBase::beginWhile ( CondLambda &&  Cond,
const char *  File = __builtin_FILE(),
int  Line = __builtin_LINE() 
)

◆ buildLoopNest()

template<typename... LoopBuilders>
auto proteus::FuncBase::buildLoopNest ( LoopBuilders &&...  Loops)
inline

◆ call() [1/4]

template<typename Sig >
std::enable_if_t<!std::is_void_v< typename FnSig< Sig >::RetT >, Var< typename FnSig< Sig >::RetT > > proteus::FuncBase::call ( const std::string &  Name)

◆ call() [2/4]

template<typename Sig >
std::enable_if_t< std::is_void_v< typename FnSig< Sig >::RetT >, void > proteus::FuncBase::call ( const std::string &  Name)

◆ call() [3/4]

template<typename Sig , typename... ArgVars>
std::enable_if_t<!std::is_void_v< typename FnSig< Sig >::RetT >, Var< typename FnSig< Sig >::RetT > > proteus::FuncBase::call ( const std::string &  Name,
ArgVars &&...  ArgsVars 
)

◆ call() [4/4]

template<typename Sig , typename... ArgVars>
std::enable_if_t< std::is_void_v< typename FnSig< Sig >::RetT >, void > proteus::FuncBase::call ( const std::string &  Name,
ArgVars &&...  ArgsVars 
)

◆ callBuiltin()

template<typename BuiltinFuncT >
decltype(auto) proteus::FuncBase::callBuiltin ( BuiltinFuncT &&  BuiltinFunc)
inline

◆ convert()

template<typename U , typename T >
auto proteus::FuncBase::convert ( const Var< T > &  V)
inline

◆ declVar() [1/2]

template<typename T >
Var< T > proteus::FuncBase::declVar ( const std::string &  Name = "var")
inline

◆ declVar() [2/2]

template<typename T >
Var< T > proteus::FuncBase::declVar ( size_t  NElem,
AddressSpace  AS = AddressSpace::DEFAULT,
const std::string &  Name = "array_var" 
)
inline

◆ declVars() [1/2]

template<typename... Ts>
auto proteus::FuncBase::declVars ( )
inline

◆ declVars() [2/2]

template<typename... Ts, typename... NameTs>
auto proteus::FuncBase::declVars ( NameTs &&...  Names)
inline

◆ defRuntimeConst() [1/2]

template<typename T >
Var< const T > proteus::FuncBase::defRuntimeConst ( const T &  Val,
const std::string &  Name = "run.const.var" 
)
inline

◆ defRuntimeConst() [2/2]

template<typename T , typename NameT , typename = std::enable_if_t<std::is_convertible_v<NameT, std::string>>>
Var< const T > proteus::FuncBase::defRuntimeConst ( std::pair< T, NameT >  P)
inline

◆ defRuntimeConsts()

template<typename... ArgT>
auto proteus::FuncBase::defRuntimeConsts ( ArgT &&...  Args)
inline

◆ defVar() [1/4]

template<typename T >
Var< T > proteus::FuncBase::defVar ( const T &  Val,
const std::string &  Name = "var" 
)
inline

◆ defVar() [2/4]

template<typename T , typename U >
Var< T > proteus::FuncBase::defVar ( const Var< U > &  Val,
const std::string &  Name = "var" 
)
inline

◆ defVar() [3/4]

template<typename U >
Var< U > proteus::FuncBase::defVar ( const Var< U > &  Val,
const std::string &  Name = "var" 
)
inline

◆ defVar() [4/4]

template<typename T , typename NameT , typename = std::enable_if_t<std::is_convertible_v<NameT, std::string>>>
auto proteus::FuncBase::defVar ( std::pair< T, NameT >  P)
inline

◆ defVars()

template<typename... ArgT>
auto proteus::FuncBase::defVars ( ArgT &&...  Args)
inline

◆ endFor()

void proteus::FuncBase::endFor ( )

◆ endFunction()

void proteus::FuncBase::endFunction ( )

◆ endIf()

void proteus::FuncBase::endIf ( )

◆ endWhile()

void proteus::FuncBase::endWhile ( )

◆ forLoop()

template<EmissionPolicy Policy = EmissionPolicy::Eager, typename IterT , typename InitT , typename UpperT , typename IncT , typename BodyLambda = EmptyLambda>
auto proteus::FuncBase::forLoop ( Var< IterT > &  Iter,
const Var< InitT > &  Init,
const Var< UpperT > &  Upper,
const Var< IncT > &  Inc,
BodyLambda &&  Body = {} 
)
inline

◆ function()

template<typename BodyLambda >
void proteus::FuncBase::function ( BodyLambda &&  Body,
const char *  File = __builtin_FILE(),
int  Line = __builtin_LINE() 
)
inline

◆ getArg()

IRValue * proteus::FuncBase::getArg ( size_t  Idx)

◆ getCodeBuilder()

CodeBuilder & proteus::FuncBase::getCodeBuilder ( )

Get the underlying CodeBuilder for direct IR generation.

◆ getFunction()

IRFunction * proteus::FuncBase::getFunction ( )

◆ getJitModule()

JitModule & proteus::FuncBase::getJitModule ( )
inline

◆ getName()

const std::string & proteus::FuncBase::getName ( ) const
inline

◆ ifThen()

template<typename BodyLambda >
void proteus::FuncBase::ifThen ( const Var< bool > &  CondVar,
BodyLambda &&  Body,
const char *  File = __builtin_FILE(),
int  Line = __builtin_LINE() 
)
inline

◆ ret() [1/2]

void proteus::FuncBase::ret ( )
inline

◆ ret() [2/2]

template<typename T >
void proteus::FuncBase::ret ( const Var< T > &  RetVal)

◆ setName()

void proteus::FuncBase::setName ( const std::string &  NewName)

◆ whileLoop()

template<typename CondLambda , typename BodyLambda >
void proteus::FuncBase::whileLoop ( CondLambda &&  Cond,
BodyLambda &&  Body,
const char *  File = __builtin_FILE(),
int  Line = __builtin_LINE() 
)
inline

Member Data Documentation

◆ CB

CodeBuilder* proteus::FuncBase::CB
protected

◆ Func

IRFunction* proteus::FuncBase::Func
protected

◆ J

JitModule& proteus::FuncBase::J
protected

◆ Name

std::string proteus::FuncBase::Name
protected

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