-
Notifications
You must be signed in to change notification settings - Fork 5.2k
[mono][llvm][jit] Adding support for Vector128::ExtractMostSignificantBits intrinsic on ARM64 with LLVM + refactoring miniJIT opcodes #89431
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
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.ExtractMostSignificantBitsintrinsic 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_USHLandOP_ARM64_EXT_IMMwere removed and replaced withINTRINS_AARCH64_ADV_SIMD_USHLandOP_XLOWER/OP_XUPPERas these were already supported on LLVM.This change introduces a slight change in generated assembly by miniJIT. Specifically, in
byte/sbyteelement types scenario the code changes from:to:
The change removed 1x
ext.16binstruction and added two new ones (mov.8bandeor.16b). If this change introduces any significant regressions we can revert the change for miniJIT.An extract of generated code for
byteelement type using LLVM fullAOT:Contributes to #76025.
/cc: @ivanpovazan