Skip to content

Commit 553058f

Browse files
authored
Revert "[DomTreeUpdater] Move critical edge splitting code to updater" (#119512)
Reverts #115111 Causes #119511
1 parent 839c821 commit 553058f

30 files changed

+374
-380
lines changed

llvm/include/llvm/Analysis/DomTreeUpdater.h

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@ class DomTreeUpdater
8181

8282
///@}
8383

84-
/// Debug method to help view the internal state of this class.
85-
LLVM_DUMP_METHOD void dump() const;
86-
8784
private:
8885
class CallBackOnDeletion final : public CallbackVH {
8986
public:
@@ -112,6 +109,9 @@ class DomTreeUpdater
112109

113110
/// Returns true if at least one BasicBlock is deleted.
114111
bool forceFlushDeletedBB();
112+
113+
/// Debug method to help view the internal state of this class.
114+
LLVM_DUMP_METHOD void dump() const;
115115
};
116116

117117
extern template class GenericDomTreeUpdater<DomTreeUpdater, DominatorTree,
@@ -120,13 +120,6 @@ extern template class GenericDomTreeUpdater<DomTreeUpdater, DominatorTree,
120120
extern template void
121121
GenericDomTreeUpdater<DomTreeUpdater, DominatorTree,
122122
PostDominatorTree>::recalculate(Function &F);
123-
124-
extern template void
125-
GenericDomTreeUpdater<DomTreeUpdater, DominatorTree, PostDominatorTree>::
126-
applyUpdatesImpl</*IsForward=*/true>();
127-
extern template void
128-
GenericDomTreeUpdater<DomTreeUpdater, DominatorTree, PostDominatorTree>::
129-
applyUpdatesImpl</*IsForward=*/false>();
130123
} // namespace llvm
131124

132125
#endif // LLVM_ANALYSIS_DOMTREEUPDATER_H

llvm/include/llvm/Analysis/GenericDomTreeUpdater.h

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class GenericDomTreeUpdater {
3030
public:
3131
enum class UpdateStrategy : unsigned char { Eager = 0, Lazy = 1 };
3232
using BasicBlockT = typename DomTreeT::NodeType;
33-
using UpdateT = typename DomTreeT::UpdateType;
3433

3534
explicit GenericDomTreeUpdater(UpdateStrategy Strategy_)
3635
: Strategy(Strategy_) {}
@@ -147,12 +146,7 @@ class GenericDomTreeUpdater {
147146
/// 2. It is illegal to submit any update that has already been submitted,
148147
/// i.e., you are supposed not to insert an existent edge or delete a
149148
/// nonexistent edge.
150-
void applyUpdates(ArrayRef<UpdateT> Updates);
151-
152-
/// Apply updates that the critical edge (FromBB, ToBB) has been
153-
/// split with NewBB.
154-
void splitCriticalEdge(BasicBlockT *FromBB, BasicBlockT *ToBB,
155-
BasicBlockT *NewBB);
149+
void applyUpdates(ArrayRef<typename DomTreeT::UpdateType> Updates);
156150

157151
/// Submit updates to all available trees. It will also
158152
/// 1. discard duplicated updates,
@@ -175,7 +169,7 @@ class GenericDomTreeUpdater {
175169
/// 3. It is only legal to submit updates to an edge in the order CFG changes
176170
/// are made. The order you submit updates on different edges is not
177171
/// restricted.
178-
void applyUpdatesPermissive(ArrayRef<UpdateT> Updates);
172+
void applyUpdatesPermissive(ArrayRef<typename DomTreeT::UpdateType> Updates);
179173

180174
///@}
181175

@@ -211,25 +205,7 @@ class GenericDomTreeUpdater {
211205
LLVM_DUMP_METHOD void dump() const;
212206

213207
protected:
214-
/// Helper structure used to hold all the basic blocks
215-
/// involved in the split of a critical edge.
216-
struct CriticalEdge {
217-
BasicBlockT *FromBB;
218-
BasicBlockT *ToBB;
219-
BasicBlockT *NewBB;
220-
};
221-
222-
struct DomTreeUpdate {
223-
bool IsCriticalEdgeSplit = false;
224-
union {
225-
UpdateT Update;
226-
CriticalEdge EdgeSplit;
227-
};
228-
DomTreeUpdate(UpdateT Update) : Update(Update) {}
229-
DomTreeUpdate(CriticalEdge E) : IsCriticalEdgeSplit(true), EdgeSplit(E) {}
230-
};
231-
232-
SmallVector<DomTreeUpdate, 16> PendUpdates;
208+
SmallVector<typename DomTreeT::UpdateType, 16> PendUpdates;
233209
size_t PendDTUpdateIndex = 0;
234210
size_t PendPDTUpdateIndex = 0;
235211
DomTreeT *DT = nullptr;
@@ -240,21 +216,21 @@ class GenericDomTreeUpdater {
240216
bool IsRecalculatingPostDomTree = false;
241217

242218
/// Returns true if the update is self dominance.
243-
bool isSelfDominance(UpdateT Update) const {
219+
bool isSelfDominance(typename DomTreeT::UpdateType Update) const {
244220
// Won't affect DomTree and PostDomTree.
245221
return Update.getFrom() == Update.getTo();
246222
}
247223

248224
/// Helper function to apply all pending DomTree updates.
249-
void applyDomTreeUpdates() { applyUpdatesImpl<true>(); }
225+
void applyDomTreeUpdates();
250226

251227
/// Helper function to apply all pending PostDomTree updates.
252-
void applyPostDomTreeUpdates() { applyUpdatesImpl<false>(); }
228+
void applyPostDomTreeUpdates();
253229

254230
/// Returns true if the update appears in the LLVM IR.
255231
/// It is used to check whether an update is valid in
256232
/// insertEdge/deleteEdge or is unnecessary in the batch update.
257-
bool isUpdateValid(UpdateT Update) const;
233+
bool isUpdateValid(typename DomTreeT::UpdateType Update) const;
258234

259235
/// Erase Basic Block node before it is unlinked from Function
260236
/// in the DomTree and PostDomTree.
@@ -267,11 +243,6 @@ class GenericDomTreeUpdater {
267243
/// Drop all updates applied by all available trees and delete BasicBlocks if
268244
/// all available trees are up-to-date.
269245
void dropOutOfDateUpdates();
270-
271-
private:
272-
void splitDTCriticalEdges(ArrayRef<CriticalEdge> Updates);
273-
void splitPDTCriticalEdges(ArrayRef<CriticalEdge> Updates);
274-
template <bool IsForward> void applyUpdatesImpl();
275246
};
276247

277248
} // namespace llvm

0 commit comments

Comments
 (0)