27#include "mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h"
28#include "mlir/Dialect/ControlFlow/IR/ControlFlow.h"
29#include "mlir/Dialect/SCF/IR/SCF.h"
30#include "mlir/Pass/Pass.h"
31#include "mlir/Transforms/DialectConversion.h"
34#define GEN_PASS_DEF_AIESCFTOCONTROLFLOW
35#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h.inc"
44struct AIESCFToControlFlowPass
45 : xilinx::AIEX::impl::AIESCFToControlFlowBase<AIESCFToControlFlowPass> {
47 void runOnOperation()
override {
48 ModuleOp module = getOperation();
50 ConversionTarget target(getContext());
54 target.markUnknownOpDynamicallyLegal([](Operation *) {
return true; });
55 target.addLegalDialect<cf::ControlFlowDialect>();
58 target.addDynamicallyLegalDialect<scf::SCFDialect>([](Operation *op) {
59 return op->getParentOfType<AIE::RuntimeSequenceOp>() !=
nullptr;
62 RewritePatternSet patterns(&getContext());
63 populateSCFToControlFlowConversionPatterns(patterns);
65 if (failed(applyPartialConversion(module, target, std::move(patterns))))
72std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>>
74 return std::make_unique<AIESCFToControlFlowPass>();
std::unique_ptr< mlir::OperationPass< mlir::ModuleOp > > createAIESCFToControlFlowPass()