@@ -88,6 +88,19 @@ struct BridgedValue {
8888 }
8989};
9090
91+ struct OptionalBridgedValue {
92+ OptionalSwiftObject obj;
93+ };
94+
95+ inline swift::ValueOwnershipKind castToOwnership (BridgedValue::Ownership ownership) {
96+ switch (ownership) {
97+ case BridgedValue::Ownership::Unowned: return swift::OwnershipKind::Unowned;
98+ case BridgedValue::Ownership::Owned: return swift::OwnershipKind::Owned;
99+ case BridgedValue::Ownership::Guaranteed: return swift::OwnershipKind::Guaranteed;
100+ case BridgedValue::Ownership::None: return swift::OwnershipKind::None;
101+ }
102+ }
103+
91104// This is the layout of a class existential.
92105struct BridgeValueExistential {
93106 BridgedValue value;
@@ -301,8 +314,106 @@ struct BridgedGlobalVar {
301314 bool isLet () const { return getGlobal ()->isLet (); }
302315};
303316
317+ struct BridgedInstruction {
318+ SwiftObject obj;
319+ };
320+
321+ typedef struct {
322+ OptionalSwiftObject obj;
323+ } OptionalBridgedInstruction;
324+
325+ typedef struct {
326+ SwiftObject obj;
327+ } BridgedArgument;
328+
329+ typedef struct {
330+ OptionalSwiftObject obj;
331+ } OptionalBridgedArgument;
332+
333+ struct OptionalBridgedBasicBlock {
334+ OptionalSwiftObject obj;
335+
336+ swift::SILBasicBlock *getBlock () const {
337+ return obj ? static_cast <swift::SILBasicBlock *>(obj) : nullptr ;
338+ }
339+ };
340+
304341struct BridgedBasicBlock {
305342 SwiftObject obj;
343+
344+ swift::SILBasicBlock * _Nonnull getBlock () const {
345+ return static_cast <swift::SILBasicBlock *>(obj);
346+ }
347+
348+ std::string getDebugDescription () const ;
349+
350+ SWIFT_IMPORT_UNSAFE
351+ OptionalBridgedBasicBlock getNext () const {
352+ auto iter = std::next (getBlock ()->getIterator ());
353+ if (iter == getBlock ()->getParent ()->end ())
354+ return {nullptr };
355+ return {&*iter};
356+ }
357+
358+ SWIFT_IMPORT_UNSAFE
359+ OptionalBridgedBasicBlock getPrevious () const {
360+ auto iter = std::next (getBlock ()->getReverseIterator ());
361+ if (iter == getBlock ()->getParent ()->rend ())
362+ return {nullptr };
363+ return {&*iter};
364+ }
365+
366+ SWIFT_IMPORT_UNSAFE
367+ BridgedFunction getFunction () const {
368+ return {getBlock ()->getParent ()};
369+ }
370+
371+ SWIFT_IMPORT_UNSAFE
372+ OptionalBridgedInstruction getFirstInst () const {
373+ if (getBlock ()->empty ())
374+ return {nullptr };
375+ return {getBlock ()->front ().asSILNode ()};
376+ }
377+
378+ SWIFT_IMPORT_UNSAFE
379+ OptionalBridgedInstruction getLastInst () const {
380+ if (getBlock ()->empty ())
381+ return {nullptr };
382+ return {getBlock ()->back ().asSILNode ()};
383+ }
384+
385+ SwiftInt getNumArguments () const {
386+ return getBlock ()->getNumArguments ();
387+ }
388+
389+ SWIFT_IMPORT_UNSAFE
390+ BridgedArgument getArgument (SwiftInt index) const {
391+ return {getBlock ()->getArgument (index)};
392+ }
393+
394+ SWIFT_IMPORT_UNSAFE
395+ BridgedArgument addBlockArgument (swift::SILType type, BridgedValue::Ownership ownership) const {
396+ return {getBlock ()->createPhiArgument (type, castToOwnership (ownership))};
397+ }
398+
399+ void eraseArgument (SwiftInt index) const {
400+ getBlock ()->eraseArgument (index);
401+ }
402+
403+ void moveAllInstructionsToBegin (BridgedBasicBlock dest) const {
404+ dest.getBlock ()->spliceAtBegin (getBlock ());
405+ }
406+
407+ void moveAllInstructionsToEnd (BridgedBasicBlock dest) const {
408+ dest.getBlock ()->spliceAtEnd (getBlock ());
409+ }
410+
411+ void moveArgumentsTo (BridgedBasicBlock dest) const {
412+ dest.getBlock ()->moveArgumentList (getBlock ());
413+ }
414+
415+ SWIFT_IMPORT_UNSAFE
416+ inline OptionalBridgedSuccessor getFirstPred () const ;
306417};
307418
308419struct BridgedSuccessor {
@@ -333,34 +444,10 @@ struct BridgedSuccessorArray {
333444 SwiftInt count;
334445};
335446
336- struct OptionalBridgedBasicBlock {
337- OptionalSwiftObject obj;
338- };
339-
340- typedef struct {
341- SwiftObject obj;
342- } BridgedArgument;
343-
344- typedef struct {
345- OptionalSwiftObject obj;
346- } OptionalBridgedArgument;
347-
348447typedef struct {
349448 SwiftObject obj;
350449} BridgedNode;
351450
352- typedef struct {
353- OptionalSwiftObject obj;
354- } OptionalBridgedValue;
355-
356- struct BridgedInstruction {
357- SwiftObject obj;
358- };
359-
360- typedef struct {
361- OptionalSwiftObject obj;
362- } OptionalBridgedInstruction;
363-
364451typedef struct {
365452 SwiftObject obj;
366453} BridgedMultiValueResult;
@@ -470,23 +557,6 @@ void PassContext_eraseInstruction(BridgedPassContext passContext,
470557void PassContext_eraseBlock (BridgedPassContext passContext,
471558 BridgedBasicBlock block);
472559
473- OptionalBridgedBasicBlock SILBasicBlock_next (BridgedBasicBlock block);
474- OptionalBridgedBasicBlock SILBasicBlock_previous (BridgedBasicBlock block);
475- BridgedFunction SILBasicBlock_getFunction (BridgedBasicBlock block);
476- std::string SILBasicBlock_debugDescription (BridgedBasicBlock block);
477- OptionalBridgedInstruction SILBasicBlock_firstInst (BridgedBasicBlock block);
478- OptionalBridgedInstruction SILBasicBlock_lastInst (BridgedBasicBlock block);
479- SwiftInt SILBasicBlock_getNumArguments (BridgedBasicBlock block);
480- BridgedArgument SILBasicBlock_getArgument (BridgedBasicBlock block, SwiftInt index);
481- BridgedArgument SILBasicBlock_addBlockArgument (BridgedBasicBlock block,
482- swift::SILType type,
483- BridgedValue::Ownership ownership);
484- void SILBasicBlock_eraseArgument (BridgedBasicBlock block, SwiftInt index);
485- void SILBasicBlock_moveAllInstructionsToBegin (BridgedBasicBlock block, BridgedBasicBlock dest);
486- void SILBasicBlock_moveAllInstructionsToEnd (BridgedBasicBlock block, BridgedBasicBlock dest);
487- void BasicBlock_moveArgumentsTo (BridgedBasicBlock block, BridgedBasicBlock dest);
488- OptionalBridgedSuccessor SILBasicBlock_getFirstPred (BridgedBasicBlock block);
489-
490560std::string SILNode_debugDescription (BridgedNode node);
491561
492562std::string SILLocation_debugDescription (swift::SILDebugLocation loc);
@@ -654,6 +724,9 @@ OptionalBridgedBasicBlock BridgedFunction::getLastBlock() const {
654724 return {getFunction ()->empty () ? nullptr : &*getFunction ()->rbegin ()};
655725}
656726
727+ OptionalBridgedSuccessor BridgedBasicBlock::getFirstPred () const {
728+ return {getBlock ()->pred_begin ().getSuccessorRef ()};
729+ }
657730
658731SWIFT_END_NULLABILITY_ANNOTATIONS
659732
0 commit comments