Skip to content

JIT struct work planned for .NET 10 #109635

@jakobbotsch

Description

@jakobbotsch

This issue captures the planned work items for .NET 10 with respect to struct improvements. This list is expected to change throughout the release cycle according to ongoing planning and discussions, with possible additions and subtractions to the scope.

The overall goal in .NET 10 is to expand the scope of physical promotion even further than we did in .NET 9. We have seen good improvements from switching classes of struct locals from old promotion to physical promotion and expect similar improvements for the remaining cases. A stretch goal is the full removal of old promotion.

ABI handling for physical promotion

The main limitation that stops physical promotion from replacing regular promotion is currently that it lacks the support around ABI boundaries that regular promotion has. This comes out of the fact that our multireg support is tied very directly into the existing promotion mechanism.
Thus, we expect to work on the following items in .NET 10:

Missing handling for physical promotion

Old promotion handles cases that new promotion does not handle yet. There is work to be done to identify these cases and come up with replacements.

Miscellaneous struct-related work items

Moved to .NET 11

Additional handling for physical promotion

ABI handling

  • Add a new representation for register-returned struct values to the backend (in the style of GT_SWIFT_ERROR)
  • Allow struct fields of physically promoted call returns to stay in registers via a lowering transformation

Bitwise insertions/extractions for arguments/parameters

Metadata

Metadata

Assignees

Labels

User StoryA single user-facing feature. Can be grouped under an epic.area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions