[Mlir-commits] [mlir] [NFC][mlir] Update DataFlowFramework.h to be compatible with clang c++23 (PR #152040)
Philip Lassen
llvmlistbot at llvm.org
Mon Aug 4 15:47:01 PDT 2025
https://github.com/philass updated https://github.com/llvm/llvm-project/pull/152040
>From efc0f1ff19268c2fbe55fe5f199c8554bee24796 Mon Sep 17 00:00:00 2001
From: Philip Lassen <plassen at groq.com>
Date: Mon, 4 Aug 2025 14:53:37 -0700
Subject: [PATCH] [MLIR] Update DataFlowFramework.h to be compatible with clang
c++23
---
.../include/mlir/Analysis/DataFlowFramework.h | 54 +++++++++++--------
1 file changed, 31 insertions(+), 23 deletions(-)
diff --git a/mlir/include/mlir/Analysis/DataFlowFramework.h b/mlir/include/mlir/Analysis/DataFlowFramework.h
index 49862927caff2..e364570c8b531 100644
--- a/mlir/include/mlir/Analysis/DataFlowFramework.h
+++ b/mlir/include/mlir/Analysis/DataFlowFramework.h
@@ -354,29 +354,7 @@ class DataFlowSolver {
/// Erase any analysis state associated with the given lattice anchor.
template <typename AnchorT>
- void eraseState(AnchorT anchor) {
- LatticeAnchor latticeAnchor(anchor);
-
- // Update equivalentAnchorMap.
- for (auto &&[TypeId, eqClass] : equivalentAnchorMap) {
- if (!eqClass.contains(latticeAnchor)) {
- continue;
- }
- llvm::EquivalenceClasses<LatticeAnchor>::member_iterator leaderIt =
- eqClass.findLeader(latticeAnchor);
-
- // Update analysis states with new leader if needed.
- if (*leaderIt == latticeAnchor && ++leaderIt != eqClass.member_end()) {
- analysisStates[*leaderIt][TypeId] =
- std::move(analysisStates[latticeAnchor][TypeId]);
- }
-
- eqClass.erase(latticeAnchor);
- }
-
- // Update analysis states.
- analysisStates.erase(latticeAnchor);
- }
+ void eraseState(AnchorT anchor);
/// Erase all analysis states.
void eraseAllStates() {
@@ -560,6 +538,36 @@ class AnalysisState {
friend class DataFlowSolver;
};
+//===----------------------------------------------------------------------===//
+// DataFlowSolver definition
+//===----------------------------------------------------------------------===//
+// This method is defined outside `DataFlowSolver` and after `AnalysisState`
+// to prevent issues around `AnalysisState` being used before it is defined.
+template <typename AnchorT>
+void DataFlowSolver::eraseState(AnchorT anchor) {
+ LatticeAnchor latticeAnchor(anchor);
+
+ // Update equivalentAnchorMap.
+ for (auto &&[TypeId, eqClass] : equivalentAnchorMap) {
+ if (!eqClass.contains(latticeAnchor)) {
+ continue;
+ }
+ llvm::EquivalenceClasses<LatticeAnchor>::member_iterator leaderIt =
+ eqClass.findLeader(latticeAnchor);
+
+ // Update analysis states with new leader if needed.
+ if (*leaderIt == latticeAnchor && ++leaderIt != eqClass.member_end()) {
+ analysisStates[*leaderIt][TypeId] =
+ std::move(analysisStates[latticeAnchor][TypeId]);
+ }
+
+ eqClass.erase(latticeAnchor);
+ }
+
+ // Update analysis states.
+ analysisStates.erase(latticeAnchor);
+}
+
//===----------------------------------------------------------------------===//
// DataFlowAnalysis
//===----------------------------------------------------------------------===//
More information about the Mlir-commits
mailing list