[PATCH] D75146: [mlir][Linalg] NFC - Refactor LinalgStructuredOps towards "named" Linalg ops

Nicolas Vasilache via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 25 15:54:18 PST 2020


nicolasvasilache marked 4 inline comments as done.
nicolasvasilache added inline comments.


================
Comment at: mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:914
 
-static SmallVector<AffineExpr, 4> concat(ArrayRef<AffineExpr> a,
-                                         ArrayRef<AffineExpr> b) {
+SmallVector<AffineExpr, 4> mlir::linalg::concat(ArrayRef<AffineExpr> a,
+                                                ArrayRef<AffineExpr> b) {
----------------
rriddle wrote:
> nicolasvasilache wrote:
> > rriddle wrote:
> > > Was there a problem with using llvm::concat?
> > This
> > ```
> > SmallVector<AffineExpr, 4> mlir::linalg::concat(ArrayRef<AffineExpr> a,
> >                                                 ArrayRef<AffineExpr> b) {
> >   auto rangeA = llvm::make_range(a.begin(), a.end());
> >   auto rangeB = llvm::make_range(b.begin(), b.end());
> >   auto concatRanges = llvm::concat<AffineExpr>(rangeA, rangeB);
> >   return llvm::to_vector<4>(concatRanges);
> > }
> > ```
> > 
> > fails with
> > ```
> > ERROR: third_party/llvm/llvm-project/llvm/include/llvm/ADT/STLExtras.h:855:12 cannot initialize return object of type 'mlir::AffineExpr *' with an rvalue of type 'const mlir::AffineExpr *'
> >     return &*Begin;
> >            ^~~~~~~
> > third_party/llvm/llvm-project/llvm/include/llvm/ADT/STLExtras.h:865:27 in instantiation of function template specialization 'llvm::concat_iterator<mlir::AffineExpr, const mlir::AffineExpr *, const mlir::AffineExpr *>::getHelper<1>' requested here
> >         &concat_iterator::getHelper<Ns>...};
> >                           ^
> > third_party/llvm/llvm-project/llvm/include/llvm/ADT/STLExtras.h:892:12 in instantiation of function template specialization 'llvm::concat_iterator<mlir::AffineExpr, const mlir::AffineExpr *, const mlir::AffineExpr *>::get<0, 1>' requested here
> >     return get(std::index_sequence_for<IterTs...>());
> >            ^
> > third_party/crosstool/v18/stable/toolchain/include/c++/v1/memory:3162:75 in instantiation of member function 'llvm::concat_iterator<mlir::AffineExpr, const mlir::AffineExpr *, const mlir::AffineExpr *>::operator*' requested here
> >             ::new (static_cast<void*>(_VSTD::addressof(*__r))) value_type(*__f);
> >                                                                           ^
> > third_party/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:279:10 in instantiation of function template specialization 'std::__u::uninitialized_copy<llvm::concat_iterator<mlir::AffineExpr, const mlir::AffineExpr *, const mlir::AffineExpr *>, mlir::AffineExpr *>' requested here
> >     std::uninitialized_copy(I, E, Dest);
> >          ^
> > third_party/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:392:11 in instantiation of function template specialization 'llvm::SmallVectorTemplateBase<mlir::AffineExpr, true>::uninitialized_copy<llvm::concat_iterator<mlir::AffineExpr, const mlir::AffineExpr *, const mlir::AffineExpr *>, mlir::AffineExpr *>' requested here
> >     this->uninitialized_copy(in_start, in_end, this->end());
> >           ^
> > third_party/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:856:11 in instantiation of function template specialization 'llvm::SmallVectorImpl<mlir::AffineExpr>::append<llvm::concat_iterator<mlir::AffineExpr, const mlir::AffineExpr *, const mlir::AffineExpr *>, void>' requested here
> >     this->append(S, E);
> >           ^
> > third_party/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:918:10 in instantiation of function template specialization 'llvm::SmallVector<mlir::AffineExpr, 4>::SmallVector<llvm::concat_iterator<mlir::AffineExpr, const mlir::AffineExpr *, const mlir::AffineExpr *>, void>' requested here
> >   return {std::begin(Range), std::end(Range)};
> >          ^
> > third_party/llvm/llvm-project/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:919:16 in instantiation of function template specialization 'llvm::to_vector<4, llvm::detail::concat_range<mlir::AffineExpr, llvm::iterator_range<const mlir::AffineExpr *> &, llvm::iterator_range<const mlir::AffineExpr *> &> &>' requested here
> >   return llvm::to_vector<4>(concatRanges);
> > ```
> > 
> > What am I missing?
> I think you would need to do `llvm::concat<const AffineExpr>(...)`, given that ArrayRef holds values of `const T`.
well .. of course, thanks!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75146/new/

https://reviews.llvm.org/D75146





More information about the llvm-commits mailing list