@@ -184,12 +184,18 @@ extension UnaryInstruction {
184184final public class UnimplementedInstruction : Instruction {
185185}
186186
187- final public class StoreInst : Instruction {
187+ public protocol StoringInstruction : AnyObject {
188+ var operands : OperandArray { get }
189+ }
190+
191+ extension StoringInstruction {
188192 public var sourceOperand : Operand { return operands [ 0 ] }
189193 public var destinationOperand : Operand { return operands [ 1 ] }
190194 public var source : Value { return sourceOperand. value }
191195 public var destination : Value { return destinationOperand. value }
196+ }
192197
198+ final public class StoreInst : Instruction , StoringInstruction {
193199 // must match with enum class StoreOwnershipQualifier
194200 public enum StoreOwnership : Int {
195201 case unqualified = 0 , initialize = 1 , assign = 2 , trivial = 3
@@ -199,11 +205,21 @@ final public class StoreInst : Instruction {
199205 }
200206}
201207
208+ final public class StoreWeakInst : Instruction , StoringInstruction { }
209+ final public class StoreUnownedInst : Instruction , StoringInstruction { }
210+
202211final public class CopyAddrInst : Instruction {
203212 public var sourceOperand : Operand { return operands [ 0 ] }
204213 public var destinationOperand : Operand { return operands [ 1 ] }
205214 public var source : Value { return sourceOperand. value }
206215 public var destination : Value { return destinationOperand. value }
216+
217+ public var isTakeOfSrc : Bool {
218+ CopyAddrInst_isTakeOfSrc ( bridged) != 0
219+ }
220+ public var isInitializationOfDest : Bool {
221+ CopyAddrInst_isInitializationOfDest ( bridged) != 0
222+ }
207223}
208224
209225final public class EndAccessInst : Instruction , UnaryInstruction {
@@ -262,6 +278,10 @@ final public class DestroyValueInst : Instruction, UnaryInstruction {}
262278
263279final public class DestroyAddrInst : Instruction , UnaryInstruction { }
264280
281+ final public class InjectEnumAddrInst : Instruction , UnaryInstruction , EnumInstruction {
282+ public var caseIndex : Int { InjectEnumAddrInst_caseIndex ( bridged) }
283+ }
284+
265285final public class UnimplementedRefCountingInst : RefCountingInst { }
266286
267287//===----------------------------------------------------------------------===//
@@ -275,6 +295,8 @@ final public class UnimplementedSingleValueInst : SingleValueInstruction {
275295
276296final public class LoadInst : SingleValueInstruction , UnaryInstruction { }
277297
298+ final public class LoadWeakInst : SingleValueInstruction , UnaryInstruction { }
299+ final public class LoadUnownedInst : SingleValueInstruction , UnaryInstruction { }
278300final public class LoadBorrowInst : SingleValueInstruction , UnaryInstruction { }
279301
280302final public class BuiltinInst : SingleValueInstruction {
@@ -362,6 +384,10 @@ final public class GlobalValueInst : GlobalAccessInst {}
362384
363385final public class IntegerLiteralInst : SingleValueInstruction { }
364386
387+ final public class StringLiteralInst : SingleValueInstruction {
388+ public var string : String { StringLiteralInst_getValue ( bridged) . string }
389+ }
390+
365391final public class TupleInst : SingleValueInstruction {
366392}
367393
@@ -386,17 +412,28 @@ class StructElementAddrInst : SingleValueInstruction, UnaryInstruction {
386412 public var fieldIndex : Int { StructElementAddrInst_fieldIndex ( bridged) }
387413}
388414
389- final public class EnumInst : SingleValueInstruction {
415+ public protocol EnumInstruction : AnyObject {
416+ var caseIndex : Int { get }
417+ }
418+
419+ final public class EnumInst : SingleValueInstruction , UnaryInstruction , EnumInstruction {
390420 public var caseIndex : Int { EnumInst_caseIndex ( bridged) }
391421
392422 public var operand : Value ? { operands. first? . value }
393423}
394424
395- final public
396- class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction {
425+ final public class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction , EnumInstruction {
397426 public var caseIndex : Int { UncheckedEnumDataInst_caseIndex ( bridged) }
398427}
399428
429+ final public class InitEnumDataAddrInst : SingleValueInstruction , UnaryInstruction , EnumInstruction {
430+ public var caseIndex : Int { InitEnumDataAddrInst_caseIndex ( bridged) }
431+ }
432+
433+ final public class UncheckedTakeEnumDataAddrInst : SingleValueInstruction , UnaryInstruction , EnumInstruction {
434+ public var caseIndex : Int { UncheckedTakeEnumDataAddrInst_caseIndex ( bridged) }
435+ }
436+
400437final public class RefElementAddrInst : SingleValueInstruction , UnaryInstruction {
401438 public var fieldIndex : Int { RefElementAddrInst_fieldIndex ( bridged) }
402439}
@@ -430,13 +467,23 @@ class MarkDependenceInst : SingleValueInstruction {
430467 public var base : Value { return operands [ 1 ] . value }
431468}
432469
470+ final public class RefToBridgeObjectInst : SingleValueInstruction ,
471+ UnaryInstruction { }
472+
433473final public class BridgeObjectToRefInst : SingleValueInstruction ,
434474 UnaryInstruction { }
435475
476+ final public class BridgeObjectToWordInst : SingleValueInstruction ,
477+ UnaryInstruction { }
478+
436479final public class BeginAccessInst : SingleValueInstruction , UnaryInstruction { }
437480
438481final public class BeginBorrowInst : SingleValueInstruction , UnaryInstruction { }
439482
483+ final public class ProjectBoxInst : SingleValueInstruction , UnaryInstruction {
484+ public var fieldIndex : Int { ProjectBoxInst_fieldIndex ( bridged) }
485+ }
486+
440487final public class CopyValueInst : SingleValueInstruction , UnaryInstruction { }
441488
442489final public class EndCOWMutationInst : SingleValueInstruction , UnaryInstruction { }
@@ -446,6 +493,19 @@ class ClassifyBridgeObjectInst : SingleValueInstruction, UnaryInstruction {}
446493
447494final public class PartialApplyInst : SingleValueInstruction , ApplySite {
448495 public var numArguments : Int { PartialApplyInst_numArguments ( bridged) }
496+ public var isOnStack : Bool { PartialApplyInst_isOnStack ( bridged) != 0 }
497+
498+ public func calleeArgIndex( callerArgIndex: Int ) -> Int {
499+ PartialApply_getCalleeArgIndexOfFirstAppliedArg ( bridged) + callerArgIndex
500+ }
501+
502+ public func callerArgIndex( calleeArgIndex: Int ) -> Int ? {
503+ let firstIdx = PartialApply_getCalleeArgIndexOfFirstAppliedArg ( bridged)
504+ if calleeArgIndex >= firstIdx {
505+ return calleeArgIndex - firstIdx
506+ }
507+ return nil
508+ }
449509}
450510
451511final public class ApplyInst : SingleValueInstruction , FullApplySite {
@@ -520,8 +580,6 @@ final public class BeginApplyInst : MultipleValueInstruction, FullApplySite {
520580 public var singleDirectResult : Value ? { nil }
521581}
522582
523- public final class RefToBridgeObjectInst : MultipleValueInstruction { }
524-
525583//===----------------------------------------------------------------------===//
526584// terminator instructions
527585//===----------------------------------------------------------------------===//
@@ -565,6 +623,26 @@ final public class BranchInst : TermInst {
565623}
566624
567625final public class CondBranchInst : TermInst {
626+ var trueBlock : BasicBlock { successors [ 0 ] }
627+ var falseBlock : BasicBlock { successors [ 1 ] }
628+
629+ var condition : Value { operands [ 0 ] . value }
630+
631+ var trueOperands : OperandArray { operands [ 1 ... CondBranchInst_getNumTrueArgs ( bridged) ] }
632+ var falseOperands : OperandArray {
633+ let ops = operands
634+ return ops [ ( CondBranchInst_getNumTrueArgs ( bridged) &+ 1 ) ..< ops. count]
635+ }
636+
637+ public func getArgument( for operand: Operand ) -> Argument {
638+ let argIdx = operand. index - 1
639+ let numTrueArgs = CondBranchInst_getNumTrueArgs ( bridged)
640+ if ( 0 ..< numTrueArgs) . contains ( argIdx) {
641+ return trueBlock. arguments [ argIdx]
642+ } else {
643+ return falseBlock. arguments [ argIdx - numTrueArgs]
644+ }
645+ }
568646}
569647
570648final public class SwitchValueInst : TermInst {
0 commit comments