dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.14k stars 4.71k forks source link

JIT: Improve inlining functions with EH in .NET 10 #108900

Open BruceForstall opened 3 days ago

BruceForstall commented 3 days ago

This item tracks work to improve inlining in RyuJIT in .NET 10.

Inline functions containing exception handling (EH)

The JIT currently will not inline a function with exception handling (EH) clauses (try/catch, try/finally, etc.). This work item is to remove that limitation.

A mechanical aspect of the implementation is simply to allow the insertion of the inlinee function EH information into the inliner EH table. Related, the inlinee must create and use its own EH table and not share the root EH table.

One specific note is that we still will not be able to inline any code with EH into an EH filter clause – that is not supported by the runtime. (I think this limitation goes back to Windows SEH, so maybe it can be considered for loosening?)

Specific work:

Related

https://github.com/dotnet/runtime/issues/62038

dotnet-policy-service[bot] commented 3 days ago

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch See info in area-owners.md if you want to be subscribed.