picceler
A compiled DSL for image processing, built on MLIR
Loading...
Searching...
No Matches
pass_manager.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
5#include "spdlog/spdlog.h"
6
7#include "mlir/Pass/PassManager.h"
8#include "llvm/Support/raw_ostream.h"
9#include "mlir/Pass/PassInstrumentation.h"
10#include "mlir/Pass/Pass.h"
11#include "mlir/IR/BuiltinOps.h"
12
13namespace picceler {
14
19struct PassLogger : public mlir::PassInstrumentation {
20 void runBeforePass(mlir::Pass *pass, mlir::Operation *op) override {
21 spdlog::debug("Started pass: {}", pass->getName().str());
22 }
23 void runAfterPass(mlir::Pass *pass, mlir::Operation *op) override {
24 spdlog::debug("Finished pass: {}", pass->getName().str());
25 }
26 void runAfterPassFailed(mlir::Pass *pass, mlir::Operation *op) override {
27 spdlog::error("Failed pass: {}", pass->getName().str());
28 }
29};
30
35public:
41 IRPassManager(mlir::MLIRContext *context);
42
48 void addPasses(bool profile);
49
55 bool run(mlir::ModuleOp module);
56
57private:
63
68 void addHighLevelOptimizationPasses(bool profile);
69
73 void addAffineLoweringPasses();
74
78 void addRuntimeLoweringPasses();
79
83 void addBackendLoweringPasses();
84
86
87private:
88 std::unique_ptr<llvm::raw_fd_ostream> _outStream;
89 mlir::PassManager _passManager;
90};
91
92} // namespace picceler
bool run(mlir::ModuleOp module)
Runs the pass manager on the given MLIR module.
Definition pass_manager.cpp:43
void addPasses(bool profile)
Adds the full set of compilation passes. Call once, after CLI options are parsed (this manager is con...
Definition pass_manager.cpp:45
IRPassManager(mlir::MLIRContext *context)
Constructs an IRPassManager with the given MLIR context. Also sets up the output stream and configure...
Definition pass_manager.cpp:28
Definition ast.h:11
Custom struct to log pass execution using spdlog. This struct implements the PassInstrumentation inte...
Definition pass_manager.h:19
void runAfterPass(mlir::Pass *pass, mlir::Operation *op) override
Definition pass_manager.h:23
void runBeforePass(mlir::Pass *pass, mlir::Operation *op) override
Definition pass_manager.h:20
void runAfterPassFailed(mlir::Pass *pass, mlir::Operation *op) override
Definition pass_manager.h:26