|
| CFunction (const std::string &symbol, SignatureT *function) |
|
| ~CFunction () override=default |
|
ArgInfo | types (ArgInfoVector &types, llvm::LLVMContext &C) const override |
| Populate a vector of ArgInfos which describe this function signature. This method is used by Function::create, Function::print and Function::match. More...
|
|
uint64_t | address () const override final |
| Returns the global address of this function. More...
|
|
llvm::Value * | call (const std::vector< llvm::Value * > &args, llvm::IRBuilder<> &B) const override |
|
Value | call (const Arguments &args, llvm::IRBuilder<> &B) const override |
|
llvm::Constant * | fold (const std::vector< llvm::Value * > &args, llvm::LLVMContext &C) const override final |
|
llvm::Type * | types (std::vector< llvm::Type * > &types, llvm::LLVMContext &C) const override |
|
llvm::Value * | call (const std::vector< llvm::Value * > &args, llvm::IRBuilder<> &B, const bool cast) const override |
|
void | setConstantFold (bool on) |
|
bool | hasConstantFold () const |
|
virtual llvm::Function * | create (llvm::LLVMContext &C, llvm::Module *M=nullptr) const |
| Converts and creates this AX function into a llvm Function. More...
|
|
llvm::Function * | create (llvm::Module &M) const |
| Convenience method which always uses the provided module to find the function or insert it if necessary. More...
|
|
llvm::Function * | get (const llvm::Module &M) const |
| Convenience method for calling M.getFunction(symbol). Returns a nullptr if the function has not yet been created or if it is embedded IR. More...
|
|
Value | call (const NativeArguments &args, llvm::IRBuilder<> &B) const |
|
virtual SignatureMatch | match (const ArgInfoVector &inputs, llvm::LLVMContext &C) const |
| The base implementation for determining how a vector of llvm arguments translates to this functions signature. Returns an enum which represents the available mapping. More...
|
|
virtual SignatureMatch | match (const std::vector< llvm::Type * > &inputs, llvm::LLVMContext &C) const |
|
size_t | size () const |
| The number of arguments that this function has. More...
|
|
const char * | symbol () const |
| The function symbol name. More...
|
|
const char * | argName (const size_t idx) const |
| Returns the descriptive name of the given argument index. More...
|
|
virtual void | print (llvm::LLVMContext &C, std::ostream &os, const char *name=nullptr, const bool axTypes=true) const |
| Print this function's signature to the provided ostream. More...
|
|
const SmallArgumentVector< const char * > & | dependencies () const |
|
bool | hasParamAttribute (const size_t i, const llvm::Attribute::AttrKind &kind) const |
| Deprecated builder methods, no longer public. More...
|
|
void | setArgumentNames (std::vector< const char * > names) |
|
void | setDependencies (std::vector< const char * > deps) |
|
void | setFnAttributes (const std::vector< llvm::Attribute::AttrKind > &in) |
|
void | setRetAttributes (const std::vector< llvm::Attribute::AttrKind > &in) |
|
void | setParamAttributes (const size_t i, const std::vector< llvm::Attribute::AttrKind > &in) |
|
template<typename SignatureT>
struct openvdb::v12_1::ax::codegen::CFunction< SignatureT >
Represents a concrete C function binding.
- Note
- This struct is templated on the signature to allow for evaluation of the arguments to llvm types from any llvm context.
virtual llvm::Function* create |
( |
llvm::LLVMContext & |
C, |
|
|
llvm::Module * |
M = nullptr |
|
) |
| const |
|
virtualinherited |
Converts and creates this AX function into a llvm Function.
This method uses the result from Function::types() to construct a llvm::FunctionType and a subsequent a llvm::Function. Any parameter, return or function attributes are also added to the function. If a module is provided, the module if first checked to see if the function already exists. If it does, it is immediately returned. If the function doesn't exist in the module, its prototype is created and also inserted into the end of the modules function list. If no module is provided, the function is left detached and must be added to a valid Module to be callable.
- Warning
- If a module is not provided, the caller takes ownership of the returned function and is responsible for deallocating it.
- Note
- The body of the function is left to derived classes to implement. As you need a Module to generate the prototype/body, this function serves two purposes. The first is to return the detached function signature if only a context is provided. The second is to ensure the function prototype and body (if required) is inserted into the module prior to returning.
-
It is possible to end up with function symbol collisions if you do not have unique function symbols in your module
- Parameters
-
C | The LLVM Context |
M | The Module to write the function to |
Reimplemented in IRFunctionBase.
The base implementation for determining how a vector of llvm arguments translates to this functions signature. Returns an enum which represents the available mapping.
This method calls types() to figure out the function signature, then compares each argument type to the type in the input vector. If the types match exactly, an Explicit match is found. If the sizes of the inputs and signature differ, no match is found and None is returned. If however, the sizes match and there exists a valid implicit cast from the input type to the signature type for every input, an Implicit match is returned. Finally, if the sizes match but there is no implicit cast mapping, Size is returned. i8 -> i32 : Implicit i32 -> i32 : Explicit str -> i32 : Size (i32,i32) -> i32 : None Never returns Ambiguous (this state is used by FunctionGroup)
- Note
- Due to the way CFunctionSRet is implemented, the LLVM Context must be provided in case we have a zero arg function signature with a SRET.
- Parameters
-
inputs | The input types |
C | The LLVM Context |
Reimplemented in SRetFunction< SignatureT, CFunction< SignatureT > >, and SRetFunction< SignatureT, IRFunction< SignatureT > >.