Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
Namespaces | Classes | Enumerations | Functions | Variables
proteus Namespace Reference

Namespaces

namespace  builtins
 
namespace  detail
 

Classes

class  AnnotationHandler
 
struct  ArgTypeList
 
struct  ArrayInfo
 
struct  ArrayVar
 
class  BinaryInfo
 
class  CodeGenerationConfig
 
class  CompilationResult
 
class  CompilationTask
 
struct  CompiledLibrary
 
class  CompilerAsync
 
class  CompilerSync
 
class  Config
 
class  CppJitModule
 
struct  DeviceTraits
 
struct  DeviceTraits< JitEngineDeviceCUDA >
 
struct  DeviceTraits< JitEngineDeviceHIP >
 
class  Dispatcher
 
class  DispatcherHost
 
struct  DispatchResult
 
struct  EmptyLambda
 
struct  FatbinWrapperT
 
struct  FnSig
 
struct  FnSig< RetT_(ArgT...)>
 
class  ForLoopBuilder
 
class  Func
 
class  FuncBase
 
class  HashT
 
struct  InitLLVMTargets
 
class  JitCache
 
class  JitEngine
 
class  JitEngineDevice
 
class  JitEngineDeviceCUDA
 
class  JitEngineDeviceHIP
 
class  JitEngineHost
 
struct  JitFunctionInfo
 
class  JITKernelInfo
 
class  JitModule
 
class  JitStorageCache
 
class  LambdaRegistry
 
struct  LinkingCloner
 
class  Logger
 
class  LoopBoundInfo
 
class  LoopNestBuilder
 
struct  ModuleInfo
 
struct  ObjectInfo
 
struct  PointerVar
 
struct  ProteusTypes
 
struct  RuntimeConstant
 
struct  RuntimeConstantArgInfo
 
struct  RuntimeConstantArrayInfo
 
struct  RuntimeConstantInfo
 
struct  RuntimeConstantObjectInfo
 
union  RuntimeConstantValue
 
struct  ScalarVar
 
struct  sig_traits
 
struct  sig_traits< R(Args...)>
 
class  Timer
 
struct  TimeTracerRAII
 
class  TransformArgumentSpecialization
 
class  TransformLambdaSpecialization
 
class  TransformSharedArray
 
struct  TypeMap
 
struct  TypeMap< bool >
 
struct  TypeMap< bool[]>
 
struct  TypeMap< double & >
 
struct  TypeMap< double * >
 
struct  TypeMap< double >
 
struct  TypeMap< double[]>
 
struct  TypeMap< float * >
 
struct  TypeMap< float >
 
struct  TypeMap< float[]>
 
struct  TypeMap< int * >
 
struct  TypeMap< int >
 
struct  TypeMap< int[]>
 
struct  TypeMap< size_t >
 
struct  TypeMap< size_t[]>
 
struct  TypeMap< unsigned int * >
 
struct  TypeMap< unsigned int >
 
struct  TypeMap< unsigned int[]>
 
struct  TypeMap< void >
 
struct  Var
 
struct  VarT
 

Enumerations

enum class  AddressSpace : unsigned int {
  DEFAULT = 0 , GLOBAL = 1 , SHARED = 3 , CONSTANT = 4 ,
  LOCAL = 5
}
 
enum  RuntimeConstantType : int32_t {
  BEGIN , NONE = 0 , BOOL = 1 , INT8 ,
  INT32 , INT64 , FLOAT , DOUBLE ,
  LONG_DOUBLE , PTR , STATIC_ARRAY , VECTOR ,
  ARRAY , OBJECT , END
}
 
enum class  CodegenOption { RTC , Serial , Parallel }
 
enum class  KernelCloneOption { LinkClonePrune , LinkCloneLight , CrossClone }
 
enum class  TargetModelType {
  HOST , CUDA , HIP , HOST_HIP ,
  HOST_CUDA
}
 
enum class  VarKind { Invalid , Scalar , Pointer , Array }
 

Functions

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator+ (const T &ConstValue, const Var &V)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator- (const T &ConstValue, const Var &V)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator* (const T &ConstValue, const Var &V)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator/ (const T &ConstValue, const Var &V)
 
template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > operator% (const T &ConstValue, const Var &V)
 
Value * convert (IRBuilderBase IRB, Value *V, Type *TargetType)
 
Type * getCommonType (const DataLayout &DL, Type *T1, Type *T2)
 Get the common type following C++ usual arithmetic conversions.
 
Varpowf (const Var &L, const Var &R)
 
