Commits

Mark Lacey committed 3ab2e208afa
Devirtualize during mandatory inlining. With this change we will devirtualize in trivial cases where mandatory inlining has exposed opportunities due to substituting types, for example substituting a struct type into a witness_method where we can now easily determine exactly what method will be called. This makes it possible to use @transparent on struct methods that are dispatched via generic functions, resulting in the opportunity to emit diagnostics for these methods as well as eliminate the overhead of the indirect call. I saw a handful of 10+% perf improvements at -Onone on our benchmarks. In theory this should allow us to remove the overloads for ++/-- in FixedPoint.swift.gyb without a performance penalty (and with the proper overflow diagnostics), but unfortunately if we were to do so, we would currently dispatch to functions that lack runtime overflow checks (rdar://problem/20226526). Swift SVN r26397