-
Notifications
You must be signed in to change notification settings - Fork 5.1k
JIT: Remove PUTARG_SPLIT #116074
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JIT: Remove PUTARG_SPLIT #116074
Conversation
Instead replace arguments that are passed split across registers and stack by two arguments in lowering. With recent ABI and class layout work this is now straightforward.
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
/azp run runtime |
Azure Pipelines successfully started running 1 pipeline(s). |
/azp run runtime-coreclr superpmi-replay, runtime-coreclr superpmi-diffs |
Azure Pipelines successfully started running 2 pipeline(s). |
cc @dotnet/jit-contrib PTAL @kunalspathak Diffs. Some MinOpts size regressions, mostly in tests, and also a few FullOpts ones. The FullOpts ones are generally the result of how we would previously create
and the codegen for that would be able to contain address modes to load the stack part. We now create
for the part that is pushed on the stack, and Other than that just some TP improvements from no longer having to check for |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR simplifies the JIT lowering by entirely removing support for the PUTARG_SPLIT operation. In its key changes, the PR renames LowerPutArgStkOrSplit to LowerPutArgStk, removes all references and code paths related to GT_PUTARG_SPLIT, and updates related headers and codegen routines accordingly.
- Rename and simplify lowering functions by consolidating split and stack cases.
- Remove obsolete GT_PUTARG_SPLIT branches and related code paths from multiple files.
- Update associated header declarations and documentation to reflect the change.
Reviewed Changes
Copilot reviewed 32 out of 32 changed files in this pull request and generated no comments.
Show a summary per file
File | Description |
---|---|
src/coreclr/jit/lowerriscv64.cpp | Renamed LowerPutArgStkOrSplit to LowerPutArgStk; updated comment accordingly. |
src/coreclr/jit/lowerloongarch64.cpp | Consistent renaming of lowering function and comment update. |
src/coreclr/jit/lowerarmarch.cpp | Updated comments and function names to remove PUTARG_SPLIT references. |
src/coreclr/jit/lower.h | Removed LowerPutArgStkOrSplit declaration and updated lowering API. |
src/coreclr/jit/lower.cpp | Removed GT_PUTARG_SPLIT-specific code and updated call sites. |
src/coreclr/jit/gentree.h | Removed obsolete API methods and affected call sites regarding PUTARG_SPLIT. |
Other codegen and related files | Cleaned up switch cases and function definitions to remove PUTARG_SPLIT handling. |
Comments suppressed due to low confidence (3)
src/coreclr/jit/codegenriscv64.cpp:4287
- The removal of the GT_PUTARG_SPLIT case from the switch statement is appropriate. Please verify that no architecture-specific invariants rely on this case.
case GT_PUTARG_SPLIT:
src/coreclr/jit/lowerriscv64.cpp:477
- The comment now clearly reflects the removal of the PUTARG_SPLIT case; please ensure that any associated documentation is updated similarly.
// LowerPutArgStk: Lower a GT_PUTARG_STK.
src/coreclr/jit/lower.h:396
- The header now only declares LowerPutArgStk; double-check that any outdated references or documentation regarding PUTARG_SPLIT have been removed.
void LowerPutArgStk(GenTreePutArgStk* putArgNode);
Ping @kunalspathak |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Did you already do a round of Fuzzlyn/Antigen?
No, but ABIStress tests should already have targeted fuzzing coverage of this. |
/ba-g Timeout |
@jakobbotsch I think this broke native AOT outerloops. I'm now seeing:
The test in question uses recursive generics and from what I can gather, this PR added a call to |
Sorry about that. Will submit a fix shortly... |
Instead replace arguments that are passed split across registers and stack by two arguments in lowering. With recent ABI and class layout work this is now straightforward.
fgTryMorphStructArg
can be simplified after this, which I will do in a future change.