[Mlir-commits] [mlir] [MLIR] getBackwardSlice: don't bail on ops that are IsolatedFromAbove (PR #158135)
Ian Wood
llvmlistbot at llvm.org
Fri Sep 12 13:22:05 PDT 2025
https://github.com/IanWood1 updated https://github.com/llvm/llvm-project/pull/158135
>From aa4b2a1fb06f80585ccfe0fcbbc4ca1095e5da36 Mon Sep 17 00:00:00 2001
From: Ian Wood <ianwood at u.northwestern.edu>
Date: Thu, 11 Sep 2025 18:58:36 +0000
Subject: [PATCH 1/2] [MLIR] getBackwardSlice: don't bail on ops that are
IsolatedFromAbove
Signed-off-by: Ian Wood <ianwood at u.northwestern.edu>
---
mlir/lib/Analysis/SliceAnalysis.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/lib/Analysis/SliceAnalysis.cpp b/mlir/lib/Analysis/SliceAnalysis.cpp
index 7037fa644c7be..d0e10626589ce 100644
--- a/mlir/lib/Analysis/SliceAnalysis.cpp
+++ b/mlir/lib/Analysis/SliceAnalysis.cpp
@@ -109,7 +109,7 @@ static LogicalResult getBackwardSliceImpl(Operation *op,
DenseSet<Operation *> &visited,
SetVector<Operation *> *backwardSlice,
const BackwardSliceOptions &options) {
- if (!op || op->hasTrait<OpTrait::IsIsolatedFromAbove>())
+ if (!op)
return success();
// Evaluate whether we should keep this def.
>From fb257b221e57d208103a62b98f30a277ced4450f Mon Sep 17 00:00:00 2001
From: Ian Wood <ianwood at u.northwestern.edu>
Date: Fri, 12 Sep 2025 20:21:54 +0000
Subject: [PATCH 2/2] Add test
Signed-off-by: Ian Wood <ianwood at u.northwestern.edu>
---
mlir/test/Transforms/move-operation-deps.mlir | 28 +++++++++++++++++++
mlir/test/lib/Dialect/Test/TestOps.td | 3 +-
.../Transforms/TestMakeIsolatedFromAbove.cpp | 4 +--
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/mlir/test/Transforms/move-operation-deps.mlir b/mlir/test/Transforms/move-operation-deps.mlir
index aa7b5dc2a240a..75d8386d520ee 100644
--- a/mlir/test/Transforms/move-operation-deps.mlir
+++ b/mlir/test/Transforms/move-operation-deps.mlir
@@ -460,3 +460,31 @@ module attributes {transform.with_named_sequence} {
transform.yield
}
}
+
+// -----
+
+func.func @move_isolated_from_above() -> () {
+ %1 = "before"() : () -> (f32)
+ %2 = "moved0"() : () -> (f32)
+ %3 = test.isolated_one_region_op %2 {} : f32 -> f32
+ %4 = "moved1"(%3) : (f32) -> (f32)
+ return
+}
+// CHECK-LABEL: func @move_isolated_from_above()
+// CHECK: %[[MOVED0:.+]] = "moved0"
+// CHECK: %[[ISOLATED:.+]] = test.isolated_one_region_op %[[MOVED0]]
+// CHECK: %[[MOVED1:.+]] = "moved1"(%[[ISOLATED]])
+// CHECK: %[[BEFORE:.+]] = "before"
+
+module attributes {transform.with_named_sequence} {
+ transform.named_sequence @__transform_main(%arg0 : !transform.any_op {transform.readonly}) {
+ %op1 = transform.structured.match ops{["before"]} in %arg0
+ : (!transform.any_op) -> !transform.any_op
+ %op2 = transform.structured.match ops{["moved1"]} in %arg0
+ : (!transform.any_op) -> !transform.any_op
+ %v1 = transform.get_result %op2[0] : (!transform.any_op) -> !transform.any_value
+ transform.test.move_value_defns %v1 before %op1
+ : (!transform.any_value), !transform.any_op
+ transform.yield
+ }
+}
diff --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td
index 5564264ed8b0b..d9bbb3261febc 100644
--- a/mlir/test/lib/Dialect/Test/TestOps.td
+++ b/mlir/test/lib/Dialect/Test/TestOps.td
@@ -552,9 +552,10 @@ def OneRegionWithOperandsOp : TEST_Op<"one_region_with_operands_op", []> {
def IsolatedOneRegionOp : TEST_Op<"isolated_one_region_op", [IsolatedFromAbove]> {
let arguments = (ins Variadic<AnyType>:$operands);
+ let results = (outs Variadic<AnyType>:$results);
let regions = (region AnyRegion:$my_region);
let assemblyFormat = [{
- attr-dict-with-keyword $operands $my_region `:` type($operands)
+ attr-dict-with-keyword $operands $my_region `:` type($operands) `->` type($results)
}];
}
diff --git a/mlir/test/lib/Transforms/TestMakeIsolatedFromAbove.cpp b/mlir/test/lib/Transforms/TestMakeIsolatedFromAbove.cpp
index c1fb70605ab46..f7bde79274e91 100644
--- a/mlir/test/lib/Transforms/TestMakeIsolatedFromAbove.cpp
+++ b/mlir/test/lib/Transforms/TestMakeIsolatedFromAbove.cpp
@@ -27,8 +27,8 @@ makeIsolatedFromAboveImpl(RewriterBase &rewriter,
makeRegionIsolatedFromAbove(rewriter, region, callBack);
SmallVector<Value> operands = regionOp.getOperands();
operands.append(capturedValues);
- auto isolatedRegionOp =
- test::IsolatedOneRegionOp::create(rewriter, regionOp.getLoc(), operands);
+ auto isolatedRegionOp = test::IsolatedOneRegionOp::create(
+ rewriter, regionOp.getLoc(), TypeRange(), operands);
rewriter.inlineRegionBefore(region, isolatedRegionOp.getRegion(),
isolatedRegionOp.getRegion().begin());
rewriter.eraseOp(regionOp);
More information about the Mlir-commits
mailing list