JIT: Strength reduction should be able to reason about field accesses on top of arrays
@jakobbotsch is already working on this.
Since Oct 9, 2024.
Assessment
This issue has not been assessed yet.
Description
From BenchmarksGame.Fasta:
https://github.com/dotnet/performance/blob/88a140a2234569c20129615ffea668ed857fc374/src/benchmarks/micro/runtime/BenchmarksGame/fasta-1.cs#L225-L233
Codegen on main:
...
G_M57319_IG03: ;; offset=0x000B
xor edx, edx
align [3 bytes for IG04]
;; size=5 bbWeight=0.25 PerfScore 0.12
G_M57319_IG04: ;; offset=0x0010
mov r8, rdx
vaddsd xmm0, xmm0, qword ptr [rcx+r8+0x18]
vmovsd qword ptr [rcx+r8+0x18], xmm0
add rdx, 16
dec eax
jne SHORT G_M57319_IG04
;; size=25 bbWeight=4 PerfScore 39.00
G_M57319_IG05: ;; offset=0x0029
ret
;; size=1 bbWeight=1 PerfScore 1.00
Codegen with #105267:
...
G_M57319_IG03: ;; offset=0x000B
add rcx, 16
align [1 bytes for IG04]
;; size=5 bbWeight=0.25 PerfScore 0.12
G_M57319_IG04: ;; offset=0x0010
vaddsd xmm0, xmm0, qword ptr [rcx+0x08]
vmovsd qword ptr [rcx+0x08], xmm0
add rcx, 16
dec eax
jne SHORT G_M57319_IG04
;; size=18 bbWeight=4 PerfScore 38.00
G_M57319_IG05: ;; offset=0x0022
ret
;; size=1 bbWeight=1 PerfScore 1.00
which is definitely an improvement, but we should be able to fold in the +0x08 offset that comes from the access of the p field. Currently we give up while trying to prove that rcx+0x08 is a valid managed byref in all iterations of the loop.
- 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 ·