Test JsonEncodedText.GetHashCode code shape for ARM64 regression - #132399
Test JsonEncodedText.GetHashCode code shape for ARM64 regression#132399eiriktsarpalis wants to merge 7 commits into
Conversation
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>
|
@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: 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. |
|
Tagging subscribers to this area: @dotnet/area-system-text-json |
There was a problem hiding this comment.
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/
??GetHashCodeimplementation 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>
|
Rerunning after restoring the private-libunwind linker fallback needed to build current @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. |
There was a problem hiding this comment.
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}")
|
Focused stage matrix 1/2: field-backed properties, pattern rewrites, and the @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. |
|
Focused stage matrix 2/2: the @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. |
Tests whether restoring the pre-#130976 ternary code shape for
JsonEncodedText.GetHashCode()removes #131600.Utf8JsonReader.GetUInt64,TryGetUInt64, andTryGetUInt64Corehave 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.