Skip to content

Conversation

@SingleAccretion
Copy link
Contributor

@SingleAccretion SingleAccretion commented Jun 16, 2022

Same as #70256 - we are enabling more TYP_STRUCT local nodes, now for PUTARG_SPLIT nodes.

We are expecting improvements in all but a series of test methods where we will have large regressions due to the use of a reserved register in a PUTARG_SPLIT of a very large struct: struct<MCCTest.VTypeD, 4608>. I think such scenario is rather unrealistic, but if there is agreement that we should nevertheless avoid this regression, I will make the changes necessary.

Diffs.

TODO: figure out what (if anything) to do with the regressions in test methods with large frames.
@ghost ghost added area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI community-contribution Indicates that the PR has been added by a community member labels Jun 16, 2022
@ghost
Copy link

ghost commented Jun 16, 2022

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

Issue Details

Same as #70256 - we are enabling more TYP_STRUCT local nodes, now for PUTARG_SPLIT nodes.

We are expecting improvements in all but a series of test methods where we will have large regressions due to the use of a reserved register in a PUTARG_SPLIT of a very large struct: struct<MCCTest.VTypeD, 4608>. I think such scenario is rather unrealistic, but if there is agreement that we should nevertheless avoid this regression, I will make the changes necessary.

Author: SingleAccretion
Assignees: -
Labels:

area-CodeGen-coreclr

Milestone: -

@SingleAccretion SingleAccretion marked this pull request as ready for review June 17, 2022 09:20
@SingleAccretion
Copy link
Contributor Author

@dotnet/jit-contrib

@jakobbotsch
Copy link
Member

I think such scenario is rather unrealistic, but if there is agreement that we should nevertheless avoid this regression, I will make the changes necessary.

Can you say a little more about what happens in these test functions to make the regression so large? What would the changes look like?

@SingleAccretion
Copy link
Contributor Author

Can you say a little more about what happens in these test functions to make the regression so large? What would the changes look like?

It is a combination of large frame + large structs.

Large frame makes us use the reserved register combined with adds to form the address for the source local; large structs make us do that a lot.

A fix I had in mind is to reserve an internal register when we have a large frame and use that instead of "plain" emitIns_R_Ss.

@jakobbotsch
Copy link
Member

Seems ok to me to avoid complicating the logic more, I don't think need to optimize for passing such a large struct by value.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI community-contribution Indicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants