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  ArrayInfo
 
class  BinaryInfo
 
class  CompilationResult
 
class  CompilationTask
 
class  CompilerAsync
 
class  CompilerSync
 
class  Config
 
class  CppJitModule
 
struct  DeviceTraits
 
struct  DeviceTraits< JitEngineDeviceCUDA >
 
struct  DeviceTraits< JitEngineDeviceHIP >
 
class  Dispatcher
 
class  DispatcherHost
 
struct  DispatchResult
 
struct  FatbinWrapperT
 
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
 
struct  ModuleInfo
 
struct  ObjectInfo
 
struct  ProteusTypes
 
struct  RuntimeConstant
 
struct  RuntimeConstantArgInfo
 
struct  RuntimeConstantArrayInfo
 
struct  RuntimeConstantInfo
 
struct  RuntimeConstantObjectInfo
 
union  RuntimeConstantValue
 
class  Timer
 
struct  TimeTracerRAII
 
class  TransformArgumentSpecialization
 
class  TransformLambdaSpecialization
 
class  TransformSharedArray
 
struct  TypeMap
 
struct  TypeMap< bool >
 
struct  TypeMap< double & >
 
struct  TypeMap< double * >
 
struct  TypeMap< double >
 
struct  TypeMap< float * >
 
struct  TypeMap< float >
 
struct  TypeMap< int * >
 
struct  TypeMap< int >
 
struct  TypeMap< size_t >
 
struct  TypeMap< unsigned int * >
 
struct  TypeMap< unsigned int >
 
struct  TypeMap< void >
 
struct  Var
 
struct  VarT
 

Enumerations

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 }
 

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)
 
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)
 
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 isDeviceCompilation (Module &M)
 
std::string getUniqueFileID (Module &M)
 
std::unique_ptr< Module > cloneKernelFromModule (Module &M, StringRef Name, CallGraph &CG)
 
std::unique_ptr< Module > cloneKernelFromModules (ArrayRef< std::reference_wrapper< Module > > Mods, StringRef EntryName)
 
std::string toString (CodegenOption Option)
 
std::string toString (KernelCloneOption Option)
 
std::optional< std::string > getEnvOrDefaultString (const char *VarName)
 
bool getEnvOrDefaultBool (const char *VarName, bool Default)
 
int getEnvOrDefaultInt (const char *VarName, int Default)
 
CodegenOption getEnvOrDefaultCG (const char *VarName, CodegenOption Default)
 
KernelCloneOption getEnvOrDefaultKC (const char *VarName, KernelCloneOption Default)
 
void * resolveDeviceGlobalAddr (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< Module > linkModules (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< MemoryBuffer > codegenObject (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)
 
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 >
getValue (const RuntimeConstant &RC)
 
bool isScalarRuntimeConstantType (RuntimeConstantType RCType)
 
Constant * getConstant (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

◆ CodegenOption

enum class proteus::CodegenOption
strong
Enumerator
RTC 
Serial 
Parallel 

◆ KernelCloneOption

enum class proteus::KernelCloneOption
strong
Enumerator
LinkClonePrune 
LinkCloneLight 
CrossClone 

◆ RuntimeConstantType

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

◆ TargetModelType

enum class proteus::TargetModelType
strong
Enumerator
HOST 
CUDA 
HIP 

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

◆ 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

◆ getEnvOrDefaultBool()

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

◆ getEnvOrDefaultCG()

CodegenOption proteus::getEnvOrDefaultCG ( const char *  VarName,
CodegenOption  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

◆ 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

◆ isDeviceCompilation()

bool proteus::isDeviceCompilation ( Module &  M)
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

◆ operator*()

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

◆ operator*<double >()

template Var & proteus::operator*<double > ( const double &  ,
const Var  
)

◆ operator*<float >()

template Var & proteus::operator*<float > ( const float &  ,
const Var  
)

◆ operator*<int >()

template Var & proteus::operator*<int > ( const int &  ,
const Var  
)

◆ operator*<size_t >()

template Var & proteus::operator*<size_t > ( const size_t &  ,
const Var  
)

◆ operator*<unsigned int >()

template Var & proteus::operator*<unsigned int > ( const unsigned int &  ,
const Var  
)

◆ operator+()

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

◆ operator+<double >()

template Var & proteus::operator+<double > ( const double &  ,
const Var  
)

◆ operator+<float >()

template Var & proteus::operator+<float > ( const float &  ,
const Var  
)

◆ operator+<int >()

template Var & proteus::operator+<int > ( const int &  ,
const Var  
)

◆ operator+<size_t >()

template Var & proteus::operator+<size_t > ( const size_t &  ,
const Var  
)

◆ operator+<unsigned int >()

template Var & proteus::operator+<unsigned int > ( const unsigned int &  ,
const Var  
)

◆ operator-()

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

◆ operator-<double >()

template Var & proteus::operator-<double > ( const double &  ,
const Var  
)

◆ operator-<float >()

template Var & proteus::operator-<float > ( const float &  ,
const Var  
)

◆ operator-<int >()

template Var & proteus::operator-<int > ( const int &  ,
const Var  
)

◆ operator-<size_t >()

template Var & proteus::operator-<size_t > ( const size_t &  ,
const Var  
)

◆ operator-<unsigned int >()

template Var & proteus::operator-<unsigned int > ( const unsigned int &  ,
const Var  
)

◆ operator/()

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

◆ operator/<double >()

template Var & proteus::operator/<double > ( const double &  ,
const Var  
)

◆ operator/<float >()

template Var & proteus::operator/<float > ( const float &  ,
const Var  
)

◆ operator/<int >()

template Var & proteus::operator/<int > ( const int &  ,
const Var  
)

◆ operator/<size_t >()

template Var & proteus::operator/<size_t > ( const size_t &  ,
const Var  
)

◆ operator/<unsigned int >()

template Var & proteus::operator/<unsigned int > ( const unsigned int &  ,
const Var  
)

◆ 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

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

◆ 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