-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
[ARM64/Linux] Inefficiencies when using initializing/cleaning unsafe pointers #12736
Comments
It looks like the code in lowerarmarch.cpp's
Obviously, arm64 doesn't need to zero a register. Properluy checking for 0 should fix this.
Unfortunately the JIT doesn't have any support for something like this. Perhaps it could be done in codegen, by looking ahead at the IR. Otherwise it would be problematic to encode a |
Might want to consider fixing the zero reg issue for 3.0, but will mark as future. |
Right - the zero reg issue should be pretty straightforward to fix, but as @mikedn indicates, the allocation and code generation for register pairs is somewhat more complex (though, thankfully, should be easier than the arm32 doubles!) |
The zero reg issue is already fixed by the PR #52269. Assembly with and without the above patch is following.
With patch:
Regarding ldp/stp usage, there are other issues (for ldp: #35132, #35130; stp: #35133, #35134) tracking it. |
Thanks for checking @SwapnilGaikwad . |
For the following case with
QuickJIT
turned offThe initialization of the pointer correctly uses the zero register
However it doesn't use
stp/ldp
when it's possible to.also when cleaning up the
str
s suddenly don't usexzr
anymore/CC @CarolEidt @tannergooding
category:cq
theme:basic-cq
skill-level:intermediate
cost:medium
The text was updated successfully, but these errors were encountered: