[PATCH] D77964: [mlir][Linalg] NFC : Fix check for scalar case handling in LinalgToLoops

Mahesh Ravishankar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 11 23:25:43 PDT 2020


mravishankar created this revision.
Herald added subscribers: llvm-commits, frgossen, grosul1, Joonsoo, liufengdb, lucyrfox, mgester, arpith-jacob, nicolasvasilache, antiagainst, shauheen, burmako, jpienaar, rriddle, mehdi_amini.
Herald added a reviewer: nicolasvasilache.
Herald added a project: LLVM.
mravishankar updated this revision to Diff 256830.
mravishankar added a comment.
mravishankar added a child revision: D77965: [mlir][Linalg] NFC: Add utility function to tile, fuse and set marker to use loop.parallel..

Rebase


The invertPermutation method does not return a nullptr anymore, but
rather returns an empty map for the scalar case. Update the check in
LinalgToLoops to reflect this.
Also add test case for generating scalar code.

Depends On D77678 <https://reviews.llvm.org/D77678>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77964

Files:
  mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp
  mlir/test/Dialect/Linalg/loops.mlir


Index: mlir/test/Dialect/Linalg/loops.mlir
===================================================================
--- mlir/test/Dialect/Linalg/loops.mlir
+++ mlir/test/Dialect/Linalg/loops.mlir
@@ -913,3 +913,46 @@
 //       CHECKPARALLEL: %[[CONST:.*]] = constant 1.000000e+00 : f32
 //       CHECKPARALLEL: loop.parallel (%[[i:.*]])
 //       CHECKPARALLEL:   store %[[CONST]], %[[ARG0]]
+
+#scalar_access = [
+  affine_map<() -> ()>,
+  affine_map<() -> ()>,
+  affine_map<() -> ()>
+]
+#scalar_trait = {
+  args_in = 2,
+  args_out = 1,
+  iterator_types = [],
+  indexing_maps = #scalar_access,
+  library_call = "some_external_fn"
+}
+func @scalar_code(%arg0: memref<f32>, %arg1 : memref<f32>, %arg2 : memref<f32>)
+{
+  linalg.generic #scalar_trait %arg0, %arg1, %arg2 {
+  ^bb(%a : f32, %b : f32, %c : f32) :
+    %0 = addf %a, %b : f32
+    linalg.yield %0 : f32
+  } : memref<f32>, memref<f32>, memref<f32>
+  return
+}
+// CHECKLOOP-LABEL: @scalar_code
+//  CHECKLOOP-SAME: %[[ARG0]]: memref<f32>
+//  CHECKLOOP-SAME: %[[ARG1]]: memref<f32>
+//  CHECKLOOP-SAME: %[[ARG2]]: memref<f32>
+//   CHECKLOOP-NOT: loop.for
+//   CHECKLOOP-DAG: load %[[ARG0]][]
+//   CHECKLOOP-DAG: load %[[ARG1]][]
+//   CHECKLOOP-DAG: load %[[ARG2]][]
+//       CHECKLOOP: addf
+//       CHECKLOOP: store %{{.*}}, %[[ARG2]][]
+
+// CHECKPARALLEL-LABEL: @scalar_code
+//  CHECKPARALLEL-SAME: %[[ARG0]]: memref<f32>
+//  CHECKPARALLEL-SAME: %[[ARG1]]: memref<f32>
+//  CHECKPARALLEL-SAME: %[[ARG2]]: memref<f32>
+//   CHECKPARALLEL-NOT: loop.for
+//   CHECKPARALLEL-DAG: load %[[ARG0]][]
+//   CHECKPARALLEL-DAG: load %[[ARG1]][]
+//   CHECKPARALLEL-DAG: load %[[ARG2]][]
+//       CHECKPARALLEL: addf
+//       CHECKPARALLEL: store %{{.*}}, %[[ARG2]][]
Index: mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp
===================================================================
--- mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp
+++ mlir/lib/Dialect/Linalg/Transforms/LinalgToLoops.cpp
@@ -652,8 +652,8 @@
       linalgOp.indexing_maps().template getAsRange<AffineMapAttr>();
   auto maps =
       functional::map([](AffineMapAttr a) { return a.getValue(); }, mapsRange);
-  auto invertedMap = inversePermutation(concatAffineMaps(maps));
-  if (!invertedMap) {
+  AffineMap invertedMap = inversePermutation(concatAffineMaps(maps));
+  if (invertedMap.isEmpty()) {
     LinalgScopedEmitter<IndexedValueTy, ConcreteOpTy>::emitScalarImplementation(
         {}, linalgOp);
     return LinalgLoops();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77964.256830.patch
Type: text/x-patch
Size: 2490 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200412/af18e90d/attachment-0001.bin>


More information about the llvm-commits mailing list