[Mlir-commits] [mlir] [mlir][Vector] Reject invalid inline yields (PR #206218)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Jun 26 21:46:47 PDT 2026
https://github.com/mygitljf updated https://github.com/llvm/llvm-project/pull/206218
>From 4064a658a86f66314b5b6dad417a13713dcea9ef Mon Sep 17 00:00:00 2001
From: mygitljf <2410316423 at qq.com>
Date: Sat, 27 Jun 2026 12:19:34 +0000
Subject: [PATCH 1/2] [mlir][Vector] Reject invalid inline yields
---
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 5 ++---
mlir/test/Dialect/LLVMIR/inlining.mlir | 15 +++++++++++++++
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 67c31730f4b65..443e41187efac 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -464,9 +464,8 @@ namespace {
struct VectorInlinerInterface : public DialectInlinerInterface {
using DialectInlinerInterface::DialectInlinerInterface;
- /// All vector dialect ops can be inlined.
- bool isLegalToInline(Operation *, Region *, bool, IRMapping &) const final {
- return true;
+ bool isLegalToInline(Operation *op, Region *, bool, IRMapping &) const final {
+ return !isa<vector::YieldOp>(op) || isa<vector::MaskOp>(op->getParentOp());
}
};
} // namespace
diff --git a/mlir/test/Dialect/LLVMIR/inlining.mlir b/mlir/test/Dialect/LLVMIR/inlining.mlir
index 85cae992f01de..a41f66a17be12 100644
--- a/mlir/test/Dialect/LLVMIR/inlining.mlir
+++ b/mlir/test/Dialect/LLVMIR/inlining.mlir
@@ -794,3 +794,18 @@ llvm.func @caller_cf_br_terminator(%arg0 : i64) -> i64 {
%0 = llvm.call @callee_cf_br_terminator(%arg0) : (i64) -> i64
llvm.return %0 : i64
}
+
+// -----
+// Skip callees with non-LLVM function exits.
+
+llvm.func @callee_vector_yield_terminator(%arg0 : vector<8xf32>) {
+ %0 = math.atanh %arg0 : vector<8xf32>
+ vector.yield %0 : vector<8xf32>
+}
+
+// CHECK-LABEL: @caller_vector_yield_terminator
+llvm.func @caller_vector_yield_terminator(%arg0 : vector<8xf32>) {
+ // CHECK: llvm.call @callee_vector_yield_terminator
+ llvm.call @callee_vector_yield_terminator(%arg0) : (vector<8xf32>) -> ()
+ llvm.return
+}
>From 94e9f9f7a3f850d0a0786d65236f68586cbbc6b0 Mon Sep 17 00:00:00 2001
From: mygitljf <2410316423 at qq.com>
Date: Sat, 27 Jun 2026 12:48:58 +0000
Subject: [PATCH 2/2] [mlir][Vector] Clarify yield inlining
---
mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 443e41187efac..2eee0a6a23504 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -464,6 +464,8 @@ namespace {
struct VectorInlinerInterface : public DialectInlinerInterface {
using DialectInlinerInterface::DialectInlinerInterface;
+ /// All vector dialect ops can be inlined except `vector.yield`, whose
+ /// semantics are only defined by its parent operation.
bool isLegalToInline(Operation *op, Region *, bool, IRMapping &) const final {
return !isa<vector::YieldOp>(op) || isa<vector::MaskOp>(op->getParentOp());
}
More information about the Mlir-commits
mailing list