@@ -160,6 +160,16 @@ public class MultipleValueInstruction : Instruction {
160160 }
161161}
162162
163+ /// Instructions, which have a single operand.
164+ public protocol UnaryInstruction : AnyObject {
165+ var operands : OperandArray { get }
166+ var operand : Value { get }
167+ }
168+
169+ extension UnaryInstruction {
170+ public var operand : Value { operands [ 0 ] . value }
171+ }
172+
163173//===----------------------------------------------------------------------===//
164174// no-value instructions
165175//===----------------------------------------------------------------------===//
@@ -183,57 +193,41 @@ final public class CopyAddrInst : Instruction {
183193 public var destination : Value { return destinationOperand. value }
184194}
185195
186- final public class EndAccessInst : Instruction {
196+ final public class EndAccessInst : Instruction , UnaryInstruction {
187197 public var beginAccess : BeginAccessInst {
188- return operands [ 0 ] . value as! BeginAccessInst
198+ return operand as! BeginAccessInst
189199 }
190200}
191201
192- final public class EndBorrowInst : Instruction {
193- public var borrowedValue : Value { return operands [ 0 ] . value }
194- }
202+ final public class EndBorrowInst : Instruction , UnaryInstruction { }
195203
196- final public class DeallocStackInst : Instruction {
204+ final public class DeallocStackInst : Instruction , UnaryInstruction {
197205 public var allocstack : AllocStackInst {
198- return operands [ 0 ] . value as! AllocStackInst
206+ return operand as! AllocStackInst
199207 }
200208}
201209
202- final public class CondFailInst : Instruction {
203- public var condition : Value { operands [ 0 ] . value }
204-
210+ final public class CondFailInst : Instruction , UnaryInstruction {
205211 public override var mayTrap : Bool { true }
206212
207213 public var message : String { CondFailInst_getMessage ( bridged) . string }
208214}
209215
210- final public class FixLifetimeInst : Instruction {
211- public var value : Value { operands [ 0 ] . value }
212- }
216+ final public class FixLifetimeInst : Instruction , UnaryInstruction { }
213217
214- final public class DebugValueInst : Instruction {
215- public var value : Value { operands [ 0 ] . value }
216- }
218+ final public class DebugValueInst : Instruction , UnaryInstruction { }
217219
218- final public class DebugValueAddrInst : Instruction {
219- public var address : Value { operands [ 0 ] . value }
220- }
220+ final public class DebugValueAddrInst : Instruction , UnaryInstruction { }
221221
222222final public class UnconditionalCheckedCastAddrInst : Instruction {
223223 public override var mayTrap : Bool { true }
224224}
225225
226- final public class SetDeallocatingInst : Instruction {
227- public var reference : Value { operands [ 0 ] . value }
228- }
226+ final public class SetDeallocatingInst : Instruction , UnaryInstruction { }
229227
230- final public class DeallocRefInst : Instruction {
231- public var reference : Value { operands [ 0 ] . value }
232- }
228+ final public class DeallocRefInst : Instruction , UnaryInstruction { }
233229
234- public class RefCountingInst : Instruction {
235- final public var reference : Value { operands [ 0 ] . value }
236- }
230+ public class RefCountingInst : Instruction , UnaryInstruction { }
237231
238232final public class StrongRetainInst : RefCountingInst {
239233}
@@ -247,13 +241,9 @@ final public class StrongReleaseInst : RefCountingInst {
247241final public class ReleaseValueInst : RefCountingInst {
248242}
249243
250- final public class DestroyValueInst : Instruction {
251- public var value : Value { operands [ 0 ] . value }
252- }
244+ final public class DestroyValueInst : Instruction , UnaryInstruction { }
253245
254- final public class DestroyAddrInst : Instruction {
255- public var address : Value { operands [ 0 ] . value }
256- }
246+ final public class DestroyAddrInst : Instruction , UnaryInstruction { }
257247
258248final public class UnimplementedRefCountingInst : RefCountingInst { }
259249
@@ -266,43 +256,40 @@ final public class UnimplementedRefCountingInst : RefCountingInst {}
266256final public class UnimplementedSingleValueInst : SingleValueInstruction {
267257}
268258
269- final public class LoadInst : SingleValueInstruction {
270- public var address : Value { operands [ 0 ] . value }
271- }
259+ final public class LoadInst : SingleValueInstruction , UnaryInstruction { }
272260
273- final public class LoadBorrowInst : SingleValueInstruction {
274- public var address : Value { operands [ 0 ] . value }
275- }
261+ final public class LoadBorrowInst : SingleValueInstruction , UnaryInstruction { }
276262
277263final public class BuiltinInst : SingleValueInstruction { }
278264
279- final public class UpcastInst : SingleValueInstruction {
280- public var source : Value { operands [ 0 ] . value }
281- }
265+ final public class UpcastInst : SingleValueInstruction , UnaryInstruction { }
282266
283- final public class InitExistentialRefInst : SingleValueInstruction {
284- public var reference : Value { operands [ 0 ] . value }
285- }
267+ final public
268+ class UncheckedRefCastInst : SingleValueInstruction , UnaryInstruction { }
286269
287- final public class OpenExistentialRefInst : SingleValueInstruction {
288- public var existential : Value { operands [ 0 ] . value }
289- }
270+ final public
271+ class RawPointerToRefInst : SingleValueInstruction , UnaryInstruction { }
290272
291- final public class InitExistentialMetatypeInst : SingleValueInstruction {
292- public var existential : Value { operands [ 0 ] . value }
293- }
273+ final public
274+ class AddressToPointerInst : SingleValueInstruction , UnaryInstruction { }
294275
295- final public class OpenExistentialMetatypeInst : SingleValueInstruction {
296- public var existentialMetatype : Value { operands [ 0 ] . value }
297- }
276+ final public
277+ class InitExistentialRefInst : SingleValueInstruction , UnaryInstruction { }
298278
299- final public class ValueMetatypeInst : SingleValueInstruction {
300- public var value : Value { operands [ 0 ] . value }
301- }
279+ final public
280+ class OpenExistentialRefInst : SingleValueInstruction , UnaryInstruction { }
302281
303- final public class ExistentialMetatypeInst : SingleValueInstruction {
304- public var existential : Value { operands [ 0 ] . value }
305- }
282+ final public
283+ class InitExistentialMetatypeInst : SingleValueInstruction , UnaryInstruction { }
284+
285+ final public
286+ class OpenExistentialMetatypeInst : SingleValueInstruction , UnaryInstruction { }
287+
288+ final public
289+ class ValueMetatypeInst : SingleValueInstruction , UnaryInstruction { }
290+
291+ final public
292+ class ExistentialMetatypeInst : SingleValueInstruction , UnaryInstruction { }
306293
307294public class GlobalAccessInst : SingleValueInstruction {
308295 final public var global : GlobalVariable {
@@ -317,71 +304,77 @@ final public class GlobalValueInst : GlobalAccessInst {}
317304final public class TupleInst : SingleValueInstruction {
318305}
319306
320- final public class TupleExtractInst : SingleValueInstruction {
321- public var tuple : Value { operands [ 0 ] . value }
307+ final public class TupleExtractInst : SingleValueInstruction , UnaryInstruction {
322308 public var fieldIndex : Int { TupleExtractInst_fieldIndex ( bridged) }
323309}
324310
325- final public class TupleElementAddrInst : SingleValueInstruction {
326- public var tupleAddress : Value { operands [ 0 ] . value }
311+ final public
312+ class TupleElementAddrInst : SingleValueInstruction , UnaryInstruction {
327313 public var fieldIndex : Int { TupleElementAddrInst_fieldIndex ( bridged) }
328314}
329315
330316final public class StructInst : SingleValueInstruction {
331317}
332318
333- final public class StructExtractInst : SingleValueInstruction {
334- public var structOp : Value { operands [ 0 ] . value }
319+ final public class StructExtractInst : SingleValueInstruction , UnaryInstruction {
335320 public var fieldIndex : Int { StructExtractInst_fieldIndex ( bridged) }
336321}
337322
338- final public class StructElementAddrInst : SingleValueInstruction {
339- public var structAddress : Value { operands [ 0 ] . value }
323+ final public
324+ class StructElementAddrInst : SingleValueInstruction , UnaryInstruction {
340325 public var fieldIndex : Int { StructElementAddrInst_fieldIndex ( bridged) }
341326}
342327
343- final public class EnumInst : SingleValueInstruction {
344- public var payload : Value { operands [ 0 ] . value }
328+ final public class EnumInst : SingleValueInstruction , UnaryInstruction {
345329 public var caseIndex : Int { EnumInst_caseIndex ( bridged) }
346330}
347331
348- final public class UncheckedEnumDataInst : SingleValueInstruction {
349- public var enumOp : Value { operands [ 0 ] . value }
332+ final public
333+ class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction {
350334 public var caseIndex : Int { UncheckedEnumDataInst_caseIndex ( bridged) }
351335}
352336
353- final public class RefElementAddrInst : SingleValueInstruction {
354- public var reference : Value { operands [ 0 ] . value }
337+ final public class RefElementAddrInst : SingleValueInstruction , UnaryInstruction {
355338 public var fieldIndex : Int { RefElementAddrInst_fieldIndex ( bridged) }
356339}
357340
358- final public class RefTailAddrInst : SingleValueInstruction {
359- public var reference : Value { operands [ 0 ] . value }
360- }
341+ final public class RefTailAddrInst : SingleValueInstruction , UnaryInstruction { }
361342
362- final public class UnconditionalCheckedCastInst : SingleValueInstruction {
343+ final public
344+ class UnconditionalCheckedCastInst : SingleValueInstruction , UnaryInstruction {
363345 public override var mayTrap : Bool { true }
364346}
365347
366- final public class UnconditionalCheckedCastValueInst : SingleValueInstruction {
348+ final public
349+ class UnconditionalCheckedCastValueInst : SingleValueInstruction ,
350+ UnaryInstruction {
367351 public override var mayTrap : Bool { true }
368352}
369353
370- final public class BeginAccessInst : SingleValueInstruction {
371- public var address : Value { operands [ 0 ] . value }
372- }
354+ final public
355+ class ConvertFunctionInst : SingleValueInstruction , UnaryInstruction { }
373356
374- final public class BeginBorrowInst : SingleValueInstruction {
375- public var source : Value { operands [ 0 ] . value }
376- }
357+ final public
358+ class ThinToThickFunctionInst : SingleValueInstruction , UnaryInstruction { }
377359
378- final public class CopyValueInst : SingleValueInstruction {
379- public var source : Value { operands [ 0 ] . value }
380- }
360+ final public
361+ class ObjCExistentialMetatypeToObjectInst : SingleValueInstruction ,
362+ UnaryInstruction { }
381363
382- final public class ClassifyBridgeObjectInst : SingleValueInstruction {
383- public var reference : Value { operands [ 0 ] . value }
384- }
364+ final public
365+ class ObjCMetatypeToObjectInst : SingleValueInstruction , UnaryInstruction { }
366+
367+ final public
368+ class ValueToBridgeObjectInst : SingleValueInstruction , UnaryInstruction { }
369+
370+ final public class BeginAccessInst : SingleValueInstruction , UnaryInstruction { }
371+
372+ final public class BeginBorrowInst : SingleValueInstruction , UnaryInstruction { }
373+
374+ final public class CopyValueInst : SingleValueInstruction , UnaryInstruction { }
375+
376+ final public
377+ class ClassifyBridgeObjectInst : SingleValueInstruction , UnaryInstruction { }
385378
386379final public class PartialApplyInst : SingleValueInstruction , ApplySite {
387380 public var numArguments : Int { PartialApplyInst_numArguments ( bridged) }
@@ -449,10 +442,10 @@ public class TermInst : Instruction {
449442final public class UnreachableInst : TermInst {
450443}
451444
452- final public class ReturnInst : TermInst {
445+ final public class ReturnInst : TermInst , UnaryInstruction {
453446}
454447
455- final public class ThrowInst : TermInst {
448+ final public class ThrowInst : TermInst , UnaryInstruction {
456449}
457450
458451final public class YieldInst : TermInst {
@@ -524,15 +517,15 @@ final public class SwitchEnumAddrInst : TermInst {
524517final public class DynamicMethodBranchInst : TermInst {
525518}
526519
527- final public class AwaitAsyncContinuationInst : TermInst {
520+ final public class AwaitAsyncContinuationInst : TermInst , UnaryInstruction {
528521}
529522
530- final public class CheckedCastBranchInst : TermInst {
523+ final public class CheckedCastBranchInst : TermInst , UnaryInstruction {
531524}
532525
533- final public class CheckedCastAddrBranchInst : TermInst {
526+ final public class CheckedCastAddrBranchInst : TermInst , UnaryInstruction {
534527}
535528
536- final public class CheckedCastValueBranchInst : TermInst {
529+ final public class CheckedCastValueBranchInst : TermInst , UnaryInstruction {
537530}
538531
0 commit comments