@@ -254,6 +254,7 @@ extension UnaryInstruction {
254254final public class UnimplementedInstruction : Instruction {
255255}
256256
257+ /// Only one of the operands may have an address type.
257258public protocol StoringInstruction : Instruction {
258259 var operands : OperandArray { get }
259260}
@@ -303,14 +304,16 @@ final public class AssignInst : Instruction, StoringInstruction {
303304 }
304305}
305306
306- final public class AssignByWrapperInst : Instruction { }
307+ final public class AssignByWrapperInst : Instruction , StoringInstruction { }
307308
308- final public class AssignOrInitInst : Instruction { }
309+ final public class AssignOrInitInst : Instruction , StoringInstruction { }
309310
310311/// Instruction that copy or move from a source to destination address.
311312public protocol SourceDestAddrInstruction : Instruction {
312313 var sourceOperand : Operand { get }
313314 var destinationOperand : Operand { get }
315+ var isTakeOfSrc : Bool { get }
316+ var isInitializationOfDest : Bool { get }
314317}
315318
316319extension SourceDestAddrInstruction {
@@ -333,6 +336,13 @@ final public class CopyAddrInst : Instruction, SourceDestAddrInstruction {
333336final public class ExplicitCopyAddrInst : Instruction , SourceDestAddrInstruction {
334337 public var source : Value { return sourceOperand. value }
335338 public var destination : Value { return destinationOperand. value }
339+
340+ public var isTakeOfSrc : Bool {
341+ bridged. ExplicitCopyAddrInst_isTakeOfSrc ( )
342+ }
343+ public var isInitializationOfDest : Bool {
344+ bridged. ExplicitCopyAddrInst_isInitializationOfDest ( )
345+ }
336346}
337347
338348final public class EndAccessInst : Instruction , UnaryInstruction {
@@ -590,7 +600,10 @@ class UncheckedRefCastInst : SingleValueInstruction, ConversionInstruction {
590600}
591601
592602final public
593- class UncheckedRefCastAddrInst : Instruction , SourceDestAddrInstruction { }
603+ class UncheckedRefCastAddrInst : Instruction , SourceDestAddrInstruction {
604+ public var isTakeOfSrc : Bool { true }
605+ public var isInitializationOfDest : Bool { true }
606+ }
594607
595608final public class UncheckedAddrCastInst : SingleValueInstruction , UnaryInstruction {
596609 public var fromAddress : Value { operand. value }
@@ -779,7 +792,9 @@ class TupleElementAddrInst : SingleValueInstruction, UnaryInstruction {
779792 public var fieldIndex : Int { bridged. TupleElementAddrInst_fieldIndex ( ) }
780793}
781794
782- final public class TupleAddrConstructorInst : Instruction { }
795+ final public class TupleAddrConstructorInst : Instruction {
796+ public var destinationOperand : Operand { operands [ 0 ] }
797+ }
783798
784799final public class StructInst : SingleValueInstruction , ForwardingInstruction {
785800}
@@ -1029,7 +1044,10 @@ final public class IsEscapingClosureInst : SingleValueInstruction, UnaryInstruct
10291044final public
10301045class MarkUnresolvedNonCopyableValueInst : SingleValueInstruction , UnaryInstruction { }
10311046
1032- final public class MarkUnresolvedMoveAddrInst : Instruction , SourceDestAddrInstruction { }
1047+ final public class MarkUnresolvedMoveAddrInst : Instruction , SourceDestAddrInstruction {
1048+ public var isTakeOfSrc : Bool { true }
1049+ public var isInitializationOfDest : Bool { true }
1050+ }
10331051
10341052final public
10351053class CopyableToMoveOnlyWrapperAddrInst : SingleValueInstruction , UnaryInstruction { }
0 commit comments