@@ -184,12 +184,18 @@ extension UnaryInstruction {
184
184
final public class UnimplementedInstruction : Instruction {
185
185
}
186
186
187
- final public class StoreInst : Instruction {
187
+ public protocol StoringInstruction : AnyObject {
188
+ var operands : OperandArray { get }
189
+ }
190
+
191
+ extension StoringInstruction {
188
192
public var sourceOperand : Operand { return operands [ 0 ] }
189
193
public var destinationOperand : Operand { return operands [ 1 ] }
190
194
public var source : Value { return sourceOperand. value }
191
195
public var destination : Value { return destinationOperand. value }
196
+ }
192
197
198
+ final public class StoreInst : Instruction , StoringInstruction {
193
199
// must match with enum class StoreOwnershipQualifier
194
200
public enum StoreOwnership : Int {
195
201
case unqualified = 0 , initialize = 1 , assign = 2 , trivial = 3
@@ -199,11 +205,21 @@ final public class StoreInst : Instruction {
199
205
}
200
206
}
201
207
208
+ final public class StoreWeakInst : Instruction , StoringInstruction { }
209
+ final public class StoreUnownedInst : Instruction , StoringInstruction { }
210
+
202
211
final public class CopyAddrInst : Instruction {
203
212
public var sourceOperand : Operand { return operands [ 0 ] }
204
213
public var destinationOperand : Operand { return operands [ 1 ] }
205
214
public var source : Value { return sourceOperand. value }
206
215
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
+ }
207
223
}
208
224
209
225
final public class EndAccessInst : Instruction , UnaryInstruction {
@@ -262,6 +278,10 @@ final public class DestroyValueInst : Instruction, UnaryInstruction {}
262
278
263
279
final public class DestroyAddrInst : Instruction , UnaryInstruction { }
264
280
281
+ final public class InjectEnumAddrInst : Instruction , UnaryInstruction , EnumInstruction {
282
+ public var caseIndex : Int { InjectEnumAddrInst_caseIndex ( bridged) }
283
+ }
284
+
265
285
final public class UnimplementedRefCountingInst : RefCountingInst { }
266
286
267
287
//===----------------------------------------------------------------------===//
@@ -275,6 +295,8 @@ final public class UnimplementedSingleValueInst : SingleValueInstruction {
275
295
276
296
final public class LoadInst : SingleValueInstruction , UnaryInstruction { }
277
297
298
+ final public class LoadWeakInst : SingleValueInstruction , UnaryInstruction { }
299
+ final public class LoadUnownedInst : SingleValueInstruction , UnaryInstruction { }
278
300
final public class LoadBorrowInst : SingleValueInstruction , UnaryInstruction { }
279
301
280
302
final public class BuiltinInst : SingleValueInstruction {
@@ -362,6 +384,10 @@ final public class GlobalValueInst : GlobalAccessInst {}
362
384
363
385
final public class IntegerLiteralInst : SingleValueInstruction { }
364
386
387
+ final public class StringLiteralInst : SingleValueInstruction {
388
+ public var string : String { StringLiteralInst_getValue ( bridged) . string }
389
+ }
390
+
365
391
final public class TupleInst : SingleValueInstruction {
366
392
}
367
393
@@ -386,17 +412,28 @@ class StructElementAddrInst : SingleValueInstruction, UnaryInstruction {
386
412
public var fieldIndex : Int { StructElementAddrInst_fieldIndex ( bridged) }
387
413
}
388
414
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 {
390
420
public var caseIndex : Int { EnumInst_caseIndex ( bridged) }
391
421
392
422
public var operand : Value ? { operands. first? . value }
393
423
}
394
424
395
- final public
396
- class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction {
425
+ final public class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction , EnumInstruction {
397
426
public var caseIndex : Int { UncheckedEnumDataInst_caseIndex ( bridged) }
398
427
}
399
428
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
+
400
437
final public class RefElementAddrInst : SingleValueInstruction , UnaryInstruction {
401
438
public var fieldIndex : Int { RefElementAddrInst_fieldIndex ( bridged) }
402
439
}
@@ -430,13 +467,23 @@ class MarkDependenceInst : SingleValueInstruction {
430
467
public var base : Value { return operands [ 1 ] . value }
431
468
}
432
469
470
+ final public class RefToBridgeObjectInst : SingleValueInstruction ,
471
+ UnaryInstruction { }
472
+
433
473
final public class BridgeObjectToRefInst : SingleValueInstruction ,
434
474
UnaryInstruction { }
435
475
476
+ final public class BridgeObjectToWordInst : SingleValueInstruction ,
477
+ UnaryInstruction { }
478
+
436
479
final public class BeginAccessInst : SingleValueInstruction , UnaryInstruction { }
437
480
438
481
final public class BeginBorrowInst : SingleValueInstruction , UnaryInstruction { }
439
482
483
+ final public class ProjectBoxInst : SingleValueInstruction , UnaryInstruction {
484
+ public var fieldIndex : Int { ProjectBoxInst_fieldIndex ( bridged) }
485
+ }
486
+
440
487
final public class CopyValueInst : SingleValueInstruction , UnaryInstruction { }
441
488
442
489
final public class EndCOWMutationInst : SingleValueInstruction , UnaryInstruction { }
@@ -446,6 +493,19 @@ class ClassifyBridgeObjectInst : SingleValueInstruction, UnaryInstruction {}
446
493
447
494
final public class PartialApplyInst : SingleValueInstruction , ApplySite {
448
495
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
+ }
449
509
}
450
510
451
511
final public class ApplyInst : SingleValueInstruction , FullApplySite {
@@ -520,8 +580,6 @@ final public class BeginApplyInst : MultipleValueInstruction, FullApplySite {
520
580
public var singleDirectResult : Value ? { nil }
521
581
}
522
582
523
- public final class RefToBridgeObjectInst : MultipleValueInstruction { }
524
-
525
583
//===----------------------------------------------------------------------===//
526
584
// terminator instructions
527
585
//===----------------------------------------------------------------------===//
@@ -565,6 +623,26 @@ final public class BranchInst : TermInst {
565
623
}
566
624
567
625
final 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
+ }
568
646
}
569
647
570
648
final public class SwitchValueInst : TermInst {
0 commit comments