Visitor object which will generate llvm IR for a syntax tree. This provides the majority of the code generation functionality except for attribute access. This design allows for custom geometry to define their IR implementations for these accesses by deriving and extending this generator with ast::Attribute handling (see PointComputeGenerator.h and VolumeComputeGenerator.h for examples).
More...
|
| ComputeGenerator (llvm::Module &module, const FunctionOptions &options, FunctionRegistry &functionRegistry, Logger &logger) |
|
virtual | ~ComputeGenerator ()=default |
|
bool | generate (const ast::Tree &) |
|
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...
|
|
|
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::Attribute *) |
| 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...
|
|
template<typename ValueType > |
std::enable_if< std::is_floating_point< ValueType >::value, bool >::type | visit (const ast::Value< ValueType > *node) |
| Visitor methods for all AST nodes which implement IR generation. More...
|
|
|
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...
|
|
|
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...
|
|
|
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...
|
|