Varsqrtf (const Var &R)
 
Varmin (const Var &L, const Var &R)
 
template Varoperator+<int > (const int &, const Var &)
 
template Varoperator+<unsigned int > (const unsigned int &, const Var &)
 
template Varoperator+<size_t > (const size_t &, const Var &)
 
template Varoperator+<float > (const float &, const Var &)
 
template Varoperator+<double > (const double &, const Var &)
 
template Varoperator-<int > (const int &, const Var &)
 
template Varoperator-<unsigned int > (const unsigned int &, const Var &)
 
template Varoperator-<size_t > (const size_t &, const Var &)
 
template Varoperator-<float > (const float &, const Var &)
 
template Varoperator-<double > (const double &, const Var &)
 
template Varoperator*<int > (const int &, const Var &)
 
template Varoperator*<unsigned int > (const unsigned int &, const Var &)
 
template Varoperator*<size_t > (const size_t &, const Var &)
 
template Varoperator*<float > (const float &, const Var &)
 
template Varoperator*<double > (const double &, const Var &)
 
template Varoperator/<int > (const int &, const Var &)
 
template Varoperator/<unsigned int > (const unsigned int &, const Var &)
 
template Varoperator/<size_t > (const size_t &, const Var &)
 
template Varoperator/<float > (const float &, const Var &)
 
template Varoperator/<double > (const double &, const Var &)
 
template Varoperator%<int > (const int &, const Var &)
 
template Varoperator%<unsigned int > (const unsigned int &, const Var &)
 
template Varoperator%<size_t > (const size_t &, const Var &)
 
template Varoperator%<float > (const float &, const Var &)
 
template Varoperator%<double > (const double &, const Var &)
 
bool isDebugOutputEnabled ()
 
bool isDeviceCompilation (Module &M)
 
std::string getUniqueFileID (Module &M)
 
bool isDeviceKernel (const Function *F)
 
constexpr unsigned toLLVM (AddressSpace AS)
 
std::unique_ptr< ModulecloneKernelFromModule (Module &M, StringRef Name, CallGraph &CG)
 
std::unique_ptr< ModulecloneKernelFromModules (ArrayRef< std::reference_wrapper< Module > > Mods, StringRef EntryName)
 
template<typename T >
getRuntimeConstantValue (void *Arg)
 
RuntimeConstant dispatchGetRuntimeConstantValue (void **Args, const RuntimeConstantInfo &RCInfo)
 
std::string toString (CodegenOption Option)
 
std::string toString (KernelCloneOption Option)
 
std::optional< std::string > getEnvOrDefaultString (const char *VarName)
 
char getEnvOrDefaultChar (const char *VarName, char Default)
 
bool getEnvOrDefaultBool (const char *VarName, bool Default)
 
int getEnvOrDefaultInt (const char *VarName, int Default)
 
CodegenOption strToCG (std::string CGstr)
 
CodegenOption getEnvOrDefaultCG (const char *VarName, CodegenOption Default)
 
template<typename T >
T getDefaultValueFromOptional (std::optional< T > JSONValue, T Default)
 
KernelCloneOption getEnvOrDefaultKC (const char *VarName, KernelCloneOption Default)
 
llvm::StringMap< const CodeGenerationConfigparseJSONConfig (std::optional< std::string > JSONFn)
 
voidresolveDeviceGlobalAddr (const void *Addr)
 
