File tree Expand file tree Collapse file tree 5 files changed +26
-1
lines changed
SwiftCompilerSources/Sources/Optimizer/Utilities
include/swift/SILOptimizer
lib/SILOptimizer/PassManager Expand file tree Collapse file tree 5 files changed +26
-1
lines changed Original file line number Diff line number Diff line change @@ -50,4 +50,14 @@ struct SSAUpdater<Context: MutatingContext> {
5050 context. notifyInstructionsChanged ( )
5151 return context. _bridged. SSAUpdater_getValueInMiddleOfBlock ( block. bridged) . value
5252 }
53+
54+ var insertedPhis : [ Phi ] {
55+ var phis = [ Phi] ( )
56+ let numPhis = context. _bridged. SSAUpdater_getNumInsertedPhis ( )
57+ phis. reserveCapacity ( numPhis)
58+ for idx in 0 ..< numPhis {
59+ phis. append ( Phi ( context. _bridged. SSAUpdater_getInsertedPhi ( idx) . value) !)
60+ }
61+ return phis
62+ }
5363}
Original file line number Diff line number Diff line change @@ -367,6 +367,8 @@ struct BridgedPassContext {
367367 BRIDGED_INLINE void SSAUpdater_addAvailableValue (BridgedBasicBlock block, BridgedValue value) const ;
368368 SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedValue SSAUpdater_getValueAtEndOfBlock (BridgedBasicBlock block) const ;
369369 SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedValue SSAUpdater_getValueInMiddleOfBlock (BridgedBasicBlock block) const ;
370+ BRIDGED_INLINE SwiftInt SSAUpdater_getNumInsertedPhis () const ;
371+ SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedValue SSAUpdater_getInsertedPhi (SwiftInt idx) const ;
370372
371373 // Options
372374
Original file line number Diff line number Diff line change @@ -548,6 +548,14 @@ BridgedValue BridgedPassContext::SSAUpdater_getValueInMiddleOfBlock(BridgedBasic
548548 invocation->getSSAUpdater ()->getValueInMiddleOfBlock (block.unbridged ())};
549549}
550550
551+ SwiftInt BridgedPassContext::SSAUpdater_getNumInsertedPhis () const {
552+ return (SwiftInt)invocation->getInsertedPhisBySSAUpdater ().size ();
553+ }
554+
555+ BridgedValue BridgedPassContext::SSAUpdater_getInsertedPhi (SwiftInt idx) const {
556+ return {invocation->getInsertedPhisBySSAUpdater ()[idx]};
557+ }
558+
551559bool BridgedPassContext::enableStackProtection () const {
552560 swift::SILModule *mod = invocation->getPassManager ()->getModule ();
553561 return mod->getOptions ().EnableStackProtection ;
Original file line number Diff line number Diff line change @@ -75,6 +75,7 @@ class SwiftPassInvocation {
7575 SILModule::SlabList allocatedSlabs;
7676
7777 SILSSAUpdater *ssaUpdater = nullptr ;
78+ SmallVector<SILPhiArgument *, 4 > insertedPhisBySSAUpdater;
7879
7980 SwiftPassInvocation *nestedSwiftPassInvocation = nullptr ;
8081
@@ -178,8 +179,9 @@ class SwiftPassInvocation {
178179
179180 void initializeSSAUpdater (SILFunction *fn, SILType type,
180181 ValueOwnershipKind ownership) {
182+ insertedPhisBySSAUpdater.clear ();
181183 if (!ssaUpdater)
182- ssaUpdater = new SILSSAUpdater;
184+ ssaUpdater = new SILSSAUpdater (&insertedPhisBySSAUpdater) ;
183185 ssaUpdater->initialize (fn, type, ownership);
184186 }
185187
@@ -188,6 +190,8 @@ class SwiftPassInvocation {
188190 return ssaUpdater;
189191 }
190192
193+ ArrayRef<SILPhiArgument *> getInsertedPhisBySSAUpdater () { return insertedPhisBySSAUpdater; }
194+
191195 SwiftPassInvocation *initializeNestedSwiftPassInvocation (SILFunction *newFunction) {
192196 assert (!nestedSwiftPassInvocation && " Nested Swift pass invocation already initialized" );
193197 nestedSwiftPassInvocation = new SwiftPassInvocation (passManager, transform, newFunction);
Original file line number Diff line number Diff line change @@ -1562,6 +1562,7 @@ irgen::IRGenModule *SwiftPassInvocation::getIRGenModule() {
15621562}
15631563
15641564void SwiftPassInvocation::endPass () {
1565+ insertedPhisBySSAUpdater.clear ();
15651566 assert (allocatedSlabs.empty () && " StackList is leaking slabs" );
15661567 assert (numBlockSetsAllocated == 0 && " Not all BasicBlockSets deallocated" );
15671568 assert (numNodeSetsAllocated == 0 && " Not all NodeSets deallocated" );
You can’t perform that action at this time.
0 commit comments