Skip to content

Commit 857b986

Browse files
eecksteintshortli
authored andcommitted
SIL: improve and fix mark-dependence instruction APIs
* Move the mutating APIs into Context.swift, because SIL can only be mutated through a MutatingContext * move the `baseOperand` and `base` properties from the instruction classes to the `MarkDependenceInstruction` protocol * add `valueOrAddressOperand` and `valueOrAddress` in the `MarkDependenceInstruction` protocol
1 parent 1e403ec commit 857b986

File tree

6 files changed

+38
-45
lines changed

6 files changed

+38
-45
lines changed

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ let lifetimeDependenceDiagnosticsPass = FunctionPass(
6969
// mark_dependence will hanceforth be treated as an unknown use by the optimizer. In the future, we should not
7070
// need to set this flag during diagnostics because, for escapable types, mark_dependence [unresolved] will all be
7171
// settled during an early LifetimeNormalization pass.
72-
markDep.settleToEscaping()
72+
markDep.settleToEscaping(context)
7373
continue
7474
}
7575
if let apply = instruction as? FullApplySite {

SwiftCompilerSources/Sources/Optimizer/PassManager/Context.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,20 @@ extension CopyAddrInst {
776776
}
777777
}
778778

779+
extension MarkDependenceInstruction {
780+
func resolveToNonEscaping(_ context: some MutatingContext) {
781+
context.notifyInstructionsChanged()
782+
bridged.MarkDependenceInstruction_resolveToNonEscaping()
783+
context.notifyInstructionChanged(self)
784+
}
785+
786+
func settleToEscaping(_ context: some MutatingContext) {
787+
context.notifyInstructionsChanged()
788+
bridged.MarkDependenceInstruction_settleToEscaping()
789+
context.notifyInstructionChanged(self)
790+
}
791+
}
792+
779793
extension TermInst {
780794
func replaceBranchTarget(from fromBlock: BasicBlock, to toBlock: BasicBlock, _ context: some MutatingContext) {
781795
context.notifyBranchesChanged()

SwiftCompilerSources/Sources/Optimizer/Utilities/LifetimeDependenceUtils.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,9 @@ extension LifetimeDependence {
226226
return scope.computeRange(context)
227227
}
228228

229-
func resolve(_ context: some Context) {
229+
func resolve(_ context: some MutatingContext) {
230230
if let mdi = markDepInst {
231-
mdi.resolveToNonEscaping()
231+
mdi.resolveToNonEscaping(context)
232232
}
233233
}
234234
}

SwiftCompilerSources/Sources/SIL/Instruction.swift

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,58 +1124,39 @@ public enum MarkDependenceKind: Int32 {
11241124
}
11251125

11261126
public protocol MarkDependenceInstruction: Instruction {
1127-
var baseOperand: Operand { get }
1128-
var base: Value { get }
11291127
var dependenceKind: MarkDependenceKind { get }
1130-
func resolveToNonEscaping()
1131-
func settleToEscaping()
11321128
}
11331129

11341130
extension MarkDependenceInstruction {
11351131
public var isNonEscaping: Bool { dependenceKind == .NonEscaping }
11361132
public var isUnresolved: Bool { dependenceKind == .Unresolved }
1133+
1134+
public var valueOrAddressOperand: Operand { operands[0] }
1135+
public var valueOrAddress: Value { valueOrAddressOperand.value }
1136+
public var baseOperand: Operand { operands[1] }
1137+
public var base: Value { baseOperand.value }
11371138
}
11381139

11391140
final public class MarkDependenceInst : SingleValueInstruction, MarkDependenceInstruction {
1140-
public var valueOperand: Operand { operands[0] }
1141-
public var baseOperand: Operand { operands[1] }
1141+
public var valueOperand: Operand { valueOrAddressOperand }
11421142
public var value: Value { return valueOperand.value }
1143-
public var base: Value { return baseOperand.value }
11441143

11451144
public var dependenceKind: MarkDependenceKind {
11461145
MarkDependenceKind(rawValue: bridged.MarkDependenceInst_dependenceKind().rawValue)!
11471146
}
11481147

1149-
public func resolveToNonEscaping() {
1150-
bridged.MarkDependenceInst_resolveToNonEscaping()
1151-
}
1152-
1153-
public func settleToEscaping() {
1154-
bridged.MarkDependenceInst_settleToEscaping()
1155-
}
1156-
11571148
public var hasScopedLifetime: Bool {
11581149
return isNonEscaping && type.isObject && ownership == .owned && type.isEscapable(in: parentFunction)
11591150
}
11601151
}
11611152

11621153
final public class MarkDependenceAddrInst : Instruction, MarkDependenceInstruction {
1163-
public var addressOperand: Operand { operands[0] }
1164-
public var baseOperand: Operand { operands[1] }
1154+
public var addressOperand: Operand { valueOrAddressOperand }
11651155
public var address: Value { return addressOperand.value }
1166-
public var base: Value { return baseOperand.value }
11671156

11681157
public var dependenceKind: MarkDependenceKind {
11691158
MarkDependenceKind(rawValue: bridged.MarkDependenceAddrInst_dependenceKind().rawValue)!
11701159
}
1171-
1172-
public func resolveToNonEscaping() {
1173-
bridged.MarkDependenceAddrInst_resolveToNonEscaping()
1174-
}
1175-
1176-
public func settleToEscaping() {
1177-
bridged.MarkDependenceAddrInst_settleToEscaping()
1178-
}
11791160
}
11801161

11811162
final public class RefToBridgeObjectInst : SingleValueInstruction {

include/swift/SIL/SILBridging.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -803,11 +803,9 @@ struct BridgedInstruction {
803803
BRIDGED_INLINE SwiftInt StoreInst_getStoreOwnership() const;
804804
BRIDGED_INLINE SwiftInt AssignInst_getAssignOwnership() const;
805805
BRIDGED_INLINE MarkDependenceKind MarkDependenceInst_dependenceKind() const;
806-
BRIDGED_INLINE void MarkDependenceInst_resolveToNonEscaping() const;
807-
BRIDGED_INLINE void MarkDependenceInst_settleToEscaping() const;
806+
BRIDGED_INLINE void MarkDependenceInstruction_resolveToNonEscaping() const;
807+
BRIDGED_INLINE void MarkDependenceInstruction_settleToEscaping() const;
808808
BRIDGED_INLINE MarkDependenceKind MarkDependenceAddrInst_dependenceKind() const;
809-
BRIDGED_INLINE void MarkDependenceAddrInst_resolveToNonEscaping() const;
810-
BRIDGED_INLINE void MarkDependenceAddrInst_settleToEscaping() const;
811809
BRIDGED_INLINE SwiftInt BeginAccessInst_getAccessKind() const;
812810
BRIDGED_INLINE bool BeginAccessInst_isStatic() const;
813811
BRIDGED_INLINE bool BeginAccessInst_isUnsafe() const;

include/swift/SIL/SILBridgingImpl.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,26 +1425,26 @@ BridgedInstruction::MarkDependenceKind BridgedInstruction::MarkDependenceInst_de
14251425
return (MarkDependenceKind)getAs<swift::MarkDependenceInst>()->dependenceKind();
14261426
}
14271427

1428-
void BridgedInstruction::MarkDependenceInst_resolveToNonEscaping() const {
1429-
getAs<swift::MarkDependenceInst>()->resolveToNonEscaping();
1428+
void BridgedInstruction::MarkDependenceInstruction_resolveToNonEscaping() const {
1429+
if (auto *mdi = llvm::dyn_cast<swift::MarkDependenceInst>(unbridged())) {
1430+
mdi->resolveToNonEscaping();
1431+
} else {
1432+
getAs<swift::MarkDependenceAddrInst>()->resolveToNonEscaping();
1433+
}
14301434
}
14311435

1432-
void BridgedInstruction::MarkDependenceInst_settleToEscaping() const {
1433-
getAs<swift::MarkDependenceInst>()->settleToEscaping();
1436+
void BridgedInstruction::MarkDependenceInstruction_settleToEscaping() const {
1437+
if (auto *mdi = llvm::dyn_cast<swift::MarkDependenceInst>(unbridged())) {
1438+
mdi->settleToEscaping();
1439+
} else {
1440+
getAs<swift::MarkDependenceAddrInst>()->settleToEscaping();
1441+
}
14341442
}
14351443

14361444
BridgedInstruction::MarkDependenceKind BridgedInstruction::MarkDependenceAddrInst_dependenceKind() const {
14371445
return (MarkDependenceKind)getAs<swift::MarkDependenceAddrInst>()->dependenceKind();
14381446
}
14391447

1440-
void BridgedInstruction::MarkDependenceAddrInst_resolveToNonEscaping() const {
1441-
getAs<swift::MarkDependenceAddrInst>()->resolveToNonEscaping();
1442-
}
1443-
1444-
void BridgedInstruction::MarkDependenceAddrInst_settleToEscaping() const {
1445-
getAs<swift::MarkDependenceAddrInst>()->settleToEscaping();
1446-
}
1447-
14481448
SwiftInt BridgedInstruction::BeginAccessInst_getAccessKind() const {
14491449
return (SwiftInt)getAs<swift::BeginAccessInst>()->getAccessKind();
14501450
}

0 commit comments

Comments
 (0)