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

Enable multi-register intrinsics support for Arm64 #64921

Closed
9 of 13 tasks
Tracked by #64820
echesakov opened this issue Feb 7, 2022 · 7 comments
Closed
9 of 13 tasks
Tracked by #64820

Enable multi-register intrinsics support for Arm64 #64921

echesakov opened this issue Feb 7, 2022 · 7 comments
Assignees
Labels
arch-arm64 area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI Priority:3 Work that is nice to have User Story A single user-facing feature. Can be grouped under an epic.
Milestone

Comments

@echesakov
Copy link
Contributor

echesakov commented Feb 7, 2022

Overview

We achieved parity with x64 for Arm64 intrinsics support in .NET 5 for most of them except for multi-register intrinsics. We need more work to enable multi-register intrinsics for Arm64. The work is integral in that it involves changes in JIT, libraries and mono to enable working intrinsics.

Work Items

Follow-up (after the JIT work is completed)

  • Libraries support to use the new intrinsics
  • monoVM support on the new intrinsics.

Benchmarks to use

  • Microbenchmarks (for the libraries methods that will be intrinsified with the new intrinsics)

category:cq
theme:register-allocator
skill-level:expert
cost:medium
impact:medium

@echesakov echesakov added arch-arm64 area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI User Story A single user-facing feature. Can be grouped under an epic. labels Feb 7, 2022
@echesakov echesakov added this to Needs Triage in .NET Core CodeGen via automation Feb 7, 2022
@dotnet-issue-labeler dotnet-issue-labeler bot added the untriaged New issue has not been triaged by the area owner label Feb 7, 2022
@ghost
Copy link

ghost commented Feb 7, 2022

Tagging subscribers to this area: @JulieLeeMSFT
See info in area-owners.md if you want to be subscribed.

Issue Details

Overview

We achieved parity with x64 for Arm64 intrinsics support in .NET 5 for most of them except for multi-register intrinsics. We need more work to enable multi-register intrinsics for Arm64. The work is integral in that it involves changes in JIT, libraries and mono to enable working intrinsics.

Work Items

  • Enable multi-register intrinsics in the JIT
    • [Arm64] LoadPairVector64 and LoadPairVector128 #39243
    • Support register allocation for intrinsics returning value in a sequence of registers (e.g. V0-V2 (note that this what different from the LoadPairVector64/128 which returns result in two independent SIMD registers).
    • Propose and approve multi-register intrinsics APIs on Arm64 (these are expected to "look" similar to LoadPairVector/StorePairVector - i.e. using a ValueTuple of Vector values to express multi-register values)
    • Implement multi-register intrinsics on Arm64 (such as ones that will expose LD[1-4],ST[1-4],TBL,'TBX` instructions)

Follow-up (after the JIT work is completed)

  • Libraries support to use the new intrinsics
  • monoVM support on the new intrinsics.

Benchmarks to use

  • Microbenchmarks (for the libraries methods that will be intinsified with the new intrinsics)
Author: echesakovMSFT
Assignees: -
Labels:

arch-arm64, area-CodeGen-coreclr, User Story

Milestone: -

@echesakov echesakov moved this from Needs Triage to Team User Stories in .NET Core CodeGen Feb 7, 2022
@echesakov echesakov removed the untriaged New issue has not been triaged by the area owner label Feb 7, 2022
@echesakov echesakov self-assigned this Feb 7, 2022
@EgorBo
Copy link
Member

EgorBo commented Feb 7, 2022

will it fix div on x64 returning result and mod in two registers? 🙂

@echesakov
Copy link
Contributor Author

will it fix div on x64 returning result and mod in two registers? 🙂

Not this work item, which I tend to think of as "LSRA allocating spans of registers" work.

However #64864 should lay foundation for DivRem (or MultiplyNoFlags2) intrinsics that returns pairs of values. #64857 is another relevant piece and needed to avoid unnecessary mov-s with multireg intrinsics.

@BruceForstall BruceForstall added this to the 7.0.0 milestone Feb 8, 2022
@huoyaoyuan
Copy link
Member

In #66551, I've actually made multi-reg DivRem on x64 works. @EgorBo you can check if there are works remaining.

@JulieLeeMSFT
Copy link
Member

Moved to .NET 8.

@JulieLeeMSFT JulieLeeMSFT moved this from Team User Stories to In progress in .NET Core CodeGen Jun 6, 2022
@kunalspathak kunalspathak self-assigned this Jan 4, 2023
@kunalspathak kunalspathak added the Priority:3 Work that is nice to have label Jun 5, 2023
@BruceForstall BruceForstall removed their assignment Jun 16, 2023
@kunalspathak
Copy link
Member

We will continue working on #84510 in .NET 9.

@kunalspathak kunalspathak modified the milestones: 8.0.0, 9.0.0 Jul 30, 2023
@kunalspathak
Copy link
Member

This is completed.

.NET Core CodeGen automation moved this from In progress to Done May 3, 2024
@github-actions github-actions bot locked and limited conversation to collaborators Jun 4, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
arch-arm64 area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI Priority:3 Work that is nice to have User Story A single user-facing feature. Can be grouped under an epic.
Projects
Status: Done
Development

No branches or pull requests

6 participants