Skip to content

Add support for some more simd folding to improve the new IndexOf and related helpers #117572

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

Merged
merged 2 commits into from
Jul 14, 2025

Conversation

tannergooding
Copy link
Member

This handles cases like Vector128.IndexOfWhereAllBitsSet(Vector128.Equals(x, y)) and ensures we get more optimal codegen.

; Method ClassLibrary2.Class1:M(System.Runtime.Intrinsics.Vector128`1[int],System.Runtime.Intrinsics.Vector128`1[int]):int (FullOpts)
G_M000_IG01:                ;; offset=0x0000

G_M000_IG02:                ;; offset=0x0000
       C5F81001             vmovups  xmm0, xmmword ptr [rcx]
       C5F97602             vpcmpeqd xmm0, xmm0, xmmword ptr [rdx]
-      C5F176C9             vpcmpeqd xmm1, xmm1, xmm1
-      C5F176C0             vpcmpeqd xmm0, xmm1, xmm0
       C5F850C0             vmovmskps rax, xmm0
       F30FBCC0             tzcnt    eax, eax
       B9FFFFFFFF           mov      ecx, -1
       83F820               cmp      eax, 32
       0F44C1               cmove    eax, ecx

G_M000_IG03:                ;; offset=0x0023
       C3                   ret      
; Total bytes of code: 36

This mostly stems from ensuring that Compare(mask, AllBitsSet) and Compare(mask, Zero) are handled. However, it also found some cases where we weren't folding TrailingZeroCount, ReverseElementBits, or PopCount which are used by the new helpers and so ensures those are handled as well.

@github-actions github-actions bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jul 12, 2025
@tannergooding tannergooding marked this pull request as ready for review July 13, 2025 03:24
@tannergooding tannergooding requested a review from EgorBo July 13, 2025 03:25
@tannergooding
Copy link
Member Author

CC. @dotnet/jit-contrib

Fixes some codegen issues that @EgorBo saw. Going to have a follow up PR that better improves the Arm64 handling by ensuring that ExtractMostSignificantBits is carried through to lowering so it can be properly optimized based on these types of transforms (giving it the same lightup as x64)

@EgorBo
Copy link
Member

EgorBo commented Jul 14, 2025

/azp run Fuzzlyn

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@tannergooding
Copy link
Member Author

Fuzzlyn issue is #117605

@tannergooding
Copy link
Member Author

/ba-g unrelated android timeouts

@tannergooding tannergooding merged commit 5aecfd2 into dotnet:main Jul 14, 2025
114 of 119 checks passed
@tannergooding tannergooding deleted the better-simd-cmp branch July 14, 2025 23:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants