Index: llvm/include/llvm/ADT/SmallVectorExtras.h =================================================================== --- /dev/null +++ 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 Index: mlir/lib/Conversion/GPUCommon/GPUOpsLowering.cpp =================================================================== --- mlir/lib/Conversion/GPUCommon/GPUOpsLowering.cpp +++ 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; @@ -469,8 +469,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), Index: mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp =================================================================== --- mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp +++ mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp @@ -25,6 +25,7 @@ #include "mlir/IR/PatternMatch.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +#include "llvm/ADT/SmallVectorExtras.h" #include @@ -1837,9 +1838,9 @@ sizes[axis] = rewriter.createOrFold(loc, arg, axisValue); result = rewriter.createOrFold( loc, arg, result, - llvm::to_vector(llvm::map_range(offsets, toOpFoldResult)), - llvm::to_vector(llvm::map_range(sizes, toOpFoldResult)), - llvm::to_vector(llvm::map_range(strides, toOpFoldResult))); + llvm::map_to_vector(offsets, toOpFoldResult), + llvm::map_to_vector(sizes, toOpFoldResult), + llvm::map_to_vector(strides, toOpFoldResult)); offsets[axis] = rewriter.createOrFold(loc, offsets[axis], sizes[axis]); } Index: mlir/lib/Dialect/Affine/IR/AffineOps.cpp =================================================================== --- mlir/lib/Dialect/Affine/IR/AffineOps.cpp +++ 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 @@ -1244,11 +1245,11 @@ SmallVector mlir::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::makeComposedAffineMin(OpBuilder &b, Location loc, AffineMap map, @@ -4435,13 +4436,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); }