@@ -127,6 +127,26 @@ public class Instruction : CustomStringConvertible, Hashable {
127
127
return bridged. mayBeDeinitBarrierNotConsideringSideEffects ( )
128
128
}
129
129
130
+ public final var isEndOfScopeMarker : Bool {
131
+ switch self {
132
+ case is EndAccessInst , is EndBorrowInst :
133
+ return true ;
134
+ default :
135
+ return false ;
136
+ }
137
+ }
138
+
139
+ /// Incidental uses are marker instructions that do not propagate
140
+ /// their operand.
141
+ public final var isIncidentalUse : Bool {
142
+ switch self {
143
+ case is DebugValueInst , is FixLifetimeInst , is EndLifetimeInst :
144
+ return true
145
+ default :
146
+ return isEndOfScopeMarker
147
+ }
148
+ }
149
+
130
150
public func visitReferencedFunctions( _ cl: ( Function ) -> ( ) ) {
131
151
}
132
152
@@ -283,6 +303,10 @@ final public class AssignInst : Instruction, StoringInstruction {
283
303
}
284
304
}
285
305
306
+ final public class AssignByWrapperInst : Instruction { }
307
+
308
+ final public class AssignOrInitInst : Instruction { }
309
+
286
310
final public class CopyAddrInst : Instruction {
287
311
public var sourceOperand : Operand { return operands [ 0 ] }
288
312
public var destinationOperand : Operand { return operands [ 1 ] }
@@ -297,6 +321,13 @@ final public class CopyAddrInst : Instruction {
297
321
}
298
322
}
299
323
324
+ final public class ExplicitCopyAddrInst : Instruction {
325
+ public var sourceOperand : Operand { return operands [ 0 ] }
326
+ public var destinationOperand : Operand { return operands [ 1 ] }
327
+ public var source : Value { return sourceOperand. value }
328
+ public var destination : Value { return destinationOperand. value }
329
+ }
330
+
300
331
final public class EndAccessInst : Instruction , UnaryInstruction {
301
332
public var beginAccess : BeginAccessInst {
302
333
return operand. value as! BeginAccessInst
@@ -351,6 +382,8 @@ final public class CondFailInst : Instruction, UnaryInstruction {
351
382
public var message : StringRef { StringRef ( bridged: bridged. CondFailInst_getMessage ( ) ) }
352
383
}
353
384
385
+ final public class MarkFunctionEscapeInst : Instruction { }
386
+
354
387
final public class HopToExecutorInst : Instruction , UnaryInstruction { }
355
388
356
389
final public class FixLifetimeInst : Instruction , UnaryInstruction { }
@@ -420,6 +453,12 @@ final public class RetainValueInst : RefCountingInst {
420
453
public var value : Value { return operand. value }
421
454
}
422
455
456
+ final public class RetainValueAddrInst : RefCountingInst {
457
+ }
458
+
459
+ final public class ReleaseValueAddrInst : RefCountingInst {
460
+ }
461
+
423
462
final public class StrongReleaseInst : RefCountingInst {
424
463
public var instance : Value { operand. value }
425
464
}
@@ -539,6 +578,9 @@ class UncheckedRefCastInst : SingleValueInstruction, ConversionInstruction {
539
578
public var fromInstance : Value { operand. value }
540
579
}
541
580
581
+ final public
582
+ class UncheckedRefCastAddrInst : Instruction { }
583
+
542
584
final public class UncheckedAddrCastInst : SingleValueInstruction , UnaryInstruction {
543
585
public var fromAddress : Value { operand. value }
544
586
}
@@ -577,6 +619,12 @@ class IndexAddrInst : SingleValueInstruction {
577
619
}
578
620
}
579
621
622
+ final public
623
+ class TailAddrInst : SingleValueInstruction {
624
+ public var base : Value { operands [ 0 ] . value }
625
+ public var index : Value { operands [ 1 ] . value }
626
+ }
627
+
580
628
final public
581
629
class InitExistentialRefInst : SingleValueInstruction , UnaryInstruction {
582
630
public var instance : Value { operand. value }
@@ -596,6 +644,12 @@ class OpenExistentialValueInst : SingleValueInstruction, UnaryInstruction, Forwa
596
644
final public
597
645
class InitExistentialAddrInst : SingleValueInstruction , UnaryInstruction { }
598
646
647
+ final public
648
+ class DeinitExistentialAddrInst : Instruction { }
649
+
650
+ final public
651
+ class DeinitExistentialValueInst : Instruction { }
652
+
599
653
final public
600
654
class OpenExistentialAddrInst : SingleValueInstruction , UnaryInstruction { }
601
655
@@ -699,8 +753,7 @@ final public class StringLiteralInst : SingleValueInstruction {
699
753
}
700
754
}
701
755
702
- final public class TupleInst : SingleValueInstruction , ForwardingInstruction {
703
- }
756
+ final public class TupleInst : SingleValueInstruction , ForwardingInstruction { }
704
757
705
758
final public class TupleExtractInst : SingleValueInstruction , UnaryInstruction , ForwardingInstruction {
706
759
public var `tuple` : Value { operand. value }
@@ -713,6 +766,8 @@ class TupleElementAddrInst : SingleValueInstruction, UnaryInstruction {
713
766
public var fieldIndex : Int { bridged. TupleElementAddrInst_fieldIndex ( ) }
714
767
}
715
768
769
+ final public class TupleAddrConstructorInst : Instruction { }
770
+
716
771
final public class StructInst : SingleValueInstruction , ForwardingInstruction {
717
772
}
718
773
@@ -873,10 +928,14 @@ public protocol ScopedInstruction {
873
928
}
874
929
875
930
extension BeginAccessInst : ScopedInstruction {
876
- public typealias EndInstructions = LazyMapSequence < LazyFilterSequence < LazyMapSequence < UseList , EndAccessInst ? > > , EndAccessInst >
931
+ public typealias EndInstructions = LazyMapSequence < LazyFilterSequence < UseList > , EndAccessInst >
877
932
878
933
public var endInstructions : EndInstructions {
879
- uses. lazy. compactMap ( { $0. instruction as? EndAccessInst } )
934
+ endOperands. map { $0. instruction as! EndAccessInst }
935
+ }
936
+
937
+ public var endOperands : LazyFilterSequence < UseList > {
938
+ return uses. lazy. filter { $0. instruction is EndAccessInst }
880
939
}
881
940
}
882
941
@@ -951,6 +1010,15 @@ final public class IsEscapingClosureInst : SingleValueInstruction, UnaryInstruct
951
1010
final public
952
1011
class MarkUnresolvedNonCopyableValueInst : SingleValueInstruction , UnaryInstruction { }
953
1012
1013
+ final public
1014
+ class MarkUnresolvedMoveAddrInst : Instruction { }
1015
+
1016
+ final public
1017
+ class CopyableToMoveOnlyWrapperAddrInst : SingleValueInstruction , UnaryInstruction { }
1018
+
1019
+ final public
1020
+ class MoveOnlyWrapperToCopyableAddrInst : SingleValueInstruction , UnaryInstruction { }
1021
+
954
1022
final public class ObjectInst : SingleValueInstruction {
955
1023
public var baseOperands : OperandArray {
956
1024
operands [ 0 ..< bridged. ObjectInst_getNumBaseElements ( ) ]
@@ -970,10 +1038,23 @@ final public class TuplePackExtractInst: SingleValueInstruction, ForwardingInstr
970
1038
public var tupleOperand : Operand { operands [ 1 ] }
971
1039
}
972
1040
1041
+ final public class TuplePackElementAddrInst : SingleValueInstruction {
1042
+ public var indexOperand : Operand { operands [ 0 ] }
1043
+ public var tupleOperand : Operand { operands [ 1 ] }
1044
+ }
1045
+
1046
+ final public class PackElementGetInst : SingleValueInstruction { }
1047
+
1048
+ final public class PackElementSetInst : SingleValueInstruction { }
1049
+
973
1050
final public class DifferentiableFunctionInst : SingleValueInstruction , ForwardingInstruction { }
974
1051
975
1052
final public class LinearFunctionInst : SingleValueInstruction , ForwardingInstruction { }
976
1053
1054
+ final public class ProjectBlockStorageInst : SingleValueInstruction , UnaryInstruction { }
1055
+
1056
+ final public class InitBlockStorageHeaderInst : SingleValueInstruction { }
1057
+
977
1058
//===----------------------------------------------------------------------===//
978
1059
// single-value allocation instructions
979
1060
//===----------------------------------------------------------------------===//
@@ -1193,6 +1274,9 @@ final public class SwitchEnumInst : TermInst, ForwardingInstruction {
1193
1274
final public class SwitchEnumAddrInst : TermInst {
1194
1275
}
1195
1276
1277
+ final public class SelectEnumAddrInst : TermInst {
1278
+ }
1279
+
1196
1280
final public class DynamicMethodBranchInst : TermInst {
1197
1281
}
1198
1282
0 commit comments