Commits

Xin Tong committed 51b1c0bc68b
Implement retain, release code motion. Iterative data flow retain sinking and release hoisting. This allows us to sink retains and hoist releases across harmless loops. which is an improvement on the SILCodeMotion retain sinking and release hoisting. It also separates the duty of moving retain and release with the duty of eliminating them in ASO. This should eventually replace RR code motion in SILcodemotion and insertion point in ARCsequence opts (ASO). This is the performance difference i get with retain sinking and release hoisting. After disabling retain release code motion in ASO and SILCodeMotion. we can start to take those code out once this lands. I see that we go from 24.5% of time spent in SILOptimizations w.r.t. the whole stdlib compilation to 25.1%. Improvement is better (i.e. retain sinking and hoisting releases result in performance gain). <details open> <summary>Regression (7)</summary> TEST | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP --- | --- | --- | --- | --- SetIsSubsetOf | 441 | 510 | +15.7% | **0.86x** SetIntersect | 1041 | 1197 | +15.0% | **0.87x** BenchLangCallingCFunction | 184 | 211 | +14.7% | **0.87x** Sim2DArray | 326 | 372 | +14.1% | **0.88x** SetIsSubsetOf_OfObjects | 498 | 567 | +13.9% | **0.88x** GeekbenchGEMM | 945 | 1022 | +8.2% | **0.92x** COWTree | 3839 | 4181 | +8.9% | **0.92x(?)** </details> <details > <summary>Improvement (31)</summary> TEST | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP --- | --- | --- | --- | --- ObjectiveCBridgeFromNSDictionaryAnyObjectToString | 174526 | 165392 | -5.2% | **1.06x** RGBHistogram | 3128 | 2957 | -5.5% | **1.06x** ObjectiveCBridgeToNSDictionary | 16510 | 15494 | -6.2% | **1.07x** LuhnAlgoLazy | 2294 | 2120 | -7.6% | **1.08x** DictionarySwapOfObjects | 6477 | 5994 | -7.5% | **1.08x** StringRemoveDupes | 1610 | 1485 | -7.8% | **1.08x** ObjectiveCBridgeFromNSSetAnyObjectToString | 159358 | 147824 | -7.2% | **1.08x** ObjectiveCBridgeToNSSet | 16191 | 14924 | -7.8% | **1.08x** DictionaryHashableClass | 1839 | 1704 | -7.3% | **1.08x** DictionaryLiteral | 2906 | 2678 | -7.8% | **1.09x(?)** StringUtilsUnderscoreCase | 10031 | 9187 | -8.4% | **1.09x** LuhnAlgoEager | 2320 | 2113 | -8.9% | **1.10x** ObjectiveCBridgeFromNSSetAnyObjectToStringForced | 99553 | 90348 | -9.2% | **1.10x** RIPEMD | 3327 | 3009 | -9.6% | **1.11x** Combos | 595 | 538 | -9.6% | **1.11x** Roman | 10 | 9 | -10.0% | **1.11x** StringUtilsCamelCase | 10783 | 9646 | -10.5% | **1.12x** SetIntersect_OfObjects | 2511 | 2182 | -13.1% | **1.15x** SwiftStructuresTrie | 28331 | 24339 | -14.1% | **1.16x** Dictionary2OfObjects | 3748 | 3115 | -16.9% | **1.20x** DictionaryOfObjects | 2473 | 2050 | -17.1% | **1.21x** Dictionary | 894 | 737 | -17.6% | **1.21x** Dictionary2 | 2268 | 1859 | -18.0% | **1.22x** StringIteration | 8027 | 6344 | -21.0% | **1.27x** Phonebook | 8207 | 6436 | -21.6% | **1.28x** BenchLangArray | 119 | 91 | -23.5% | **1.31x** LinkedList | 8267 | 6297 | -23.8% | **1.31x** StrToInt | 5585 | 4180 | -25.2% | **1.34x** Dictionary3OfObjects | 1122 | 831 | -25.9% | **1.35x** Dictionary3 | 731 | 515 | -29.6% | **1.42x** SuperChars | 513353 | 258735 | -49.6% | **1.98x**