@@ -30,7 +30,6 @@ class GenericDomTreeUpdater {
30
30
public:
31
31
enum class UpdateStrategy : unsigned char { Eager = 0 , Lazy = 1 };
32
32
using BasicBlockT = typename DomTreeT::NodeType;
33
- using UpdateT = typename DomTreeT::UpdateType;
34
33
35
34
explicit GenericDomTreeUpdater (UpdateStrategy Strategy_)
36
35
: Strategy(Strategy_) {}
@@ -147,12 +146,7 @@ class GenericDomTreeUpdater {
147
146
// / 2. It is illegal to submit any update that has already been submitted,
148
147
// / i.e., you are supposed not to insert an existent edge or delete a
149
148
// / 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);
156
150
157
151
// / Submit updates to all available trees. It will also
158
152
// / 1. discard duplicated updates,
@@ -175,7 +169,7 @@ class GenericDomTreeUpdater {
175
169
// / 3. It is only legal to submit updates to an edge in the order CFG changes
176
170
// / are made. The order you submit updates on different edges is not
177
171
// / restricted.
178
- void applyUpdatesPermissive (ArrayRef<UpdateT > Updates);
172
+ void applyUpdatesPermissive (ArrayRef<typename DomTreeT::UpdateType > Updates);
179
173
180
174
// /@}
181
175
@@ -211,25 +205,7 @@ class GenericDomTreeUpdater {
211
205
LLVM_DUMP_METHOD void dump () const ;
212
206
213
207
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;
233
209
size_t PendDTUpdateIndex = 0 ;
234
210
size_t PendPDTUpdateIndex = 0 ;
235
211
DomTreeT *DT = nullptr ;
@@ -240,21 +216,21 @@ class GenericDomTreeUpdater {
240
216
bool IsRecalculatingPostDomTree = false ;
241
217
242
218
// / Returns true if the update is self dominance.
243
- bool isSelfDominance (UpdateT Update) const {
219
+ bool isSelfDominance (typename DomTreeT::UpdateType Update) const {
244
220
// Won't affect DomTree and PostDomTree.
245
221
return Update.getFrom () == Update.getTo ();
246
222
}
247
223
248
224
// / Helper function to apply all pending DomTree updates.
249
- void applyDomTreeUpdates () { applyUpdatesImpl< true >(); }
225
+ void applyDomTreeUpdates ();
250
226
251
227
// / Helper function to apply all pending PostDomTree updates.
252
- void applyPostDomTreeUpdates () { applyUpdatesImpl< false >(); }
228
+ void applyPostDomTreeUpdates ();
253
229
254
230
// / Returns true if the update appears in the LLVM IR.
255
231
// / It is used to check whether an update is valid in
256
232
// / insertEdge/deleteEdge or is unnecessary in the batch update.
257
- bool isUpdateValid (UpdateT Update) const ;
233
+ bool isUpdateValid (typename DomTreeT::UpdateType Update) const ;
258
234
259
235
// / Erase Basic Block node before it is unlinked from Function
260
236
// / in the DomTree and PostDomTree.
@@ -267,11 +243,6 @@ class GenericDomTreeUpdater {
267
243
// / Drop all updates applied by all available trees and delete BasicBlocks if
268
244
// / all available trees are up-to-date.
269
245
void dropOutOfDateUpdates ();
270
-
271
- private:
272
- void splitDTCriticalEdges (ArrayRef<CriticalEdge> Updates);
273
- void splitPDTCriticalEdges (ArrayRef<CriticalEdge> Updates);
274
- template <bool IsForward> void applyUpdatesImpl ();
275
246
};
276
247
277
248
} // namespace llvm
0 commit comments