@@ -47,6 +47,11 @@ public class Instruction : CustomStringConvertible, Hashable {
47
47
return OperandArray ( base: operands. base, count: operands. count)
48
48
}
49
49
50
+ final public var realOperands : OperandArray {
51
+ let operands = bridged. getRealOperands ( )
52
+ return OperandArray ( base: operands. base, count: operands. count)
53
+ }
54
+
50
55
fileprivate var resultCount : Int { 0 }
51
56
fileprivate func getResult( index: Int ) -> Value { fatalError ( ) }
52
57
@@ -296,7 +301,7 @@ final public class EndAccessInst : Instruction, UnaryInstruction {
296
301
297
302
final public class EndBorrowInst : Instruction , UnaryInstruction { }
298
303
299
- final public class MarkUninitializedInst : SingleValueInstruction , UnaryInstruction {
304
+ final public class MarkUninitializedInst : SingleValueInstruction , ConversionInstruction {
300
305
301
306
/// This enum captures what the mark_uninitialized instruction is designating.
302
307
///
@@ -485,12 +490,12 @@ final public class BuiltinInst : SingleValueInstruction {
485
490
}
486
491
}
487
492
488
- final public class UpcastInst : SingleValueInstruction , UnaryInstruction {
493
+ final public class UpcastInst : SingleValueInstruction , ConversionInstruction {
489
494
public var fromInstance : Value { operand. value }
490
495
}
491
496
492
497
final public
493
- class UncheckedRefCastInst : SingleValueInstruction , UnaryInstruction {
498
+ class UncheckedRefCastInst : SingleValueInstruction , ConversionInstruction {
494
499
public var fromInstance : Value { operand. value }
495
500
}
496
501
@@ -543,10 +548,10 @@ class OpenExistentialRefInst : SingleValueInstruction, UnaryInstruction {
543
548
}
544
549
545
550
final public
546
- class InitExistentialValueInst : SingleValueInstruction , UnaryInstruction { }
551
+ class InitExistentialValueInst : SingleValueInstruction , UnaryInstruction , ForwardingInstruction { }
547
552
548
553
final public
549
- class OpenExistentialValueInst : SingleValueInstruction , UnaryInstruction { }
554
+ class OpenExistentialValueInst : SingleValueInstruction , UnaryInstruction , ForwardingInstruction { }
550
555
551
556
final public
552
557
class InitExistentialAddrInst : SingleValueInstruction , UnaryInstruction { }
@@ -641,10 +646,10 @@ final public class StringLiteralInst : SingleValueInstruction {
641
646
}
642
647
}
643
648
644
- final public class TupleInst : SingleValueInstruction {
649
+ final public class TupleInst : SingleValueInstruction , ForwardingInstruction {
645
650
}
646
651
647
- final public class TupleExtractInst : SingleValueInstruction , UnaryInstruction {
652
+ final public class TupleExtractInst : SingleValueInstruction , UnaryInstruction , ForwardingInstruction {
648
653
public var `tuple` : Value { operand. value }
649
654
public var fieldIndex : Int { bridged. TupleExtractInst_fieldIndex ( ) }
650
655
}
@@ -655,10 +660,10 @@ class TupleElementAddrInst : SingleValueInstruction, UnaryInstruction {
655
660
public var fieldIndex : Int { bridged. TupleElementAddrInst_fieldIndex ( ) }
656
661
}
657
662
658
- final public class StructInst : SingleValueInstruction {
663
+ final public class StructInst : SingleValueInstruction , ForwardingInstruction {
659
664
}
660
665
661
- final public class StructExtractInst : SingleValueInstruction , UnaryInstruction {
666
+ final public class StructExtractInst : SingleValueInstruction , UnaryInstruction , ForwardingInstruction {
662
667
public var `struct` : Value { operand. value }
663
668
public var fieldIndex : Int { bridged. StructExtractInst_fieldIndex ( ) }
664
669
}
@@ -673,14 +678,14 @@ public protocol EnumInstruction : AnyObject {
673
678
var caseIndex : Int { get }
674
679
}
675
680
676
- final public class EnumInst : SingleValueInstruction , EnumInstruction {
681
+ final public class EnumInst : SingleValueInstruction , EnumInstruction , ForwardingInstruction {
677
682
public var caseIndex : Int { bridged. EnumInst_caseIndex ( ) }
678
683
679
684
public var operand : Operand ? { operands. first }
680
685
public var payload : Value ? { operand? . value }
681
686
}
682
687
683
- final public class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction , EnumInstruction {
688
+ final public class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction , EnumInstruction , ForwardingInstruction {
684
689
public var `enum` : Value { operand. value }
685
690
public var caseIndex : Int { bridged. UncheckedEnumDataInst_caseIndex ( ) }
686
691
}
@@ -695,6 +700,10 @@ final public class UncheckedTakeEnumDataAddrInst : SingleValueInstruction, Unary
695
700
public var caseIndex : Int { bridged. UncheckedTakeEnumDataAddrInst_caseIndex ( ) }
696
701
}
697
702
703
+ final public class SelectEnumInst : SingleValueInstruction {
704
+ public var enumOperand : Operand { operands [ 0 ] }
705
+ }
706
+
698
707
final public class RefElementAddrInst : SingleValueInstruction , UnaryInstruction {
699
708
public var instance : Value { operand. value }
700
709
public var fieldIndex : Int { bridged. RefElementAddrInst_fieldIndex ( ) }
@@ -727,24 +736,24 @@ final public class KeyPathInst : SingleValueInstruction {
727
736
}
728
737
729
738
final public
730
- class UnconditionalCheckedCastInst : SingleValueInstruction , UnaryInstruction {
739
+ class UnconditionalCheckedCastInst : SingleValueInstruction , ConversionInstruction {
731
740
public override var mayTrap : Bool { true }
732
741
}
733
742
734
743
final public
735
- class ConvertFunctionInst : SingleValueInstruction , UnaryInstruction {
744
+ class ConvertFunctionInst : SingleValueInstruction , ConversionInstruction {
736
745
public var fromFunction : Value { operand. value }
737
746
}
738
747
739
748
final public
740
- class ThinToThickFunctionInst : SingleValueInstruction , UnaryInstruction { }
749
+ class ThinToThickFunctionInst : SingleValueInstruction , ConversionInstruction { }
741
750
742
751
final public
743
752
class ObjCExistentialMetatypeToObjectInst : SingleValueInstruction ,
744
- UnaryInstruction { }
753
+ ConversionInstruction { }
745
754
746
755
final public
747
- class ObjCMetatypeToObjectInst : SingleValueInstruction , UnaryInstruction { }
756
+ class ObjCMetatypeToObjectInst : SingleValueInstruction , ConversionInstruction { }
748
757
749
758
final public
750
759
class ValueToBridgeObjectInst : SingleValueInstruction , UnaryInstruction {
@@ -759,19 +768,23 @@ class GetAsyncContinuationAddrInst : SingleValueInstruction, UnaryInstruction {}
759
768
760
769
761
770
final public
762
- class MarkDependenceInst : SingleValueInstruction {
763
- public var value : Value { return operands [ 0 ] . value }
764
- public var base : Value { return operands [ 1 ] . value }
771
+ class MarkDependenceInst : SingleValueInstruction , ForwardingInstruction {
772
+ public var valueOperand : Operand { operands [ 0 ] }
773
+ public var baseOperand : Operand { operands [ 1 ] }
774
+ public var value : Value { return valueOperand. value }
775
+ public var base : Value { return baseOperand. value }
765
776
}
766
777
767
- final public class RefToBridgeObjectInst : SingleValueInstruction ,
768
- UnaryInstruction { }
778
+ final public class RefToBridgeObjectInst : SingleValueInstruction , ForwardingInstruction {
779
+ public var convertedOperand : Operand { operands [ 0 ] }
780
+ public var maskOperand : Operand { operands [ 1 ] }
781
+ }
769
782
770
783
final public class BridgeObjectToRefInst : SingleValueInstruction ,
771
- UnaryInstruction { }
784
+ ConversionInstruction { }
772
785
773
786
final public class BridgeObjectToWordInst : SingleValueInstruction ,
774
- UnaryInstruction { }
787
+ ConversionInstruction { }
775
788
776
789
public typealias AccessKind = swift . SILAccessKind
777
790
@@ -907,6 +920,15 @@ final public class ObjectInst : SingleValueInstruction {
907
920
}
908
921
}
909
922
923
+ final public class TuplePackExtractInst : SingleValueInstruction , ForwardingInstruction {
924
+ public var indexOperand : Operand { operands [ 0 ] }
925
+ public var tupleOperand : Operand { operands [ 1 ] }
926
+ }
927
+
928
+ final public class DifferentiableFunctionInst : SingleValueInstruction , ForwardingInstruction { }
929
+
930
+ final public class LinearFunctionInst : SingleValueInstruction , ForwardingInstruction { }
931
+
910
932
//===----------------------------------------------------------------------===//
911
933
// single-value allocation instructions
912
934
//===----------------------------------------------------------------------===//
@@ -961,11 +983,11 @@ final public class BeginCOWMutationInst : MultipleValueInstruction,
961
983
public var instanceResult : Value { return getResult ( index: 1 ) }
962
984
}
963
985
964
- final public class DestructureStructInst : MultipleValueInstruction , UnaryInstruction {
986
+ final public class DestructureStructInst : MultipleValueInstruction , UnaryInstruction , ForwardingInstruction {
965
987
public var `struct` : Value { operand. value }
966
988
}
967
989
968
- final public class DestructureTupleInst : MultipleValueInstruction , UnaryInstruction {
990
+ final public class DestructureTupleInst : MultipleValueInstruction , UnaryInstruction , ForwardingInstruction {
969
991
public var `tuple` : Value { operand. value }
970
992
}
971
993
@@ -1059,7 +1081,7 @@ final public class CondBranchInst : TermInst {
1059
1081
final public class SwitchValueInst : TermInst {
1060
1082
}
1061
1083
1062
- final public class SwitchEnumInst : TermInst {
1084
+ final public class SwitchEnumInst : TermInst , ForwardingInstruction {
1063
1085
1064
1086
public var enumOp : Value { operands [ 0 ] . value }
1065
1087
@@ -1102,7 +1124,7 @@ final public class DynamicMethodBranchInst : TermInst {
1102
1124
final public class AwaitAsyncContinuationInst : TermInst , UnaryInstruction {
1103
1125
}
1104
1126
1105
- final public class CheckedCastBranchInst : TermInst , UnaryInstruction {
1127
+ final public class CheckedCastBranchInst : TermInst , UnaryInstruction , ForwardingInstruction {
1106
1128
public var source : Value { operand. value }
1107
1129
public var successBlock : BasicBlock { bridged. CheckedCastBranch_getSuccessBlock ( ) . block }
1108
1130
public var failureBlock : BasicBlock { bridged. CheckedCastBranch_getFailureBlock ( ) . block }
0 commit comments