-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
[RISC-V] New ABI classifiers #101114
[RISC-V] New ABI classifiers #101114
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
Thanks for this, very happy to see it. |
…ist doesn't guarantee no heap allocation in C++11 (only since C++14)
I agree with you that we can share the |
What is this optimization? |
As we use |
What does the codegen look like? Does it set up a temporary register pointing closer to the parameters than FP and store based on this register instead?
Keeping separate version of |
yes, you are right.
Thanks.
Yes, that's a good idea that introducing a new interface to do that.
I agree with you for sharing the |
Are you saying that #100962 doesn't help? I would expect it to make the optimization unimportant because it changes the FP to sit right next to where the parameter locals are allocated on the stack, so the relative offset from the FP is very small now.
The offset provided to |
|
||
assert((floatFields > 0) || (intFields == 0)); | ||
|
||
auto PassSlot = [this](bool inFloatReg, unsigned offset, unsigned size) -> ABIPassingSegment { |
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.
Nit: Most places within the JIT that use lambdas use camelCase naming convention.
No need to address this here.
} | ||
} | ||
|
||
unreached(); |
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.
Does this do anything? Won't we have a compiler error if this becomes accidentally reachable?
Feel free to remove this separately.
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.
Thank you!
Yes, from this view, after 100962 the args' position is more near the FP. |
* Code review from #101114 * Use common genHomeRegisterParams on RISC-V * Make passSlot integer-only because we know hardware floating-point calling convention passes in registers only * Make a RISC-V specific routine for homing stack parts of split parameters. * Move genHomeStackPartOfSplitParameter out of genHomeSwiftStructParameters, share stack segment homing with Swift code
* Code review from dotnet#101114 * Use common genHomeRegisterParams on RISC-V * Make passSlot integer-only because we know hardware floating-point calling convention passes in registers only * Make a RISC-V specific routine for homing stack parts of split parameters. * Move genHomeStackPartOfSplitParameter out of genHomeSwiftStructParameters, share stack segment homing with Swift code
* Code review from dotnet#101114 * Use common genHomeRegisterParams on RISC-V * Make passSlot integer-only because we know hardware floating-point calling convention passes in registers only * Make a RISC-V specific routine for homing stack parts of split parameters. * Move genHomeStackPartOfSplitParameter out of genHomeSwiftStructParameters, share stack segment homing with Swift code
Implements the RISC-V part of #100744
Part of #84834, cc @dotnet/samsung