3#include <mlir/IR/MLIRContext.h>
4#include <unordered_map>
8#include "mlir/IR/Builders.h"
9#include "mlir/IR/BuiltinOps.h"
10#include "mlir/IR/Dialect.h"
11#include "mlir/Pass/PassManager.h"
25 using GeneratorFunction = std::function<mlir::Value(mlir::Location,
const std::vector<mlir::Value> &)>;
31 MLIRGen(mlir::MLIRContext *context);
52 void declareUserFunctions(mlir::ModuleOp module,
ModuleNode *root);
59 void defineUserFunctions(mlir::ModuleOp module,
ModuleNode *root);
66 std::vector<mlir::Type> getFunctionArgTypes(
FunctionNode *funcNode);
73 Result<mlir::Value> lookupVariable(const std::
string &name) const;
80 void declareVariable(const std::
string &name, mlir::Value value);
86 void enterScope(const std::
string &name);
91 void exitScope() noexcept;
97 void emitStatement(
ASTNode *node);
104 mlir::Value emitExpression(
ASTNode *node);
106 mlir::Value emitCall(
CallNode *node);
111 void emitIf(
IfNode *node);
112 mlir::Value emitCallExpression(
CallNode *node, const std::vector<mlir::Value> &args);
121 void registerBuiltinFunctions();
124 mlir::MLIRContext *_context;
125 mlir::OpBuilder _builder;
128 std::
string _sourceFile;
Abstract Syntax Tree (AST) node base class.
Definition ast.h:20
AST node for assignment statements.
Definition ast.h:136
AST node for binary operations (arithmetic and relational).
Definition ast.h:190
AST node for function calls.
Definition ast.h:154
AST node for function definitions.
Definition ast.h:63
AST node for if conditional statements.
Definition ast.h:210
AST node for kernel definitions.
Definition ast.h:174
std::pair< std::string, VariableTable > NamedVariableTable
Definition mlir_gen.h:27
MLIRGen & operator=(const MLIRGen &)=default
MLIRGen(const MLIRGen &)=default
~MLIRGen() noexcept
Definition mlir_gen.cpp:115
std::function< mlir::Value(mlir::Location, const std::vector< mlir::Value > &)> GeneratorFunction
Definition mlir_gen.h:25
mlir::ModuleOp generate(ModuleNode *root, const std::string &sourceFile)
Generates MLIR code from the given AST root node.
Definition mlir_gen.cpp:193
MLIRGen(MLIRGen &&)=default
MLIRGen & operator=(MLIRGen &&)=default
std::unordered_map< std::string, mlir::Value > VariableTable
Definition mlir_gen.h:26
AST node for the entire module.
Definition ast.h:43
AST node for numeric literals.
Definition ast.h:121
AST node for string literals.
Definition ast.h:106
AST node for variable references.
Definition ast.h:88
Picceler MLIR dialect declarations.
std::expected< T, CompileError > Result
A type alias for the result of a compilation operation.
Definition error.h:59
Picceler MLIR type declarations, it includes piccelerTypes.h.inc, which is generated by MLIR TableGen...