11#include "mlir/Dialect/Affine/Utils.h"
12#include "mlir/Dialect/Arith/IR/Arith.h"
13#include "mlir/Dialect/Arith/Transforms/Passes.h"
14#include "mlir/Dialect/Func/IR/FuncOps.h"
15#include "mlir/Dialect/MemRef/IR/MemRef.h"
16#include "mlir/Dialect/SCF/IR/SCF.h"
17#include "mlir/IR/PatternMatch.h"
18#include "mlir/Pass/PassManager.h"
19#include "mlir/Support/LogicalResult.h"
20#include "mlir/Transforms/DialectConversion.h"
21#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
25#define GEN_PASS_DEF_EXCLUDEEXECUTEREGIONCANONICALIZE
26#include "circt/Dialect/Calyx/CalyxPasses.h.inc"
31using namespace mlir::arith;
32using namespace mlir::memref;
33using namespace mlir::scf;
39class ExcludeExecuteRegionCanonicalizePass
40 :
public circt::calyx::impl::ExcludeExecuteRegionCanonicalizeBase<
41 ExcludeExecuteRegionCanonicalizePass> {
42 void runOnOperation()
override;
46void ExcludeExecuteRegionCanonicalizePass::runOnOperation() {
47 MLIRContext *ctx = &getContext();
51 for (Dialect *dialect : ctx->getLoadedDialects())
52 dialect->getCanonicalizationPatterns(
patterns);
55 for (
const RegisteredOperationName &op : ctx->getRegisteredOperations()) {
56 if (op.getStringRef() ==
"scf.execute_region" ||
57 op.getStringRef() ==
"scf.parallel")
60 op.getCanonicalizationPatterns(
patterns, ctx);
63 if (failed(applyPatternsGreedily(getOperation(), std::move(
patterns)))) {
64 getOperation()->emitError(
"Failed to apply canonicalization.");
68 ConversionTarget target(*ctx);
69 target.addLegalDialect<arith::ArithDialect, memref::MemRefDialect,
70 scf::SCFDialect, affine::AffineDialect>();
73std::unique_ptr<mlir::Pass>
75 return std::make_unique<ExcludeExecuteRegionCanonicalizePass>();
std::unique_ptr< mlir::Pass > createExcludeExecuteRegionCanonicalizePass()
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.