-
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
[mono][llvm][jit] Adding support for Vector128::ExtractMostSignificantBits intrinsic on ARM64 with LLVM + refactoring miniJIT opcodes #89431
Conversation
/azp run runtime-llvm |
Azure Pipelines failed to run 1 pipeline(s). |
/azp run runtime-llvm |
No commit pushedDate could be found for PR 89431 in repo dotnet/runtime |
/azp run runtime-llvm |
No commit pushedDate could be found for PR 89431 in repo dotnet/runtime |
/azp run runtime-extra-platforms |
Azure Pipelines successfully started running 1 pipeline(s). |
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! Well done :)
The failing CI lanes look unrelated or are already tracked. |
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.
Looks good!
Thank you for verifying that the performance is not affected with this change (any further optimization can be addressed later - in a separate PR).
Adding support for
Vector128.ExtractMostSignificantBits
intrinsic on ARM64 LLVM.Implementation
The implementation for LLVM follows the same approach as with miniJIT introduced in #84345.
To unify LLVM and miniJIT approaches, the previously introduced opcodes
OP_ARM64_USHL
andOP_ARM64_EXT_IMM
were removed and replaced withINTRINS_AARCH64_ADV_SIMD_USHL
andOP_XLOWER
/OP_XUPPER
as these were already supported on LLVM.This change introduces a slight change in generated assembly by miniJIT. Specifically, in
byte
/sbyte
element types scenario the code changes from:to:
The change removed 1x
ext.16b
instruction and added two new ones (mov.8b
andeor.16b
). If this change introduces any significant regressions we can revert the change for miniJIT.An extract of generated code for
byte
element type using LLVM fullAOT:Contributes to #76025.
/cc: @ivanpovazan