[Mlir-commits] [mlir] 84be325 - [mlir][Linalg] Allow isaBroadcastOpInterface to accept LinalgOp (#182806)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Feb 23 00:44:14 PST 2026
Author: Abhishek Varma
Date: 2026-02-23T14:14:10+05:30
New Revision: 84be3259dd470dbd18a5b57847f499aff59c719b
URL: https://github.com/llvm/llvm-project/commit/84be3259dd470dbd18a5b57847f499aff59c719b
DIFF: https://github.com/llvm/llvm-project/commit/84be3259dd470dbd18a5b57847f499aff59c719b.diff
LOG: [mlir][Linalg] Allow isaBroadcastOpInterface to accept LinalgOp (#182806)
Allow isaBroadcastOpInterface to accept LinalgOp so that both the named
linalg.broadcast op and broadcast-like linalg.generic are handled by a
single API instead of special-casing check for named vs generic op in
downstream projects.
No test is being added for this change because callers that pass
GenericOp (e.g. Specialize.cpp) continue to work since GenericOp is a
LinalgOp.
Signed-off-by: Abhishek Varma <abhvarma at amd.com>
Added:
Modified:
mlir/include/mlir/Dialect/Linalg/IR/LinalgInterfaces.h
mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgInterfaces.h b/mlir/include/mlir/Dialect/Linalg/IR/LinalgInterfaces.h
index 27fcad203c7aa..e068c8a5002fc 100644
--- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgInterfaces.h
+++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgInterfaces.h
@@ -125,10 +125,9 @@ bool isaConvolutionOpInterface(LinalgOp linalgOp,
/// Checks whether `linalgOp` is semantically equivalent to a `linalg.copyOp`.
bool isaCopyOpInterface(LinalgOp linalgOp);
-/// Checks whether `genericOp` is semantically equivalent to a
-/// `linalg.broadcast`. Returns broadcast dimensions if true.
-std::optional<SmallVector<int64_t>>
-isaBroadcastOpInterface(GenericOp genericOp);
+/// Checks whether `linalgOp` is semantically equivalent to a broadcast
+/// operation. Returns broadcast dimensions if true.
+std::optional<SmallVector<int64_t>> isaBroadcastOpInterface(LinalgOp linalgOp);
/// Checks whether `genericOp` is semantically equivalent to a
/// `linalg.transpose`. Returns permuted dimensions if true.
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
index c1501ad2bdd6d..c27749c36887d 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
@@ -138,7 +138,15 @@ std::optional<Value> linalg::isaFillOpInterface(GenericOp op) {
// BroadcastOpInterface implementation
//===----------------------------------------------------------------------===//
std::optional<SmallVector<int64_t>>
-linalg::isaBroadcastOpInterface(GenericOp op) {
+linalg::isaBroadcastOpInterface(LinalgOp linalgOp) {
+ if (auto broadcastOp = dyn_cast<BroadcastOp>(linalgOp.getOperation()))
+ return SmallVector<int64_t>(broadcastOp.getDimensions().begin(),
+ broadcastOp.getDimensions().end());
+
+ auto op = dyn_cast<GenericOp>(linalgOp.getOperation());
+ if (!op)
+ return std::nullopt;
+
// Structural.
if (!op.isAllParallelLoops() || !op.isSingleInputOutput() ||
!op.isSingleYieldOp())
More information about the Mlir-commits
mailing list