OpenVDB  8.1.0
PointComputeGenerator.h
Go to the documentation of this file.
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 
11 
12 #ifndef OPENVDB_AX_POINT_COMPUTE_GENERATOR_HAS_BEEN_INCLUDED
13 #define OPENVDB_AX_POINT_COMPUTE_GENERATOR_HAS_BEEN_INCLUDED
14 
15 #include "ComputeGenerator.h"
16 #include "FunctionTypes.h"
17 #include "Types.h"
18 #include "Utils.h"
19 
20 #include "../compiler/AttributeRegistry.h"
21 
22 #include <openvdb/version.h>
23 
24 namespace openvdb {
26 namespace OPENVDB_VERSION_NAME {
27 
28 namespace ax {
29 namespace codegen {
30 
48 {
50  using Signature =
51  void(const void* const,
52  const void* const,
53  uint64_t,
54  void**,
55  void**,
56  void*);
57 
59  static const size_t N_ARGS = FunctionTraitsT::N_ARGS;
60 
62  static const std::array<std::string, N_ARGS>& argumentKeys();
63  static std::string getDefaultName();
64 };
65 
70 {
71  static std::string getDefaultName();
72 };
73 
74 
77 
78 namespace codegen_internal {
79 
85 {
92  PointComputeGenerator(llvm::Module& module,
93  const FunctionOptions& options,
94  FunctionRegistry& functionRegistry,
95  Logger& logger);
96 
97  ~PointComputeGenerator() override = default;
98 
99  using ComputeGenerator::traverse;
100  using ComputeGenerator::visit;
101 
103  bool visit(const ast::Attribute*) override;
104 
105 private:
106  llvm::Value* attributeHandleFromToken(const std::string&);
107  void getAttributeValue(const std::string& globalName, llvm::Value* location);
108 };
109 
110 } // namespace namespace codegen_internal
111 
112 } // namespace codegen
113 } // namespace ax
114 } // namespace OPENVDB_VERSION_NAME
115 } // namespace openvdb
116 
117 #endif // OPENVDB_AX_POINT_COMPUTE_GENERATOR_HAS_BEEN_INCLUDED
118 
The core visitor framework for code generation.
Contains frameworks for creating custom AX functions which can be registered within the FunctionRegis...
Consolidated llvm types for most supported types.
std::shared_ptr< AttributeRegistry > Ptr
Definition: AttributeRegistry.h:41
Logger for collecting errors and warnings that occur during AX compilation.
Definition: Logger.h:55
The function registry which is used for function code generation. Each time a function is visited wit...
Definition: FunctionRegistry.h:37
Definition: openvdb/Exceptions.h:13
Utility code generation methods for performing various llvm operations.
Options that control how functions behave.
Definition: CompilerOptions.h:25
Attributes represent any access to a primitive value, typically associated with the '@' symbol syntax...
Definition: AST.h:1874
A Tree is the highest concrete (non-abstract) node in the entire AX AST hierarchy....
Definition: AST.h:562
Templated function traits which provides compile-time index access to the types of the function signa...
Definition: ax/openvdb_ax/codegen/Types.h:259
The function definition and signature which is built by the PointComputeGenerator.
Definition: PointComputeGenerator.h:48
void(const void *const, const void *const, uint64_t, void **, void **, void *) Signature
The signature of the generated function.
Definition: PointComputeGenerator.h:56
static const std::array< std::string, N_ARGS > & argumentKeys()
The argument key names available during code generation.
An additonal function built by the PointComputeGenerator. Currently both compute and compute range fu...
Definition: PointComputeGenerator.h:70
Visitor object which will generate llvm IR for a syntax tree. This provides the majority of the code ...
Definition: ComputeGenerator.h:87
Visitor object which will generate llvm IR for a syntax tree which has been generated from AX that ta...
Definition: PointComputeGenerator.h:85
AttributeRegistry::Ptr generate(const ast::Tree &node)
bool visit(const ast::Attribute *) override
Visitor methods for all AST nodes which implement IR generation.
PointComputeGenerator(llvm::Module &module, const FunctionOptions &options, FunctionRegistry &functionRegistry, Logger &logger)
Constructor.
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:116
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:178