20#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"
21#include "mlir/IR/Dominance.h"
22#include "mlir/Pass/PassManager.h"
23#include "mlir/Target/Cpp/CppEmitter.h"
24#include "mlir/Transforms/CSE.h"
25#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
31 bool foldDDRAddrOffset,
32 bool emitDispatchShim) {
38 MLIRContext *ctx =
module.getContext();
39 RewritePatternSet patterns(ctx);
40 cf::AssertOp::getCanonicalizationPatterns(patterns, ctx);
41 FrozenRewritePatternSet frozen(std::move(patterns));
42 IRRewriter rewriter(ctx);
43 DominanceInfo domInfo;
44 module.walk([&](AIE::RuntimeSequenceOp seq) {
45 eliminateCommonSubExpressions(rewriter, domInfo, seq.getBody());
46 SmallVector<Operation *> ops;
47 seq.getBody().walk([&](Operation *op) { ops.push_back(op); });
48 (void)applyOpPatternsGreedily(ops, frozen);
54 if (failed(pm.run(module)))
56 return emitc::translateToCpp(module, output);
mlir::LogicalResult AIETranslateNpuToCpp(mlir::ModuleOp module, llvm::raw_ostream &output, bool foldDDRAddrOffset=true, bool emitDispatchShim=false)
Emit a C++ builder that reconstructs the TXN stream at runtime.
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createConvertAIEXToEmitCPass()