diff --git a/llvm/include/llvm/ADT/SmallVectorExtras.h b/llvm/include/llvm/ADT/SmallVectorExtras.h new file mode 100644 --- /dev/null +++ b/llvm/include/llvm/ADT/SmallVectorExtras.h @@ -0,0 +1,31 @@ +//===- llvm/ADT/SmallVectorExtras.h -----------------------------*- C++ -*-===// +// +// Part of the LLVM Project, 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 +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file defines less commonly used SmallVector utilities. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ADT_SMALLVECTOREXTRAS_H +#define LLVM_ADT_SMALLVECTOREXTRAS_H + +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SmallVector.h" + +namespace llvm { + +/// Map a range to a SmallVector with element types deduced from the mapping. +template +auto map_to_vector(ContainerTy &&C, FuncTy &&F) { + return to_vector( + map_range(std::forward(C), std::forward(F))); +} + +} // namespace llvm + +#endif // LLVM_ADT_SMALLVECTOREXTRAS_H \ No newline at end of file diff --git a/mlir/lib/Conversion/GPUCommon/GPUOpsLowering.cpp b/mlir/lib/Conversion/GPUCommon/GPUOpsLowering.cpp --- a/mlir/lib/Conversion/GPUCommon/GPUOpsLowering.cpp +++ b/mlir/lib/Conversion/GPUCommon/GPUOpsLowering.cpp @@ -11,7 +11,7 @@ #include "mlir/IR/Attributes.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinTypes.h" -#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SmallVectorExtras.h" #include "llvm/Support/FormatVariadic.h" using namespace mlir; @@ -486,8 +486,7 @@ return operand; return rewriter.create(loc, operand, index); }; - auto scalarOperands = - llvm::to_vector(llvm::map_range(operands, extractElement)); + auto scalarOperands = llvm::map_to_vector(operands, extractElement); Operation *scalarOp = rewriter.create(loc, name, scalarOperands, elementType, op->getAttrs()); rewriter.create(loc, result, scalarOp->getResult(0), diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp --- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp +++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp @@ -20,6 +20,7 @@ #include "mlir/Transforms/InliningUtils.h" #include "llvm/ADT/ScopeExit.h" #include "llvm/ADT/SmallBitVector.h" +#include "llvm/ADT/SmallVectorExtras.h" #include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/Debug.h" #include @@ -1360,11 +1361,11 @@ mlir::affine::makeComposedFoldedMultiResultAffineApply( OpBuilder &b, Location loc, AffineMap map, ArrayRef operands) { - return llvm::to_vector(llvm::map_range( - llvm::seq(0, map.getNumResults()), [&](unsigned i) { - return makeComposedFoldedAffineApply(b, loc, map.getSubMap({i}), - operands); - })); + return llvm::map_to_vector(llvm::seq(0, map.getNumResults()), + [&](unsigned i) { + return makeComposedFoldedAffineApply( + b, loc, map.getSubMap({i}), operands); + }); } Value mlir::affine::makeComposedAffineMin(OpBuilder &b, Location loc, @@ -4592,13 +4593,13 @@ result.addTypes(SmallVector(basis.size(), builder.getIndexType())); result.addOperands(linearIndex); SmallVector basisValues = - llvm::to_vector(llvm::map_range(basis, [&](OpFoldResult ofr) -> Value { + llvm::map_to_vector(basis, [&](OpFoldResult ofr) -> Value { std::optional staticDim = getConstantIntValue(ofr); if (staticDim.has_value()) return builder.create(result.location, *staticDim); return ofr.dyn_cast(); - })); + }); result.addOperands(basisValues); }