Skip to content

Commit 65ecb69

Browse files
committed
SIL: improve the API for ApplySite construction
Replace the `isa(SILNode *)` with `isa(SILInstruction *)` and `isa(SILValue)`. This is much clearer and it also works if the SILValue is a MultiValueInstructionResult of an apply instruction. Also, use `isa` instead of `classof` in canOptimize()
1 parent 5ad332f commit 65ecb69

File tree

1 file changed

+25
-20
lines changed

1 file changed

+25
-20
lines changed

include/swift/SIL/ApplySite.h

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -90,28 +90,30 @@ class ApplySite {
9090

9191
SILModule &getModule() const { return Inst->getModule(); }
9292

93-
static ApplySite isa(SILNode *node) {
94-
auto *i = dyn_cast<SILInstruction>(node);
95-
if (!i)
96-
return ApplySite();
97-
98-
auto kind = ApplySiteKind::fromNodeKind(i->getKind());
93+
static ApplySite isa(SILInstruction *inst) {
94+
auto kind = ApplySiteKind::fromNodeKind(inst->getKind());
9995
if (!kind)
10096
return ApplySite();
10197

10298
switch (kind.getValue()) {
10399
case ApplySiteKind::ApplyInst:
104-
return ApplySite(cast<ApplyInst>(node));
100+
return ApplySite(cast<ApplyInst>(inst));
105101
case ApplySiteKind::BeginApplyInst:
106-
return ApplySite(cast<BeginApplyInst>(node));
102+
return ApplySite(cast<BeginApplyInst>(inst));
107103
case ApplySiteKind::TryApplyInst:
108-
return ApplySite(cast<TryApplyInst>(node));
104+
return ApplySite(cast<TryApplyInst>(inst));
109105
case ApplySiteKind::PartialApplyInst:
110-
return ApplySite(cast<PartialApplyInst>(node));
106+
return ApplySite(cast<PartialApplyInst>(inst));
111107
}
112108
llvm_unreachable("covered switch");
113109
}
114110

111+
static ApplySite isa(SILValue value) {
112+
if (auto *inst = value->getDefiningInstruction())
113+
return ApplySite::isa(inst);
114+
return ApplySite();
115+
}
116+
115117
ApplySiteKind getKind() const { return ApplySiteKind(Inst->getKind()); }
116118

117119
explicit operator bool() const { return Inst != nullptr; }
@@ -181,8 +183,8 @@ class ApplySite {
181183
/// Calls to (previous_)dynamic_function_ref have a dynamic target function so
182184
/// we should not optimize them.
183185
bool canOptimize() const {
184-
return !DynamicFunctionRefInst::classof(getCallee()) &&
185-
!PreviousDynamicFunctionRefInst::classof(getCallee());
186+
return !swift::isa<DynamicFunctionRefInst>(getCallee()) &&
187+
!swift::isa<PreviousDynamicFunctionRefInst>(getCallee());
186188
}
187189

188190
/// Return the type.
@@ -493,24 +495,27 @@ class FullApplySite : public ApplySite {
493495
FullApplySite(BeginApplyInst *inst) : ApplySite(inst) {}
494496
FullApplySite(TryApplyInst *inst) : ApplySite(inst) {}
495497

496-
static FullApplySite isa(SILNode *node) {
497-
auto *i = dyn_cast<SILInstruction>(node);
498-
if (!i)
499-
return FullApplySite();
500-
auto kind = FullApplySiteKind::fromNodeKind(i->getKind());
498+
static FullApplySite isa(SILInstruction *inst) {
499+
auto kind = FullApplySiteKind::fromNodeKind(inst->getKind());
501500
if (!kind)
502501
return FullApplySite();
503502
switch (kind.getValue()) {
504503
case FullApplySiteKind::ApplyInst:
505-
return FullApplySite(cast<ApplyInst>(node));
504+
return FullApplySite(cast<ApplyInst>(inst));
506505
case FullApplySiteKind::BeginApplyInst:
507-
return FullApplySite(cast<BeginApplyInst>(node));
506+
return FullApplySite(cast<BeginApplyInst>(inst));
508507
case FullApplySiteKind::TryApplyInst:
509-
return FullApplySite(cast<TryApplyInst>(node));
508+
return FullApplySite(cast<TryApplyInst>(inst));
510509
}
511510
llvm_unreachable("covered switch");
512511
}
513512

513+
static FullApplySite isa(SILValue value) {
514+
if (auto *inst = value->getDefiningInstruction())
515+
return FullApplySite::isa(inst);
516+
return FullApplySite();
517+
}
518+
514519
FullApplySiteKind getKind() const {
515520
return FullApplySiteKind(getInstruction()->getKind());
516521
}

0 commit comments

Comments
 (0)