cudaError_t launchKernelDirect (void *KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
 
CUfunction getKernelFunctionFromImage (StringRef KernelName, const void *Image, bool RelinkGlobalsByCopy, const std::unordered_map< std::string, const void * > &VarNameToDevPtr)
 
cudaError_t launchKernelFunction (CUfunction KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
 
hipError_t launchKernelDirect (void *KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, hipStream_t Stream)
 
hipError_t launchKernelFunction (hipFunction_t KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, hipStream_t Stream)
 
void optimizeIR (Module &M, StringRef Arch, char OptLevel, unsigned CodegenOptLevel)
 
void optimizeIR (Module &M, StringRef Arch, const std::string &PassPipeline, unsigned CodegenOptLevel)
 
std::unique_ptr< ModulelinkModules (LLVMContext &Ctx, SmallVector< std::unique_ptr< Module > > LinkedModules)
 
void runCleanupPassPipeline (Module &M)
 
void pruneIR (Module &M, bool UnsetExternallyInitialized=true)
 
void internalize (Module &M, StringRef PreserveFunctionName)
 
void setLaunchBoundsForKernel (Function &F, int MaxThreadsPerSM, int MinBlocksPerSM=0)
 
void codegenPTX (Module &M, StringRef DeviceArch, SmallVectorImpl< char > &PTXStr)
 
std::unique_ptr< MemoryBuffercodegenObject (Module &M, StringRef DeviceArch, SmallPtrSetImpl< void * > &GlobalLinkedBinaries, CodegenOption CGOption=CodegenOption::RTC)
 
std::string toString (Value &V)
 
TargetModelType parseTargetModel (StringRef Target)
 
std::string getTargetTriple (TargetModelType Model)
 
bool isHostTargetModel (TargetModelType TargetModel)
 
HashT hashValue (HashT &H)
 
HashT hashValue (StringRef &S)
 
HashT hashValue (const std::string &S)
 
template<typename T >
std::enable_if_t< std::is_scalar< T >::value, HashThashValue (const T &V)
 
template<typename T >
HashT hashRuntimeConstantArray (const RuntimeConstant &RC)
 
HashT hashRuntimeConstantObject (const RuntimeConstant &RC)
 
HashT hashArrayRefElement (const RuntimeConstant &RC)
 
HashT hashValue (ArrayRef< RuntimeConstant > Arr)
 
HashT hashCombine (HashT A, HashT B)
 
template<typename FirstT , typename... RestTs>
HashT hash (FirstT &&First, RestTs &&...Rest)
 
template<typename T >
HashT hash (T &&Data)
 
template<typename T >
 __attribute__ ((noinline)) void jit_arg(T V) noexcept
 
RuntimeConstantType convertTypeToRuntimeConstantType (Type *Ty)
 
Type * convertRuntimeConstantTypeToLLVMType (RuntimeConstantType RCType, LLVMContext &Ctx)
 
std::string toString (const RuntimeConstantType RCType)
 
size_t getSizeInBytes (RuntimeConstantType RCType)
 
template<typename T >
T getValue (const RuntimeConstant &RC)
 
bool isScalarRuntimeConstantType (RuntimeConstantType RCType)
 
ConstantgetConstant (LLVMContext &Ctx, Type *ArgType, const RuntimeConstant &RC)
 

Variables

size_t NumElts
 
size_t std::remove_pointer< T >::type Velem = 0) noexcept
 
static int Pos = -1
 

Enumeration Type Documentation

◆ AddressSpace

Enumerator
DEFAULT 
GLOBAL 
SHARED 
CONSTANT 
LOCAL 

◆ CodegenOption

Enumerator
RTC 
Serial 
Parallel 

◆ KernelCloneOption

Enumerator
LinkClonePrune 
LinkCloneLight 
CrossClone 

◆ RuntimeConstantType

Enumerator
BEGIN 
NONE 
BOOL 
INT8 
INT32 
INT64 
FLOAT 
DOUBLE 
LONG_DOUBLE 
PTR 
STATIC_ARRAY 
VECTOR 
ARRAY 
OBJECT 
END 

◆ TargetModelType

Enumerator
HOST 
CUDA 
HIP 
HOST_HIP 
HOST_CUDA 

◆ VarKind

Enumerator
Invalid 
Scalar 
Pointer 
Array 

Function Documentation

◆ __attribute__()

template<typename T >
proteus::__attribute__ ( (noinline )
noexcept

◆ cloneKernelFromModule()

std::unique_ptr< Module > proteus::cloneKernelFromModule ( Module M,
StringRef  Name,
CallGraph CG 
)
inline

◆ cloneKernelFromModules()

std::unique_ptr< Module > proteus::cloneKernelFromModules ( ArrayRef< std::reference_wrapper< Module > >  Mods,
StringRef  EntryName 
)
inline

◆ codegenObject()

std::unique_ptr< MemoryBuffer > proteus::codegenObject ( Module M,
StringRef  DeviceArch,
SmallPtrSetImpl< void * > &  GlobalLinkedBinaries,
CodegenOption  CGOption = CodegenOption::RTC 
)
inline

◆ codegenPTX()

void proteus::codegenPTX ( Module M,
StringRef  DeviceArch,
SmallVectorImpl< char > &  PTXStr 
)
inline

◆ convert()

Value * proteus::convert ( IRBuilderBase  IRB,
Value *  V,
Type *  TargetType 
)

◆ convertRuntimeConstantTypeToLLVMType()

Type * proteus::convertRuntimeConstantTypeToLLVMType ( RuntimeConstantType  RCType,
LLVMContext Ctx 
)
inline

◆ convertTypeToRuntimeConstantType()

RuntimeConstantType proteus::convertTypeToRuntimeConstantType ( Type *  Ty)
inline

◆ dispatchGetRuntimeConstantValue()

RuntimeConstant proteus::dispatchGetRuntimeConstantValue ( void **  Args,
const RuntimeConstantInfo RCInfo 
)
inline

◆ getCommonType()

Type * proteus::getCommonType ( const DataLayout DL,
Type *  T1,
Type *  T2 
)

Get the common type following C++ usual arithmetic conversions.

◆ getConstant()

Constant * proteus::getConstant ( LLVMContext Ctx,
Type *  ArgType,
const RuntimeConstant RC 
)
inline

◆ getDefaultValueFromOptional()

template<typename T >
T proteus::getDefaultValueFromOptional ( std::optional< T JSONValue,
T  Default 
)

◆ getEnvOrDefaultBool()

bool proteus::getEnvOrDefaultBool ( const char VarName,
bool  Default 
)
inline

◆ getEnvOrDefaultCG()

CodegenOption proteus::getEnvOrDefaultCG ( const char VarName,
CodegenOption  Default 
)
inline

◆ getEnvOrDefaultChar()

char proteus::getEnvOrDefaultChar ( const char VarName,
char  Default 
)
inline

◆ getEnvOrDefaultInt()

int proteus::getEnvOrDefaultInt ( const char VarName,
int  Default 
)
inline

◆ getEnvOrDefaultKC()

KernelCloneOption proteus::getEnvOrDefaultKC ( const char VarName,
KernelCloneOption  Default 
)
inline

◆ getEnvOrDefaultString()

std::optional< std::string > proteus::getEnvOrDefaultString ( const char VarName)
inline

◆ getKernelFunctionFromImage()

hipFunction_t proteus::getKernelFunctionFromImage ( StringRef  KernelName,
const void Image,
bool  RelinkGlobalsByCopy,
const std::unordered_map< std::string, const void * > &  VarNameToDevPtr 
)
inline

◆ getRuntimeConstantValue()

template<typename T >
T proteus::getRuntimeConstantValue ( void *  Arg)
inline

◆ getSizeInBytes()

size_t proteus::getSizeInBytes ( RuntimeConstantType  RCType)
inline

◆ getTargetTriple()

std::string proteus::getTargetTriple ( TargetModelType  Model)
inline

◆ getUniqueFileID()

std::string proteus::getUniqueFileID ( Module M)
inline

◆ getValue()

template<typename T >
T proteus::getValue ( const RuntimeConstant RC)

◆ hash() [1/2]

template<typename FirstT , typename... RestTs>
HashT proteus::hash ( FirstT &&  First,
RestTs &&...  Rest 
)
inline

◆ hash() [2/2]

template<typename T >
HashT proteus::hash ( T &&  Data)
inline

◆ hashArrayRefElement()

HashT proteus::hashArrayRefElement ( const RuntimeConstant RC)
inline

◆ hashCombine()

HashT proteus::hashCombine ( HashT  A,
HashT  B 
)
inline

◆ hashRuntimeConstantArray()

template<typename T >
HashT proteus::hashRuntimeConstantArray ( const RuntimeConstant RC)
inline

◆ hashRuntimeConstantObject()

HashT proteus::hashRuntimeConstantObject ( const RuntimeConstant RC)
inline

◆ hashValue() [1/5]

HashT proteus::hashValue ( ArrayRef< RuntimeConstant Arr)
inline

◆ hashValue() [2/5]

HashT proteus::hashValue ( const std::string &  S)
inline

◆ hashValue() [3/5]

template<typename T >
std::enable_if_t< std::is_scalar< T >::value, HashT > proteus::hashValue ( const T V)
inline

◆ hashValue() [4/5]

HashT proteus::hashValue ( HashT H)
inline

◆ hashValue() [5/5]

HashT proteus::hashValue ( StringRef S)
inline

◆ internalize()

void proteus::internalize ( Module M,
StringRef  PreserveFunctionName 
)
inline

◆ isDebugOutputEnabled()

bool proteus::isDebugOutputEnabled ( )
inline

◆ isDeviceCompilation()

bool proteus::isDeviceCompilation ( Module M)
inline

◆ isDeviceKernel()

bool proteus::isDeviceKernel ( const Function F)
inline

◆ isHostTargetModel()

bool proteus::isHostTargetModel ( TargetModelType  TargetModel)
inline

◆ isScalarRuntimeConstantType()

bool proteus::isScalarRuntimeConstantType ( RuntimeConstantType  RCType)
inline

◆ launchKernelDirect() [1/2]

cudaError_t proteus::launchKernelDirect ( void KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
CUstream  Stream 
)
inline

◆ launchKernelDirect() [2/2]

hipError_t proteus::launchKernelDirect ( void KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
hipStream_t  Stream 
)
inline

◆ launchKernelFunction() [1/2]

cudaError_t proteus::launchKernelFunction ( CUfunction  KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
CUstream  Stream 
)
inline

◆ launchKernelFunction() [2/2]

hipError_t proteus::launchKernelFunction ( hipFunction_t  KernelFunc,
dim3  GridDim,
dim3  BlockDim,
void **  KernelArgs,
uint64_t  ShmemSize,
hipStream_t  Stream 
)
inline

◆ linkModules()

std::unique_ptr< Module > proteus::linkModules ( LLVMContext Ctx,
SmallVector< std::unique_ptr< Module > >  LinkedModules 
)
inline

◆ min()

Var & proteus::min ( const Var L,
const Var R 
)

◆ operator%()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator% ( const T ConstValue,
const Var V 
)

◆ operator%<double >()

◆ operator%<float >()

◆ operator%<int >()

◆ operator%<size_t >()

◆ operator%<unsigned int >()

◆ operator*()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator* ( const T ConstValue,
const Var V 
)

◆ operator*<double >()

◆ operator*<float >()

◆ operator*<int >()

◆ operator*<size_t >()

◆ operator*<unsigned int >()

◆ operator+()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator+ ( const T ConstValue,
const Var V 
)

◆ operator+<double >()

◆ operator+<float >()

◆ operator+<int >()

◆ operator+<size_t >()

◆ operator+<unsigned int >()

◆ operator-()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator- ( const T ConstValue,
const Var V 
)

◆ operator-<double >()

◆ operator-<float >()

◆ operator-<int >()

◆ operator-<size_t >()

◆ operator-<unsigned int >()

◆ operator/()

template<typename T >
std::enable_if_t< std::is_arithmetic_v< T >, Var & > proteus::operator/ ( const T ConstValue,
const Var V 
)

◆ operator/<double >()

◆ operator/<float >()

◆ operator/<int >()

◆ operator/<size_t >()

◆ operator/<unsigned int >()

◆ optimizeIR() [1/2]

void proteus::optimizeIR ( Module M,
StringRef  Arch,
char  OptLevel,
unsigned  CodegenOptLevel 
)
inline

◆ optimizeIR() [2/2]

void proteus::optimizeIR ( Module M,
StringRef  Arch,
const std::string &  PassPipeline,
unsigned  CodegenOptLevel 
)
inline

◆ parseJSONConfig()

llvm::StringMap< const CodeGenerationConfig > proteus::parseJSONConfig ( std::optional< std::string >  JSONFn)
inline

◆ parseTargetModel()

TargetModelType proteus::parseTargetModel ( StringRef  Target)
inline

◆ powf()

Var & proteus::powf ( const Var L,
const Var R 
)

◆ pruneIR()

void proteus::pruneIR ( Module M,
bool  UnsetExternallyInitialized = true 
)
inline

◆ resolveDeviceGlobalAddr()

void * proteus::resolveDeviceGlobalAddr ( const void Addr)
inline

◆ runCleanupPassPipeline()

void proteus::runCleanupPassPipeline ( Module M)
inline

◆ setLaunchBoundsForKernel()

void proteus::setLaunchBoundsForKernel ( Function F,
int  MaxThreadsPerSM,
int  MinBlocksPerSM = 0 
)
inline

◆ sqrtf()

Var & proteus::sqrtf ( const Var R)

◆ strToCG()

CodegenOption proteus::strToCG ( std::string  CGstr)
inline

◆ toLLVM()

constexpr unsigned proteus::toLLVM ( AddressSpace  AS)
inlineconstexpr

◆ toString() [1/4]

std::string proteus::toString ( CodegenOption  Option)
inline

◆ toString() [2/4]

std::string proteus::toString ( const RuntimeConstantType  RCType)
inline

◆ toString() [3/4]

std::string proteus::toString ( KernelCloneOption  Option)
inline

◆ toString() [4/4]

std::string proteus::toString ( Value &  V)
inline

Variable Documentation

◆ NumElts

size_t proteus::NumElts

◆ Pos

int proteus::Pos = -1

◆ Velem

size_t std::remove_pointer<T>::type proteus::Velem = 0) noexcept