Skip to content

Commit 8cad488

Browse files
committed
[MLIR] Update DataFlowFramework.h to be compatible with clang c++23
1 parent 5499901 commit 8cad488

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

mlir/include/mlir/Analysis/DataFlowFramework.h

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -354,29 +354,7 @@ class DataFlowSolver {
354354

355355
/// Erase any analysis state associated with the given lattice anchor.
356356
template <typename AnchorT>
357-
void eraseState(AnchorT anchor) {
358-
LatticeAnchor latticeAnchor(anchor);
359-
360-
// Update equivalentAnchorMap.
361-
for (auto &&[TypeId, eqClass] : equivalentAnchorMap) {
362-
if (!eqClass.contains(latticeAnchor)) {
363-
continue;
364-
}
365-
llvm::EquivalenceClasses<LatticeAnchor>::member_iterator leaderIt =
366-
eqClass.findLeader(latticeAnchor);
367-
368-
// Update analysis states with new leader if needed.
369-
if (*leaderIt == latticeAnchor && ++leaderIt != eqClass.member_end()) {
370-
analysisStates[*leaderIt][TypeId] =
371-
std::move(analysisStates[latticeAnchor][TypeId]);
372-
}
373-
374-
eqClass.erase(latticeAnchor);
375-
}
376-
377-
// Update analysis states.
378-
analysisStates.erase(latticeAnchor);
379-
}
357+
void eraseState(AnchorT anchor);
380358

381359
/// Erase all analysis states.
382360
void eraseAllStates() {
@@ -560,6 +538,36 @@ class AnalysisState {
560538
friend class DataFlowSolver;
561539
};
562540

541+
//===----------------------------------------------------------------------===//
542+
// DataFlowSolver definition
543+
//===----------------------------------------------------------------------===//
544+
// This is method is defined outside `DataFlowSolver` and after `AnalysisState`
545+
// to prevent issues around `AnalysisState` being used before it is defined.
546+
template <typename AnchorT>
547+
void DataFlowSolver::eraseState(AnchorT anchor) {
548+
LatticeAnchor latticeAnchor(anchor);
549+
550+
// Update equivalentAnchorMap.
551+
for (auto &&[TypeId, eqClass] : equivalentAnchorMap) {
552+
if (!eqClass.contains(latticeAnchor)) {
553+
continue;
554+
}
555+
llvm::EquivalenceClasses<LatticeAnchor>::member_iterator leaderIt =
556+
eqClass.findLeader(latticeAnchor);
557+
558+
// Update analysis states with new leader if needed.
559+
if (*leaderIt == latticeAnchor && ++leaderIt != eqClass.member_end()) {
560+
analysisStates[*leaderIt][TypeId] =
561+
std::move(analysisStates[latticeAnchor][TypeId]);
562+
}
563+
564+
eqClass.erase(latticeAnchor);
565+
}
566+
567+
// Update analysis states.
568+
analysisStates.erase(latticeAnchor);
569+
}
570+
563571
//===----------------------------------------------------------------------===//
564572
// DataFlowAnalysis
565573
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)