Skip to content
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

Add Non-Faulting behaviour for Sve.LoadVector*NonFaulting*() #106648

Merged

Conversation

SwapnilGaikwad
Copy link
Contributor

Fixes: #105163

It also fixes the issue where FFR was not preserved and side-effects from the intrinsic not specified.

@a74nh @kunalspathak @dotnet/arm64-contrib @arch-arm64-sve @TIHan @amanasifkhalid

@dotnet-issue-labeler dotnet-issue-labeler bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Aug 19, 2024
@dotnet-policy-service dotnet-policy-service bot added the community-contribution Indicates that the PR has been added by a community member label Aug 19, 2024
@SwapnilGaikwad
Copy link
Contributor Author

All stress tests are passing.
===================Running default===================
------------------- {} -------------------
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_float() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_double() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_sbyte() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_short() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_int() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_long() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_byte() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_ushort() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_uint() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorNonFaulting_ulong() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorInt16NonFaultingSignExtendToInt32_int() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorInt16NonFaultingSignExtendToInt64_long() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorInt16NonFaultingSignExtendToUInt32_uint() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorInt16NonFaultingSignExtendToUInt64_ulong() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorInt32NonFaultingSignExtendToInt64_long() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorInt32NonFaultingSignExtendToUInt64_ulong() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorSByteNonFaultingSignExtendToInt16_short() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorSByteNonFaultingSignExtendToInt32_int() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorSByteNonFaultingSignExtendToInt64_long() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorSByteNonFaultingSignExtendToUInt16_ushort() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorSByteNonFaultingSignExtendToUInt32_uint() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorSByteNonFaultingSignExtendToUInt64_ulong() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorByteNonFaultingZeroExtendToInt16() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorByteNonFaultingZeroExtendToInt32() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorByteNonFaultingZeroExtendToInt64() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorByteNonFaultingZeroExtendToUInt16() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorByteNonFaultingZeroExtendToUInt32() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorByteNonFaultingZeroExtendToUInt64() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorUInt16NonFaultingZeroExtendToInt32() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorUInt16NonFaultingZeroExtendToInt64() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorUInt16NonFaultingZeroExtendToUInt32() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorUInt16NonFaultingZeroExtendToUInt64() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorUInt32NonFaultingZeroExtendToInt64() : 18
Passed test: _Sve_ro::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVectorUInt32NonFaultingZeroExtendToUInt64() : 18
===================Running jitstress===================
------------------- {'JitMinOpts': '1'} -------------------
------------------- {'JitStress': '1'} -------------------
------------------- {'JitStress': '2'} -------------------
------------------- {'JitStress': '1', 'TieredCompilation': '1'} -------------------
------------------- {'JitStress': '2', 'TieredCompilation': '1'} -------------------
------------------- {'TailcallStress': '1'} -------------------
------------------- {'ReadyToRun': '0'} -------------------
===================Running jitstressregs===================
------------------- {'JitStressRegs': '1'} -------------------
------------------- {'JitStressRegs': '2'} -------------------
------------------- {'JitStressRegs': '3'} -------------------
------------------- {'JitStressRegs': '4'} -------------------
------------------- {'JitStressRegs': '8'} -------------------
------------------- {'JitStressRegs': '0x10'} -------------------
------------------- {'JitStressRegs': '0x80'} -------------------
------------------- {'JitStressRegs': '0x1000'} -------------------
------------------- {'JitStressRegs': '0x2000'} -------------------
===================Running jitstress2-jitstressregs===================
------------------- {'JitStress': '2', 'JitStressRegs': '1'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '2'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '3'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '4'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '8'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '0x10'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '0x80'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '0x1000'} -------------------
------------------- {'JitStress': '2', 'JitStressRegs': '0x2000'} -------------------

Copy link
Contributor

@a74nh a74nh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This LGTM.

Looks like we are missing FFR tracking for gatherload first faulting methods too. We should do that in a follow on PR.

@SwapnilGaikwad
Copy link
Contributor Author

This LGTM.

Looks like we are missing FFR tracking for gatherload first faulting methods too. We should do that in a follow on PR.

As discussed offline, the LoadVectorNonFaulting are in SVE2 so we can skip them for now🙂.

Copy link
Member

@amanasifkhalid amanasifkhalid left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM too, thanks!

@amanasifkhalid
Copy link
Member

/ba-g runtime-dev-innerloop failure is from CI machine rebooting

@amanasifkhalid amanasifkhalid merged commit 4e8892e into dotnet:main Aug 21, 2024
112 of 117 checks passed
@amanasifkhalid
Copy link
Member

Looks like we are missing FFR tracking for gatherload first faulting methods too. We should do that in a follow on PR.

@SwapnilGaikwad are you planning on doing this item? I think this is the source of the failure in #106621.

@amanasifkhalid
Copy link
Member

/backport to release/9.0

Copy link
Contributor

Started backporting to release/9.0: https://github.com/dotnet/runtime/actions/runs/10494433508

@SwapnilGaikwad
Copy link
Contributor Author

Looks like we are missing FFR tracking for gatherload first faulting methods too. We should do that in a follow on PR.

@SwapnilGaikwad are you planning on doing this item? I think this is the source of the failure in #106621.

Hi @amanasifkhalid, there were GatherVectorFirstFaulting and LoadVectorFirstFautling in SVE1. We have the FFR tracking for them. Alan may have referred to APIs from SVE2 group so skipped them.
However, happy to take a look at the #106621 👍

@SwapnilGaikwad
Copy link
Contributor Author

Continuing conversation here.

@github-actions github-actions bot locked and limited conversation to collaborators Sep 22, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI community-contribution Indicates that the PR has been added by a community member
Projects
None yet
Development

Successfully merging this pull request may close these issues.

JIT: SVE - Add FFR lifetime tracking as well as test coverage for NonFaulting APIs
3 participants