Commits

Andrew Trick committed 04b2b5256bd
First implementation of <rdar://15922760> Deep devirtualization - specialize on polymorphic arguments. This can be enabled with: -sil-devirt-threshold 500. It currently improves RC4 (when enabled) by 20%, but will be much more important after Michael's load elimination with alias analysis lands. This implementation is suitable for experimentation. Superficial code reviews are also welcome. Although be warned that the design is overly complex and I plan to rewrite it. I initially abandoned the idea of incrementally specializing one function at a time, thinking that we need to analyze full chains. However, I since realized after talking to Nadav that the incremental approach can be made to work. A lot of book-keeping will go away with that change. TODO: - Resolve protocol argument types. Currently we assume they can be reinitialized at applies, but I don't think they can unless they are @inouts. This is an issue with the existing local devirtualizer that prevents it working across calls. - Properly mangle the specialized methods. Find existing specializations by demangling rather than maintaining a map. - Rewrite the logic for specializing chains for simplicity. - Enable by default. Swift SVN r13642