Commits

Erik Eckstein committed 959e19d7bca
Add an optimization to eliminate a partial_apply if all applied arguments are dead in the applied function. This consists of 3 parts: 1) Extend CallerAnalysis to also provide information if a function is partially applied 2) A new DeadArgSignatureOpt pass, similar to FunctionSignatureOpts, which just specializes for dead arguments of partially applied functions. 3) Let CapturePropagation eliminate such partial_apply instructions and replace them with a thin_to_thick conversion of the specialized functions. This optimzation improves benchmarks where static struct or class functions are passed as a closure (e.g. -20% for SortStrings). Such functions have a additional metatype parameter. We used to create a partial_apply in this case, which allocates a context, etc. But this is not necessary as the metatype parameter is not used in most cases. rdar://problem/27513085