dotnet / dotnet/runtime

Unnecessary sign-extension for some never-negative expressions

Open
#119,680 1 comment 1 reaction 0 assignees View on GitHub
area-CodeGen-coreclr help wanted
Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Description

```cs
nint M1(uint mask) {
return BitOperations.TrailingZeroCount(mask) / sizeof(ushort);
}

nint M2(uint mask) {
return (nint)(uint.TrailingZeroCount(mask) / sizeof(ushort));
}
```

```asm
C:M1(uint):nint:this (FullOpts):
xor eax, eax
tzcnt eax, esi
shr eax, 1
cdqe
ret

C:M2(uint):nint:this (FullOpts):
xor eax, eax
tzcnt eax, esi
shr eax, 1
ret
```

[godbolt.org](https://csharp.godbolt.org/z/cbeKbMjPK)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.