dotnet/runtime
Voir sur GitHubUnnecessary shr emitted for repeated multiplication
Open
#74 020 ouverte le 16 août 2022
area-CodeGen-coreclrgood first issuehelp wanted
Métriques du dépôt
- Stars
- (17 886 stars)
- Métriques de merge PR
- (Merge moyen 12j 11h) (661 PRs mergées en 30 j)
Description
Noted in discussion here about the recent DateTime perf optimization, that we could not rely on the JIT to safely collapse multiplication. In this example below, there's an extra shr. Same on x86.
class Program
{
uint f(uint u2) {
return u2 / 2939745 / 4;
}
uint g(uint u2) {
return u2 / 11758980;
}
}
Program.f(UInt32)
L0000: mov eax, edx
L0002: imul rax, 0x5b4fffcb
L0009: shr rax, 0x34
L000d: shr eax, 2
L0010: ret
Program.g(UInt32)
L0000: mov eax, edx
L0002: imul rax, 0x5b4fffcb
L0009: shr rax, 0x36
L000d: ret
cc @cassioneri
category:cq theme:basic-cq skill-level:beginner cost:small impact:small