| // Copyright 2021 The IREE Authors |
| // |
| // Licensed under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| #include "iree-dialects/Dialect/PyDM/Transforms/Passes.h" |
| |
| #include "iree-dialects/Dialect/PyDM/IR/PyDMOps.h" |
| #include "mlir/Pass/PassManager.h" |
| #include "mlir/Transforms/Passes.h" |
| |
| using namespace mlir; |
| namespace PYDM = mlir::iree_compiler::IREE::PYDM; |
| using namespace PYDM; |
| |
| void PYDM::buildPostImportPassPipeline(OpPassManager &passManager) { |
| passManager.addNestedPass<PYDM::FuncOp>(createVariablesToSSAPass()); |
| passManager.addNestedPass<PYDM::FuncOp>(createLocalPropagateTypesPass()); |
| passManager.addPass(createCanonicalizerPass()); |
| passManager.addPass(createCSEPass()); |
| } |
| |
| void PYDM::buildLowerToIREEPassPipeline(OpPassManager &passManager, |
| const LowerToIREEOptions &options) { |
| // TODO: Needs to be iterative, support optimization passes, etc. |
| passManager.addPass(createLowerIREEPyDMToRTLPass()); |
| if (options.linkRtlSource) { |
| passManager.addPass(createLinkIREEPyDMRTLPass(options.linkRtlSource)); |
| } |
| // TODO: Optimization passes need to be their own pipeline. |
| passManager.addPass(createFixateWeakNumericPass()); |
| passManager.addPass(createCanonicalizerPass()); |
| |
| // Lowering passes. |
| passManager.addPass(createConvertIREEPyDMToIREEPass()); |
| |
| // Cleanup. |
| passManager.addPass(createCanonicalizerPass()); |
| passManager.addPass(createSymbolDCEPass()); |
| passManager.addPass(createCSEPass()); |
| } |
| |
| namespace PYDM_generated { |
| namespace { |
| #define GEN_PASS_REGISTRATION |
| #include "iree-dialects/Dialect/PyDM/Transforms/Passes.h.inc" |
| } // namespace |
| } // namespace PYDM_generated |
| |
| void PYDM::registerPasses() { |
| PYDM_generated::registerPasses(); |
| PassPipelineRegistration<> postImportPassPipeline( |
| "pydm-post-import-pipeline", |
| "Runs passes to cleanup PyDM immediately post-import", |
| [](OpPassManager &passManager) { |
| buildPostImportPassPipeline(passManager); |
| }); |
| |
| PassPipelineRegistration<> lowerToIREEPipeline( |
| "pydm-lower-to-iree-pipeline", |
| "Runs passes to lower PyDM to IREE's input dialects", |
| [](OpPassManager &passManager) { |
| LowerToIREEOptions options; |
| buildLowerToIREEPassPipeline(passManager, options); |
| }); |
| } |