OpenVDB
9.0.1
|
Visitor object which will generate llvm IR for a syntax tree which has been generated from AX that targets point grids. The IR will represent 2 functions : one that executes over single points and one that executes over a collection of points. This is primarily used by the Compiler class. More...
#include <openvdb_ax/codegen/PointComputeGenerator.h>
Inherits ComputeGenerator.
Public Types | |
using | NodeType = typename std::conditional< true, const NodeT, NodeT >::type |
Templated conditional which resolves to a const NodeT if ConstVisit is true, or a non-const NodeT if ConstVisit is false. More... | |
Public Member Functions | |
PointComputeGenerator (llvm::Module &module, const FunctionOptions &options, FunctionRegistry &functionRegistry, Logger &logger) | |
Constructor. More... | |
~PointComputeGenerator () override=default | |
AttributeRegistry::Ptr | generate (const ast::Tree &node) |
bool | visit (const ast::Attribute *) override |
Visitor methods for all AST nodes which implement IR generation. More... | |
SymbolTable & | globals () |
const SymbolTable & | globals () const |
bool | postOrderNodes () const |
Code generation always runs post order. More... | |
bool | traverse (const ast::Block *block) |
Custom traversal of scoped blocks. More... | |
bool | traverse (const ast::CommaOperator *comma) |
Custom traversal of comma expression. More... | |
bool | traverse (const ast::ConditionalStatement *cond) |
Custom traversal of conditional statements. More... | |
bool | traverse (const ast::BinaryOperator *bin) |
Custom traversal of binary operators. More... | |
bool | traverse (const ast::TernaryOperator *tern) |
Custom traversal of ternary operators. More... | |
bool | traverse (const ast::Loop *loop) |
Custom traversal of loops. More... | |
bool | traverse (const ast::DeclareLocal *decl) |
Custom traversal of declarations. More... | |
ComputeGenerator & | derived () |
Accesses the derived class by static casting the current object. Assumes use of the Curiously Recursive Template Pattern (CRTP). More... | |
Traversals | |
bool | traverse (NodeType< ast::Tree > *tree) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::StatementList > *cond) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Block > *block) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::CommaOperator > *comma) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Loop > *loop) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Keyword > *keyw) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::ConditionalStatement > *cond) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::AssignExpression > *asgn) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Crement > *crmt) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::UnaryOperator > *unry) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::BinaryOperator > *bin) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::TernaryOperator > *tern) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Cast > *cast) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::FunctionCall > *call) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Attribute > *attr) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::ExternalVariable > *ext) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::DeclareLocal > *decl) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Local > *loc) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::ArrayPack > *pack) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::ArrayUnpack > *pack) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Value< bool >> *val) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Value< int16_t >> *val) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Value< int32_t >> *val) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Value< int64_t >> *val) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Value< float >> *val) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Value< double >> *val) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Value< std::string >> *val) |
Default traversals for a given concrete AST node type. More... | |
bool | traverse (NodeType< ast::Node > *node) |
The default traversal method which is hit for all child traversals. The correct derived traversal scheme is selected by using the node enumerated type. More... | |
virtual bool | visit (const ast::CommaOperator *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::AssignExpression *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Crement *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::FunctionCall *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Tree *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Block *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::ConditionalStatement *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Loop *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Keyword *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::UnaryOperator *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::BinaryOperator *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::TernaryOperator *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Cast *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::DeclareLocal *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Local *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::ExternalVariable *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::ArrayUnpack *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::ArrayPack *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Value< bool > *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Value< int16_t > *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Value< int32_t > *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Value< int64_t > *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Value< float > *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Value< double > *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
virtual bool | visit (const ast::Value< std::string > *) |
Visitor methods for all AST nodes which implement IR generation. More... | |
template<typename ValueType > | |
std::enable_if< std::is_integral< ValueType >::value, bool >::type | visit (const ast::Value< ValueType > *node) |
Visitor methods for all AST nodes which implement IR generation. More... | |
Visits | |
bool | visit (NodeType< ast::Node > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Statement > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Expression > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Variable > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::ValueBase > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Tree > *) |
Visits for concrete Node types. More... | |
bool | visit (NodeType< ast::StatementList > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Block > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::CommaOperator > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Loop > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Keyword > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::ConditionalStatement > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::AssignExpression > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Crement > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::UnaryOperator > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::BinaryOperator > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::TernaryOperator > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Cast > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::FunctionCall > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Attribute > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::ExternalVariable > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::DeclareLocal > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Local > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::ArrayPack > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::ArrayUnpack > *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Value< bool >> *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Value< int16_t >> *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Value< int32_t >> *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Value< int64_t >> *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Value< float >> *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Value< double >> *) |
Visits for abstract (pure-virtual) Node types. More... | |
bool | visit (NodeType< ast::Value< std::string >> *) |
Visits for abstract (pure-virtual) Node types. More... | |
Options | |
bool | reverseChildVisits () const |
Default behavior option. Reverses the traversal order of child nodes. If true, child nodes are accessed from last to first index .i.e. Node::children() -> 0. If false, child nodes are accessed from first to last .i.e. 0 -> Node::children() More... | |
bool | visitNodeHierarchies () const |
Default behavior option. Controls whether nodes visit themselves at each stage of their class hierarchy. If true, nodes perform multiple visits on their potentially abstract base classes. If false, only the concrete derived types are visited. More... | |
bool | reverseHierarchyVisits () const |
Default behavior option. Reverses the traversal order of node hierarchies. If true, hierarchical visits start at the very top of their inheritance structure (always a Node AST node) and visit downwards until the lowest derived concrete node is reached. If false, hierarchical visits start at the lowest derived concrete node and visit upwards until the very top of their inheritance structure (always a Node AST node) is reached. More... | |
Protected Member Functions | |
const FunctionGroup * | getFunction (const std::string &identifier, const bool allowInternal=false) |
bool | binaryExpression (llvm::Value *&result, llvm::Value *lhs, llvm::Value *rhs, const ast::tokens::OperatorToken op, const ast::Node *node) |
bool | assignExpression (llvm::Value *lhs, llvm::Value *&rhs, const ast::Node *node) |
void | createFreeSymbolStrings (llvm::IRBuilder<> &) |
Clear any strings which were allocated in a given function. This method accepts an IRBuilder which is expected to be attached to a valid block/function. For each block in the function with a return instruction, this function calls the appropriate memory methods to deallocate any strings (which are alloced in the function prologue). More... | |
Protected Attributes | |
llvm::Module & | mModule |
llvm::LLVMContext & | mContext |
llvm::IRBuilder | mBuilder |
std::stack< llvm::Value * > | mValues |
std::stack< std::pair< llvm::BasicBlock *, llvm::BasicBlock * > > | mBreakContinueStack |
size_t | mScopeIndex |
SymbolTableBlocks | mSymbolTables |
llvm::Function * | mFunction |
const FunctionOptions | mOptions |
Logger & | mLog |
Visitor object which will generate llvm IR for a syntax tree which has been generated from AX that targets point grids. The IR will represent 2 functions : one that executes over single points and one that executes over a collection of points. This is primarily used by the Compiler class.
|
inherited |
Templated conditional which resolves to a const NodeT if ConstVisit is true, or a non-const NodeT if ConstVisit is false.
PointComputeGenerator | ( | llvm::Module & | module, |
const FunctionOptions & | options, | ||
FunctionRegistry & | functionRegistry, | ||
Logger & | logger | ||
) |
|
overridedefault |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
Clear any strings which were allocated in a given function. This method accepts an IRBuilder which is expected to be attached to a valid block/function. For each block in the function with a return instruction, this function calls the appropriate memory methods to deallocate any strings (which are alloced in the function prologue).
|
inlineinherited |
Accesses the derived class by static casting the current object. Assumes use of the Curiously Recursive Template Pattern (CRTP).
AttributeRegistry::Ptr generate | ( | const ast::Tree & | node | ) |
|
protectedinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
Code generation always runs post order.
|
inlineinherited |
Default behavior option. Reverses the traversal order of child nodes. If true, child nodes are accessed from last to first index .i.e. Node::children() -> 0. If false, child nodes are accessed from first to last .i.e. 0 -> Node::children()
|
inlineinherited |
Default behavior option. Reverses the traversal order of node hierarchies. If true, hierarchical visits start at the very top of their inheritance structure (always a Node AST node) and visit downwards until the lowest derived concrete node is reached. If false, hierarchical visits start at the lowest derived concrete node and visit upwards until the very top of their inheritance structure (always a Node AST node) is reached.
|
inlineinherited |
Custom traversal of scoped blocks.
|
inlineinherited |
Custom traversal of comma expression.
|
inlineinherited |
Custom traversal of conditional statements.
|
inlineinherited |
Custom traversal of binary operators.
|
inlineinherited |
Custom traversal of ternary operators.
Default traversals for a given concrete AST node type.
|
inlineinherited |
Custom traversal of loops.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Custom traversal of declarations.
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
|
inlineinherited |
Default traversals for a given concrete AST node type.
The default traversal method which is hit for all child traversals. The correct derived traversal scheme is selected by using the node enumerated type.
|
overridevirtual |
Visitor methods for all AST nodes which implement IR generation.
Reimplemented from ComputeGenerator.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
virtualinherited |
Visitor methods for all AST nodes which implement IR generation.
|
inherited |
Visitor methods for all AST nodes which implement IR generation.
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
Visits for concrete Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Visits for abstract (pure-virtual) Node types.
|
inlineinherited |
Default behavior option. Controls whether nodes visit themselves at each stage of their class hierarchy. If true, nodes perform multiple visits on their potentially abstract base classes. If false, only the concrete derived types are visited.
When disabled, abstract node visitor methods are never accessed directly through the default Visitor implementation. These types include Node, Statement, Expression, etc AST nodes. If true, for each linearly inherited AST node, a visit is performed on the entire hierarchy. For example, for a Local AST node which derives from Variable -> Expression -> Statement -> Node, 5 visits will be performed at each level.
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |