[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