mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This is a generic API that when ownership is enabled allows one to replace all uses of a value with a value with a differing ownership by transforming/lifetime extending as appropriate. This API supports all pairings of ownership /except/ replacing a value with OwnershipKind::None with a value without OwnershipKind::None. This is a more complex optimization that we do not support today. As a result, we include on our state struct a helper routine that callers can use to know if the two values that they want to process can be handled by the algorithm. My moticiation is to use this to to update InstSimplify and SILCombiner in a less bug prone way rather than just turn stuff off. Noting that this transformation inserts ownership instructions, I have made sure to test this API in two ways: 1. With Mandatory Combiner alone (to make sure it works period). 2. With Mandatory Combiner + Semantic ARC Opts to make sure that we can eliminate the extra ownership instructions it inserts. As one can see from the tests, the optimizer today is able to handle all of these transforms except one conditional case where I need to eliminate a dead phi arg. I have a separate branch that hits that today but I have exposed unsafe behavior in ClosureLifetimeFixup that I need to fix first before I can land that. I don't want that to stop this PR since I think the current low level ARC optimizer may be able to help me here since this is a simple transform it does all of the time.
7.0 KiB
7.0 KiB