[Mlir-commits] [mlir] 4732b0c - [mlir][dataflow] Remove early exit in dead code analysis for zero-operand returns (#68151)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Oct 5 08:09:49 PDT 2023
Author: Jacob Mai Peng
Date: 2023-10-05T17:09:44+02:00
New Revision: 4732b0cbc0ab123479084184305fb2873e221780
URL: https://github.com/llvm/llvm-project/commit/4732b0cbc0ab123479084184305fb2873e221780
DIFF: https://github.com/llvm/llvm-project/commit/4732b0cbc0ab123479084184305fb2873e221780.diff
LOG: [mlir][dataflow] Remove early exit in dead code analysis for zero-operand returns (#68151)
The PredecessorState in dead code analysis does not register
zero-operand returns as predecessors of their corresponding call ops.
This causes bugs with dense dataflow analyses that use dead code
analysis to query for the predecessors of CallOpInterfaces.
This was reasonable for sparse analyses, but isn't for dense ones.
Added:
Modified:
mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp
mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir
mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp b/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp
index d423d37b9770c69..bbe139fd4fb69fe 100644
--- a/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp
+++ b/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp
@@ -407,10 +407,6 @@ void DeadCodeAnalysis::visitRegionTerminator(
void DeadCodeAnalysis::visitCallableTerminator(Operation *op,
CallableOpInterface callable) {
- // If there are no exiting values, we have nothing to do.
- if (op->getNumOperands() == 0)
- return;
-
// Add as predecessors to all callsites this return op.
auto *callsites = getOrCreateFor<PredecessorState>(op, callable);
bool canResolve = op->hasTrait<OpTrait::ReturnLike>();
diff --git a/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir b/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir
index 020c8b2a0e84dc7..b1af670440c2d97 100644
--- a/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir
+++ b/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir
@@ -118,6 +118,18 @@ func.func @test_callgraph(%cond: i1, %arg0: i32) -> i32 {
return %2 : i32
}
+func.func private @bax(%arg0: i32) {
+ return {void_return}
+}
+
+func.func @test_callgraph_void_return(%arg0: i32) -> i32 {
+ // CHECK: call_void_return:
+ // CHECK: op_preds: (all) predecessors:
+ // CHECK: func.return {void_return}
+ func.call @bax(%arg0) {tag = "call_void_return"}: (i32) -> ()
+ return %arg0 : i32
+}
+
// CHECK: test_unknown_branch:
// CHECK: region #0
// CHECK: ^bb0 = live
diff --git a/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir b/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
index 4a243571c231a19..709d787bb306bef 100644
--- a/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
+++ b/mlir/test/Analysis/DataFlow/test-last-modified-callgraph.mlir
@@ -68,6 +68,23 @@ func.func @test_multiple_return_sites(%cond: i1, %a: i32, %ptr: memref<i32>) ->
// -----
+// CHECK-LABEL: test_tag: after_call
+// CHECK: operand #0
+// CHECK-NEXT: - write0
+func.func private @void_return(%ptr: memref<i32>) {
+ return
+}
+
+func.func @test_call_void_return() {
+ %ptr = memref.alloc() : memref<i32>
+ %c0 = arith.constant 0 : i32
+ memref.store %c0, %ptr[] {tag_name = "write0"} : memref<i32>
+ func.call @void_return(%ptr) : (memref<i32>) -> ()
+ memref.load %ptr[] {tag = "after_call"} : memref<i32>
+ return
+}
+
+// -----
func.func private @callee(%arg0: memref<f32>) -> memref<f32> {
%2 = arith.constant 2.0 : f32
More information about the Mlir-commits
mailing list