Commits

Roman Levenstein committed 5831e7a5cc4
[sil-dead-function-elimination] Re-factoring of the external function definitions elimination pass. Rename LateDeadFunctionElimination into ExternalFunctionDefinitionsElimination. Move ExternalFunctionDefinitionsElimination out of DeadFunctionElimination and make it a separate pass. Move a common logic shared by DeadFunctionElimination and ExternalFunctionDefinitionsElimination into a newly created base class. Make ExternalFunctionDefinitionsElimination pass eliminate just those external functions which are only reachable via vtables and witness_tables, but leave directly reachable function definitions in place. This gives LLVM more chances to analyze directly reachable functions for side-effects and perform better optimizations based on this. Once we have a proper IPO support for Swift, we can eliminate all external function definitions, including directly reachable ones, as there will be other ways to get information about their side-effects. Swift SVN r24546