Uh oh!
There was an error while loading. Please reload this page.
SVE: Added Load2xVectorAndUnzip, Load3xVectorAndUnzip, Load4xVectorAndUnzip APIs - #102180
Conversation
ghost
commented
May 13, 2024
Note regarding the |
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics |
kunalspathak
left a comment
There was a problem hiding this comment.
can you also follow the instructions at #99957 (comment) and confirm if all the newly added tests pass? I can work with you on machine where you can run these tests.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
TIHan
commented
May 14, 2024
The tests don't pass right now, but I think the fix your suggesting will work. |
Uh oh!
There was an error while loading. Please reload this page.
Tests pass now: |
kunalspathak
commented
May 14, 2024
It is running just the |
TIHan
commented
May 14, 2024
Gotcha. Will need to find an arm64 machine that supports it then. |
TIHan
commented
May 16, 2024
@dotnet/arm64-contrib @kunalspathak this is ready. Had to play whack-a-mole. Tests are passing and running :) |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
kunalspathak
left a comment
There was a problem hiding this comment.
Please update the API names to Load2xVectorAndUnzip.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
| break; | ||
| } | ||
| case NI_Sve_LoadVectorx2: |
There was a problem hiding this comment.
this can be combined with above cases:
case NI_Sve_LoadVectorx2:
case NI_Sve_LoadVectorx3:
case NI_Sve_LoadVectorx4:
assert(intrin.op2 != nullptr);
srcCount += BuildOperandUses(intrin.op2);
FALLTHROUGH;
case NI_AdvSimd_LoadVector64x2AndUnzip:
case NI_AdvSimd_LoadVector64x3AndUnzip:
case NI_AdvSimd_LoadVector64x4AndUnzip:
case NI_AdvSimd_Arm64_LoadVector128x2AndUnzip:
case NI_AdvSimd_Arm64_LoadVector128x3AndUnzip:
case NI_AdvSimd_Arm64_LoadVector128x4AndUnzip:
case NI_AdvSimd_LoadVector64x2:
case NI_AdvSimd_LoadVector64x3:
case NI_AdvSimd_LoadVector64x4:
case NI_AdvSimd_Arm64_LoadVector128x2:
case NI_AdvSimd_Arm64_LoadVector128x3:
case NI_AdvSimd_Arm64_LoadVector128x4:
case NI_AdvSimd_LoadAndReplicateToVector64x2:
case NI_AdvSimd_LoadAndReplicateToVector64x3:
case NI_AdvSimd_LoadAndReplicateToVector64x4:
case NI_AdvSimd_Arm64_LoadAndReplicateToVector128x2:
case NI_AdvSimd_Arm64_LoadAndReplicateToVector128x3:
case NI_AdvSimd_Arm64_LoadAndReplicateToVector128x4:
{
assert(intrin.op1 != nullptr);
BuildConsecutiveRegistersForDef(intrinsicTree, dstCount);
*pDstCount = dstCount;
break;
}There was a problem hiding this comment.
This is still not resolved.
There was a problem hiding this comment.
I can't do this as a fallthrough because there is another fallthrough above it.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
LoadVectorx2, LoadVectorx3, LoadVectorx4 APIsLoad2xVectorAndUnzip, Load3xVectorAndUnzip, Load4xVectorAndUnzip APIsTIHan
commented
May 18, 2024
Stress modes are failing badly for the |
TIHan
commented
May 21, 2024
Having some failures with Load2xVector and Load3xVector in stress testing; the results are coming back as zeroes for publicvoidRunClassFldScenario(){TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario));//TODO-SVE: Once register allocation exists for predicates, move loadMask into DataTable{Op1VectorType}<{Op1BaseType}>loadMask=Sve.CreateTrueMask{RetBaseType}(SveMaskPattern.All);(_fld1,_fld2)={Isa}.{Method}(loadMask,({Op1BaseType}*)_dataTable.inArrayPtr);ValidateResult(_fld1,_fld2,_dataTable.inArrayPtr);} |
TIHan
commented
May 25, 2024
@kunalspathak this is ready. I do get an assertion in the non_faulting cases under stress modes, but it appears to be related to Where the assertion appears: caseIF_SVE_ID_2A: // ..........iiiiii ...iiinnnnn.TTTT -- SVE load predicate registercaseIF_SVE_JG_2A: // ..........iiiiii ...iiinnnnn.TTTT -- SVE store predicate registerassert(insOptsNone(id->idInsOpt()));
assert(isScalableVectorSize(id->idOpSize()));
assert(isPredicateRegister(id->idReg1())); // TTTTassert(isGeneralRegisterOrZR(id->idReg2())); // nnnnnassert(isValidSimm<9>(emitGetInsSC(id))); // iii <------ ASSERTION FAILSbreak; |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
TIHan
commented
May 28, 2024
@kunalspathak this is ready again. |
Contributes to #99957
Adds:
Load2xVectorAndUnzipLoad3xVectorAndUnzipLoad4xVectorAndUnzip