@@ -30,7 +30,6 @@ class GenericDomTreeUpdater {
3030public:
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
213207protected:
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