[Mlir-commits] [mlir] [MLIR][Linalg] Generic to category specialization for unary elementwise ops (PR #187217)
Adam Siemieniuk
llvmlistbot at llvm.org
Wed Mar 18 03:21:44 PDT 2026
================
@@ -67,6 +76,77 @@ static bool areBinOpsSwapped(GenericOp genericOp) {
return swapped;
}
+// Attempt to specialize linalg.generic to named elementwise ops or
+// linalg.elementwise.
+//
+// Example:
+// %0 = linalg.generic {
+// indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>,
+// affine_map<(d0, d1) -> (d0, d1)>],
+// iterator_types = ["parallel", "parallel"]
+// } ins(%In : tensor<?x?xf32>) outs(%Out : tensor<?x?xf32>) {
+// ^bb0(%in: f32, %out: f32):
+// %1 = math.exp %in : f32
+// linalg.yield %1 : f32
+// } -> tensor<?x?xf32>
+//
+// is specialized to either
+// linalg.exp ins(...) outs(...) -> ...
+// or
+// linalg.elementwise kind=#linalg.elementwise_kind<exp> ...
+//
+// Only the category op can carry non-identity indexing maps; these are
+// transferred verbatim from the `genericOp`.
+static FailureOr<LinalgOp>
+specializeLinalgUnaryElementwise(RewriterBase &rewriter, GenericOp genericOp,
+ bool emitCategoryOp) {
+ bool hasNonIdentityMaps =
+ !llvm::all_of(genericOp.getIndexingMapsArray(),
+ [](AffineMap map) { return map.isIdentity(); });
+
+ // Early exit: Named ops cannot carry user-defined maps.
+ if (hasNonIdentityMaps && !emitCategoryOp) {
+ return failure();
----------------
adam-smnk wrote:
nit: let's add more context with `notifyMatchFailure`
https://github.com/llvm/llvm-project/pull/187217
More information about the Mlir-commits
mailing list