@@ -160,6 +160,16 @@ public class MultipleValueInstruction : Instruction {
160
160
}
161
161
}
162
162
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
+
163
173
//===----------------------------------------------------------------------===//
164
174
// no-value instructions
165
175
//===----------------------------------------------------------------------===//
@@ -183,57 +193,41 @@ final public class CopyAddrInst : Instruction {
183
193
public var destination : Value { return destinationOperand. value }
184
194
}
185
195
186
- final public class EndAccessInst : Instruction {
196
+ final public class EndAccessInst : Instruction , UnaryInstruction {
187
197
public var beginAccess : BeginAccessInst {
188
- return operands [ 0 ] . value as! BeginAccessInst
198
+ return operand as! BeginAccessInst
189
199
}
190
200
}
191
201
192
- final public class EndBorrowInst : Instruction {
193
- public var borrowedValue : Value { return operands [ 0 ] . value }
194
- }
202
+ final public class EndBorrowInst : Instruction , UnaryInstruction { }
195
203
196
- final public class DeallocStackInst : Instruction {
204
+ final public class DeallocStackInst : Instruction , UnaryInstruction {
197
205
public var allocstack : AllocStackInst {
198
- return operands [ 0 ] . value as! AllocStackInst
206
+ return operand as! AllocStackInst
199
207
}
200
208
}
201
209
202
- final public class CondFailInst : Instruction {
203
- public var condition : Value { operands [ 0 ] . value }
204
-
210
+ final public class CondFailInst : Instruction , UnaryInstruction {
205
211
public override var mayTrap : Bool { true }
206
212
207
213
public var message : String { CondFailInst_getMessage ( bridged) . string }
208
214
}
209
215
210
- final public class FixLifetimeInst : Instruction {
211
- public var value : Value { operands [ 0 ] . value }
212
- }
216
+ final public class FixLifetimeInst : Instruction , UnaryInstruction { }
213
217
214
- final public class DebugValueInst : Instruction {
215
- public var value : Value { operands [ 0 ] . value }
216
- }
218
+ final public class DebugValueInst : Instruction , UnaryInstruction { }
217
219
218
- final public class DebugValueAddrInst : Instruction {
219
- public var address : Value { operands [ 0 ] . value }
220
- }
220
+ final public class DebugValueAddrInst : Instruction , UnaryInstruction { }
221
221
222
222
final public class UnconditionalCheckedCastAddrInst : Instruction {
223
223
public override var mayTrap : Bool { true }
224
224
}
225
225
226
- final public class SetDeallocatingInst : Instruction {
227
- public var reference : Value { operands [ 0 ] . value }
228
- }
226
+ final public class SetDeallocatingInst : Instruction , UnaryInstruction { }
229
227
230
- final public class DeallocRefInst : Instruction {
231
- public var reference : Value { operands [ 0 ] . value }
232
- }
228
+ final public class DeallocRefInst : Instruction , UnaryInstruction { }
233
229
234
- public class RefCountingInst : Instruction {
235
- final public var reference : Value { operands [ 0 ] . value }
236
- }
230
+ public class RefCountingInst : Instruction , UnaryInstruction { }
237
231
238
232
final public class StrongRetainInst : RefCountingInst {
239
233
}
@@ -247,13 +241,9 @@ final public class StrongReleaseInst : RefCountingInst {
247
241
final public class ReleaseValueInst : RefCountingInst {
248
242
}
249
243
250
- final public class DestroyValueInst : Instruction {
251
- public var value : Value { operands [ 0 ] . value }
252
- }
244
+ final public class DestroyValueInst : Instruction , UnaryInstruction { }
253
245
254
- final public class DestroyAddrInst : Instruction {
255
- public var address : Value { operands [ 0 ] . value }
256
- }
246
+ final public class DestroyAddrInst : Instruction , UnaryInstruction { }
257
247
258
248
final public class UnimplementedRefCountingInst : RefCountingInst { }
259
249
@@ -266,43 +256,40 @@ final public class UnimplementedRefCountingInst : RefCountingInst {}
266
256
final public class UnimplementedSingleValueInst : SingleValueInstruction {
267
257
}
268
258
269
- final public class LoadInst : SingleValueInstruction {
270
- public var address : Value { operands [ 0 ] . value }
271
- }
259
+ final public class LoadInst : SingleValueInstruction , UnaryInstruction { }
272
260
273
- final public class LoadBorrowInst : SingleValueInstruction {
274
- public var address : Value { operands [ 0 ] . value }
275
- }
261
+ final public class LoadBorrowInst : SingleValueInstruction , UnaryInstruction { }
276
262
277
263
final public class BuiltinInst : SingleValueInstruction { }
278
264
279
- final public class UpcastInst : SingleValueInstruction {
280
- public var source : Value { operands [ 0 ] . value }
281
- }
265
+ final public class UpcastInst : SingleValueInstruction , UnaryInstruction { }
282
266
283
- final public class InitExistentialRefInst : SingleValueInstruction {
284
- public var reference : Value { operands [ 0 ] . value }
285
- }
267
+ final public
268
+ class UncheckedRefCastInst : SingleValueInstruction , UnaryInstruction { }
286
269
287
- final public class OpenExistentialRefInst : SingleValueInstruction {
288
- public var existential : Value { operands [ 0 ] . value }
289
- }
270
+ final public
271
+ class RawPointerToRefInst : SingleValueInstruction , UnaryInstruction { }
290
272
291
- final public class InitExistentialMetatypeInst : SingleValueInstruction {
292
- public var existential : Value { operands [ 0 ] . value }
293
- }
273
+ final public
274
+ class AddressToPointerInst : SingleValueInstruction , UnaryInstruction { }
294
275
295
- final public class OpenExistentialMetatypeInst : SingleValueInstruction {
296
- public var existentialMetatype : Value { operands [ 0 ] . value }
297
- }
276
+ final public
277
+ class InitExistentialRefInst : SingleValueInstruction , UnaryInstruction { }
298
278
299
- final public class ValueMetatypeInst : SingleValueInstruction {
300
- public var value : Value { operands [ 0 ] . value }
301
- }
279
+ final public
280
+ class OpenExistentialRefInst : SingleValueInstruction , UnaryInstruction { }
302
281
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 { }
306
293
307
294
public class GlobalAccessInst : SingleValueInstruction {
308
295
final public var global : GlobalVariable {
@@ -317,71 +304,77 @@ final public class GlobalValueInst : GlobalAccessInst {}
317
304
final public class TupleInst : SingleValueInstruction {
318
305
}
319
306
320
- final public class TupleExtractInst : SingleValueInstruction {
321
- public var tuple : Value { operands [ 0 ] . value }
307
+ final public class TupleExtractInst : SingleValueInstruction , UnaryInstruction {
322
308
public var fieldIndex : Int { TupleExtractInst_fieldIndex ( bridged) }
323
309
}
324
310
325
- final public class TupleElementAddrInst : SingleValueInstruction {
326
- public var tupleAddress : Value { operands [ 0 ] . value }
311
+ final public
312
+ class TupleElementAddrInst : SingleValueInstruction , UnaryInstruction {
327
313
public var fieldIndex : Int { TupleElementAddrInst_fieldIndex ( bridged) }
328
314
}
329
315
330
316
final public class StructInst : SingleValueInstruction {
331
317
}
332
318
333
- final public class StructExtractInst : SingleValueInstruction {
334
- public var structOp : Value { operands [ 0 ] . value }
319
+ final public class StructExtractInst : SingleValueInstruction , UnaryInstruction {
335
320
public var fieldIndex : Int { StructExtractInst_fieldIndex ( bridged) }
336
321
}
337
322
338
- final public class StructElementAddrInst : SingleValueInstruction {
339
- public var structAddress : Value { operands [ 0 ] . value }
323
+ final public
324
+ class StructElementAddrInst : SingleValueInstruction , UnaryInstruction {
340
325
public var fieldIndex : Int { StructElementAddrInst_fieldIndex ( bridged) }
341
326
}
342
327
343
- final public class EnumInst : SingleValueInstruction {
344
- public var payload : Value { operands [ 0 ] . value }
328
+ final public class EnumInst : SingleValueInstruction , UnaryInstruction {
345
329
public var caseIndex : Int { EnumInst_caseIndex ( bridged) }
346
330
}
347
331
348
- final public class UncheckedEnumDataInst : SingleValueInstruction {
349
- public var enumOp : Value { operands [ 0 ] . value }
332
+ final public
333
+ class UncheckedEnumDataInst : SingleValueInstruction , UnaryInstruction {
350
334
public var caseIndex : Int { UncheckedEnumDataInst_caseIndex ( bridged) }
351
335
}
352
336
353
- final public class RefElementAddrInst : SingleValueInstruction {
354
- public var reference : Value { operands [ 0 ] . value }
337
+ final public class RefElementAddrInst : SingleValueInstruction , UnaryInstruction {
355
338
public var fieldIndex : Int { RefElementAddrInst_fieldIndex ( bridged) }
356
339
}
357
340
358
- final public class RefTailAddrInst : SingleValueInstruction {
359
- public var reference : Value { operands [ 0 ] . value }
360
- }
341
+ final public class RefTailAddrInst : SingleValueInstruction , UnaryInstruction { }
361
342
362
- final public class UnconditionalCheckedCastInst : SingleValueInstruction {
343
+ final public
344
+ class UnconditionalCheckedCastInst : SingleValueInstruction , UnaryInstruction {
363
345
public override var mayTrap : Bool { true }
364
346
}
365
347
366
- final public class UnconditionalCheckedCastValueInst : SingleValueInstruction {
348
+ final public
349
+ class UnconditionalCheckedCastValueInst : SingleValueInstruction ,
350
+ UnaryInstruction {
367
351
public override var mayTrap : Bool { true }
368
352
}
369
353
370
- final public class BeginAccessInst : SingleValueInstruction {
371
- public var address : Value { operands [ 0 ] . value }
372
- }
354
+ final public
355
+ class ConvertFunctionInst : SingleValueInstruction , UnaryInstruction { }
373
356
374
- final public class BeginBorrowInst : SingleValueInstruction {
375
- public var source : Value { operands [ 0 ] . value }
376
- }
357
+ final public
358
+ class ThinToThickFunctionInst : SingleValueInstruction , UnaryInstruction { }
377
359
378
- final public class CopyValueInst : SingleValueInstruction {
379
- public var source : Value { operands [ 0 ] . value }
380
- }
360
+ final public
361
+ class ObjCExistentialMetatypeToObjectInst : SingleValueInstruction ,
362
+ UnaryInstruction { }
381
363
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 { }
385
378
386
379
final public class PartialApplyInst : SingleValueInstruction , ApplySite {
387
380
public var numArguments : Int { PartialApplyInst_numArguments ( bridged) }
@@ -449,10 +442,10 @@ public class TermInst : Instruction {
449
442
final public class UnreachableInst : TermInst {
450
443
}
451
444
452
- final public class ReturnInst : TermInst {
445
+ final public class ReturnInst : TermInst , UnaryInstruction {
453
446
}
454
447
455
- final public class ThrowInst : TermInst {
448
+ final public class ThrowInst : TermInst , UnaryInstruction {
456
449
}
457
450
458
451
final public class YieldInst : TermInst {
@@ -524,15 +517,15 @@ final public class SwitchEnumAddrInst : TermInst {
524
517
final public class DynamicMethodBranchInst : TermInst {
525
518
}
526
519
527
- final public class AwaitAsyncContinuationInst : TermInst {
520
+ final public class AwaitAsyncContinuationInst : TermInst , UnaryInstruction {
528
521
}
529
522
530
- final public class CheckedCastBranchInst : TermInst {
523
+ final public class CheckedCastBranchInst : TermInst , UnaryInstruction {
531
524
}
532
525
533
- final public class CheckedCastAddrBranchInst : TermInst {
526
+ final public class CheckedCastAddrBranchInst : TermInst , UnaryInstruction {
534
527
}
535
528
536
- final public class CheckedCastValueBranchInst : TermInst {
529
+ final public class CheckedCastValueBranchInst : TermInst , UnaryInstruction {
537
530
}
538
531
0 commit comments