[Mlir-commits] [mlir] [mlir] Add erase sub-region dominate tree logic in DominanceInfoBase::invalidate method (PR #192469)
lonely eagle
llvmlistbot at llvm.org
Thu Apr 16 18:49:01 PDT 2026
https://github.com/linuxlonelyeagle updated https://github.com/llvm/llvm-project/pull/192469
>From c0e7e202afecc8bac390ec88b7dc0791bdda3acc Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Thu, 16 Apr 2026 14:39:15 +0000
Subject: [PATCH 1/3] add erase sub region dominate tree logic in
DominanceInfoBase::invalidate.
---
mlir/lib/IR/Dominance.cpp | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/mlir/lib/IR/Dominance.cpp b/mlir/lib/IR/Dominance.cpp
index 0e53b431b5d31..f9782a86f07cd 100644
--- a/mlir/lib/IR/Dominance.cpp
+++ b/mlir/lib/IR/Dominance.cpp
@@ -42,10 +42,17 @@ void DominanceInfoBase<IsPostDom>::invalidate() {
template <bool IsPostDom>
void DominanceInfoBase<IsPostDom>::invalidate(Region *region) {
- auto it = dominanceInfos.find(region);
- if (it != dominanceInfos.end()) {
- delete it->second.getPointer();
- dominanceInfos.erase(it);
+ SmallVector<Region*> regions = {region};
+ region->walk([&](Operation *op) {
+ for (Region &r : op->getRegions())
+ regions.push_back(&r);
+ });
+ for (Region* region : regions) {
+ auto it = dominanceInfos.find(region);
+ if (it != dominanceInfos.end()) {
+ delete it->second.getPointer();
+ dominanceInfos.erase(it);
+ }
}
}
>From 4e6cdb1b84d9a3faffd46c353e00d27fa95e6ad9 Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Thu, 16 Apr 2026 14:47:10 +0000
Subject: [PATCH 2/3] fix clang-format.
---
mlir/lib/IR/Dominance.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/mlir/lib/IR/Dominance.cpp b/mlir/lib/IR/Dominance.cpp
index f9782a86f07cd..2ef0c35a13536 100644
--- a/mlir/lib/IR/Dominance.cpp
+++ b/mlir/lib/IR/Dominance.cpp
@@ -42,12 +42,12 @@ void DominanceInfoBase<IsPostDom>::invalidate() {
template <bool IsPostDom>
void DominanceInfoBase<IsPostDom>::invalidate(Region *region) {
- SmallVector<Region*> regions = {region};
+ SmallVector<Region *> regions = {region};
region->walk([&](Operation *op) {
- for (Region &r : op->getRegions())
+ for (Region &r : op->getRegions())
regions.push_back(&r);
});
- for (Region* region : regions) {
+ for (Region *region : regions) {
auto it = dominanceInfos.find(region);
if (it != dominanceInfos.end()) {
delete it->second.getPointer();
>From 7a770565c430d5f4ace4e026d9b61a63969e1e72 Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Fri, 17 Apr 2026 01:48:44 +0000
Subject: [PATCH 3/3] add erase sub region dominate tree logic in
DominanceInfoBase::invalidate.
---
mlir/lib/IR/Dominance.cpp | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/mlir/lib/IR/Dominance.cpp b/mlir/lib/IR/Dominance.cpp
index 2ef0c35a13536..f030e6e61b2fd 100644
--- a/mlir/lib/IR/Dominance.cpp
+++ b/mlir/lib/IR/Dominance.cpp
@@ -42,17 +42,23 @@ void DominanceInfoBase<IsPostDom>::invalidate() {
template <bool IsPostDom>
void DominanceInfoBase<IsPostDom>::invalidate(Region *region) {
- SmallVector<Region *> regions = {region};
- region->walk([&](Operation *op) {
- for (Region &r : op->getRegions())
- regions.push_back(&r);
- });
- for (Region *region : regions) {
- auto it = dominanceInfos.find(region);
- if (it != dominanceInfos.end()) {
- delete it->second.getPointer();
- dominanceInfos.erase(it);
- }
+ auto it = dominanceInfos.find(region);
+ if (it != dominanceInfos.end()) {
+ delete it->second.getPointer();
+ dominanceInfos.erase(it);
+ }
+
+ // Invalidate dominator trees of nested sub-regions.
+ if (region) {
+ region->walk([&](Operation *op) {
+ for (Region ®ion : op->getRegions()) {
+ auto it = dominanceInfos.find(®ion);
+ if (it != dominanceInfos.end()) {
+ delete it->second.getPointer();
+ dominanceInfos.erase(it);
+ }
+ }
+ });
}
}
More information about the Mlir-commits
mailing list