Skip to content

Commit 4796e55

Browse files
committed
SwiftCompilerSources CopyingInstruction
And UnmanagedRetain/Release.
1 parent 9950784 commit 4796e55

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

SwiftCompilerSources/Sources/SIL/ForwardingInstruction.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,14 @@ extension TupleExtractInst {
269269
public var canForwardOwnedValues: Bool { false }
270270
}
271271

272+
extension CopyableToMoveOnlyWrapperValueInst {
273+
public var preservesRepresentation: Bool { true }
274+
}
275+
276+
extension MoveOnlyWrapperToCopyableValueInst {
277+
public var preservesRepresentation: Bool { true }
278+
}
279+
272280
extension TuplePackExtractInst {
273281
public var preservesRepresentation: Bool { true }
274282
public var canForwardOwnedValues: Bool { false }

SwiftCompilerSources/Sources/SIL/Instruction.swift

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,10 @@ final public class RetainValueInst : RefCountingInst {
474474
public var value: Value { return operand.value }
475475
}
476476

477+
final public class UnmanagedRetainValueInst : RefCountingInst {
478+
public var value: Value { return operand.value }
479+
}
480+
477481
final public class RetainValueAddrInst : RefCountingInst {
478482
}
479483

@@ -492,6 +496,10 @@ final public class ReleaseValueInst : RefCountingInst {
492496
public var value: Value { return operand.value }
493497
}
494498

499+
final public class UnmanagedReleaseValueInst : RefCountingInst {
500+
public var value: Value { return operand.value }
501+
}
502+
495503
final public class DestroyValueInst : Instruction, UnaryInstruction {
496504
public var destroyedValue: Value { operand.value }
497505
}
@@ -980,7 +988,13 @@ final public class ProjectBoxInst : SingleValueInstruction, UnaryInstruction {
980988
public var fieldIndex: Int { bridged.ProjectBoxInst_fieldIndex() }
981989
}
982990

983-
final public class CopyValueInst : SingleValueInstruction, UnaryInstruction {
991+
public protocol CopyingInstruction : SingleValueInstruction, UnaryInstruction {}
992+
993+
final public class CopyValueInst : SingleValueInstruction, UnaryInstruction, CopyingInstruction {
994+
public var fromValue: Value { operand.value }
995+
}
996+
997+
final public class ExplicitCopyValueInst : SingleValueInstruction, UnaryInstruction, CopyingInstruction {
984998
public var fromValue: Value { operand.value }
985999
}
9861000

@@ -1041,19 +1055,25 @@ final public class IsUniqueInst : SingleValueInstruction, UnaryInstruction {}
10411055

10421056
final public class IsEscapingClosureInst : SingleValueInstruction, UnaryInstruction {}
10431057

1044-
final public
1045-
class MarkUnresolvedNonCopyableValueInst : SingleValueInstruction, UnaryInstruction {}
1058+
final public class MarkUnresolvedNonCopyableValueInst
1059+
: SingleValueInstruction, UnaryInstruction, ConversionInstruction {}
10461060

10471061
final public class MarkUnresolvedMoveAddrInst : Instruction, SourceDestAddrInstruction {
10481062
public var isTakeOfSrc: Bool { true }
10491063
public var isInitializationOfDest: Bool { true }
10501064
}
10511065

1052-
final public
1053-
class CopyableToMoveOnlyWrapperAddrInst : SingleValueInstruction, UnaryInstruction {}
1066+
final public class CopyableToMoveOnlyWrapperValueInst
1067+
: SingleValueInstruction, UnaryInstruction, ConversionInstruction {}
10541068

1055-
final public
1056-
class MoveOnlyWrapperToCopyableAddrInst : SingleValueInstruction, UnaryInstruction {}
1069+
final public class MoveOnlyWrapperToCopyableValueInst
1070+
: SingleValueInstruction, UnaryInstruction, ConversionInstruction {}
1071+
1072+
final public class CopyableToMoveOnlyWrapperAddrInst
1073+
: SingleValueInstruction, UnaryInstruction {}
1074+
1075+
final public class MoveOnlyWrapperToCopyableAddrInst
1076+
: SingleValueInstruction, UnaryInstruction {}
10571077

10581078
final public class ObjectInst : SingleValueInstruction {
10591079
public var baseOperands: OperandArray {

SwiftCompilerSources/Sources/SIL/Utilities/WalkUtils.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,10 @@ extension AddressUseDefWalker {
779779
}
780780
case let mdi as MarkDependenceInst:
781781
return walkUp(address: mdi.operands[0].value, path: path)
782-
default:
782+
case is MoveOnlyWrapperToCopyableAddrInst,
783+
is CopyableToMoveOnlyWrapperAddrInst:
784+
return walkUp(address: (def as! Instruction).operands[0].value, path: path)
785+
default:
783786
return rootDef(address: def, path: path)
784787
}
785788
}

0 commit comments

Comments
 (0)