| // Copyright 2022 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/LinalgExt/Transforms/CodegenStrategy.h" |
| #include "iree-dialects/Dialect/LinalgExt/Passes/Passes.h" |
| #include "mlir/Pass/PassManager.h" |
| |
| using namespace mlir; |
| |
| #define DEBUG_TYPE "linalg-codegen-strategy" |
| |
| namespace mlir { |
| namespace iree_compiler { |
| namespace IREE { |
| namespace LinalgExt { |
| |
| void CodegenStrategy::configurePassPipeline(OpPassManager &pm, |
| MLIRContext *context, |
| bool addEnablePass) const { |
| for (unsigned stepCount = 0, e = transformationSequence.size(); stepCount < e; |
| ++stepCount) { |
| const std::unique_ptr<Transformation> &t = |
| transformationSequence[stepCount]; |
| std::string currentStr = std::to_string(stepCount); |
| auto currentState = StringAttr::get(context, currentStr); |
| std::string nextStr = std::to_string(stepCount + 1); |
| auto nextState = StringAttr::get(context, nextStr); |
| auto filter = (currentState.str() == std::to_string(0)) |
| ? LinalgExt::LinalgTransformationFilter( |
| t->filter, ArrayRef<StringAttr>{}, nextState) |
| : LinalgExt::LinalgTransformationFilter( |
| t->filter, currentState, nextState); |
| t->addToPassPipeline(pm, filter); |
| if (addEnablePass) |
| pm.addPass(createLinalgStrategyEnablePass(linalgEnablingOptions)); |
| } |
| pm.addPass(createLinalgStrategyRemoveMarkersPass()); |
| } |
| |
| } // namespace LinalgExt |
| } // namespace IREE |
| } // namespace iree_compiler |
| } // namespace mlir |