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

[LSRA] Add support for allocating consecutive registers #39457

Closed
Tracked by #64820 ...
CarolEidt opened this issue Jul 16, 2020 · 5 comments
Closed
Tracked by #64820 ...

[LSRA] Add support for allocating consecutive registers #39457

CarolEidt opened this issue Jul 16, 2020 · 5 comments
Assignees
Labels
arch-arm64 area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Milestone

Comments

@CarolEidt
Copy link
Contributor

CarolEidt commented Jul 16, 2020

This is currently supported in a limited form for Arm32 double registers, which must be an even/odd pair. However, this support is not well structured, and penalizes the common path that requires only a single register.
In order to support the Arm64 LoadPairVector intrinsics (#39243) intrinsics that would correspond to LD1-LD4, ST1-ST4 instruction, we need the ability to allocate consecutive vector registers, and we don't want to penalize the common path for this case.
One option would be to templatize the allocation methods such that the ones supporting consecutive registers would only be called when required.
Related: issue #8758 would presumably be addressed by such an approach.

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

@CarolEidt CarolEidt added arch-arm64 area-System.Runtime.Intrinsics area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI labels Jul 16, 2020
@CarolEidt CarolEidt added this to the 6.0.0 milestone Jul 16, 2020
@ghost
Copy link

ghost commented Jul 16, 2020

Tagging subscribers to this area: @tannergooding
Notify danmosemsft if you want to be subscribed.

@Dotnet-GitSync-Bot Dotnet-GitSync-Bot added the untriaged New issue has not been triaged by the area owner label Jul 16, 2020
@echesakov
Copy link
Contributor

@CarolEidt Small correction: we need consecutive vector registers allocation for Arm64 intrinsics that would correspond to LD1-LD4, ST1-ST4 instruction not for LoadPairVector/StorePair since the latter can operate on an arbitrary pair of SIMD registers.

@AndyAyersMS AndyAyersMS removed the untriaged New issue has not been triaged by the area owner label Jul 16, 2020
@CarolEidt
Copy link
Contributor Author

@echesakovMSFT - thanks for clarifying!

@JulieLeeMSFT JulieLeeMSFT added the needs-further-triage Issue has been initially triaged, but needs deeper consideration or reconsideration label Mar 23, 2021
@kunalspathak kunalspathak removed the needs-further-triage Issue has been initially triaged, but needs deeper consideration or reconsideration label Apr 1, 2021
@kunalspathak kunalspathak modified the milestones: 6.0.0, Future Apr 1, 2021
@kunalspathak
Copy link
Member

I don't think we will do this in .NET 6.0. Moving to future.

@kunalspathak
Copy link
Member

Completed by #80297. Note that the arm scenarios are different because the consecutive registers represent a single double variable but for other common cases like arm64's tbl/tbx/ld2~ld4, st2~st4 needs consecutive registers for independent intervals which is handled by #80297.

@ghost ghost locked as resolved and limited conversation to collaborators May 5, 2023
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
Projects
None yet
Development

No branches or pull requests

7 participants