blob: 515fc26583e53b098d75bcd2ea759fca3ec4b49e [file] [log] [blame]
// 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);
});
}