Commits

Mark Lacey committed a7556c89f9d
Enable transparent inlining of some generic functions. Fixes part of <rdar://problem/16196801>. Inline generic functions, but only when: - There are no unbound archetypes being substituted (due to various assumptions in TypeSubstCloner about having all concrete types). - When no substitution is an existential (due to <rdar://problem/17431105>, <rdar://problem/17544901>, and <rdar://problem/17714025>). This gets things limping along, but we really need to fix the above limitations so that mandatory inlining never fails. This doesn't enable inlining generics in the performance inliner. There is no reason it shouldn't work as well, but there is no compelling reason to do so now and it could have unintended effects on performance. Some highlights from PreCommitBench - O0: old (ms) new (ms) delta (ms) speedup ForLoops 1127.00 294.00 833.00 283.3% LinkedList 828.00 165.00 663.00 401.8% R17315246 982.00 288.00 694.00 241.0% SmallPT 3018.00 1388.00 1630.00 117.4% StringWalk 1276.00 89.00 1187.00 1333.7% -- most others improve ~10% -- O3: old (ms) new (ms) delta (ms) speedup Ackermann 4138.00 3724.00 414.00 11.1% Life 59.00 64.00 5.00 -7.8% Phonebook 2103.00 1815.00 288.00 15.9% R17315246 430.00 582.00 152.00 -26.1% StringWalk 1173.00 1097.00 76.00 6.9% Ofast: old (ms) new (ms) delta (ms) speedup Ackermann 3505.00 3715.00 210.00 -5.7% Life 49.00 41.00 8.00 19.5% Memset 684.00 554.00 130.00 23.5% Phonebook 2166.00 1769.00 397.00 22.4% StringWalk 829.00 790.00 39.00 4.9% I've opened the following to track remaining issues that need to be fixed before we can inline all transparent function applications: <rdar://problem/17431105> <rdar://problem/17544901> <rdar://problem/17714025> <rdar://problem/17768777> <rdar://problem/17768931> <rdar://problem/17769717> Swift SVN r20378