@@ -137,17 +137,19 @@ static void PrintValueSet(raw_ostream &OS, IteratorTy Begin, IteratorTy End) {
137
137
// / correctly relocated value at that point, and is a subset of the set of
138
138
// / definitions dominating that point.
139
139
140
+ using AvailableValueSet = DenseSet<const Value *>;
141
+
140
142
// / State we compute and track per basic block.
141
143
struct BasicBlockState {
142
144
// Set of values available coming in, before the phi nodes
143
- DenseSet< const Value *> AvailableIn;
145
+ AvailableValueSet AvailableIn;
144
146
145
147
// Set of values available going out
146
- DenseSet< const Value *> AvailableOut;
148
+ AvailableValueSet AvailableOut;
147
149
148
150
// AvailableOut minus AvailableIn.
149
151
// All elements are Instructions
150
- DenseSet< const Value *> Contribution;
152
+ AvailableValueSet Contribution;
151
153
152
154
// True if this block contains a safepoint and thus AvailableIn does not
153
155
// contribute to AvailableOut.
@@ -159,7 +161,7 @@ struct BasicBlockState {
159
161
// / simply the Defs introduced by every dominating basic block and the function
160
162
// / arguments.
161
163
static void GatherDominatingDefs (const BasicBlock *BB,
162
- DenseSet< const Value *> &Result,
164
+ AvailableValueSet &Result,
163
165
const DominatorTree &DT,
164
166
DenseMap<const BasicBlock *, BasicBlockState *> &BlockMap) {
165
167
DomTreeNode *DTN = DT[const_cast <BasicBlock *>(BB)];
@@ -183,7 +185,7 @@ static void GatherDominatingDefs(const BasicBlock *BB,
183
185
184
186
// / Model the effect of an instruction on the set of available values.
185
187
static void TransferInstruction (const Instruction &I, bool &Cleared,
186
- DenseSet< const Value *> &Available) {
188
+ AvailableValueSet &Available) {
187
189
if (isStatepoint (I)) {
188
190
Cleared = true ;
189
191
Available.clear ();
@@ -199,8 +201,8 @@ static void TransferInstruction(const Instruction &I, bool &Cleared,
199
201
static void TransferBlock (const BasicBlock *BB, BasicBlockState &BBS,
200
202
bool ContributionChanged) {
201
203
202
- const DenseSet< const Value *> &AvailableIn = BBS.AvailableIn ;
203
- DenseSet< const Value *> &AvailableOut = BBS.AvailableOut ;
204
+ const AvailableValueSet &AvailableIn = BBS.AvailableIn ;
205
+ AvailableValueSet &AvailableOut = BBS.AvailableOut ;
204
206
205
207
if (BBS.Cleared ) {
206
208
// AvailableOut will change only when Contribution changed.
@@ -209,7 +211,7 @@ static void TransferBlock(const BasicBlock *BB, BasicBlockState &BBS,
209
211
} else {
210
212
// Otherwise, we need to reduce the AvailableOut set by things which are no
211
213
// longer in our AvailableIn
212
- DenseSet< const Value *> Temp = BBS.Contribution ;
214
+ AvailableValueSet Temp = BBS.Contribution ;
213
215
set_union (Temp, AvailableIn);
214
216
AvailableOut = std::move (Temp);
215
217
}
@@ -306,7 +308,7 @@ using BlockStateMap = DenseMap<const BasicBlock *, BasicBlockState *>;
306
308
// /
307
309
// / BBContributionUpdater is expected to have following signature:
308
310
// / (const BasicBlock *BB, const BasicBlockState *BBS,
309
- // / DenseSet<const Value *> &Contribution) -> bool
311
+ // / AvailableValueSet &Contribution) -> bool
310
312
// / FIXME: type of BBContributionUpdater is a template parameter because it
311
313
// / might be a lambda with arbitrary non-empty capture list. It's a bit ugly and
312
314
// / unclear, but other options causes us to spread the logic of
@@ -372,7 +374,7 @@ static void Verify(const Function &F, const DominatorTree &DT) {
372
374
373
375
RecalculateBBsStates (BlockMap, [] (const BasicBlock *,
374
376
const BasicBlockState *,
375
- DenseSet< const Value *> &) {
377
+ AvailableValueSet &) {
376
378
return false ;
377
379
});
378
380
@@ -398,8 +400,8 @@ static void Verify(const Function &F, const DominatorTree &DT) {
398
400
RecalculateBBsStates (BlockMap, [&ValidUnrelocatedDefs](
399
401
const BasicBlock *BB,
400
402
const BasicBlockState *BBS,
401
- DenseSet< const Value *> &Contribution) {
402
- DenseSet< const Value *> AvailableSet = BBS->AvailableIn ;
403
+ AvailableValueSet &Contribution) {
404
+ AvailableValueSet AvailableSet = BBS->AvailableIn ;
403
405
bool ContributionChanged = false ;
404
406
for (const Instruction &I : *BB) {
405
407
bool ProducesUnrelocatedPointer = false ;
@@ -438,7 +440,7 @@ static void Verify(const Function &F, const DominatorTree &DT) {
438
440
BasicBlockState *BBS = BlockMap[BB];
439
441
// We destructively modify AvailableIn as we traverse the block instruction
440
442
// by instruction.
441
- DenseSet< const Value *> &AvailableSet = BBS->AvailableIn ;
443
+ AvailableValueSet &AvailableSet = BBS->AvailableIn ;
442
444
for (const Instruction &I : *BB) {
443
445
if (ValidUnrelocatedDefs.count (&I)) {
444
446
continue ; // This instruction shouldn't be added to AvailableSet.
0 commit comments