Skip to content

Commit d8b9010

Browse files
committed
Add Swift SIL instructions needed by AddressUseVisitor
1 parent d0344e5 commit d8b9010

File tree

1 file changed

+88
-4
lines changed

1 file changed

+88
-4
lines changed

SwiftCompilerSources/Sources/SIL/Instruction.swift

Lines changed: 88 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,26 @@ public class Instruction : CustomStringConvertible, Hashable {
127127
return bridged.mayBeDeinitBarrierNotConsideringSideEffects()
128128
}
129129

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+
130150
public func visitReferencedFunctions(_ cl: (Function) -> ()) {
131151
}
132152

@@ -283,6 +303,10 @@ final public class AssignInst : Instruction, StoringInstruction {
283303
}
284304
}
285305

306+
final public class AssignByWrapperInst : Instruction {}
307+
308+
final public class AssignOrInitInst : Instruction {}
309+
286310
final public class CopyAddrInst : Instruction {
287311
public var sourceOperand: Operand { return operands[0] }
288312
public var destinationOperand: Operand { return operands[1] }
@@ -297,6 +321,13 @@ final public class CopyAddrInst : Instruction {
297321
}
298322
}
299323

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+
300331
final public class EndAccessInst : Instruction, UnaryInstruction {
301332
public var beginAccess: BeginAccessInst {
302333
return operand.value as! BeginAccessInst
@@ -351,6 +382,8 @@ final public class CondFailInst : Instruction, UnaryInstruction {
351382
public var message: StringRef { StringRef(bridged: bridged.CondFailInst_getMessage()) }
352383
}
353384

385+
final public class MarkFunctionEscapeInst : Instruction {}
386+
354387
final public class HopToExecutorInst : Instruction, UnaryInstruction {}
355388

356389
final public class FixLifetimeInst : Instruction, UnaryInstruction {}
@@ -420,6 +453,12 @@ final public class RetainValueInst : RefCountingInst {
420453
public var value: Value { return operand.value }
421454
}
422455

456+
final public class RetainValueAddrInst : RefCountingInst {
457+
}
458+
459+
final public class ReleaseValueAddrInst : RefCountingInst {
460+
}
461+
423462
final public class StrongReleaseInst : RefCountingInst {
424463
public var instance: Value { operand.value }
425464
}
@@ -539,6 +578,9 @@ class UncheckedRefCastInst : SingleValueInstruction, ConversionInstruction {
539578
public var fromInstance: Value { operand.value }
540579
}
541580

581+
final public
582+
class UncheckedRefCastAddrInst : Instruction {}
583+
542584
final public class UncheckedAddrCastInst : SingleValueInstruction, UnaryInstruction {
543585
public var fromAddress: Value { operand.value }
544586
}
@@ -577,6 +619,12 @@ class IndexAddrInst : SingleValueInstruction {
577619
}
578620
}
579621

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+
580628
final public
581629
class InitExistentialRefInst : SingleValueInstruction, UnaryInstruction {
582630
public var instance: Value { operand.value }
@@ -596,6 +644,12 @@ class OpenExistentialValueInst : SingleValueInstruction, UnaryInstruction, Forwa
596644
final public
597645
class InitExistentialAddrInst : SingleValueInstruction, UnaryInstruction {}
598646

647+
final public
648+
class DeinitExistentialAddrInst : Instruction {}
649+
650+
final public
651+
class DeinitExistentialValueInst : Instruction {}
652+
599653
final public
600654
class OpenExistentialAddrInst : SingleValueInstruction, UnaryInstruction {}
601655

@@ -699,8 +753,7 @@ final public class StringLiteralInst : SingleValueInstruction {
699753
}
700754
}
701755

702-
final public class TupleInst : SingleValueInstruction, ForwardingInstruction {
703-
}
756+
final public class TupleInst : SingleValueInstruction, ForwardingInstruction {}
704757

705758
final public class TupleExtractInst : SingleValueInstruction, UnaryInstruction, ForwardingInstruction {
706759
public var `tuple`: Value { operand.value }
@@ -713,6 +766,8 @@ class TupleElementAddrInst : SingleValueInstruction, UnaryInstruction {
713766
public var fieldIndex: Int { bridged.TupleElementAddrInst_fieldIndex() }
714767
}
715768

769+
final public class TupleAddrConstructorInst : Instruction {}
770+
716771
final public class StructInst : SingleValueInstruction, ForwardingInstruction {
717772
}
718773

@@ -873,10 +928,14 @@ public protocol ScopedInstruction {
873928
}
874929

875930
extension BeginAccessInst : ScopedInstruction {
876-
public typealias EndInstructions = LazyMapSequence<LazyFilterSequence<LazyMapSequence<UseList, EndAccessInst?>>, EndAccessInst>
931+
public typealias EndInstructions = LazyMapSequence<LazyFilterSequence<UseList>, EndAccessInst>
877932

878933
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 }
880939
}
881940
}
882941

@@ -951,6 +1010,15 @@ final public class IsEscapingClosureInst : SingleValueInstruction, UnaryInstruct
9511010
final public
9521011
class MarkUnresolvedNonCopyableValueInst : SingleValueInstruction, UnaryInstruction {}
9531012

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+
9541022
final public class ObjectInst : SingleValueInstruction {
9551023
public var baseOperands: OperandArray {
9561024
operands[0..<bridged.ObjectInst_getNumBaseElements()]
@@ -970,10 +1038,23 @@ final public class TuplePackExtractInst: SingleValueInstruction, ForwardingInstr
9701038
public var tupleOperand: Operand { operands[1] }
9711039
}
9721040

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+
9731050
final public class DifferentiableFunctionInst: SingleValueInstruction, ForwardingInstruction {}
9741051

9751052
final public class LinearFunctionInst: SingleValueInstruction, ForwardingInstruction {}
9761053

1054+
final public class ProjectBlockStorageInst: SingleValueInstruction, UnaryInstruction {}
1055+
1056+
final public class InitBlockStorageHeaderInst: SingleValueInstruction {}
1057+
9771058
//===----------------------------------------------------------------------===//
9781059
// single-value allocation instructions
9791060
//===----------------------------------------------------------------------===//
@@ -1193,6 +1274,9 @@ final public class SwitchEnumInst : TermInst, ForwardingInstruction {
11931274
final public class SwitchEnumAddrInst : TermInst {
11941275
}
11951276

1277+
final public class SelectEnumAddrInst : TermInst {
1278+
}
1279+
11961280
final public class DynamicMethodBranchInst : TermInst {
11971281
}
11981282

0 commit comments

Comments
 (0)