Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
JIT: Support more scaled addressing modes on arm64 by jakobbotsch · Pull Request #97921 · dotnet/runtime · GitHub
Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' JIT: Support more scaled addressing modes on arm64 by jakobbotsch · Pull Request #97921 · dotnet/runtime · GitHub
Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' JIT: Support more scaled addressing modes on arm64 by jakobbotsch · Pull Request #97921 · dotnet/runtime · GitHub
Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' JIT: Support more scaled addressing modes on arm64 by jakobbotsch · Pull Request #97921 · dotnet/runtime · GitHub
Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' JIT: Support more scaled addressing modes on arm64 by jakobbotsch · Pull Request #97921 · dotnet/runtime · GitHub
Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' JIT: Support more scaled addressing modes on arm64 by jakobbotsch · Pull Request #97921 · dotnet/runtime · GitHub
Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); JIT: Support more scaled addressing modes on arm64 by jakobbotsch · Pull Request #97921 · dotnet/runtime · GitHub
Skip to content

JIT: Support more scaled addressing modes on arm64 - #97921

Merged
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams
Feb 5, 2024
Merged

JIT: Support more scaled addressing modes on arm64#97921
jakobbotsch merged 5 commits into
dotnet:mainfrom
jakobbotsch:arm64-scaled-ams

Conversation

@jakobbotsch

@jakobbotschjakobbotsch commented Feb 3, 2024

Copy link
Copy Markdown
Member

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Some regressions expected from fewer CSEs since we do not CSE address modes.

Prerequisite for #97865

We currently support scaled addressing modes when the index also needs
an extension through contained `BFIZ` nodes. However, we did not support
scaled addressing modes if the index was 64 bits. This adds that
support as a natural extension to the `GT_LEA`.
@ghostghost assigned jakobbotschFeb 3, 2024
@ghostghost added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Feb 3, 2024
@ghost

ghost commented Feb 3, 2024

Copy link
Copy Markdown

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

We currently support scaled addressing modes when the index also needs an extension through contained BFIZ nodes. However, we did not support scaled addressing modes if the index was 64 bits. This adds that support as a natural extension to the GT_LEA.

staticintFoo(int[]p,nintindex)=>p[index];

Before:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16lsl x1, x1, #2 ldr w0,[x0, x1]

After:

