Skip to content

Commit eda603d

Browse files
committed
[region-isolation] Add mocking for getSourceInst so that unittests still work.
1 parent 3cfcc17 commit eda603d

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

include/swift/SILOptimizer/Utils/PartitionUtils.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,11 +1229,14 @@ struct PartitionOpEvaluator {
12291229
// case, if we are not marked explicitly as sending, we do not transfer
12301230
// since the disconnected value is allowed to be resued after we
12311231
// return. If we are passed as a sending parameter, we cannot do this.
1232-
if (auto fas = FullApplySite::isa(op.getSourceInst());
1233-
(!fas || !fas.isSending(*op.getSourceOp())) &&
1234-
transferredRegionIsolation.isDisconnected() && calleeIsolationInfo &&
1235-
transferredRegionIsolation.hasSameIsolation(calleeIsolationInfo))
1236-
return;
1232+
if (auto *sourceInst = Impl::getSourceInst(op)) {
1233+
if (auto fas = FullApplySite::isa(sourceInst);
1234+
(!fas || !fas.isSending(*op.getSourceOp())) &&
1235+
transferredRegionIsolation.isDisconnected() &&
1236+
calleeIsolationInfo &&
1237+
transferredRegionIsolation.hasSameIsolation(calleeIsolationInfo))
1238+
return;
1239+
}
12371240

12381241
// Mark op.getOpArgs()[0] as transferred.
12391242
TransferringOperandState &state = operandToStateMap.get(op.getSourceOp());
@@ -1581,6 +1584,9 @@ struct PartitionOpEvaluatorBaseImpl : PartitionOpEvaluator<Subclass> {
15811584

15821585
static SILLocation getLoc(SILInstruction *inst) { return inst->getLoc(); }
15831586
static SILLocation getLoc(Operand *op) { return op->getUser()->getLoc(); }
1587+
static SILInstruction *getSourceInst(const PartitionOp &partitionOp) {
1588+
return partitionOp.getSourceInst();
1589+
}
15841590
static SILIsolationInfo getIsolationInfo(const PartitionOp &partitionOp) {
15851591
return SILIsolationInfo::get(partitionOp.getSourceInst());
15861592
}

unittests/SILOptimizer/PartitionUtilsTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ struct MockedPartitionOpEvaluator final
6262
return {};
6363
}
6464

65+
static SILInstruction *getSourceInst(const PartitionOp &partitionOp) {
66+
return nullptr;
67+
}
68+
6569
static bool doesFunctionHaveSendingResult(const PartitionOp &partitionOp) {
6670
return false;
6771
}
@@ -107,6 +111,10 @@ struct MockedPartitionOpEvaluatorWithFailureCallback final
107111
static SILIsolationInfo getIsolationInfo(const PartitionOp &partitionOp) {
108112
return {};
109113
}
114+
115+
static SILInstruction *getSourceInst(const PartitionOp &partitionOp) {
116+
return nullptr;
117+
}
110118
};
111119

112120
} // namespace

0 commit comments

Comments
 (0)