-
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
JIT ARM64-SVE: Add Sve.LoadVector*FirstFaulting APIs #104964
Conversation
…ectorFirstFaulting.
…ly without the FirstFaulting test. Added SveFfrTest template.
Note regarding the
|
Note regarding the
|
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics |
@tannergooding, @dotnet/arm64-contrib, this is ready for code review. |
@@ -262,22 +261,22 @@ namespace JIT.HardwareIntrinsics.Arm | |||
public void ConditionalSelect_ZeroOp() | |||
{ | |||
TestLibrary.TestFramework.BeginScenario(nameof(ConditionalSelect_ZeroOp)); | |||
ConditionalSelectScenario(_mask, ref _fld1, {Op1VectorType}<{RetBaseType}>.Zero); | |||
|
|||
ConditionalSelectScenario(_mask, _dataTable.inArray1Ptr, {Op1VectorType}<{RetBaseType}>.Zero); |
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.
why this change?
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.
why this change?
It's tied to other changes in the file, let me try to explain:
- In case of this template
{Op1BaseType}
and{Op2BaseType}
are the types of themask
andaddress
arguments accordingly. Prior to this changeValidateConditionalSelectResult
used to accept a vector/array of{Op1BaseType}
elements as the firstfirstOp
(data) argument. This was correct as long as{Op1BaseType}
and{Op2BaseType}
are same which used to be true any more. This change addsLoadVector*FirstFaulting
APIs for which this doesn't hold true. This explains changes at lines324
-339
of this file. - Due to the change
1
in the signature ofValidateConditionalSelectResult
, the second parameter must be passed as{Op2BaseType*}
which leads to the change at line279
. - Since
{Op1BaseType}
and{Op2BaseType}
may differ now,_fld1
which has{Op1VectorType}<{RetBaseType}>
type can't be passes toValidateConditionalSelectResult
. To overcome this, this change replace it with_dataTable.inArray1Ptr
ofvoid *
type at lines264
-270
. (Also_fld1
is assigned a return value ofLoadVector*FirstFaulting
at line234
which is perfectly fine). - Because of
3
, the signature ofConditionalSelectScenario
was changed at line274
.
Please let me know if you would like to get more details on this or think this should be implemented another way.
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.
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. Can you please confirm all the `FirstFaulting tests, including the one that @TIHan added pass (with stress)? @amanasifkhalid - once we get the confirmation about the tests, this should be ready to merge.
All Output
|
Contributes to #99957
Adds:
LoadVectorByteZeroExtendFirstFaulting
LoadVectorUInt16ZeroExtendFirstFaulting
LoadVectorUInt32ZeroExtendFirstFaulting
LoadVectorInt16SignExtendFirstFaulting
LoadVectorInt32SignExtendFirstFaulting
LoadVectorSByteSignExtendFirstFaulting
Testing
The added APIs successfully pass stress testing: