Skip to content

Commit 010ddfc

Browse files
committed
Convert LifetimeDependenceInfoRequest to use split caching
1 parent 0097ef6 commit 010ddfc

File tree

4 files changed

+43
-4
lines changed

4 files changed

+43
-4
lines changed

include/swift/AST/Decl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7490,6 +7490,7 @@ class AbstractFunctionDecl : public GenericContext, public ValueDecl {
74907490
friend class ParseAbstractFunctionBodyRequest;
74917491
friend class TypeCheckFunctionBodyRequest;
74927492
friend class IsFunctionBodySkippedRequest;
7493+
friend class LifetimeDependenceInfoRequest;
74937494

74947495
CaptureInfo Captures;
74957496

@@ -7505,6 +7506,7 @@ class AbstractFunctionDecl : public GenericContext, public ValueDecl {
75057506
struct {
75067507
unsigned NeedsNewVTableEntryComputed : 1;
75077508
unsigned NeedsNewVTableEntry : 1;
7509+
unsigned NoLifetimeDependenceInfo : 1;
75087510
} LazySemanticInfo = { };
75097511

75107512
AbstractFunctionDecl(DeclKind Kind, DeclContext *Parent, DeclName Name,

include/swift/AST/TypeCheckRequests.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4995,7 +4995,8 @@ class LifetimeDependenceInfoRequest
49954995
: public SimpleRequest<LifetimeDependenceInfoRequest,
49964996
std::optional<LifetimeDependenceInfo>(
49974997
AbstractFunctionDecl *),
4998-
RequestFlags::Cached> {
4998+
RequestFlags::SeparatelyCached |
4999+
RequestFlags::SplitCached> {
49995000
public:
50005001
using SimpleRequest::SimpleRequest;
50015002

@@ -5006,9 +5007,10 @@ class LifetimeDependenceInfoRequest
50065007
evaluate(Evaluator &evaluator, AbstractFunctionDecl *AFD) const;
50075008

50085009
public:
5009-
// Caching.
5010+
// Separate caching.
50105011
bool isCached() const { return true; }
5011-
5012+
std::optional<std::optional<LifetimeDependenceInfo>> getCachedResult() const;
5013+
void cacheResult(std::optional<LifetimeDependenceInfo> value) const;
50125014
};
50135015

50145016
class CaptureInfoRequest :

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,8 @@ SWIFT_REQUEST(TypeChecker, ImportDeclRequest,
574574
const SourceFile *sf, const ModuleDecl *mod),
575575
Cached, NoLocationInfo)
576576
SWIFT_REQUEST(TypeChecker, LifetimeDependenceInfoRequest,
577-
LifetimeDependenceInfo(AbstractFunctionDecl *), Cached, NoLocationInfo)
577+
LifetimeDependenceInfo(AbstractFunctionDecl *),
578+
SeparatelyCached | SplitCached, NoLocationInfo)
578579
SWIFT_REQUEST(TypeChecker, SuppressesConformanceRequest,
579580
bool(NominalTypeDecl *decl, KnownProtocolKind kp),
580581
SeparatelyCached, NoLocationInfo)

lib/AST/TypeCheckRequests.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2466,6 +2466,36 @@ void ExpandBodyMacroRequest::noteCycleStep(DiagnosticEngine &diags) const {
24662466
decl->getName());
24672467
}
24682468

2469+
//----------------------------------------------------------------------------//
2470+
// LifetimeDependenceInfoRequest computation.
2471+
//----------------------------------------------------------------------------//
2472+
2473+
std::optional<std::optional<LifetimeDependenceInfo>>
2474+
LifetimeDependenceInfoRequest::getCachedResult() const {
2475+
auto *func = std::get<0>(getStorage());
2476+
2477+
if (func->LazySemanticInfo.NoLifetimeDependenceInfo)
2478+
return std::optional(std::optional<LifetimeDependenceInfo>());
2479+
2480+
return func->getASTContext().evaluator.getCachedNonEmptyOutput(*this);
2481+
}
2482+
2483+
void LifetimeDependenceInfoRequest::cacheResult(
2484+
std::optional<LifetimeDependenceInfo> result) const {
2485+
auto *func = std::get<0>(getStorage());
2486+
2487+
if (!result) {
2488+
func->LazySemanticInfo.NoLifetimeDependenceInfo = 1;
2489+
return;
2490+
}
2491+
2492+
func->getASTContext().evaluator.cacheNonEmptyOutput(*this, std::move(result));
2493+
}
2494+
2495+
//----------------------------------------------------------------------------//
2496+
// CaptureInfoRequest computation.
2497+
//----------------------------------------------------------------------------//
2498+
24692499
std::optional<CaptureInfo>
24702500
CaptureInfoRequest::getCachedResult() const {
24712501
auto *func = std::get<0>(getStorage());
@@ -2477,6 +2507,10 @@ void CaptureInfoRequest::cacheResult(CaptureInfo info) const {
24772507
return func->setCaptureInfo(info);
24782508
}
24792509

2510+
//----------------------------------------------------------------------------//
2511+
// ParamCaptureInfoRequest computation.
2512+
//----------------------------------------------------------------------------//
2513+
24802514
std::optional<CaptureInfo>
24812515
ParamCaptureInfoRequest::getCachedResult() const {
24822516
auto *param = std::get<0>(getStorage());

0 commit comments

Comments
 (0)