Commits

Mark Lacey committed f6ec7967808
Integrate generic specialization into the inliner. During inlining we'll now attempt to first devirtualize and specialize within the function that we're going to inline into. If we're successful devirtualizing and inlining, and we'll attempt to inline into the newly exposed callees first, before inlining into the function we began with. This does not remove any existing passes of devirtualization or specialization yet, partially because we don't completely handle all cases that they handle at this point (e.g. specializing partial applies). We do end up specializing deeper into the call graph with this approach than we did prior to this commit. I will have some follow-on changes that integrate things further, allowing us to devirtualize in more cases after inlining into a given function. I will also add some directed tests in a future commit. I tested the stdlib build and this made no difference in build times. Perhaps after removing other existing phases we'll recapture some build time. I'm not seeing reproducible performance differences with this change, which is not a big surprise at this point. This sets us up for being able to improve the compilation pipeline in a future release. Swift SVN r27327