Skip to content

Commit 65397fa

Browse files
committed
[NFC] LifetimeCompletion: Tweaked helper class.
VisitAvailabilityBoundary now has a single public method.
1 parent a52cc7a commit 65397fa

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

lib/SIL/Utils/OSSALifetimeCompletion.cpp

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -144,23 +144,26 @@ class AvailabilityBoundaryVisitor {
144144
: value(value), allowLeaks(allowLeaks), starts(value->getFunction()),
145145
region(value->getFunction()) {}
146146

147+
using Visit = llvm::function_ref<void(SILInstruction *,
148+
OSSALifetimeCompletion::LifetimeEnd)>;
149+
150+
struct Result;
151+
152+
/// Do all three steps at once.
153+
void visit(const SSAPrunedLiveness &liveness, Result &result, Visit visit);
154+
155+
private:
147156
/// Region discovery.
148157
///
149158
/// Forward CFG walk from non-lifetime-ending boundary to unreachable
150159
/// instructions.
151160
void computeRegion(const SSAPrunedLiveness &liveness);
152161

153-
struct Result;
154-
155162
/// Iterative dataflow to determine availability for each block in `region`.
156163
void propagateAvailablity(Result &result);
157164

158165
/// Visit the terminators of blocks on the boundary of availability.
159-
void visitAvailabilityBoundary(
160-
Result const &result,
161-
llvm::function_ref<void(SILInstruction *,
162-
OSSALifetimeCompletion::LifetimeEnd)>
163-
visit);
166+
void visitAvailabilityBoundary(Result const &result, Visit visit);
164167

165168
struct State {
166169
enum Value : uint8_t {
@@ -177,6 +180,7 @@ class AvailabilityBoundaryVisitor {
177180
}
178181
};
179182

183+
public:
180184
struct Result {
181185
BasicBlockBitfield states;
182186

@@ -205,6 +209,15 @@ class AvailabilityBoundaryVisitor {
205209
};
206210
};
207211

212+
void AvailabilityBoundaryVisitor::visit(const SSAPrunedLiveness &liveness,
213+
Result &result, Visit visit) {
214+
computeRegion(liveness);
215+
216+
propagateAvailablity(result);
217+
218+
visitAvailabilityBoundary(result, visit);
219+
}
220+
208221
void AvailabilityBoundaryVisitor::computeRegion(
209222
const SSAPrunedLiveness &liveness) {
210223
// (1) Compute the complete liveness boundary.
@@ -344,14 +357,8 @@ void OSSALifetimeCompletion::visitAvailabilityBoundary(
344357
llvm::function_ref<void(SILInstruction *, LifetimeEnd end)> visit) {
345358

346359
AvailabilityBoundaryVisitor visitor(value, allowLeaks);
347-
348-
visitor.computeRegion(liveness);
349-
350360
AvailabilityBoundaryVisitor::Result result(value->getFunction());
351-
352-
visitor.propagateAvailablity(result);
353-
354-
visitor.visitAvailabilityBoundary(result, visit);
361+
visitor.visit(liveness, result, visit);
355362
}
356363

357364
static bool endLifetimeAtAvailabilityBoundary(

0 commit comments

Comments
 (0)