picceler
Loading...
Searching...
No Matches
mlir_gen.h
Go to the documentation of this file.
1#pragma once
2
3#include <unordered_map>
4#include <string>
5#include <vector>
6
7#include "mlir/Dialect/Arith/IR/Arith.h"
8#include "mlir/Dialect/Func/IR/FuncOps.h"
9#include "mlir/IR/Builders.h"
10#include "mlir/IR/BuiltinOps.h"
11#include "mlir/IR/Dialect.h"
12#include "mlir/Pass/PassManager.h"
13#include "mlir/Pass/Pass.h"
14
15#include "dialect.h"
16#include "parser.h"
17
18namespace picceler {
19
24class MLIRGen {
25public:
26 MLIRGen(mlir::MLIRContext *context);
27
33 mlir::ModuleOp generate(ModuleNode *root);
34
35private:
40 void emitStatement(ASTNode *node);
41
46 mlir::Value emitKernel(KernelNode *node);
47 mlir::Value emitExpression(ASTNode *node);
48 mlir::Value emitAssignment(AssignmentNode *node);
49 mlir::Value emitCall(CallNode *node);
50 mlir::Value emitVariable(VariableNode *node);
51 mlir::Value emitString(StringNode *node);
52 mlir::Value emitNumber(NumberNode *node);
53 mlir::Value emitBuiltinCall(CallNode *node, const std::vector<mlir::Value> &args);
54
58
64 bool isBuiltinFunction(CallNode *node);
65
70 std::unordered_map<std::string, mlir::Value> builtinVariables();
71
77 std::unordered_map<std::string, mlir::func::FuncOp> builtinFunctions();
78
79private:
80 mlir::MLIRContext *_context;
81 mlir::OpBuilder _builder;
82 std::unordered_map<std::string, mlir::Value> _variableTable;
83 std::unordered_map<std::string, mlir::func::FuncOp> _functionTable;
84};
85
86} // namespace picceler
mlir::ModuleOp generate(ModuleNode *root)
Generates MLIR code from the given AST root node.
Definition mlir_gen.cpp:17
MLIRGen(mlir::MLIRContext *context)
Definition mlir_gen.cpp:14
Definition ast.h:11
Abstract Syntax Tree (AST) node base class.
Definition ast.h:16
AST node for assignment statements.
Definition ast.h:64
AST node for function calls.
Definition ast.h:73
AST node for kernel definitions.
Definition ast.h:83
AST node for the entire module.
Definition ast.h:32
AST node for numeric literals.
Definition ast.h:56
AST node for string literals.
Definition ast.h:48
AST node for variable references.
Definition ast.h:40