[Mlir-commits] [mlir] 2d723d4 - [mlir] Avoid the use of auto in templates to fix MSVC build
River Riddle
llvmlistbot at llvm.org
Mon Mar 16 13:59:38 PDT 2020
Author: River Riddle
Date: 2020-03-16T13:55:16-07:00
New Revision: 2d723d4ad51c1e369810b543e1ac9ac1dfe0bfc8
URL: https://github.com/llvm/llvm-project/commit/2d723d4ad51c1e369810b543e1ac9ac1dfe0bfc8
DIFF: https://github.com/llvm/llvm-project/commit/2d723d4ad51c1e369810b543e1ac9ac1dfe0bfc8.diff
LOG: [mlir] Avoid the use of auto in templates to fix MSVC build
MSVC is unable to deduce template types when the type involves auto.
Added:
Modified:
mlir/tools/mlir-tblgen/DialectGen.cpp
Removed:
################################################################################
diff --git a/mlir/tools/mlir-tblgen/DialectGen.cpp b/mlir/tools/mlir-tblgen/DialectGen.cpp
index c0009d6e1231..695ce3de9b93 100644
--- a/mlir/tools/mlir-tblgen/DialectGen.cpp
+++ b/mlir/tools/mlir-tblgen/DialectGen.cpp
@@ -36,14 +36,23 @@ static llvm::cl::opt<std::string>
selectedDialect("dialect", llvm::cl::desc("The dialect to gen for"),
llvm::cl::cat(dialectGenCat), llvm::cl::CommaSeparated);
+/// Utility iterator used for filtering records for a specific dialect.
+namespace {
+using DialectFilterIterator =
+ llvm::filter_iterator<ArrayRef<llvm::Record *>::iterator,
+ std::function<bool(const llvm::Record *)>>;
+} // end anonymous namespace
+
/// Given a set of records for a T, filter the ones that correspond to
/// the given dialect.
template <typename T>
-static auto filterForDialect(ArrayRef<llvm::Record *> records,
- Dialect &dialect) {
- return llvm::make_filter_range(records, [&](const llvm::Record *record) {
+static iterator_range<DialectFilterIterator>
+filterForDialect(ArrayRef<llvm::Record *> records, Dialect &dialect) {
+ auto filterFn = [&](const llvm::Record *record) {
return T(record).getDialect() == dialect;
- });
+ };
+ return {DialectFilterIterator(records.begin(), records.end(), filterFn),
+ DialectFilterIterator(records.end(), records.end(), filterFn)};
}
//===----------------------------------------------------------------------===//
@@ -93,12 +102,10 @@ static const char *const constantMaterializerDecl = R"(
)";
/// Generate the declaration for the given dialect class.
-static void emitDialectDecl(
- Dialect &dialect,
- FunctionTraits<decltype(&filterForDialect<Attribute>)>::result_t
- dialectAttrs,
- FunctionTraits<decltype(&filterForDialect<Type>)>::result_t dialectTypes,
- raw_ostream &os) {
+static void emitDialectDecl(Dialect &dialect,
+ iterator_range<DialectFilterIterator> dialectAttrs,
+ iterator_range<DialectFilterIterator> dialectTypes,
+ raw_ostream &os) {
// Emit the start of the decl.
std::string cppName = dialect.getCppClassName();
os << llvm::formatv(dialectDeclBeginStr, cppName, dialect.getName());
More information about the Mlir-commits
mailing list