| // 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 | |
| // Implements utilities for lowering StableHLO dialect to Linalg dialect. | |
| #include "compiler/plugins/input/StableHLO/Conversion/LegalizeToLinalgUtils.h" | |
| #include <algorithm> | |
| #include <numeric> | |
| #include <string> | |
| #include <utility> | |
| #include "mlir/IR/BuiltinTypes.h" | |
| #include "stablehlo/dialect/StablehloOps.h" | |
| namespace mlir::iree_compiler::stablehlo { | |
| SmallVector<utils::IteratorType, 3> | |
| getParallelAndReductionIterators(unsigned nLoops, unsigned nReduction) { | |
| SmallVector<utils::IteratorType, 3> res(nLoops - nReduction, | |
| utils::IteratorType::parallel); | |
| res.append(nReduction, utils::IteratorType::reduction); | |
| return res; | |
| } | |
| SmallVector<utils::IteratorType, 3> | |
| getNParallelLoopsAttrs(unsigned nParallelLoops) { | |
| return getParallelAndReductionIterators(nParallelLoops, 0); | |
| } | |
| SmallVector<int64_t> extract1DVector(DenseIntElementsAttr elements) { | |
| SmallVector<int64_t> ret; | |
| for (const APInt &element : elements) { | |
| ret.push_back(element.getLimitedValue()); | |
| } | |
| return ret; | |
| } | |
| } // namespace mlir::iree_compiler::stablehlo |