Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis
, '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" + '
Test JsonEncodedText.GetHashCode code shape for ARM64 regression by eiriktsarpalis · Pull Request #132399 · dotnet/runtime · GitHub
Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis
, '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('^' + ".*" + ' Test JsonEncodedText.GetHashCode code shape for ARM64 regression by eiriktsarpalis · Pull Request #132399 · dotnet/runtime · GitHub
Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis
, '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('^' + ".*" + ' Test JsonEncodedText.GetHashCode code shape for ARM64 regression by eiriktsarpalis · Pull Request #132399 · dotnet/runtime · GitHub
Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis
, '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" + ' Test JsonEncodedText.GetHashCode code shape for ARM64 regression by eiriktsarpalis · Pull Request #132399 · dotnet/runtime · GitHub
Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis
, '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('^' + ".*" + ' Test JsonEncodedText.GetHashCode code shape for ARM64 regression by eiriktsarpalis · Pull Request #132399 · dotnet/runtime · GitHub
Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis
, '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('^' + ".*" + ' Test JsonEncodedText.GetHashCode code shape for ARM64 regression by eiriktsarpalis · Pull Request #132399 · dotnet/runtime · GitHub
Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis
, '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); } })(); })(); Test JsonEncodedText.GetHashCode code shape for ARM64 regression by eiriktsarpalis · Pull Request #132399 · dotnet/runtime · GitHub
Skip to content

Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399

Draft
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600
Draft

Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399
eiriktsarpalis wants to merge 7 commits into
mainfrom
eiriktsarpalis-perf-bisect-131600

Conversation

@eiriktsarpalis

Copy link
Copy Markdown
Member

Tests whether restoring the pre-#130976 ternary code shape for JsonEncodedText.GetHashCode() removes #131600.

Utf8JsonReader.GetUInt64, TryGetUInt64, and TryGetUInt64Core have identical IL before and after #130976. The current evidence points to an ARM64 tiering or code-layout interaction rather than a semantic reader change. This draft retains #130976's original commit history only so EgorBot can compare its internal stages. It is not ready to merge until the Ampere measurements identify the first bad stage and validate this candidate.

Note

This pull request was prepared by GitHub Copilot.

eiriktsarpalisand others added 6 commits July 20, 2026 16:24
Use C# 14 field-backed properties for private state used only by accessors, and expression-bodied members for single-expression methods.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Replace built-in null comparisons and stable compound comparisons with equivalent C# patterns. Retain reflection comparisons that bind user-defined equality operators.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
Use the C# 14 field keyword while preserving mutable-schema validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 69ae6b80-f573-41bd-8cf9-e0f858510bbe
…dText.cs
Co-authored-by: Adam Sitnik <adam.sitnik@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,6ca403a8a24576553af420df7e5ce0dc94671c06 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-text-json
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This change adjusts the IL/code shape of JsonEncodedText.GetHashCode() in System.Text.Json to help investigate an ARM64 tiering/code-layout performance regression (#131600) by restoring the pre-#130976 ternary-based null check pattern.

Changes:

  • Replaces the null-conditional/??GetHashCode implementation with an equivalent ternary (is null ? 0 : ...) to produce the desired code shape on ARM64.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings August 17, 2026 11:33
@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Rerunning after restoring the private-libunwind linker fallback needed to build current main on the benchmark image.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits af85196,66b30d95f08c6dafb73a5006ccbf1faccfc41f01,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt:39

  • This PR’s title/description focuses on testing the JsonEncodedText.GetHashCode() code shape for an ARM64 perf regression, but this hunk also changes NativeAOT’s libunwind privatization linker selection logic. Since it affects the NativeAOT build pipeline on Unix, it looks like a separate concern; consider splitting it into a dedicated PR or explicitly documenting why it’s needed for the perf investigation so reviewers can evaluate the build impact in context.
 set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}")
get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME)
if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}")
set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}")

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the Deprecated property follow-up.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits 66b30d9,43560bc79db55b49722afff9eeeac9704803315d,a271e683ebac9ab3d3cc2d24ffec341a558a6f86 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

@eiriktsarpalis

Copy link
Copy Markdown
MemberAuthor

Focused stage matrix 2/2: the Deprecated property follow-up, final #130976 head, and the GetHashCode() code-shape candidate.

@EgorBot -ubuntu24_azure_ampere -pr 132399 -commits a271e68,7c12816f5c1ddd67b23ec8f0f42513b693736c29,a3dd4f855a512477197fece0a8d05d56ce724188 --filter "System.Text.Json.Tests.Perf_Get.GetUInt64"

Note

This benchmark request was prepared by GitHub Copilot.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@eiriktsarpalis