Devirtualize more based on whole program analysis #97812
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Whole program view lets us figure out whether a virtual method has been overriden by another method, or whether it can be considered
final
. Add a pass to collect this information and pass it to codegen,It kicks in less often than I expected (for linear enough hierarchies or not-too-much-derived types we could already do this with guarded devirtualization or type sealing), but I can still a bit over 100 method bodies affected by this in the Stage1 app.
Cc @dotnet/ilc-contrib