JIT fails to treat expression as non-negative after range check
@EgorBo is already working on this.
Since Feb 20, 2025.
Assessment
This issue has not been assessed yet.
Description
https://godbolt.org/z/Wv5bv99bb
public static short Test1(ref short searchSpace, int searchSpaceLength)
{
if (searchSpaceLength < Vector128<short>.Count)
return 42;
return Unsafe.Add(ref searchSpace, searchSpaceLength - Vector128<short>.Count);
}
public static short Test2(ref short searchSpace, int searchSpaceLength)
{
if (searchSpaceLength < Vector128<short>.Count)
return 42;
return Unsafe.Add(ref searchSpace, (uint)searchSpaceLength - (nuint)Vector128<short>.Count);
}
-add esi, -8
-movsxd rax, esi
-movsx rax, word ptr [rdi+2*rax]
+mov eax, esi
+movsx rax, word ptr [rdi+2*rax-0x10]
This occurs in practice in a bunch of places throughput our IndexOf-like logic, e.g.
https://github.com/dotnet/runtime/blob/7e5e573dd32990beedee8b2749a0ffe5af784d3c/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.Packed.cs#L431
https://github.com/dotnet/runtime/blob/7e5e573dd32990beedee8b2749a0ffe5af784d3c/src/libraries/System.Private.CoreLib/src/System/SearchValues/IndexOfAnyAsciiSearcher.cs#L347
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/runtime
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
area-System.Reflection blocking-clean-ci-optional Known Build Error os-mac-os-x untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
area-CodeGen-coreclr untriaged
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
agentic-workflows untriaged
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
area-VM-meta-mono untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
Create parent directories only after the containment check in InstallHelper.TryExtractToDirectory Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PowerShell/PSResourceGet#2056 ·