G_M45892_IG02: ;; offset=0x0008 ldr w2,[x0, #0x08]cmp x1, x2 bhs G_M45892_IG04add x0, x0, #16 ldr w0,[x0, x1,LSL #2]

Prerequisite for #97865

Author:jakobbotsch
Assignees:jakobbotsch
Labels:

area-CodeGen-coreclr

Milestone:-

Comment threadsrc/coreclr/jit/codegencommon.cpp Outdated
Comment threadsrc/coreclr/jit/lower.cpp Outdated
@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Assembly diffs

Assembly diffs for linux/arm64 ran on windows/x64

Diffs are based on 2,505,882 contexts (1,007,092 MinOpts, 1,498,790 FullOpts).

MISSED contexts: base: 1,433 (0.06%), diff: 1,436 (0.06%)

Overall (-250,480 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,545,232-3,284
benchmarks.run_pgo.linux.arm64.checked.mch79,735,896-19,856
benchmarks.run_tiered.linux.arm64.checked.mch24,597,876-6,084
coreclr_tests.run.linux.arm64.checked.mch508,527,192-29,700
libraries.crossgen2.linux.arm64.checked.mch55,834,472-11,212
libraries.pmi.linux.arm64.checked.mch76,274,408-8,672
libraries_tests.run.linux.arm64.Release.mch394,024,440-150,612
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch164,978,292-15,980
realworld.run.linux.arm64.checked.mch15,900,008-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,829,664-1,700
MinOpts (-22,888 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch25,934,784-5,292
benchmarks.run_tiered.linux.arm64.checked.mch19,738,436-3,656
coreclr_tests.run.linux.arm64.checked.mch348,148,152-2,712
libraries_tests.run.linux.arm64.Release.mch215,131,952-10,636
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch13,497,464-592
FullOpts (-227,592 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch15,240,304-3,284
benchmarks.run_pgo.linux.arm64.checked.mch53,801,112-14,564
benchmarks.run_tiered.linux.arm64.checked.mch4,859,440-2,428
coreclr_tests.run.linux.arm64.checked.mch160,379,040-26,988
libraries.crossgen2.linux.arm64.checked.mch55,832,836-11,212
libraries.pmi.linux.arm64.checked.mch76,154,424-8,672
libraries_tests.run.linux.arm64.Release.mch178,892,488-139,976
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch151,480,828-15,388
realworld.run.linux.arm64.checked.mch15,319,084-3,380
smoke_tests.nativeaot.linux.arm64.checked.mch2,828,676-1,700

Assembly diffs for osx/arm64 ran on windows/x64

Diffs are based on 2,270,095 contexts (932,669 MinOpts, 1,337,426 FullOpts).

MISSED contexts: base: 772 (0.03%), diff: 775 (0.03%)

Overall (-177,740 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,700-3,300
benchmarks.run_pgo.osx.arm64.checked.mch34,346,112-16,604
benchmarks.run_tiered.osx.arm64.checked.mch15,512,636-5,860
coreclr_tests.run.osx.arm64.checked.mch486,273,168-26,920
libraries.crossgen2.osx.arm64.checked.mch55,715,976-11,204
libraries.pmi.osx.arm64.checked.mch80,194,908-4,428
libraries_tests.run.osx.arm64.Release.mch323,385,308-90,324
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch162,548,024-15,812
realworld.run.osx.arm64.checked.mch15,058,824-3,288
MinOpts (-21,812 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch16,301,300-4,868
benchmarks.run_tiered.osx.arm64.checked.mch11,504,484-3,636
coreclr_tests.run.osx.arm64.checked.mch332,612,924-2,076
libraries_tests.run.osx.arm64.Release.mch203,715,848-10,640
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch13,153,728-592
FullOpts (-155,928 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch11,173,164-3,300
benchmarks.run_pgo.osx.arm64.checked.mch18,044,812-11,736
benchmarks.run_tiered.osx.arm64.checked.mch4,008,152-2,224
coreclr_tests.run.osx.arm64.checked.mch153,660,244-24,844
libraries.crossgen2.osx.arm64.checked.mch55,714,348-11,204
libraries.pmi.osx.arm64.checked.mch80,073,780-4,428
libraries_tests.run.osx.arm64.Release.mch119,669,460-79,684
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch149,394,296-15,220
realworld.run.osx.arm64.checked.mch14,494,868-3,288

Assembly diffs for windows/arm64 ran on windows/x64

Diffs are based on 2,339,805 contexts (938,449 MinOpts, 1,401,356 FullOpts).

MISSED contexts: base: 1,309 (0.06%), diff: 1,312 (0.06%)

Overall (-181,504 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,957,488-3,280
benchmarks.run_pgo.windows.arm64.checked.mch45,442,912-20,196
benchmarks.run_tiered.windows.arm64.checked.mch15,586,420-6,072
coreclr_tests.run.windows.arm64.checked.mch495,084,120-29,016
libraries.crossgen2.windows.arm64.checked.mch59,059,712-11,856
libraries.pmi.windows.arm64.checked.mch79,827,256-12,692
libraries_tests.run.windows.arm64.Release.mch329,452,088-76,184
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch171,557,220-16,260
realworld.run.windows.arm64.checked.mch15,902,524-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,798,548-2,576
MinOpts (-21,684 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch16,011,396-4,920
benchmarks.run_tiered.windows.arm64.checked.mch11,177,188-3,600
coreclr_tests.run.windows.arm64.checked.mch338,689,104-2,184
libraries_tests.run.windows.arm64.Release.mch203,433,596-10,388
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch13,153,748-592
FullOpts (-159,820 bytes)
CollectionBase size (bytes)Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch10,956,952-3,280
benchmarks.run_pgo.windows.arm64.checked.mch29,431,516-15,276
benchmarks.run_tiered.windows.arm64.checked.mch4,409,232-2,472
coreclr_tests.run.windows.arm64.checked.mch156,395,016-26,832
libraries.crossgen2.windows.arm64.checked.mch59,058,076-11,856
libraries.pmi.windows.arm64.checked.mch79,707,272-12,692
libraries_tests.run.windows.arm64.Release.mch126,018,492-65,796
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch158,403,472-15,668
realworld.run.windows.arm64.checked.mch15,338,544-3,372
smoke_tests.nativeaot.windows.arm64.checked.mch3,797,536-2,576

Details here


Throughput diffs

Throughput diffs for linux/arm64 ran on windows/x64

Overall (-0.09% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.03%
coreclr_tests.run.linux.arm64.checked.mch-0.02%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.09%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.02%
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.03%
libraries_tests.run.linux.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.01%
FullOpts (-0.12% to -0.01%)
CollectionPDIFF
benchmarks.run.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.03%
benchmarks.run_tiered.linux.arm64.checked.mch-0.04%
coreclr_tests.run.linux.arm64.checked.mch-0.03%
libraries.crossgen2.linux.arm64.checked.mch-0.02%
libraries.pmi.linux.arm64.checked.mch-0.01%
libraries_tests.run.linux.arm64.Release.mch-0.12%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch-0.01%
realworld.run.linux.arm64.checked.mch-0.02%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.06%

Throughput diffs for linux/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Throughput diffs for osx/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.02%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.osx.arm64.checked.mch-0.03%
benchmarks.run_tiered.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.01%
libraries.pmi.osx.arm64.checked.mch-0.03%
libraries_tests.run.osx.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch+0.01%
FullOpts (-0.10% to -0.01%)
CollectionPDIFF
benchmarks.run.osx.arm64.checked.mch-0.03%
benchmarks.run_pgo.osx.arm64.checked.mch-0.05%
benchmarks.run_tiered.osx.arm64.checked.mch-0.04%
coreclr_tests.run.osx.arm64.checked.mch-0.03%
libraries.crossgen2.osx.arm64.checked.mch-0.02%
libraries.pmi.osx.arm64.checked.mch-0.01%
libraries_tests.run.osx.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.osx.arm64.Release.mch-0.01%
realworld.run.osx.arm64.checked.mch-0.02%

Throughput diffs for windows/arm64 ran on windows/x64

Overall (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.02%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.05%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%
MinOpts (-0.03% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.windows.arm64.checked.mch-0.03%
benchmarks.run_tiered.windows.arm64.checked.mch-0.03%
libraries.pmi.windows.arm64.checked.mch-0.03%
libraries_tests.run.windows.arm64.Release.mch-0.01%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch+0.01%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.01%
FullOpts (-0.07% to -0.01%)
CollectionPDIFF
benchmarks.run.windows.arm64.checked.mch-0.03%
benchmarks.run_pgo.windows.arm64.checked.mch-0.04%
benchmarks.run_tiered.windows.arm64.checked.mch-0.04%
coreclr_tests.run.windows.arm64.checked.mch-0.03%
libraries.crossgen2.windows.arm64.checked.mch-0.02%
libraries.pmi.windows.arm64.checked.mch-0.02%
libraries_tests.run.windows.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.windows.arm64.Release.mch-0.01%
realworld.run.windows.arm64.checked.mch-0.02%
smoke_tests.nativeaot.windows.arm64.checked.mch-0.07%

Throughput diffs for windows/x64 ran on windows/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.windows.x64.checked.mch+0.01%

Details here


Throughput diffs for linux/arm ran on windows/x86

MinOpts (-0.02% to -0.00%)
CollectionPDIFF
benchmarks.run.linux.arm.checked.mch-0.01%
benchmarks.run_pgo.linux.arm.checked.mch-0.01%
benchmarks.run_tiered.linux.arm.checked.mch-0.01%
libraries.pmi.linux.arm.checked.mch-0.02%
libraries_tests.run.linux.arm.Release.mch-0.01%

Throughput diffs for windows/x86 ran on windows/x86

Overall (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%
MinOpts (+0.00% to +0.02%)
CollectionPDIFF
benchmarks.run_pgo.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.02%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
FullOpts (+0.00% to +0.01%)
CollectionPDIFF
benchmarks.run.windows.x86.checked.mch+0.01%
benchmarks.run_tiered.windows.x86.checked.mch+0.01%
libraries.pmi.windows.x86.checked.mch+0.01%
libraries_tests.run.windows.x86.Release.mch+0.01%
libraries_tests_no_tiered_compilation.run.windows.x86.Release.mch+0.01%
realworld.run.windows.x86.checked.mch+0.01%

Details here


@ryujit-bot

Copy link
Copy Markdown
Diff results for #97921

Throughput diffs

Throughput diffs for linux/arm64 ran on linux/x64

Overall (-0.07% to +0.01%)
CollectionPDIFF
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.07%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
MinOpts (+0.01% to +0.08%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch+0.01%
benchmarks.run_pgo.linux.arm64.checked.mch+0.01%
libraries.pmi.linux.arm64.checked.mch+0.08%
smoke_tests.nativeaot.linux.arm64.checked.mch+0.02%
libraries_tests.run.linux.arm64.Release.mch+0.02%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch+0.01%
realworld.run.linux.arm64.checked.mch+0.01%
libraries.crossgen2.linux.arm64.checked.mch+0.01%
benchmarks.run.linux.arm64.checked.mch+0.05%
FullOpts (-0.10% to +0.01%)
CollectionPDIFF
benchmarks.run_tiered.linux.arm64.checked.mch-0.02%
benchmarks.run_pgo.linux.arm64.checked.mch-0.01%
libraries.pmi.linux.arm64.checked.mch+0.01%
smoke_tests.nativeaot.linux.arm64.checked.mch-0.04%
libraries_tests.run.linux.arm64.Release.mch-0.10%
libraries_tests_no_tiered_compilation.run.linux.arm64.Release.mch+0.01%
coreclr_tests.run.linux.arm64.checked.mch-0.01%
realworld.run.linux.arm64.checked.mch+0.01%

Throughput diffs for linux/x64 ran on linux/x64

MinOpts (+0.00% to +0.01%)
CollectionPDIFF
libraries.pmi.linux.x64.checked.mch+0.01%

Details here


@jakobbotsch
jakobbotsch marked this pull request as ready for review February 5, 2024 08:00
@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

cc @dotnet/jit-contrib PTAL @EgorBo

Diffs. Regressions are because we don't CSE address modes.

@EgorBoEgorBo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! I don't remember why I gave up on these.
You may want to run fuzzlyn - it found quite a few addrmode related issues for me in the past - but leaving that up to you

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@jakobbotsch

Copy link
Copy Markdown
MemberAuthor

The jitstress/libraries-jitstress failures look like #97892 although it's hard to know if anything is hidden in there...

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-coreclrCLR 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.

3 participants

@jakobbotsch@ryujit-bot@EgorBo