dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.25k stars 4.73k forks source link

Regressions in System.IO.Tests.Perf_Path #84311

Closed performanceautofiler[bot] closed 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Name Value
Architecture x64
OS ubuntu 18.04
Queue TigerUbuntu
Baseline 2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d
Compare f561a058b13523c4b045803c9876e823b4cfe0fc
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Count - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_ubuntu 18.04/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern%3a%20%22.%7b2%2c4%7d(Tom%7cSawyer%7cHuckleberry%7cFinn)%22%2c%20Options%3a%20NonBacktracking).html>) 55.25 ms 61.90 ms 1.12 0.17 False

Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: ".{2,4}(Tom|Sawyer|Huckleberry|Finn)", Options: NonBacktracking) ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 61.898661821428576 > 58.03821891625. IsChangePoint: Marked as a change because one of 2/24/2023 4:59:28 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -9.312903749671078 (T) = (0 -61947217.58893804) / Math.Sqrt((8000127416032.593 / (27)) + (33865505050.645874 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.08927663428438229 = (56870050.856856264 - 61947217.58893804) / 56870050.856856264 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Name Value
Architecture x64
OS ubuntu 18.04
Queue TigerUbuntu
Baseline 2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d
Compare f561a058b13523c4b045803c9876e823b4cfe0fc
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.IO.Tests.Perf_Path

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetFullPathForTypicalLongPath - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_ubuntu 18.04/System.IO.Tests.Perf_Path.GetFullPathForTypicalLongPath.html>) 803.82 ns 1.23 μs 1.53 0.01 True
[GetFullPathForReallyLongPath - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_ubuntu 18.04/System.IO.Tests.Perf_Path.GetFullPathForReallyLongPath.html>) 1.57 μs 2.50 μs 1.60 0.06 True
[GetFullPathForLegacyLength - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_ubuntu 18.04/System.IO.Tests.Perf_Path.GetFullPathForLegacyLength.html>) 308.84 ns 469.25 ns 1.52 0.01 True
[GetFullPathWithRedundantSegments - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_ubuntu 18.04/System.IO.Tests.Perf_Path.GetFullPathWithRedundantSegments.html>) 1.20 μs 1.39 μs 1.16 0.01 True
[GetFullPathNoRedundantSegments - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_ubuntu 18.04/System.IO.Tests.Perf_Path.GetFullPathNoRedundantSegments.html>) 146.30 ns 213.95 ns 1.46 0.02 True

graph graph graph graph graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.IO.Tests.Perf_Path*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.Perf_Path.GetFullPathForTypicalLongPath ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.2265484221131795 > 834.3731831025883. IsChangePoint: Marked as a change because one of 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -292.5883438691397 (T) = (0 -1227.8588213474477) / Math.Sqrt((55.25559745667013 / (27)) + (3.501543218522844 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.5353513171203028 = (799.7249930070816 - 1227.8588213474477) / 799.7249930070816 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathForReallyLongPath ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.503197925839204 > 1.6480635696801973. IsChangePoint: Marked as a change because one of 2/17/2023 5:12:50 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -366.1841864711474 (T) = (0 -2505.3389839757947) / Math.Sqrt((149.3806145091431 / (27)) + (34.0596082394798 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.59057046834714 = (1575.1197660417065 - 2505.3389839757947) / 1575.1197660417065 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathForLegacyLength ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 469.247041062802 > 324.36537307631824. IsChangePoint: Marked as a change because one of 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -212.31689558488011 (T) = (0 -471.55648912846084) / Math.Sqrt((2.5915063421378304 / (27)) + (18.276670757108217 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.528643873361613 = (308.48027938087995 - 471.55648912846084) / 308.48027938087995 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathWithRedundantSegments ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.3890038938072782 > 1.2636197317725182. IsChangePoint: Marked as a change because one of 2/17/2023 5:12:50 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -57.27664075420902 (T) = (0 -1390.6463565708175) / Math.Sqrt((152.11187468058722 / (27)) + (201.22186757111913 / (38))) is less than -1.9983405425199077 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (38) - 2, .025) and -0.15762312814710408 = (1201.2945515322342 - 1390.6463565708175) / 1201.2945515322342 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathNoRedundantSegments ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 213.95246095043603 > 153.6254506079605. IsChangePoint: Marked as a change because one of 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -159.34846522647408 (T) = (0 -213.26763447967818) / Math.Sqrt((0.06568203360374944 / (27)) + (6.4088574454515665 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.4559043118817139 = (146.48465063204324 - 213.26763447967818) / 146.48465063204324 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Name Value
Architecture x64
OS ubuntu 18.04
Queue TigerUbuntu
Baseline 2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d
Compare f561a058b13523c4b045803c9876e823b4cfe0fc
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.IO.Tests.Perf_FileInfo

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ctor_str - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_ubuntu 18.04/System.IO.Tests.Perf_FileInfo.ctor_str.html>) 86.50 ns 114.48 ns 1.32 0.04 False

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.IO.Tests.Perf_FileInfo*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.Perf_FileInfo.ctor_str ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 114.47673909496613 > 90.89520842851451. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/17/2023 5:12:50 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -137.93462457148516 (T) = (0 -115.33593359287029) / Math.Sqrt((1.019447021821 / (27)) + (0.16107681226653775 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.32523563486559953 = (87.03051031718388 - 115.33593359287029) / 87.03051031718388 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
EgorBo commented 1 year ago

Commit range: https://github.com/dotnet/runtime/compare/56ee31f0bd81fdf53c4eea50cf6016a3a545467c...93e91df5a7c54dd4bf133f9535acd705f91b789a cc @jakobbotsch

ghost commented 1 year ago

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

Issue Details
### Run Information Name | Value -- | -- Architecture | x64 OS | ubuntu 18.04 Queue | TigerUbuntu Baseline | [2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d](https://github.com/dotnet/runtime/commit/2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d) Compare | [f561a058b13523c4b045803c9876e823b4cfe0fc](https://github.com/dotnet/runtime/commit/f561a058b13523c4b045803c9876e823b4cfe0fc) Diff | [Diff](https://github.com/dotnet/runtime/compare/2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d...f561a058b13523c4b045803c9876e823b4cfe0fc) Configs | CompilationMode:tiered, RunKind:micro ### Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- [Count - Duration of single invocation]() | 55.25 ms | 61.90 ms | 1.12 | 0.17 | False | | | [Test Report]() ### Repro General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md ### Payloads [Baseline]() [Compare]() ```cmd git clone https://github.com/dotnet/performance.git python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig*' ```
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: ".{2,4}(Tom|Sawyer|Huckleberry|Finn)", Options: NonBacktracking) ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 61.898661821428576 > 58.03821891625. IsChangePoint: Marked as a change because one of 2/24/2023 4:59:28 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -9.312903749671078 (T) = (0 -61947217.58893804) / Math.Sqrt((8000127416032.593 / (27)) + (33865505050.645874 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.08927663428438229 = (56870050.856856264 - 61947217.58893804) / 56870050.856856264 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
--- ### Run Information Name | Value -- | -- Architecture | x64 OS | ubuntu 18.04 Queue | TigerUbuntu Baseline | [2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d](https://github.com/dotnet/runtime/commit/2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d) Compare | [f561a058b13523c4b045803c9876e823b4cfe0fc](https://github.com/dotnet/runtime/commit/f561a058b13523c4b045803c9876e823b4cfe0fc) Diff | [Diff](https://github.com/dotnet/runtime/compare/2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d...f561a058b13523c4b045803c9876e823b4cfe0fc) Configs | CompilationMode:tiered, RunKind:micro ### Regressions in System.IO.Tests.Perf_Path Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- [GetFullPathForTypicalLongPath - Duration of single invocation]() | 803.82 ns | 1.23 μs | 1.53 | 0.01 | True | | | [GetFullPathForReallyLongPath - Duration of single invocation]() | 1.57 μs | 2.50 μs | 1.60 | 0.06 | True | | | [GetFullPathForLegacyLength - Duration of single invocation]() | 308.84 ns | 469.25 ns | 1.52 | 0.01 | True | | | [GetFullPathWithRedundantSegments - Duration of single invocation]() | 1.20 μs | 1.39 μs | 1.16 | 0.01 | True | | | [GetFullPathNoRedundantSegments - Duration of single invocation]() | 146.30 ns | 213.95 ns | 1.46 | 0.02 | True | | | ![graph]() ![graph]() ![graph]() ![graph]() ![graph]() [Test Report]() ### Repro General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md ### Payloads [Baseline]() [Compare]() ```cmd git clone https://github.com/dotnet/performance.git python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.IO.Tests.Perf_Path*' ```
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.Perf_Path.GetFullPathForTypicalLongPath ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.2265484221131795 > 834.3731831025883. IsChangePoint: Marked as a change because one of 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -292.5883438691397 (T) = (0 -1227.8588213474477) / Math.Sqrt((55.25559745667013 / (27)) + (3.501543218522844 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.5353513171203028 = (799.7249930070816 - 1227.8588213474477) / 799.7249930070816 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathForReallyLongPath ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.503197925839204 > 1.6480635696801973. IsChangePoint: Marked as a change because one of 2/17/2023 5:12:50 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -366.1841864711474 (T) = (0 -2505.3389839757947) / Math.Sqrt((149.3806145091431 / (27)) + (34.0596082394798 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.59057046834714 = (1575.1197660417065 - 2505.3389839757947) / 1575.1197660417065 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathForLegacyLength ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 469.247041062802 > 324.36537307631824. IsChangePoint: Marked as a change because one of 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -212.31689558488011 (T) = (0 -471.55648912846084) / Math.Sqrt((2.5915063421378304 / (27)) + (18.276670757108217 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.528643873361613 = (308.48027938087995 - 471.55648912846084) / 308.48027938087995 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathWithRedundantSegments ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.3890038938072782 > 1.2636197317725182. IsChangePoint: Marked as a change because one of 2/17/2023 5:12:50 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -57.27664075420902 (T) = (0 -1390.6463565708175) / Math.Sqrt((152.11187468058722 / (27)) + (201.22186757111913 / (38))) is less than -1.9983405425199077 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (38) - 2, .025) and -0.15762312814710408 = (1201.2945515322342 - 1390.6463565708175) / 1201.2945515322342 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` #### System.IO.Tests.Perf_Path.GetFullPathNoRedundantSegments ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 213.95246095043603 > 153.6254506079605. IsChangePoint: Marked as a change because one of 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -159.34846522647408 (T) = (0 -213.26763447967818) / Math.Sqrt((0.06568203360374944 / (27)) + (6.4088574454515665 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.4559043118817139 = (146.48465063204324 - 213.26763447967818) / 146.48465063204324 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked as regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
--- ### Run Information Name | Value -- | -- Architecture | x64 OS | ubuntu 18.04 Queue | TigerUbuntu Baseline | [2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d](https://github.com/dotnet/runtime/commit/2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d) Compare | [f561a058b13523c4b045803c9876e823b4cfe0fc](https://github.com/dotnet/runtime/commit/f561a058b13523c4b045803c9876e823b4cfe0fc) Diff | [Diff](https://github.com/dotnet/runtime/compare/2ae682e0bfcf9720adb14c3d9eb10f79f6a8e18d...f561a058b13523c4b045803c9876e823b4cfe0fc) Configs | CompilationMode:tiered, RunKind:micro ### Regressions in System.IO.Tests.Perf_FileInfo Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- [ctor_str - Duration of single invocation]() | 86.50 ns | 114.48 ns | 1.32 | 0.04 | False | | | ![graph]() [Test Report]() ### Repro General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md ### Payloads [Baseline]() [Compare]() ```cmd git clone https://github.com/dotnet/performance.git python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.IO.Tests.Perf_FileInfo*' ```
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.Perf_FileInfo.ctor_str ```log ``` ### Description of detection logic ``` IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 114.47673909496613 > 90.89520842851451. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/17/2023 5:12:50 PM, 3/28/2023 3:45:48 AM, 4/3/2023 9:14:01 PM falls between 3/26/2023 7:47:31 AM and 4/3/2023 9:14:01 PM. IsRegressionStdDev: Marked as regression because -137.93462457148516 (T) = (0 -115.33593359287029) / Math.Sqrt((1.019447021821 / (27)) + (0.16107681226653775 / (37))) is less than -1.998971517032675 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (37) - 2, .025) and -0.32523563486559953 = (87.03051031718388 - 115.33593359287029) / 87.03051031718388 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
Author: performanceautofiler[bot]
Assignees: -
Labels: `os-linux`, `tenet-performance`, `tenet-performance-benchmarks`, `arch-x64`, `area-CodeGen-coreclr`, `untriaged`, `runtime-coreclr`, `needs-area-label`
Milestone: -
EgorBo commented 1 year ago

More: https://github.com/dotnet/perf-autofiling-issues/issues/15095

jakobbotsch commented 1 year ago

Does not repro on my AMD CPU:

BenchmarkDotNet=v0.13.2.2052-nightly, OS=ubuntu 20.04
AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores
.NET SDK=8.0.100-preview.4.23211.45
  [Host]     : .NET 8.0.0 (8.0.23.21001), X64 RyuJIT AVX2
  Job-GWXXCM : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2
  Job-USMAZH : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000  IterationTime=250.0000 ms  MaxIterationCount=20
MinIterationCount=15  WarmupCount=1
Method Job Toolchain Mean Error StdDev Median Min Max Ratio Allocated Alloc Ratio
GetFullPathForTypicalLongPath Job-GWXXCM /baseline/Core_Root/corerun 619.8 ns 2.38 ns 1.99 ns 619.3 ns 616.9 ns 624.5 ns 1.00 - NA
GetFullPathForTypicalLongPath Job-USMAZH /diff/Core_Root/corerun 621.9 ns 3.13 ns 2.61 ns 622.7 ns 617.4 ns 627.0 ns 1.00 - NA

I couldn't figure out how to profile ubuntu-x64, so I used PGO to determine that the hot function is

System.IO.PathInternal.RemoveRelativeSegments: 4000610896

The diff is:

@@ -1,275 +1,270 @@
 ; Assembly listing for method System.IO.PathInternal:RemoveRelativeSegments(System.ReadOnlySpan`1[ushort],int,byref):bool
 ; Emitting BLENDED_CODE for X64 CPU with AVX - Unix
 ; Tier-1 compilation
 ; optimized code
 ; optimized using Static PGO
 ; rbp based frame
 ; fully interruptible
 ; with Static PGO: edge weights are invalid, and fgCalledCount is 32459
 ; 1 inlinees with PGO data; 13 single block inlinees; 2 inlinees without PGO data

 G_M000_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+40H]
        mov      r15, rdi
        mov      r14d, esi
        mov      r12d, edx
        mov      rbx, rcx

 G_M000_IG02:
        xor      r13d, r13d
        mov      edi, r12d
        lea      eax, [rdi-01H]
        mov      dword ptr [rbp-34H], eax
        cmp      eax, r14d
        jae      G_M000_IG40
        mov      esi, eax
-       movzx    rsi, word  ptr [r15+2*rsi]
-       cmp      esi, 47
+       cmp      word  ptr [r15+2*rsi], 47
        cmove    edi, eax
        test     edi, edi
        jg       G_M000_IG36

 G_M000_IG03:
        mov      edx, edi
        cmp      edx, r14d
        jge      SHORT G_M000_IG09

 G_M000_IG04:
        cmp      edx, r14d
        jae      G_M000_IG40
        mov      esi, edx
        movzx    rsi, word  ptr [r15+2*rsi]
        cmp      esi, 47
        je       SHORT G_M000_IG12

 G_M000_IG05:
        mov      ecx, dword ptr [rbx+08H]
        lea      r8, bword ptr [rbx+10H]
        mov      r9, bword ptr [r8]
        mov      r8d, dword ptr [r8+08H]
        cmp      ecx, r8d
        jae      SHORT G_M000_IG07

 G_M000_IG06:
        mov      r8d, ecx
        mov      word  ptr [r9+2*r8], si
        inc      ecx
        mov      dword ptr [rbx+08H], ecx
        jmp      SHORT G_M000_IG08

 G_M000_IG07:
        mov      dword ptr [rbp-30H], edx
        mov      dword ptr [rbp-2CH], edi
        mov      rdi, rbx
        call     [System.Text.ValueStringBuilder:GrowAndAppend(ushort):this]
        mov      edx, dword ptr [rbp-30H]
        mov      edi, dword ptr [rbp-2CH]

 G_M000_IG08:
        inc      edx
        cmp      edx, r14d
        jl       SHORT G_M000_IG04

 G_M000_IG09:
        test     r13d, r13d
        jne      G_M000_IG25
        cmp      dword ptr [rbx+08H], r14d
        jne      G_M000_IG25

 G_M000_IG10:
        xor      eax, eax

 G_M000_IG11:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      

 G_M000_IG12:
        lea      ecx, [rdx+01H]
        cmp      ecx, r14d
        jge      SHORT G_M000_IG05

 G_M000_IG13:
        cmp      ecx, r14d
        jae      G_M000_IG40
        mov      r8d, ecx
        movzx    r8, word  ptr [r15+2*r8]
-       mov      r9d, r8d
-       cmp      r9d, 47
+       cmp      r8d, 47
        je       SHORT G_M000_IG08

 G_M000_IG14:
        lea      r9d, [rdx+02H]
        cmp      r9d, r14d
        je       G_M000_IG23

 G_M000_IG15:
        cmp      r9d, r14d
        jae      G_M000_IG40
        mov      r10d, r9d
-       movzx    r10, word  ptr [r15+2*r10]
-       cmp      r10d, 47
-       je       G_M000_IG23
+       cmp      word  ptr [r15+2*r10], 47
+       je       SHORT G_M000_IG23

 G_M000_IG16:
        cmp      r9d, r14d
        jge      G_M000_IG05

 G_M000_IG17:
        lea      ecx, [rdx+03H]
        cmp      ecx, r14d
        je       SHORT G_M000_IG19

 G_M000_IG18:
        cmp      ecx, r14d
        jae      G_M000_IG40
        mov      r10d, ecx
-       movzx    r10, word  ptr [r15+2*r10]
-       cmp      r10d, 47
+       cmp      word  ptr [r15+2*r10], 47
        jne      G_M000_IG05

 G_M000_IG19:
        cmp      r8d, 46
        jne      G_M000_IG05

 G_M000_IG20:
        cmp      r9d, r14d
        jae      G_M000_IG40
        mov      r8d, r9d
        cmp      word  ptr [r15+2*r8], 46
        jne      G_M000_IG05
        mov      edx, dword ptr [rbx+08H]
        dec      edx
        cmp      edx, edi
        jl       SHORT G_M000_IG32

 G_M000_IG21:
        lea      rsi, bword ptr [rbx+10H]
        cmp      edx, dword ptr [rsi+08H]
        jae      G_M000_IG40
        mov      rsi, bword ptr [rsi]
        mov      r8d, edx
-       movzx    rsi, word  ptr [rsi+2*r8]
-       cmp      esi, 47
+       cmp      word  ptr [rsi+2*r8], 47
        je       SHORT G_M000_IG28
        dec      edx
        cmp      edx, edi
        jge      SHORT G_M000_IG21

 G_M000_IG22:
        jmp      SHORT G_M000_IG32

 G_M000_IG23:
        cmp      r8d, 46
-       jne      G_M000_IG16
+       jne      SHORT G_M000_IG16

 G_M000_IG24:
        mov      edx, ecx
        jmp      G_M000_IG08

 G_M000_IG25:
        cmp      edi, r12d
        je       SHORT G_M000_IG26
        cmp      dword ptr [rbx+08H], r12d
        jl       SHORT G_M000_IG34

 G_M000_IG26:
        mov      eax, 1

 G_M000_IG27:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      

 G_M000_IG28:
        cmp      ecx, r14d
        jl       SHORT G_M000_IG30

 G_M000_IG29:
        cmp      edx, edi
        je       SHORT G_M000_IG38

 G_M000_IG30:
        mov      ecx, edx

 G_M000_IG31:
        mov      dword ptr [rbx+08H], ecx

 G_M000_IG32:
        mov      dword ptr [rbp-2CH], edi
        cmp      edx, edi
        jl       SHORT G_M000_IG39

 G_M000_IG33:
        mov      dword ptr [rbp-30H], r9d
        mov      edx, dword ptr [rbp-30H]
        mov      edi, dword ptr [rbp-2CH]
        jmp      G_M000_IG08

 G_M000_IG34:
        mov      edi, dword ptr [rbp-34H]
        movzx    rsi, word  ptr [r15+2*rdi]
        mov      edi, dword ptr [rbx+08H]
        lea      rax, bword ptr [rbx+10H]
        mov      rdx, bword ptr [rax]
        mov      eax, dword ptr [rax+08H]
        cmp      edi, eax
        jae      SHORT G_M000_IG35
        mov      eax, edi
        mov      word  ptr [rdx+2*rax], si
        inc      edi
        mov      dword ptr [rbx+08H], edi
        jmp      SHORT G_M000_IG26

 G_M000_IG35:
        mov      rdi, rbx
        call     [System.Text.ValueStringBuilder:GrowAndAppend(ushort):this]
        jmp      SHORT G_M000_IG26

 G_M000_IG36:
        cmp      edi, r14d
        jbe      SHORT G_M000_IG37
        call     [System.ThrowHelper:ThrowArgumentOutOfRangeException()]
        int3     

 G_M000_IG37:
        mov      dword ptr [rbp-2CH], edi
        mov      edx, edi
        mov      rsi, r15
        mov      rdi, rbx
        call     [System.Text.ValueStringBuilder:Append(System.ReadOnlySpan`1[ushort]):this]
        mov      edi, dword ptr [rbp-2CH]
        jmp      G_M000_IG03

 G_M000_IG38:
        lea      ecx, [rdx+01H]
        jmp      SHORT G_M000_IG31

 G_M000_IG39:
        mov      edi, dword ptr [rbp-2CH]
        mov      dword ptr [rbx+08H], edi
        mov      dword ptr [rbp-2CH], edi
        jmp      SHORT G_M000_IG33

 G_M000_IG40:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     

-; Total bytes of code 589
+; Total bytes of code 568

Seems like this is JCC erratum given that it didn't repro on my CPU. Unfortunately DOTNET_JitDisasmWithAlignmentBoundaries is not working right now, so checking that is a bit annoying.

tannergooding commented 1 year ago

Just reiterating what I said on Discord... My expectation is this is due to how cmp on a small type is implemented in microcode.

With the previous code we had the following and were actually doing a 32-bit comparison.

movzx esi, word  ptr [r15+2*rsi]
cmp      esi, 47

While the new code is instead:

cmp      word  ptr [r15+2*rsi], 47

and a CPU might implement it as:

mov si, word ptr [r15+2*rsi]
cmp si, 47

The code is ultimately doing the "same thing", but a given CPU might not do the implicit zero-extension when operating on a small type for cmp and this can make it have the general issue around partial dependencies that can be introduced for small types.

My best/educated guess here is that AMD is doing an implicit zero-extension behind the scenes and the Intel CPUs are currently not.

jakobbotsch commented 1 year ago

Might also be that Intel CPUs cannot do macro-op fusion in cases like

-       movzx    rsi, word  ptr [rsi+2*r8]
-       cmp      esi, 47
+       cmp      word  ptr [rsi+2*r8], 47
        je       SHORT G_M000_IG28

or, as @tannergooding suggested, a partial stall/false dependency due to worse handling for these kinds of instruction patterns. If that's the case then the only fix is likely to stop containing 16-bit indirections in some of these cases.

jakobbotsch commented 1 year ago

Some benchmarks from my Intel CPU:

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Diagnostics;

namespace MyBenchmarks
{
    public class Benchmark
    {
        private static byte[] s_bytes;
        private static ushort[] s_ushorts;
        private static string s_longPath;

        [GlobalSetup]
        public static void Setup()
        {
            s_bytes = Enumerable.Range(0, 100000).Select(i => (byte)(Random.Shared.Next(2) * 46)).ToArray();
            s_ushorts = Enumerable.Range(0, 100000).Select(i => (ushort)(Random.Shared.Next(2) * 4600)).ToArray();
            s_longPath = CreatePath(500);
        }

        [Benchmark]
        public int Compare8()
        {
            int result = 0;
            byte[] bytes = s_bytes;
            for (int i = 0; i < bytes.Length; i++)
            {
                byte b = bytes[i];
                if (b == 46)
                {
                    result++;
                }
            }

            return result;
        }

        [Benchmark]
        public int Compare16()
        {
            int result = 0;
            ushort[] ushorts = s_ushorts;
            for (int i = 0; i < ushorts.Length; i++)
            {
                ushort u = ushorts[i];
                if (u == 4600)
                {
                    result++;
                }
            }

            return result;
        }

        private static string CreatePath(int len)
        {
            char[] str = new char[len];

            for (int i = 0; i < str.Length; i++)
            {
                // Add path separator so folders aren't too long.
                if (i % 20 == 0)
                {
                    str[i] = Path.DirectorySeparatorChar;
                }
                else
                {
                    str[i] = 'a';
                }
            }

            return new string(str);
        }

        private static readonly Func<string, int, string> _removeRelativeSegments = typeof(Path).Assembly.GetType("System.IO.PathInternal", true)
                                                                                                         .GetMethod("RemoveRelativeSegments", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static, new[] { typeof(string), typeof(int) })
                                                                                                         .CreateDelegate<Func<string, int, string>>();

        [Benchmark]
        public int RemoveRelativeSegments()
        {
            int result = 0;
            for (int i = 0; i < 100; i++)
                result += _removeRelativeSegments(s_longPath, 1).Length;

            return result;
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
        }
    }
}
BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22624.1546)
Intel Core i9-10885H CPU 2.40GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=8.0.100-preview.2.23117.18
  [Host]     : .NET 7.0.5 (7.0.523.17405), X64 RyuJIT AVX2
  Job-SYFUUK : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2
  Job-INHGGA : .NET 8.0.0 (42.42.42.42424), X64 RyuJIT AVX2

MemoryRandomization=True
Method Job Toolchain Mean Error StdDev Median Ratio RatioSD
Compare8 Job-SYFUUK \93e91df5a7c54dd4bf133f9535acd705f91b789a\corerun.exe 303.9 us 2.87 us 2.68 us 304.2 us 1.05 0.01
Compare8 Job-INHGGA \eae7caad29b07c0158b97bff752a78dc4207ca44\corerun.exe 290.5 us 3.63 us 3.39 us 289.6 us 1.00 0.00
Compare16 Job-SYFUUK \93e91df5a7c54dd4bf133f9535acd705f91b789a\corerun.exe 290.9 us 3.91 us 3.66 us 289.6 us 1.00 0.02
Compare16 Job-INHGGA \eae7caad29b07c0158b97bff752a78dc4207ca44\corerun.exe 291.7 us 5.15 us 4.82 us 290.6 us 1.00 0.00
RemoveRelativeSegments Job-SYFUUK \93e91df5a7c54dd4bf133f9535acd705f91b789a\corerun.exe 180.5 us 3.55 us 5.42 us 176.4 us 1.06 0.02
RemoveRelativeSegments Job-INHGGA \eae7caad29b07c0158b97bff752a78dc4207ca44\corerun.exe 170.8 us 3.40 us 5.59 us 166.6 us 1.00 0.00

So maybe the impact on newer Intel CPUs is lower, now sure what CPU is in the lab.

jakobbotsch commented 1 year ago

Diffs for disabling containment of 16-byte loads in compares do not look too encouraging, so I'm not sure what we can really do here. May just be something we'll have to live with (and be content with the fact that it seems to be less of a problem on more modern CPUs). We could also try disabling the containment for hot blocks by utilizing PGO, though using PGO in lowering like this and in lowering is probably breaking new grounds (and it is unclear how reliable the PGO data is).

Diffs are based on 1,662,932 contexts (510,185 MinOpts, 1,152,747 FullOpts).

MISSED contexts: 1 (0.00%)

Overall (+81,565 bytes)
|Collection|Base size (bytes)|Diff size (bytes)| |---|--:|--:| |aspnet.run.windows.x64.checked.mch|47,348,810|+5,678| |benchmarks.run.windows.x64.checked.mch|10,557,287|+2,300| |benchmarks.run_pgo.windows.x64.checked.mch|30,308,510|+4,463| |benchmarks.run_tiered.windows.x64.checked.mch|14,293,111|+1,469| |coreclr_tests.run.windows.x64.checked.mch|366,769,604|+5,788| |libraries.crossgen2.windows.x64.checked.mch|34,043,181|+24,167| |libraries.pmi.windows.x64.checked.mch|52,495,507|+31,914| |libraries_tests.pmi.windows.x64.checked.mch|124,697,145|+5,786|
FullOpts (+81,565 bytes)
|Collection|Base size (bytes)|Diff size (bytes)| |---|--:|--:| |aspnet.run.windows.x64.checked.mch|23,617,503|+5,678| |benchmarks.run.windows.x64.checked.mch|10,104,300|+2,300| |benchmarks.run_pgo.windows.x64.checked.mch|17,540,457|+4,463| |benchmarks.run_tiered.windows.x64.checked.mch|5,497,091|+1,469| |coreclr_tests.run.windows.x64.checked.mch|87,341,018|+5,788| |libraries.crossgen2.windows.x64.checked.mch|34,041,992|+24,167| |libraries.pmi.windows.x64.checked.mch|51,090,201|+31,914| |libraries_tests.pmi.windows.x64.checked.mch|119,629,868|+5,786|
Example diffs
aspnet.run.windows.x64.checked.mch
+2 (+0.02%) : 115698.dasm - Npgsql.PostgresDatabaseInfo+d__22:MoveNext():this
```diff @@ -2967,8 +2967,9 @@ G_M61318_IG164: ; bbWeight=8, extend ; gcr arg pop 0 cmp dword ptr [rax+08H], 0 jbe G_M61318_IG53 + movzx rcx, word ptr [rax+0CH] xor r12d, r12d - cmp word ptr [rax+0CH], 116 + cmp ecx, 116 sete r12b mov rcx, gword ptr [rsi+08H] ; gcrRegs +[rcx] @@ -2991,7 +2992,7 @@ G_M61318_IG164: ; bbWeight=8, extend bswap edx cmp edx, -1 je G_M61318_IG172 - ;; size=133 bbWeight=8 PerfScore 348.00 + ;; size=135 bbWeight=8 PerfScore 342.00 G_M61318_IG165: ; bbWeight=4, gcrefRegs=6008 {rbx r13 r14}, byrefRegs=0040 {rsi}, byref ; gcrRegs -[rcx] mov rcx, gword ptr [rsi+08H] @@ -5154,7 +5155,7 @@ RWD80 dd G_M61318_IG176 - G_M61318_IG02 dd G_M61318_IG193 - G_M61318_IG02 -; Total bytes of code 10732, prolog size 102, PerfScore 13585.74, instruction count 2359, allocated bytes for code 10732 (MethodHash=d1b11079) for method Npgsql.PostgresDatabaseInfo+d__22:MoveNext():this +; Total bytes of code 10734, prolog size 102, PerfScore 13579.94, instruction count 2360, allocated bytes for code 10734 (MethodHash=d1b11079) for method Npgsql.PostgresDatabaseInfo+d__22:MoveNext():this ; ============================================================ Unwind Info: ```
+2 (+0.03%) : 113282.dasm - Npgsql.PostgresDatabaseInfo+d__22:MoveNext():this
```diff @@ -1135,8 +1135,9 @@ G_M61318_IG29: ; bbWeight=8, extend ; gcr arg pop 0 cmp dword ptr [rax+08H], 0 jbe G_M61318_IG34 + movzx rcx, word ptr [rax+0CH] xor r12d, r12d - cmp word ptr [rax+0CH], 116 + cmp ecx, 116 sete r12b mov rcx, gword ptr [rsi+08H] ; gcrRegs +[rcx] @@ -1159,7 +1160,7 @@ G_M61318_IG29: ; bbWeight=8, extend bswap edx cmp edx, -1 je G_M61318_IG39 - ;; size=133 bbWeight=8 PerfScore 348.00 + ;; size=135 bbWeight=8 PerfScore 342.00 G_M61318_IG30: ; bbWeight=4, gcrefRegs=6008 {rbx r13 r14}, byrefRegs=0040 {rsi}, byref ; gcrRegs -[rcx] mov rcx, gword ptr [rsi+08H] @@ -3428,7 +3429,7 @@ RWD00 dd G_M61318_IG43 - G_M61318_IG02 dd G_M61318_IG60 - G_M61318_IG02 -; Total bytes of code 7101, prolog size 129, PerfScore 12683.68, instruction count 1488, allocated bytes for code 7101 (MethodHash=d1b11079) for method Npgsql.PostgresDatabaseInfo+d__22:MoveNext():this +; Total bytes of code 7103, prolog size 129, PerfScore 12677.88, instruction count 1489, allocated bytes for code 7103 (MethodHash=d1b11079) for method Npgsql.PostgresDatabaseInfo+d__22:MoveNext():this ; ============================================================ Unwind Info: ```
+1 (+0.03%) : 131264.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this
```diff @@ -709,10 +709,11 @@ G_M16266_IG37: ; bbWeight=0.89, gcrefRegs=4040 {rsi r14}, byrefRegs=0000 mov r8, qword ptr [r14+A8H] shr r8, 32 movsx r8, r8w - cmp word ptr [r14+60H], 0 + movsx rax, word ptr [r14+60H] + test eax, eax jg G_M16266_IG71 movsx r10, word ptr [r14+58H] - ;; size=107 bbWeight=0.89 PerfScore 53.47 + ;; size=108 bbWeight=0.89 PerfScore 54.58 G_M16266_IG38: ; bbWeight=0.89, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r14] movsx r14, r8w @@ -1103,7 +1104,7 @@ RWD80 dq 8000000000000000h ; -0 RWD96 dq 4024000000000000h ; 10 -; Total bytes of code 2875, prolog size 123, PerfScore 3662.94, instruction count 608, allocated bytes for code 2875 (MethodHash=1578c075) for method System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this +; Total bytes of code 2876, prolog size 123, PerfScore 3664.15, instruction count 609, allocated bytes for code 2876 (MethodHash=1578c075) for method System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this ; ============================================================ Unwind Info: ```
+11 (+21.15%) : 20667.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool
```diff @@ -28,9 +28,10 @@ G_M43248_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ;; size=11 bbWeight=1 PerfScore 5.25 G_M43248_IG03: ; bbWeight=1.01, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref, isz ; byrRegs -[rcx] - cmp word ptr [rdx], 92 + movzx rax, word ptr [rdx] + cmp eax, 92 je SHORT G_M43248_IG06 - ;; size=6 bbWeight=1.01 PerfScore 4.05 + ;; size=8 bbWeight=1.01 PerfScore 3.29 G_M43248_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; byrRegs -[rdx] xor eax, eax @@ -40,23 +41,27 @@ G_M43248_IG05: ; bbWeight=1, epilog, nogc, extend ;; size=1 bbWeight=1 PerfScore 1.00 G_M43248_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, gcvars, byref, isz ; byrRegs +[rdx] - cmp word ptr [rdx+02H], 92 + movzx rax, word ptr [rdx+02H] + cmp eax, 92 je SHORT G_M43248_IG07 - cmp word ptr [rdx+02H], 63 + movzx rax, word ptr [rdx+02H] + cmp eax, 63 jne SHORT G_M43248_IG04 - ;; size=14 bbWeight=0 PerfScore 0.00 + ;; size=18 bbWeight=0 PerfScore 0.00 G_M43248_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref, isz - cmp word ptr [rdx+04H], 63 + movzx rax, word ptr [rdx+04H] + cmp eax, 63 jne SHORT G_M43248_IG04 - xor eax, eax - cmp word ptr [rdx+06H], 92 + movzx rax, word ptr [rdx+06H] + cmp eax, 92 sete al - ;; size=17 bbWeight=0 PerfScore 0.00 + movzx rax, al + ;; size=22 bbWeight=0 PerfScore 0.00 G_M43248_IG08: ; bbWeight=0, epilog, nogc, extend ret ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 52, prolog size 0, PerfScore 15.75, instruction count 18, allocated bytes for code 52 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool +; Total bytes of code 63, prolog size 0, PerfScore 16.09, instruction count 23, allocated bytes for code 63 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool ; ============================================================ Unwind Info: ```
+11 (+21.15%) : 22171.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool
```diff @@ -28,9 +28,10 @@ G_M43248_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ;; size=11 bbWeight=1 PerfScore 5.25 G_M43248_IG03: ; bbWeight=0.99, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref, isz ; byrRegs -[rcx] - cmp word ptr [rdx], 92 + movzx rax, word ptr [rdx] + cmp eax, 92 je SHORT G_M43248_IG06 - ;; size=6 bbWeight=0.99 PerfScore 3.94 + ;; size=8 bbWeight=0.99 PerfScore 3.20 G_M43248_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; byrRegs -[rdx] xor eax, eax @@ -40,23 +41,27 @@ G_M43248_IG05: ; bbWeight=1, epilog, nogc, extend ;; size=1 bbWeight=1 PerfScore 1.00 G_M43248_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, gcvars, byref, isz ; byrRegs +[rdx] - cmp word ptr [rdx+02H], 92 + movzx rax, word ptr [rdx+02H] + cmp eax, 92 je SHORT G_M43248_IG07 - cmp word ptr [rdx+02H], 63 + movzx rax, word ptr [rdx+02H] + cmp eax, 63 jne SHORT G_M43248_IG04 - ;; size=14 bbWeight=0 PerfScore 0.00 + ;; size=18 bbWeight=0 PerfScore 0.00 G_M43248_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref, isz - cmp word ptr [rdx+04H], 63 + movzx rax, word ptr [rdx+04H] + cmp eax, 63 jne SHORT G_M43248_IG04 - xor eax, eax - cmp word ptr [rdx+06H], 92 + movzx rax, word ptr [rdx+06H] + cmp eax, 92 sete al - ;; size=17 bbWeight=0 PerfScore 0.00 + movzx rax, al + ;; size=22 bbWeight=0 PerfScore 0.00 G_M43248_IG08: ; bbWeight=0, epilog, nogc, extend ret ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 52, prolog size 0, PerfScore 15.64, instruction count 18, allocated bytes for code 52 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool +; Total bytes of code 63, prolog size 0, PerfScore 16.00, instruction count 23, allocated bytes for code 63 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool ; ============================================================ Unwind Info: ```
+4 (+36.36%) : 114838.dasm - Npgsql.BackendMessages.FieldDescription:get_IsBinaryFormat():bool:this
```diff @@ -17,15 +17,16 @@ G_M16537_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M16537_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+30H], 1 + movsx rax, word ptr [rcx+30H] + cmp eax, 1 sete al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=14 bbWeight=1 PerfScore 5.50 G_M16537_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=ec50bf66) for method Npgsql.BackendMessages.FieldDescription:get_IsBinaryFormat():bool:this +; Total bytes of code 15, prolog size 0, PerfScore 8.00, instruction count 5, allocated bytes for code 15 (MethodHash=ec50bf66) for method Npgsql.BackendMessages.FieldDescription:get_IsBinaryFormat():bool:this ; ============================================================ Unwind Info: ```
benchmarks.run.windows.x64.checked.mch
+2 (+0.04%) : 26076.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanSyntaxToken(byref):this
```diff @@ -1473,9 +1473,10 @@ G_M47205_IG87: ; bbWeight=0.50, gcrefRegs=8040 {rsi r15}, byrefRegs=0000 G_M47205_IG88: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref ; gcrRegs +[rsi] ; byrRegs +[rdi] - cmp word ptr [rsi+60H], 2 + movzx rcx, word ptr [rsi+60H] + cmp ecx, 2 jne G_M47205_IG115 - ;; size=11 bbWeight=0.50 PerfScore 2.00 + ;; size=13 bbWeight=0.50 PerfScore 1.62 G_M47205_IG89: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref mov rcx, rsi ; gcrRegs +[rcx] @@ -2344,7 +2345,7 @@ RWD00 dd G_M47205_IG23 - G_M47205_IG02 dd G_M47205_IG22 - G_M47205_IG02 -; Total bytes of code 5053, prolog size 38, PerfScore 1209.76, instruction count 1119, allocated bytes for code 5053 (MethodHash=75d8479a) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanSyntaxToken(byref):this +; Total bytes of code 5055, prolog size 38, PerfScore 1209.58, instruction count 1120, allocated bytes for code 5055 (MethodHash=75d8479a) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanSyntaxToken(byref):this ; ============================================================ Unwind Info: ```
+2 (+0.04%) : 26154.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanNumericLiteral(byref):bool:this
```diff @@ -525,7 +525,8 @@ G_M27171_IG29: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi call [Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanNumericLiteralSingleInteger(byref,byref,byref,bool,bool):this] ; gcrRegs -[rcx] ; gcr arg pop 0 - cmp word ptr [rsi+60H], 2 + movzx rcx, word ptr [rsi+60H] + cmp ecx, 2 jne G_M27171_IG38 mov rcx, gword ptr [rsi+08H] ; gcrRegs +[rcx] @@ -578,7 +579,7 @@ G_M27171_IG29: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi ; gcrRegs +[r15] test byte ptr [(reloc)], 1 ; global ptr je G_M27171_IG135 - ;; size=178 bbWeight=0.50 PerfScore 21.75 + ;; size=180 bbWeight=0.50 PerfScore 21.38 G_M27171_IG30: ; bbWeight=0.50, gcrefRegs=8040 {rsi r15}, byrefRegs=0000 {}, byref ; gcrRegs -[rax] mov rcx, 0xD1FFAB1E @@ -2094,7 +2095,7 @@ RWD00 dd G_M27171_IG107 - G_M27171_IG02 dd G_M27171_IG106 - G_M27171_IG02 -; Total bytes of code 4976, prolog size 45, PerfScore 1070.68, instruction count 1058, allocated bytes for code 4976 (MethodHash=e29695dc) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanNumericLiteral(byref):bool:this +; Total bytes of code 4978, prolog size 45, PerfScore 1070.51, instruction count 1059, allocated bytes for code 4978 (MethodHash=e29695dc) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanNumericLiteral(byref):bool:this ; ============================================================ Unwind Info: ```
+2 (+0.04%) : 2516.dasm - System.Text.RegularExpressions.RegexCompiler:g__EmitFixedSet_LeftToRight|154_3(byref):this
```diff @@ -935,9 +935,10 @@ G_M12835_IG40: ; bbWeight=4, gcrefRegs=3048 {rbx rsi r12 r13}, byrefRegs= ; gcr arg pop 0 mov rdx, gword ptr [rbp-1E0H] ; gcrRegs +[rdx] - cmp word ptr [rdx+0CH], 1 + movzx rcx, word ptr [rdx+0CH] + cmp ecx, 1 jne SHORT G_M12835_IG42 - ;; size=115 bbWeight=4 PerfScore 100.00 + ;; size=117 bbWeight=4 PerfScore 97.00 G_M12835_IG41: ; bbWeight=2, gcrefRegs=304C {rdx rbx rsi r12 r13}, byrefRegs=0080 {rdi}, byref, isz test eax, eax sete al @@ -2297,7 +2298,7 @@ RWD00 dd G_M12835_IG26 - G_M12835_IG02 dd G_M12835_IG29 - G_M12835_IG02 -; Total bytes of code 4587, prolog size 93, PerfScore 1589.39, instruction count 1089, allocated bytes for code 4587 (MethodHash=1108cddc) for method System.Text.RegularExpressions.RegexCompiler:g__EmitFixedSet_LeftToRight|154_3(byref):this +; Total bytes of code 4589, prolog size 93, PerfScore 1586.59, instruction count 1090, allocated bytes for code 4589 (MethodHash=1108cddc) for method System.Text.RegularExpressions.RegexCompiler:g__EmitFixedSet_LeftToRight|154_3(byref):this ; ============================================================ Unwind Info: ```
+7 (+17.95%) : 7122.dasm - System.CSharpHelpers:IsPrefixTwoUnderscore(System.String):bool
```diff @@ -29,14 +29,17 @@ G_M9288_IG04: ; bbWeight=0.50, epilog, nogc, extend ;; size=1 bbWeight=0.50 PerfScore 0.50 G_M9288_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[rcx] - cmp word ptr [rcx+0CH], 95 + movzx rax, word ptr [rcx+0CH] + cmp eax, 95 jne SHORT G_M9288_IG07 - cmp word ptr [rcx+0EH], 95 + movzx rax, word ptr [rcx+0EH] + cmp eax, 95 jne SHORT G_M9288_IG07 - xor eax, eax - cmp word ptr [rcx+10H], 95 + movzx rax, word ptr [rcx+10H] + cmp eax, 95 setne al - ;; size=24 bbWeight=0.50 PerfScore 6.12 + movzx rax, al + ;; size=31 bbWeight=0.50 PerfScore 5.00 G_M9288_IG06: ; bbWeight=0.50, epilog, nogc, extend ret ;; size=1 bbWeight=0.50 PerfScore 0.50 @@ -48,7 +51,7 @@ G_M9288_IG08: ; bbWeight=0.50, epilog, nogc, extend ret ;; size=1 bbWeight=0.50 PerfScore 0.50 -; Total bytes of code 39, prolog size 0, PerfScore 15.03, instruction count 15, allocated bytes for code 39 (MethodHash=f0a2dbb7) for method System.CSharpHelpers:IsPrefixTwoUnderscore(System.String):bool +; Total bytes of code 46, prolog size 0, PerfScore 14.60, instruction count 18, allocated bytes for code 46 (MethodHash=f0a2dbb7) for method System.CSharpHelpers:IsPrefixTwoUnderscore(System.String):bool ; ============================================================ Unwind Info: ```
+2 (+18.18%) : 17369.dasm - System.Text.EncoderNLS:get_HasState():bool:this
```diff @@ -15,15 +15,16 @@ G_M32880_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M32880_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+24H], 0 + movzx rax, word ptr [rcx+24H] + test eax, eax setne al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=12 bbWeight=1 PerfScore 3.50 G_M32880_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=d1737f8f) for method System.Text.EncoderNLS:get_HasState():bool:this +; Total bytes of code 13, prolog size 0, PerfScore 5.80, instruction count 5, allocated bytes for code 13 (MethodHash=d1737f8f) for method System.Text.EncoderNLS:get_HasState():bool:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 5118.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this
```diff @@ -17,15 +17,16 @@ G_M4741_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M4741_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref ; byrRegs +[rdx] - xor eax, eax - cmp word ptr [rdx+06H], 0x504D + movzx rax, word ptr [rdx+06H] + cmp eax, 0x504D sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M4741_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this ; ============================================================ Unwind Info: ```
benchmarks.run_pgo.windows.x64.checked.mch
+1 (+0.02%) : 64353.dasm - Microsoft.CodeAnalysis.CodeGen.ILBuilder:RealizeBlocks():this
```diff @@ -804,9 +804,10 @@ G_M60683_IG57: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byr je SHORT G_M60683_IG60 ;; size=9 bbWeight=1 PerfScore 3.25 G_M60683_IG58: ; bbWeight=1.50, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref - cmp word ptr [rdi+34H], 0 + movzx rcx, word ptr [rdi+34H] + test ecx, ecx je G_M60683_IG157 - ;; size=11 bbWeight=1.50 PerfScore 6.00 + ;; size=12 bbWeight=1.50 PerfScore 4.88 G_M60683_IG59: ; bbWeight=1.50, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref, isz mov rdi, gword ptr [rdi+18H] test rdi, rdi @@ -2277,7 +2278,7 @@ G_M60683_IG191: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 4320, prolog size 74, PerfScore 1988.49, instruction count 1040, allocated bytes for code 4320 (MethodHash=c19e12f4) for method Microsoft.CodeAnalysis.CodeGen.ILBuilder:RealizeBlocks():this +; Total bytes of code 4321, prolog size 74, PerfScore 1987.47, instruction count 1041, allocated bytes for code 4321 (MethodHash=c19e12f4) for method Microsoft.CodeAnalysis.CodeGen.ILBuilder:RealizeBlocks():this ; ============================================================ Unwind Info: ```
+1 (+0.03%) : 64467.dasm - Microsoft.Cci.FullMetadataWriter:CreateIndicesForNonTypeMembers(Microsoft.Cci.ITypeDefinition):this
```diff @@ -278,12 +278,13 @@ G_M43420_IG08: ; bbWeight=0.75, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 cmp dword ptr [rcx+08H], 0 jbe G_M43420_IG113 mov rcx, gword ptr [rcx+10H] - cmp word ptr [rcx+34H], 0 + movzx rcx, word ptr [rcx+34H] + ; gcrRegs -[rcx] + test ecx, ecx je SHORT G_M43420_IG10 jmp G_M43420_IG107 - ;; size=34 bbWeight=0.75 PerfScore 12.00 + ;; size=35 bbWeight=0.75 PerfScore 11.44 G_M43420_IG09: ; bbWeight=1, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx] mov rcx, rsi ; gcrRegs +[rcx] mov r11, 0xD1FFAB1E ; code for @@ -1814,7 +1815,7 @@ G_M43420_IG139: ; bbWeight=0, funclet epilog, nogc, extend ret ;; size=20 bbWeight=0 PerfScore 0.00 -; Total bytes of code 3754, prolog size 110, PerfScore 756.79, instruction count 873, allocated bytes for code 3754 (MethodHash=d2d25663) for method Microsoft.Cci.FullMetadataWriter:CreateIndicesForNonTypeMembers(Microsoft.Cci.ITypeDefinition):this +; Total bytes of code 3755, prolog size 110, PerfScore 756.33, instruction count 874, allocated bytes for code 3755 (MethodHash=d2d25663) for method Microsoft.Cci.FullMetadataWriter:CreateIndicesForNonTypeMembers(Microsoft.Cci.ITypeDefinition):this ; ============================================================ Unwind Info: ```
+1 (+0.03%) : 12255.dasm - System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this
```diff @@ -847,10 +847,11 @@ G_M16266_IG51: ; bbWeight=0.93, gcVars=0000000000000000000000000000000000 G_M16266_IG52: ; bbWeight=0.93, gcVars=000000000000000000000000000000000000000000000000 {}, gcrefRegs=40C0 {rsi rdi r14}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs -[r9] ; GC ptr vars -{V114} - cmp word ptr [r14+60H], 0 + movsx rax, word ptr [r14+60H] + test eax, eax jg G_M16266_IG92 movsx r10, word ptr [r14+58H] - ;; size=17 bbWeight=0.93 PerfScore 7.47 + ;; size=18 bbWeight=0.93 PerfScore 8.63 G_M16266_IG53: ; bbWeight=0.93, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r14] movsx r14, word ptr [rbp-124H] @@ -1276,7 +1277,7 @@ RWD80 dq 8000000000000000h ; -0 RWD96 dq 4024000000000000h ; 10 -; Total bytes of code 3427, prolog size 105, PerfScore 1536.13, instruction count 696, allocated bytes for code 3427 (MethodHash=1578c075) for method System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this +; Total bytes of code 3428, prolog size 105, PerfScore 1537.40, instruction count 697, allocated bytes for code 3428 (MethodHash=1578c075) for method System.Threading.PortableThreadPool+HillClimbing:Update(int,double,int):System.ValueTuple`2[int,int]:this ; ============================================================ Unwind Info: ```
+11 (+21.15%) : 36241.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool
```diff @@ -25,9 +25,10 @@ G_M43248_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr mov eax, dword ptr [rcx+08H] cmp eax, 4 jl SHORT G_M43248_IG03 - cmp word ptr [rdx], 92 + movzx rax, word ptr [rdx] + cmp eax, 92 je SHORT G_M43248_IG05 - ;; size=17 bbWeight=1 PerfScore 9.25 + ;; size=19 bbWeight=1 PerfScore 8.50 G_M43248_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; byrRegs -[rcx rdx] xor eax, eax @@ -37,23 +38,27 @@ G_M43248_IG04: ; bbWeight=1, epilog, nogc, extend ;; size=1 bbWeight=1 PerfScore 1.00 G_M43248_IG05: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, gcvars, byref, isz ; byrRegs +[rdx] - cmp word ptr [rdx+02H], 92 + movzx rax, word ptr [rdx+02H] + cmp eax, 92 je SHORT G_M43248_IG06 - cmp word ptr [rdx+02H], 63 + movzx rax, word ptr [rdx+02H] + cmp eax, 63 jne SHORT G_M43248_IG03 - ;; size=14 bbWeight=0 PerfScore 0.00 + ;; size=18 bbWeight=0 PerfScore 0.00 G_M43248_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref, isz - cmp word ptr [rdx+04H], 63 + movzx rax, word ptr [rdx+04H] + cmp eax, 63 jne SHORT G_M43248_IG03 - xor eax, eax - cmp word ptr [rdx+06H], 92 + movzx rax, word ptr [rdx+06H] + cmp eax, 92 sete al - ;; size=17 bbWeight=0 PerfScore 0.00 + movzx rax, al + ;; size=22 bbWeight=0 PerfScore 0.00 G_M43248_IG07: ; bbWeight=0, epilog, nogc, extend ret ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 52, prolog size 0, PerfScore 15.70, instruction count 18, allocated bytes for code 52 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool +; Total bytes of code 63, prolog size 0, PerfScore 16.05, instruction count 23, allocated bytes for code 63 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool ; ============================================================ Unwind Info: ```
+11 (+21.15%) : 7935.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool
```diff @@ -25,9 +25,10 @@ G_M43248_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr mov eax, dword ptr [rcx+08H] cmp eax, 4 jl SHORT G_M43248_IG03 - cmp word ptr [rdx], 92 + movzx rax, word ptr [rdx] + cmp eax, 92 je SHORT G_M43248_IG05 - ;; size=17 bbWeight=1 PerfScore 9.25 + ;; size=19 bbWeight=1 PerfScore 8.50 G_M43248_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; byrRegs -[rcx rdx] xor eax, eax @@ -37,23 +38,27 @@ G_M43248_IG04: ; bbWeight=1, epilog, nogc, extend ;; size=1 bbWeight=1 PerfScore 1.00 G_M43248_IG05: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, gcvars, byref, isz ; byrRegs +[rdx] - cmp word ptr [rdx+02H], 92 + movzx rax, word ptr [rdx+02H] + cmp eax, 92 je SHORT G_M43248_IG06 - cmp word ptr [rdx+02H], 63 + movzx rax, word ptr [rdx+02H] + cmp eax, 63 jne SHORT G_M43248_IG03 - ;; size=14 bbWeight=0 PerfScore 0.00 + ;; size=18 bbWeight=0 PerfScore 0.00 G_M43248_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref, isz - cmp word ptr [rdx+04H], 63 + movzx rax, word ptr [rdx+04H] + cmp eax, 63 jne SHORT G_M43248_IG03 - xor eax, eax - cmp word ptr [rdx+06H], 92 + movzx rax, word ptr [rdx+06H] + cmp eax, 92 sete al - ;; size=17 bbWeight=0 PerfScore 0.00 + movzx rax, al + ;; size=22 bbWeight=0 PerfScore 0.00 G_M43248_IG07: ; bbWeight=0, epilog, nogc, extend ret ;; size=1 bbWeight=0 PerfScore 0.00 -; Total bytes of code 52, prolog size 0, PerfScore 15.70, instruction count 18, allocated bytes for code 52 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool +; Total bytes of code 63, prolog size 0, PerfScore 16.05, instruction count 23, allocated bytes for code 63 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool ; ============================================================ Unwind Info: ```
+3 (+27.27%) : 54860.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this
```diff @@ -17,15 +17,16 @@ G_M19464_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M19464_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+0CH], 1 + movzx rax, word ptr [rcx+0CH] + cmp eax, 1 sete al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=13 bbWeight=1 PerfScore 3.50 G_M19464_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=ae04b3f7) for method Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this +; Total bytes of code 14, prolog size 0, PerfScore 5.90, instruction count 5, allocated bytes for code 14 (MethodHash=ae04b3f7) for method Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this ; ============================================================ Unwind Info: ```
benchmarks.run_tiered.windows.x64.checked.mch
+2 (+0.04%) : 43961.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanSyntaxToken(byref):this
```diff @@ -1444,9 +1444,10 @@ G_M47205_IG82: ; bbWeight=0.50, gcrefRegs=8040 {rsi r15}, byrefRegs=0000 G_M47205_IG83: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref ; gcrRegs +[rsi] ; byrRegs +[rdi] - cmp word ptr [rsi+60H], 2 + movzx rcx, word ptr [rsi+60H] + cmp ecx, 2 jne G_M47205_IG108 - ;; size=11 bbWeight=0.50 PerfScore 2.00 + ;; size=13 bbWeight=0.50 PerfScore 1.62 G_M47205_IG84: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, byref mov rcx, rsi ; gcrRegs +[rcx] @@ -2237,7 +2238,7 @@ RWD00 dd G_M47205_IG22 - G_M47205_IG02 dd G_M47205_IG21 - G_M47205_IG02 -; Total bytes of code 4725, prolog size 38, PerfScore 1148.96, instruction count 1063, allocated bytes for code 4725 (MethodHash=75d8479a) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanSyntaxToken(byref):this +; Total bytes of code 4727, prolog size 38, PerfScore 1148.78, instruction count 1064, allocated bytes for code 4727 (MethodHash=75d8479a) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanSyntaxToken(byref):this ; ============================================================ Unwind Info: ```
+2 (+0.04%) : 15770.dasm - System.Text.RegularExpressions.RegexCompiler:g__EmitFixedSet_LeftToRight|154_3(byref):this
```diff @@ -931,9 +931,10 @@ G_M12835_IG40: ; bbWeight=4, gcrefRegs=3048 {rbx rsi r12 r13}, byrefRegs= ; gcr arg pop 0 mov rdx, gword ptr [rbp-1E0H] ; gcrRegs +[rdx] - cmp word ptr [rdx+0CH], 1 + movzx rcx, word ptr [rdx+0CH] + cmp ecx, 1 jne SHORT G_M12835_IG42 - ;; size=115 bbWeight=4 PerfScore 100.00 + ;; size=117 bbWeight=4 PerfScore 97.00 G_M12835_IG41: ; bbWeight=2, gcrefRegs=304C {rdx rbx rsi r12 r13}, byrefRegs=0080 {rdi}, byref, isz test eax, eax sete al @@ -2293,7 +2294,7 @@ RWD00 dd G_M12835_IG26 - G_M12835_IG02 dd G_M12835_IG29 - G_M12835_IG02 -; Total bytes of code 4567, prolog size 93, PerfScore 1586.64, instruction count 1086, allocated bytes for code 4567 (MethodHash=1108cddc) for method System.Text.RegularExpressions.RegexCompiler:g__EmitFixedSet_LeftToRight|154_3(byref):this +; Total bytes of code 4569, prolog size 93, PerfScore 1583.84, instruction count 1087, allocated bytes for code 4569 (MethodHash=1108cddc) for method System.Text.RegularExpressions.RegexCompiler:g__EmitFixedSet_LeftToRight|154_3(byref):this ; ============================================================ Unwind Info: ```
+2 (+0.07%) : 50019.dasm - Microsoft.CodeAnalysis.CSharp.Binder:BindDeclarationStatementParts(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CSharp.BoundStatement:this
```diff @@ -481,16 +481,17 @@ G_M35546_IG17: ; bbWeight=0.50, gcrefRegs=40C8 {rbx rsi rdi r14}, byrefRe je G_M35546_IG61 mov rcx, gword ptr [rdx+18H] ; gcrRegs +[rcx] - cmp word ptr [rcx+0CH], 1 + movzx rcx, word ptr [rcx+0CH] + ; gcrRegs -[rcx] + cmp ecx, 1 je SHORT G_M35546_IG18 mov r13, rdx ; gcrRegs +[r13] mov rcx, 0xD1FFAB1E ; Microsoft.CodeAnalysis.CSharp.Syntax.VariableDeclaratorSyntax - ; gcrRegs -[rcx] cmp qword ptr [r13], rcx jne G_M35546_IG59 jmp SHORT G_M35546_IG20 - ;; size=61 bbWeight=0.50 PerfScore 8.38 + ;; size=63 bbWeight=0.50 PerfScore 8.00 G_M35546_IG18: ; bbWeight=0.50, gcVars=00000000000000020000000000000000 {V53}, gcrefRegs=40CC {rdx rbx rsi rdi r14}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs -[r13] cmp dword ptr [rbp-80H], 0 @@ -1250,7 +1251,7 @@ G_M35546_IG64: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 2782, prolog size 80, PerfScore 988.60, instruction count 607, allocated bytes for code 2782 (MethodHash=09987525) for method Microsoft.CodeAnalysis.CSharp.Binder:BindDeclarationStatementParts(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CSharp.BoundStatement:this +; Total bytes of code 2784, prolog size 80, PerfScore 988.42, instruction count 608, allocated bytes for code 2784 (MethodHash=09987525) for method Microsoft.CodeAnalysis.CSharp.Binder:BindDeclarationStatementParts(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CSharp.BoundStatement:this ; ============================================================ Unwind Info: ```
+6 (+11.32%) : 5981.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool
```diff @@ -28,22 +28,25 @@ G_M43248_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr ;; size=11 bbWeight=1 PerfScore 5.25 G_M43248_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {rax}, byref, isz ; byrRegs -[rcx] - cmp word ptr [rax], 92 + movzx rdx, word ptr [rax] + cmp edx, 92 jne SHORT G_M43248_IG06 movzx rdx, word ptr [rax+02H] cmp edx, 92 je SHORT G_M43248_IG04 cmp edx, 63 jne SHORT G_M43248_IG06 - ;; size=20 bbWeight=0.50 PerfScore 4.25 + ;; size=22 bbWeight=0.50 PerfScore 3.88 G_M43248_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {rax}, byref, isz - cmp word ptr [rax+04H], 63 + movzx rdx, word ptr [rax+04H] + cmp edx, 63 jne SHORT G_M43248_IG06 - cmp word ptr [rax+06H], 92 - sete al + movzx rax, word ptr [rax+06H] ; byrRegs -[rax] + cmp eax, 92 + sete al movzx rax, al - ;; size=18 bbWeight=0.50 PerfScore 4.12 + ;; size=22 bbWeight=0.50 PerfScore 3.38 G_M43248_IG05: ; bbWeight=0.50, epilog, nogc, extend ret ;; size=1 bbWeight=0.50 PerfScore 0.50 @@ -54,7 +57,7 @@ G_M43248_IG07: ; bbWeight=0.50, epilog, nogc, extend ret ;; size=1 bbWeight=0.50 PerfScore 0.50 -; Total bytes of code 53, prolog size 0, PerfScore 20.05, instruction count 19, allocated bytes for code 53 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool +; Total bytes of code 59, prolog size 0, PerfScore 19.53, instruction count 22, allocated bytes for code 59 (MethodHash=9137570f) for method System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool ; ============================================================ Unwind Info: ```
+2 (+12.50%) : 48412.dasm - Microsoft.CodeAnalysis.SyntaxNode:get_IsList():bool:this
```diff @@ -20,16 +20,17 @@ G_M26074_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byr ; gcrRegs +[rcx] mov rax, gword ptr [rcx+18H] ; gcrRegs +[rax] - cmp word ptr [rax+0CH], 1 - sete al + movzx rax, word ptr [rax+0CH] ; gcrRegs -[rax] + cmp eax, 1 + sete al movzx rax, al - ;; size=15 bbWeight=1 PerfScore 6.25 + ;; size=17 bbWeight=1 PerfScore 5.50 G_M26074_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 16, prolog size 0, PerfScore 8.85, instruction count 5, allocated bytes for code 16 (MethodHash=540b9a25) for method Microsoft.CodeAnalysis.SyntaxNode:get_IsList():bool:this +; Total bytes of code 18, prolog size 0, PerfScore 8.30, instruction count 6, allocated bytes for code 18 (MethodHash=540b9a25) for method Microsoft.CodeAnalysis.SyntaxNode:get_IsList():bool:this ; ============================================================ Unwind Info: ```
+3 (+27.27%) : 44118.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this
```diff @@ -17,15 +17,16 @@ G_M19464_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M19464_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+0CH], 1 + movzx rax, word ptr [rcx+0CH] + cmp eax, 1 sete al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=13 bbWeight=1 PerfScore 3.50 G_M19464_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=ae04b3f7) for method Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this +; Total bytes of code 14, prolog size 0, PerfScore 5.90, instruction count 5, allocated bytes for code 14 (MethodHash=ae04b3f7) for method Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this ; ============================================================ Unwind Info: ```
coreclr_tests.run.windows.x64.checked.mch
+0 (0.00%) : 388394.dasm - JIT.HardwareIntrinsics.General._Vector512_1.VectorGetAndWithLowerAndUpper__GetAndWithLowerAndUpperByte:RunBasicScenario():this
No diffs found?
+4 (+0.02%) : 349996.dasm - Microsoft.Diagnostics.Tracing.Parsers.ClrTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this
```diff @@ -5805,7 +5805,8 @@ G_M51703_IG79: ; bbWeight=2, gcrefRegs=80E8 {rbx rbp rsi rdi r15}, byrefR call [rsi+18H] ; gcrRegs -[rcx rdx] ; gcr arg pop 0 - cmp word ptr [r15+70H], 0xFFFF + movzx rcx, word ptr [r15+70H] + cmp ecx, 0xFFFF je SHORT G_M51703_IG80 mov rcx, r15 ; gcrRegs +[rcx] @@ -5824,7 +5825,7 @@ G_M51703_IG79: ; bbWeight=2, gcrefRegs=80E8 {rbx rbp rsi rdi r15}, byrefR call [rsi+18H] ; gcrRegs -[rax rcx rdx] ; gcr arg pop 0 - ;; size=63 bbWeight=2 PerfScore 56.00 + ;; size=67 bbWeight=2 PerfScore 54.50 G_M51703_IG80: ; bbWeight=4, gcrefRegs=00E8 {rbx rbp rsi rdi}, byrefRegs=0000 {}, byref inc r14d cmp dword ptr [rbp+08H], r14d @@ -5846,7 +5847,7 @@ G_M51703_IG81: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=38 bbWeight=1 PerfScore 13.25 -; Total bytes of code 18029, prolog size 69, PerfScore 3915.75, instruction count 3211, allocated bytes for code 18029 (MethodHash=a75e3608) for method Microsoft.Diagnostics.Tracing.Parsers.ClrTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this +; Total bytes of code 18033, prolog size 69, PerfScore 3914.65, instruction count 3212, allocated bytes for code 18033 (MethodHash=a75e3608) for method Microsoft.Diagnostics.Tracing.Parsers.ClrTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this ; ============================================================ Unwind Info: ```
+3 (+0.03%) : 449364.dasm - ILGEN_0x372a9ae6:Method_0xdc6ff1a4(byte,byte,int,long,ushort,double,long,ulong):int
```diff @@ -4117,11 +4117,12 @@ G_M51909_IG385: ; bbWeight=0.50, gcrefRegs=B000 {r12 r13 r15}, byrefRegs= cmp r8, r10 jae SHORT G_M51909_IG388 mov r8, qword ptr [rsp+58H] - cmp word ptr [r8], 6 - ja SHORT G_M51909_IG386 + movzx r10, word ptr [r8] + cmp r10d, 6 + jg SHORT G_M51909_IG386 mov r10d, dword ptr [rsp+240H] jmp SHORT G_M51909_IG387 - ;; size=72 bbWeight=0.50 PerfScore 9.00 + ;; size=75 bbWeight=0.50 PerfScore 8.62 G_M51909_IG386: ; bbWeight=0.50, gcrefRegs=B000 {r12 r13 r15}, byrefRegs=0000 {}, byref mov r10d, 4 ;; size=6 bbWeight=0.50 PerfScore 0.12 @@ -4714,7 +4715,7 @@ RWD496 dd 7FFFFFFFh ; nan dd 7FFFFFFFh ; nan -; Total bytes of code 11745, prolog size 76, PerfScore 4051.73, instruction count 2424, allocated bytes for code 11746 (MethodHash=8df6353a) for method ILGEN_0x372a9ae6:Method_0xdc6ff1a4(byte,byte,int,long,ushort,double,long,ulong):int +; Total bytes of code 11748, prolog size 76, PerfScore 4051.65, instruction count 2425, allocated bytes for code 11749 (MethodHash=8df6353a) for method ILGEN_0x372a9ae6:Method_0xdc6ff1a4(byte,byte,int,long,ushort,double,long,ulong):int ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 259303.dasm - System.Reflection.PortableExecutable.DebugDirectoryEntry:get_IsPortableCodeView():bool:this
```diff @@ -17,15 +17,16 @@ G_M19626_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M19626_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref ; byrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+06H], 0x504D + movzx rax, word ptr [rcx+06H] + cmp eax, 0x504D sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M19626_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=09c6b355) for method System.Reflection.PortableExecutable.DebugDirectoryEntry:get_IsPortableCodeView():bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=09c6b355) for method System.Reflection.PortableExecutable.DebugDirectoryEntry:get_IsPortableCodeView():bool:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 446670.dasm - IlasmPortablePdbTests.IlasmPortablePdbTester+<>c:b__20_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this
```diff @@ -17,15 +17,16 @@ G_M63500_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M63500_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref ; byrRegs +[rdx] - xor eax, eax - cmp word ptr [rdx+06H], 0x504D + movzx rax, word ptr [rdx+06H] + cmp eax, 0x504D sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M63500_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=844b07f3) for method IlasmPortablePdbTests.IlasmPortablePdbTester+<>c:b__20_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=844b07f3) for method IlasmPortablePdbTests.IlasmPortablePdbTester+<>c:b__20_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 345813.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this
```diff @@ -17,15 +17,16 @@ G_M4741_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M4741_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref ; byrRegs +[rdx] - xor eax, eax - cmp word ptr [rdx+06H], 0x504D + movzx rax, word ptr [rdx+06H] + cmp eax, 0x504D sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M4741_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this ; ============================================================ Unwind Info: ```
libraries.crossgen2.windows.x64.checked.mch
-1 (-5.26%) : 189454.dasm - System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this
```diff @@ -17,15 +17,15 @@ G_M37379_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M37379_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] mov rax, qword ptr [(reloc)] ; const ptr - cmp word ptr [rcx+rax], 0 - setge al - movzx rax, al - ;; size=18 bbWeight=1 PerfScore 6.25 + movsx rax, word ptr [rcx+rax] + not eax + shr eax, 31 + ;; size=17 bbWeight=1 PerfScore 6.75 G_M37379_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 19, prolog size 0, PerfScore 9.15, instruction count 5, allocated bytes for code 19 (MethodHash=9e096dfc) for method System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this +; Total bytes of code 18, prolog size 0, PerfScore 9.55, instruction count 5, allocated bytes for code 18 (MethodHash=9e096dfc) for method System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this ; ============================================================ Unwind Info: ```
-1 (-0.92%) : 24664.dasm - System.Globalization.HebrewNumber:IsDigit(ushort):bool
```diff @@ -42,11 +42,11 @@ G_M43187_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr cmp esi, dword ptr [rax+08H] jae SHORT G_M43187_IG07 mov edx, esi - cmp word ptr [rax+4*rdx+12H], 0 - setge al + movsx rax, word ptr [rax+4*rdx+12H] ; gcrRegs -[rax] - movzx rax, al - ;; size=55 bbWeight=0.50 PerfScore 10.00 + not eax + shr eax, 31 + ;; size=54 bbWeight=0.50 PerfScore 10.25 G_M43187_IG04: ; bbWeight=0.50, epilog, nogc, extend add rsp, 32 pop rsi @@ -71,7 +71,7 @@ G_M43187_IG07: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { int3 ;; size=7 bbWeight=0 PerfScore 0.00 -; Total bytes of code 109, prolog size 5, PerfScore 26.53, instruction count 32, allocated bytes for code 109 (MethodHash=a4b4574c) for method System.Globalization.HebrewNumber:IsDigit(ushort):bool +; Total bytes of code 108, prolog size 5, PerfScore 26.68, instruction count 32, allocated bytes for code 108 (MethodHash=a4b4574c) for method System.Globalization.HebrewNumber:IsDigit(ushort):bool ; ============================================================ Unwind Info: ```
-1 (-0.05%) : 36267.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this
```diff @@ -1002,11 +1002,11 @@ G_M13555_IG68: ; bbWeight=0.50, gcrefRegs=0088 {rbx rdi}, byrefRegs=0040 ; gcr arg pop 0 ;; size=30 bbWeight=0.50 PerfScore 3.75 G_M13555_IG69: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref - xor eax, eax - cmp word ptr [rsi+34H], 0 + movzx rax, word ptr [rsi+34H] + test eax, eax setne al movzx rax, al - ;; size=13 bbWeight=0.50 PerfScore 2.25 + ;; size=12 bbWeight=0.50 PerfScore 1.75 G_M13555_IG70: ; bbWeight=0.50, epilog, nogc, extend add rsp, 56 pop rbx @@ -1056,7 +1056,7 @@ RWD140 dd G_M13555_IG38 - G_M13555_IG02 dd G_M13555_IG37 - G_M13555_IG02 -; Total bytes of code 2146, prolog size 20, PerfScore 561.35, instruction count 518, allocated bytes for code 2146 (MethodHash=2b87cb0c) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this +; Total bytes of code 2145, prolog size 20, PerfScore 560.75, instruction count 518, allocated bytes for code 2145 (MethodHash=2b87cb0c) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 47991.dasm - Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this
```diff @@ -16,15 +16,16 @@ G_M35520_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M35520_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+40H], 332 + movzx rax, word ptr [rcx+40H] + cmp eax, 332 sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M35520_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=48ae753f) for method Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=48ae753f) for method Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 154591.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this
```diff @@ -18,15 +18,16 @@ G_M4741_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M4741_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref ; byrRegs +[rdx] - xor eax, eax - cmp word ptr [rdx+06H], 0x504D + movzx rax, word ptr [rdx+06H] + cmp eax, 0x504D sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M4741_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this ; ============================================================ Unwind Info: ```
+4 (+36.36%) : 83935.dasm - Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this
```diff @@ -16,15 +16,16 @@ G_M34520_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M34520_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref ; byrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx], 400 - setae al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, word ptr [rcx] + cmp eax, 400 + setge al + movzx rax, al + ;; size=14 bbWeight=1 PerfScore 3.50 G_M34520_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=7a657927) for method Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this +; Total bytes of code 15, prolog size 0, PerfScore 6.00, instruction count 5, allocated bytes for code 15 (MethodHash=7a657927) for method Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this ; ============================================================ Unwind Info: ```
libraries.pmi.windows.x64.checked.mch
-1 (-0.03%) : 45700.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this
```diff @@ -1342,11 +1342,11 @@ G_M13555_IG91: ; bbWeight=0.14, gcrefRegs=8002 {rcx r15}, byrefRegs=0040 ; gcr arg pop 0 ;; size=9 bbWeight=0.14 PerfScore 0.44 G_M13555_IG92: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0040 {rsi}, byref - xor eax, eax - cmp word ptr [rsi+34H], 0 + movzx rax, word ptr [rsi+34H] + test eax, eax setne al movzx rax, al - ;; size=13 bbWeight=0.50 PerfScore 2.25 + ;; size=12 bbWeight=0.50 PerfScore 1.75 G_M13555_IG93: ; bbWeight=0.50, epilog, nogc, extend add rsp, 56 pop rbx @@ -1450,7 +1450,7 @@ RWD140 dd G_M13555_IG43 - G_M13555_IG02 dd G_M13555_IG42 - G_M13555_IG02 -; Total bytes of code 3167, prolog size 28, PerfScore 720.51, instruction count 738, allocated bytes for code 3167 (MethodHash=2b87cb0c) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this +; Total bytes of code 3166, prolog size 28, PerfScore 719.91, instruction count 738, allocated bytes for code 3166 (MethodHash=2b87cb0c) for method Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this ; ============================================================ Unwind Info: ```
+0 (0.00%) : 217122.dasm - System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this
```diff @@ -15,15 +15,15 @@ G_M37379_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M37379_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+36H], 0 - setge al - ;; size=10 bbWeight=1 PerfScore 4.25 + movsx rax, word ptr [rcx+36H] + not eax + shr eax, 31 + ;; size=10 bbWeight=1 PerfScore 4.75 G_M37379_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=9e096dfc) for method System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this +; Total bytes of code 11, prolog size 0, PerfScore 6.85, instruction count 4, allocated bytes for code 11 (MethodHash=9e096dfc) for method System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this ; ============================================================ Unwind Info: ```
+0 (0.00%) : 94312.dasm - PEFile.PEHeader:get_ntDirectories():ulong:this
```diff @@ -18,18 +18,18 @@ G_M41331_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M41331_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] mov rax, qword ptr [rcx+10H] - lea rdx, [rax+78H] - lea rcx, [rax+88H] + movzx rdx, word ptr [rax+18H] + lea rcx, [rax+78H] ; gcrRegs -[rcx] - cmp word ptr [rax+18H], 523 - mov rax, rcx - cmovne rax, rdx - ;; size=28 bbWeight=1 PerfScore 6.50 + add rax, 136 + cmp edx, 523 + cmovne rax, rcx + ;; size=28 bbWeight=1 PerfScore 5.25 G_M41331_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 29, prolog size 0, PerfScore 10.40, instruction count 7, allocated bytes for code 29 (MethodHash=30de5e8c) for method PEFile.PEHeader:get_ntDirectories():ulong:this +; Total bytes of code 29, prolog size 0, PerfScore 9.15, instruction count 7, allocated bytes for code 29 (MethodHash=30de5e8c) for method PEFile.PEHeader:get_ntDirectories():ulong:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 85657.dasm - Microsoft.Cci.ModulePropertiesForSerialization:get_RequiresAmdInstructionSet():bool:this
```diff @@ -15,15 +15,16 @@ G_M38623_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M38623_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+40H], 0x8664 + movzx rax, word ptr [rcx+40H] + cmp eax, 0x8664 sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M38623_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=39386920) for method Microsoft.Cci.ModulePropertiesForSerialization:get_RequiresAmdInstructionSet():bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=39386920) for method Microsoft.Cci.ModulePropertiesForSerialization:get_RequiresAmdInstructionSet():bool:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 85658.dasm - Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this
```diff @@ -15,15 +15,16 @@ G_M35520_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M35520_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx+40H], 332 + movzx rax, word ptr [rcx+40H] + cmp eax, 332 sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M35520_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=48ae753f) for method Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=48ae753f) for method Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this ; ============================================================ Unwind Info: ```
+4 (+36.36%) : 96230.dasm - Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this
```diff @@ -15,15 +15,16 @@ G_M34520_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M34520_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref ; byrRegs +[rcx] - xor eax, eax - cmp word ptr [rcx], 400 - setae al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, word ptr [rcx] + cmp eax, 400 + setge al + movzx rax, al + ;; size=14 bbWeight=1 PerfScore 3.50 G_M34520_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=7a657927) for method Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this +; Total bytes of code 15, prolog size 0, PerfScore 6.00, instruction count 5, allocated bytes for code 15 (MethodHash=7a657927) for method Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this ; ============================================================ Unwind Info: ```
libraries_tests.pmi.windows.x64.checked.mch
+0 (0.00%) : 200219.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_NTDirectories():ulong:this
```diff @@ -18,18 +18,18 @@ G_M8628_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M8628_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref ; gcrRegs +[rcx] mov rax, qword ptr [rcx+10H] - lea rdx, [rax+78H] - lea rcx, [rax+88H] + movzx rdx, word ptr [rax+18H] + lea rcx, [rax+78H] ; gcrRegs -[rcx] - cmp word ptr [rax+18H], 523 - mov rax, rcx - cmovne rax, rdx - ;; size=28 bbWeight=1 PerfScore 6.50 + add rax, 136 + cmp edx, 523 + cmovne rax, rcx + ;; size=28 bbWeight=1 PerfScore 5.25 G_M8628_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 29, prolog size 0, PerfScore 10.40, instruction count 7, allocated bytes for code 29 (MethodHash=2a48de4b) for method Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_NTDirectories():ulong:this +; Total bytes of code 29, prolog size 0, PerfScore 9.15, instruction count 7, allocated bytes for code 29 (MethodHash=2a48de4b) for method Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_NTDirectories():ulong:this ; ============================================================ Unwind Info: ```
+2 (+0.02%) : 323737.dasm - System.Text.Tests.UTF8EncodingEncode+d__0:MoveNext():bool:this
```diff @@ -632,8 +632,9 @@ G_M14548_IG08: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, movzx rcx, word ptr [rsi+18H] inc ecx mov word ptr [rsi+18H], cx - cmp word ptr [rsi+18H], 127 - jbe G_M14548_IG04 + movzx rcx, word ptr [rsi+18H] + cmp ecx, 127 + jle G_M14548_IG04 mov rcx, 0xD1FFAB1E ; mov edx, 4 call CORINFO_HELP_NEWARR_1_OBJ @@ -694,7 +695,7 @@ G_M14548_IG08: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, ; byrRegs -[rcx] mov dword ptr [rsi+10H], 5 jmp G_M14548_IG68 - ;; size=200 bbWeight=0.50 PerfScore 15.50 + ;; size=202 bbWeight=0.50 PerfScore 15.12 G_M14548_IG09: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref mov dword ptr [rsi+10H], -1 mov rcx, 0xD1FFAB1E ; @@ -4576,7 +4577,7 @@ RWD00 dd G_M14548_IG03 - G_M14548_IG02 dd G_M14548_IG70 - G_M14548_IG02 -; Total bytes of code 11936, prolog size 10, PerfScore 2087.35, instruction count 2371, allocated bytes for code 11936 (MethodHash=e765c72b) for method System.Text.Tests.UTF8EncodingEncode+d__0:MoveNext():bool:this +; Total bytes of code 11938, prolog size 10, PerfScore 2087.18, instruction count 2372, allocated bytes for code 11938 (MethodHash=e765c72b) for method System.Text.Tests.UTF8EncodingEncode+d__0:MoveNext():bool:this ; ============================================================ Unwind Info: ```
+1 (+0.02%) : 156134.dasm - System.Linq.Expressions.Tests.LambdaDivideTests:VerifyDivideUShort(ushort,ushort,bool)
```diff @@ -242,11 +242,12 @@ G_M10118_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs +[rbp] mov word ptr [rbp+38H], di mov word ptr [rbp+3AH], bx - cmp word ptr [rbp+3AH], 0 - jne SHORT G_M10118_IG04 - ;; size=33 bbWeight=1 PerfScore 7.50 -G_M10118_IG03: ; bbWeight=0.50, gcrefRegs=0020 {rbp}, byrefRegs=0000 {}, byref, isz + movzx rax, word ptr [rbp+3AH] ; gcrRegs -[rax] + test eax, eax + jne SHORT G_M10118_IG04 + ;; size=34 bbWeight=1 PerfScore 6.75 +G_M10118_IG03: ; bbWeight=0.50, gcrefRegs=0020 {rbp}, byrefRegs=0000 {}, byref, isz mov edi, 1 xor ebx, ebx jmp SHORT G_M10118_IG05 @@ -2263,7 +2264,7 @@ G_M10118_IG89: ; bbWeight=0, gcVars=0000000000000000000000000000000000000 jmp G_M10118_IG14 ;; size=25 bbWeight=0 PerfScore 0.00 -; Total bytes of code 5368, prolog size 84, PerfScore 1285.07, instruction count 1037, allocated bytes for code 5368 (MethodHash=9791d879) for method System.Linq.Expressions.Tests.LambdaDivideTests:VerifyDivideUShort(ushort,ushort,bool) +; Total bytes of code 5369, prolog size 84, PerfScore 1284.42, instruction count 1038, allocated bytes for code 5369 (MethodHash=9791d879) for method System.Linq.Expressions.Tests.LambdaDivideTests:VerifyDivideUShort(ushort,ushort,bool) ; ============================================================ Unwind Info: ```
+3 (+27.27%) : 4389.dasm - Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_0(Kerberos.NET.Dns.DnsRecord):bool:this
```diff @@ -17,15 +17,16 @@ G_M46707_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M46707_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs +[rdx] - xor eax, eax - cmp word ptr [rdx+30H], 33 + movzx rax, word ptr [rdx+30H] + cmp eax, 33 setne al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=13 bbWeight=1 PerfScore 3.50 G_M46707_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=dcd2498c) for method Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_0(Kerberos.NET.Dns.DnsRecord):bool:this +; Total bytes of code 14, prolog size 0, PerfScore 5.90, instruction count 5, allocated bytes for code 14 (MethodHash=dcd2498c) for method Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_0(Kerberos.NET.Dns.DnsRecord):bool:this ; ============================================================ Unwind Info: ```
+3 (+27.27%) : 4391.dasm - Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_2(Kerberos.NET.Dns.DnsRecord):bool:this
```diff @@ -17,15 +17,16 @@ G_M23281_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M23281_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref ; gcrRegs +[rdx] - xor eax, eax - cmp word ptr [rdx+30H], 33 + movzx rax, word ptr [rdx+30H] + cmp eax, 33 sete al - ;; size=10 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=13 bbWeight=1 PerfScore 3.50 G_M23281_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 11, prolog size 0, PerfScore 6.35, instruction count 4, allocated bytes for code 11 (MethodHash=2b29a50e) for method Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_2(Kerberos.NET.Dns.DnsRecord):bool:this +; Total bytes of code 14, prolog size 0, PerfScore 5.90, instruction count 5, allocated bytes for code 14 (MethodHash=2b29a50e) for method Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_2(Kerberos.NET.Dns.DnsRecord):bool:this ; ============================================================ Unwind Info: ```
+4 (+33.33%) : 205917.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this
```diff @@ -17,15 +17,16 @@ G_M4741_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=0 bbWeight=1 PerfScore 0.00 G_M4741_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {rdx}, byref ; byrRegs +[rdx] - xor eax, eax - cmp word ptr [rdx+06H], 0x504D + movzx rax, word ptr [rdx+06H] + cmp eax, 0x504D sete al - ;; size=11 bbWeight=1 PerfScore 4.25 + movzx rax, al + ;; size=15 bbWeight=1 PerfScore 3.50 G_M4741_IG03: ; bbWeight=1, epilog, nogc, extend ret ;; size=1 bbWeight=1 PerfScore 1.00 -; Total bytes of code 12, prolog size 0, PerfScore 6.45, instruction count 4, allocated bytes for code 12 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this +; Total bytes of code 16, prolog size 0, PerfScore 6.10, instruction count 5, allocated bytes for code 16 (MethodHash=c271ed7a) for method System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this ; ============================================================ Unwind Info: ```
Details
#### Improvements/regressions per collection |Collection|Contexts with diffs|Improvements|Regressions|Same size|Improvements (bytes)|Regressions (bytes)| |---|--:|--:|--:|--:|--:|--:| |aspnet.run.windows.x64.checked.mch|983|0|983|0|-0|+5,678| |benchmarks.run.windows.x64.checked.mch|413|0|413|0|-0|+2,300| |benchmarks.run_pgo.windows.x64.checked.mch|1,251|0|1,251|0|-0|+4,463| |benchmarks.run_tiered.windows.x64.checked.mch|244|0|244|0|-0|+1,469| |coreclr_tests.run.windows.x64.checked.mch|884|0|883|1|-0|+5,788| |libraries.crossgen2.windows.x64.checked.mch|5,565|3|5,560|2|-3|+24,170| |libraries.pmi.windows.x64.checked.mch|6,905|1|6,902|2|-1|+31,915| |libraries_tests.pmi.windows.x64.checked.mch|1,265|0|1,264|1|-0|+5,786| ||17,510|4|17,500|6|-4|+81,569| --- #### Context information |Collection|Diffed contexts|MinOpts|FullOpts|Missed, base|Missed, diff| |---|--:|--:|--:|--:|--:| |aspnet.run.windows.x64.checked.mch|141,775|81,631|60,144|0 (0.00%)|0 (0.00%)| |benchmarks.run.windows.x64.checked.mch|35,544|1,311|34,233|0 (0.00%)|0 (0.00%)| |benchmarks.run_pgo.windows.x64.checked.mch|91,929|45,676|46,253|0 (0.00%)|0 (0.00%)| |benchmarks.run_tiered.windows.x64.checked.mch|59,414|35,196|24,218|0 (0.00%)|0 (0.00%)| |coreclr_tests.run.windows.x64.checked.mch|493,157|332,908|160,249|1 (0.00%)|1 (0.00%)| |libraries.crossgen2.windows.x64.checked.mch|212,194|15|212,179|0 (0.00%)|0 (0.00%)| |libraries.pmi.windows.x64.checked.mch|269,682|4,913|264,769|0 (0.00%)|0 (0.00%)| |libraries_tests.pmi.windows.x64.checked.mch|359,237|8,535|350,702|0 (0.00%)|0 (0.00%)| ||1,662,932|510,185|1,152,747|1 (0.00%)|1 (0.00%)| --- #### jit-analyze output
aspnet.run.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 47348810 (overridden on cmd) Total bytes of diff: 47354488 (overridden on cmd) Total bytes of delta: 5678 (0.01 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 497 : 85621.dasm (8.03% of base) 497 : 47919.dasm (8.03% of base) 45 : 104779.dasm (0.42% of base) 43 : 79031.dasm (0.52% of base) 41 : 38468.dasm (0.92% of base) 40 : 31540.dasm (1.52% of base) 40 : 30537.dasm (1.52% of base) 34 : 35114.dasm (0.75% of base) 30 : 85651.dasm (1.73% of base) 30 : 101083.dasm (0.83% of base) 26 : 65756.dasm (0.57% of base) 26 : 87050.dasm (5.33% of base) 25 : 99363.dasm (0.90% of base) 25 : 37720.dasm (0.91% of base) 25 : 37690.dasm (0.91% of base) 24 : 89215.dasm (4.97% of base) 21 : 34939.dasm (0.74% of base) 21 : 29548.dasm (0.73% of base) 21 : 94442.dasm (0.71% of base) 21 : 38407.dasm (0.74% of base) 85 total files with Code Size differences (0 improved, 85 regressed), 0 unchanged. Top method regressions (bytes): 497 ( 8.03% of base) : 85621.dasm - Esprima.ParserExtensions:TryGetInternedString(System.ReadOnlySpan`1[ushort]):System.String 497 ( 8.03% of base) : 47919.dasm - Esprima.ParserExtensions:TryGetInternedString(System.ReadOnlySpan`1[ushort]):System.String 45 ( 0.42% of base) : 104779.dasm - System.Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo) 43 ( 0.52% of base) : 79031.dasm - System.Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo) 41 ( 0.92% of base) : 38468.dasm - System.Uri:ParseRemaining():this 40 ( 1.52% of base) : 31540.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 40 ( 1.52% of base) : 30537.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 34 ( 0.75% of base) : 35114.dasm - System.Uri:ParseRemaining():this 30 ( 1.73% of base) : 85651.dasm - Esprima.JavaScriptParser:BinaryPrecedence(byref):int:this 30 ( 0.83% of base) : 101083.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 26 ( 5.33% of base) : 87050.dasm - Esprima.Scanner:TryGetInternedThreeCharacterPunctuator(System.ReadOnlySpan`1[ushort]):System.String 26 ( 0.57% of base) : 65756.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 25 ( 0.90% of base) : 99363.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 25 ( 0.91% of base) : 37720.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 25 ( 0.91% of base) : 37690.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 24 ( 4.97% of base) : 89215.dasm - AngleSharp.Html.Parser.HtmlTokenizer:MarkupDeclaration(ushort):AngleSharp.Html.Parser.Tokens.HtmlToken:this 21 ( 0.71% of base) : 94442.dasm - System.Text.RegularExpressions.RegexParser:ScanCharClass(bool,bool):System.Text.RegularExpressions.RegexCharClass:this 21 ( 0.74% of base) : 34939.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 21 ( 0.73% of base) : 29548.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this 21 ( 0.74% of base) : 38407.dasm - System.Uri:CheckAuthorityHelper(ulong,int,int,byref,byref,System.UriParser,byref):int:this Top method regressions (percentages): 4 (36.36% of base) : 114838.dasm - Npgsql.BackendMessages.FieldDescription:get_IsBinaryFormat():bool:this 11 (21.15% of base) : 24707.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 (21.15% of base) : 20667.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 (21.15% of base) : 22171.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 (21.15% of base) : 16942.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 6 (11.32% of base) : 24296.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 10 (11.24% of base) : 20680.dasm - System.IO.Path:GetFullPathInternal(System.String):System.String 10 (11.24% of base) : 24725.dasm - System.IO.Path:GetFullPathInternal(System.String):System.String 15 (11.11% of base) : 22245.dasm - System.IO.PathInternal:IsDevice(System.ReadOnlySpan`1[ushort]):bool 10 (10.99% of base) : 16945.dasm - System.IO.Path:GetFullPathInternal(System.String):System.String 10 (10.99% of base) : 22174.dasm - System.IO.Path:GetFullPathInternal(System.String):System.String 15 (10.49% of base) : 24833.dasm - System.IO.PathInternal:IsDevice(System.ReadOnlySpan`1[ushort]):bool 15 (10.49% of base) : 20838.dasm - System.IO.PathInternal:IsDevice(System.ReadOnlySpan`1[ushort]):bool 15 (10.49% of base) : 17697.dasm - System.IO.PathInternal:IsDevice(System.ReadOnlySpan`1[ushort]):bool 19 ( 9.31% of base) : 30136.dasm - System.IPv6AddressHelper:ShouldHaveIpv4Embedded(System.ReadOnlySpan`1[ushort]):bool 14 ( 8.70% of base) : 16205.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 ( 8.53% of base) : 16208.dasm - System.IO.Path:GetFullPathInternal(System.String):System.String 3 ( 8.33% of base) : 103523.dasm - Microsoft.AspNetCore.Routing.Matching.Ascii:IsAscii(System.String):bool 497 ( 8.03% of base) : 85621.dasm - Esprima.ParserExtensions:TryGetInternedString(System.ReadOnlySpan`1[ushort]):System.String 497 ( 8.03% of base) : 47919.dasm - Esprima.ParserExtensions:TryGetInternedString(System.ReadOnlySpan`1[ushort]):System.String ```
--------------------------------------------------------------------------------
benchmarks.run.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 10557287 (overridden on cmd) Total bytes of diff: 10559587 (overridden on cmd) Total bytes of delta: 2300 (0.02 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 81 : 26179.dasm (1.85% of base) 78 : 14795.dasm (4.84% of base) 32 : 35331.dasm (16.16% of base) 32 : 26218.dasm (1.06% of base) 31 : 26259.dasm (1.13% of base) 29 : 15006.dasm (3.68% of base) 29 : 3471.dasm (1.12% of base) 29 : 29764.dasm (0.82% of base) 28 : 29753.dasm (1.81% of base) 26 : 26909.dasm (1.34% of base) 24 : 26237.dasm (5.12% of base) 24 : 29748.dasm (2.58% of base) 24 : 14916.dasm (1.26% of base) 23 : 26195.dasm (2.23% of base) 23 : 1587.dasm (0.75% of base) 22 : 12337.dasm (2.20% of base) 20 : 4627.dasm (0.67% of base) 20 : 26258.dasm (0.50% of base) 19 : 2781.dasm (4.95% of base) 18 : 840.dasm (0.25% of base) 85 total files with Code Size differences (0 improved, 85 regressed), 0 unchanged. Top method regressions (bytes): 81 ( 1.85% of base) : 26179.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseMemberDeclarationOrStatementCore(ushort):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.MemberDeclarationSyntax:this 78 ( 4.84% of base) : 14795.dasm - AssignJagged:second_assignments(int[][],short[][]) 32 ( 1.06% of base) : 26218.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseMemberName(byref,byref,byref,bool):this 32 (16.16% of base) : 35331.dasm - System.IPv6AddressHelper:IsLoopback(System.ReadOnlySpan`1[ushort]):bool 31 ( 1.13% of base) : 26259.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseExpressionContinued(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax,uint):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax:this 29 ( 3.68% of base) : 15006.dasm - AssignRect:second_assignments(int[,],short[,]) 29 ( 0.82% of base) : 29764.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseVariableDeclarator(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.TypeSyntax,int,bool,bool,Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken],byref,bool):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.VariableDeclaratorSyntax:this 29 ( 1.12% of base) : 3471.dasm - System.Text.RegularExpressions.RegexParser:ScanCharClass(bool,bool):System.Text.RegularExpressions.RegexCharClass:this 28 ( 1.81% of base) : 29753.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsPossibleLocalDeclarationStatement(bool):bool:this 26 ( 1.34% of base) : 26909.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.NamespaceOrTypeSymbol:LookupMetadataType(byref):Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:this 24 ( 5.12% of base) : 26237.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseBlockAndExpressionBodiesWithSemicolon(byref,byref,byref,bool,int):this 24 ( 2.58% of base) : 29748.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseParameter(Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder`1[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.AttributeListSyntax],Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ParameterSyntax:this 24 ( 1.26% of base) : 14916.dasm - System.Xml.Schema.XsdDateTime+Parser:Parse(System.String,int):bool:this 23 ( 2.23% of base) : 26195.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseTypeParameterList():Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.TypeParameterListSyntax:this 23 ( 0.75% of base) : 1587.dasm - System.Text.RegularExpressions.RegexNode:CanBeMadeAtomic(System.Text.RegularExpressions.RegexNode,System.Text.RegularExpressions.RegexNode,bool,bool):bool 22 ( 2.20% of base) : 12337.dasm - System.DateTimeParse:TryParseFormatR(System.ReadOnlySpan`1[ushort],byref):bool 20 ( 0.50% of base) : 26258.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParsePostFixExpression(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax:this 20 ( 0.67% of base) : 4627.dasm - System.Uri:ParseRemaining():this 19 ( 4.95% of base) : 2781.dasm - System.Text.RegularExpressions.RegexCharClass:Analyze(System.String):System.Text.RegularExpressions.RegexCharClass+CharClassAnalysisResults 18 ( 0.25% of base) : 840.dasm - System.Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo) Top method regressions (percentages): 4 (33.33% of base) : 5118.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 2 (18.18% of base) : 17369.dasm - System.Text.EncoderNLS:get_HasState():bool:this 7 (17.95% of base) : 7122.dasm - System.CSharpHelpers:IsPrefixTwoUnderscore(System.String):bool 32 (16.16% of base) : 35331.dasm - System.IPv6AddressHelper:IsLoopback(System.ReadOnlySpan`1[ushort]):bool 11 (13.75% of base) : 26216.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsOperatorKeyword():bool:this 6 (11.32% of base) : 419.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 7 (11.11% of base) : 26223.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsDotOrColonColon():bool:this 2 ( 9.52% of base) : 27981.dasm - Microsoft.CodeAnalysis.CodeGen.ILBuilder+BasicBlock:get_IsBranchToLabel():bool:this 10 ( 6.62% of base) : 26220.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ScanNamedTypePart(byref):int:this 3 ( 6.38% of base) : 10541.dasm - Benchstone.BenchI.NDhrystone:Proc2(byref) 3 ( 6.38% of base) : 5861.dasm - Benchstone.MDBenchI.MDNDhrystone:Proc2(byref) 4 ( 6.15% of base) : 1574.dasm - System.Text.RegularExpressions.RegexCharClass:IsEmpty(System.String):bool 12 ( 6.12% of base) : 25955.dasm - System.__DTString:SkipWhiteSpaceAndRtlMarkCurrent():bool:this 14 ( 5.88% of base) : 25946.dasm - System.Globalization.DateTimeFormatInfoScanner:ArrayElementsBeginWithDigit(System.String[]):bool 12 ( 5.71% of base) : 26243.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseReturnStatement():Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ReturnStatementSyntax:this 3 ( 5.66% of base) : 26365.dasm - Roslyn.Utilities.PlatformInformation:get_IsWindows():bool 24 ( 5.12% of base) : 26237.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseBlockAndExpressionBodiesWithSemicolon(byref,byref,byref,bool,int):this 5 ( 5.10% of base) : 12553.dasm - EMFloat:RoundInternalFPF(byref) 5 ( 5.05% of base) : 13454.dasm - EMFloatClass:RoundInternalFPF(EMFloatClass+InternalFPF) 19 ( 4.95% of base) : 2781.dasm - System.Text.RegularExpressions.RegexCharClass:Analyze(System.String):System.Text.RegularExpressions.RegexCharClass+CharClassAnalysisResults ```
--------------------------------------------------------------------------------
benchmarks.run_pgo.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 30308510 (overridden on cmd) Total bytes of diff: 30312973 (overridden on cmd) Total bytes of delta: 4463 (0.01 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 72 : 34609.dasm (4.08% of base) 71 : 35980.dasm (3.02% of base) 61 : 34594.dasm (2.90% of base) 61 : 35977.dasm (3.22% of base) 59 : 34610.dasm (2.99% of base) 41 : 34607.dasm (2.48% of base) 31 : 35979.dasm (3.76% of base) 24 : 19456.dasm (4.50% of base) 24 : 82549.dasm (4.50% of base) 24 : 43688.dasm (4.50% of base) 24 : 84134.dasm (4.50% of base) 24 : 14313.dasm (4.50% of base) 24 : 78738.dasm (4.50% of base) 22 : 19396.dasm (2.01% of base) 21 : 43691.dasm (2.54% of base) 21 : 84138.dasm (2.54% of base) 21 : 14319.dasm (2.54% of base) 20 : 80106.dasm (3.66% of base) 20 : 88121.dasm (3.66% of base) 20 : 17916.dasm (3.66% of base) 95 total files with Code Size differences (0 improved, 95 regressed), 0 unchanged. Top method regressions (bytes): 72 ( 4.08% of base) : 34609.dasm - AssignJagged:second_assignments(int[][],short[][]) 71 ( 3.02% of base) : 35980.dasm - AssignRect:second_assignments(int[,],short[,]) 61 ( 2.90% of base) : 34594.dasm - AssignJagged:second_assignments(int[][],short[][]) 61 ( 3.22% of base) : 35977.dasm - AssignRect:second_assignments(int[,],short[,]) 59 ( 2.99% of base) : 34610.dasm - AssignJagged:second_assignments(int[][],short[][]) 41 ( 2.48% of base) : 34607.dasm - AssignJagged:second_assignments(int[][],short[][]) 31 ( 3.76% of base) : 35979.dasm - AssignRect:second_assignments(int[,],short[,]) 24 ( 4.50% of base) : 19456.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 24 ( 4.50% of base) : 82549.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 24 ( 4.50% of base) : 43688.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 24 ( 4.50% of base) : 84134.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 24 ( 4.50% of base) : 14313.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 24 ( 4.50% of base) : 78738.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 22 ( 2.01% of base) : 19396.dasm - System.Reflection.Emit.ILGenerator:Emit(System.Reflection.Emit.OpCode,int):this 21 ( 2.54% of base) : 43691.dasm - System.Text.RegularExpressions.RegexNode:ReduceSet():System.Text.RegularExpressions.RegexNode:this 21 ( 2.54% of base) : 84138.dasm - System.Text.RegularExpressions.RegexNode:ReduceSet():System.Text.RegularExpressions.RegexNode:this 21 ( 2.54% of base) : 14319.dasm - System.Text.RegularExpressions.RegexNode:ReduceSet():System.Text.RegularExpressions.RegexNode:this 20 ( 3.66% of base) : 80106.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 20 ( 3.66% of base) : 88121.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 20 ( 3.66% of base) : 17916.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this Top method regressions (percentages): 3 (27.27% of base) : 54860.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this 11 (21.15% of base) : 28719.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 (21.15% of base) : 65224.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 (21.15% of base) : 7935.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 (21.15% of base) : 75172.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 11 (21.15% of base) : 36241.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 2 (12.50% of base) : 63079.dasm - Microsoft.CodeAnalysis.SyntaxNode:get_IsList():bool:this 3 ( 9.68% of base) : 14553.dasm - System.Text.RegularExpressions.RegexCharClass:IsNegated(System.String):bool 2 ( 9.52% of base) : 64282.dasm - Microsoft.CodeAnalysis.CodeGen.ILBuilder+BasicBlock:get_IsBranchToLabel():bool:this 8 ( 6.61% of base) : 14321.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingleton(System.String):bool 8 ( 6.61% of base) : 84140.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingleton(System.String):bool 8 ( 6.61% of base) : 43693.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingleton(System.String):bool 8 ( 6.61% of base) : 43694.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingletonInverse(System.String):bool 8 ( 6.61% of base) : 84143.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingletonInverse(System.String):bool 8 ( 6.61% of base) : 14323.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingletonInverse(System.String):bool 4 ( 6.15% of base) : 43692.dasm - System.Text.RegularExpressions.RegexCharClass:IsEmpty(System.String):bool 4 ( 6.15% of base) : 84139.dasm - System.Text.RegularExpressions.RegexCharClass:IsEmpty(System.String):bool 4 ( 6.15% of base) : 14320.dasm - System.Text.RegularExpressions.RegexCharClass:IsEmpty(System.String):bool 2 ( 5.88% of base) : 14467.dasm - System.Text.RegularExpressions.RegexCharClass:IsNegated(System.String,int):bool 10 ( 5.71% of base) : 65247.dasm - System.IO.Path:GetFullPathInternal(System.String):System.String ```
--------------------------------------------------------------------------------
benchmarks.run_tiered.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 14293111 (overridden on cmd) Total bytes of diff: 14294580 (overridden on cmd) Total bytes of delta: 1469 (0.01 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 83 : 50431.dasm (1.92% of base) 78 : 27304.dasm (4.84% of base) 72 : 27302.dasm (3.74% of base) 40 : 27815.dasm (1.80% of base) 32 : 50525.dasm (1.18% of base) 31 : 50487.dasm (0.88% of base) 29 : 27816.dasm (3.68% of base) 29 : 27237.dasm (1.12% of base) 26 : 48983.dasm (1.34% of base) 25 : 50479.dasm (1.43% of base) 23 : 14115.dasm (0.75% of base) 19 : 54553.dasm (4.95% of base) 18 : 1828.dasm (0.25% of base) 17 : 13431.dasm (3.05% of base) 16 : 29801.dasm (0.33% of base) 16 : 50524.dasm (0.43% of base) 16 : 11793.dasm (0.20% of base) 16 : 27242.dasm (0.36% of base) 16 : 27245.dasm (0.35% of base) 15 : 50446.dasm (1.28% of base) 82 total files with Code Size differences (0 improved, 82 regressed), 0 unchanged. Top method regressions (bytes): 83 ( 1.92% of base) : 50431.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseMemberDeclarationOrStatementCore(ushort):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.MemberDeclarationSyntax:this 78 ( 4.84% of base) : 27304.dasm - AssignJagged:second_assignments(int[][],short[][]) 72 ( 3.74% of base) : 27302.dasm - AssignJagged:second_assignments(int[][],short[][]) 40 ( 1.80% of base) : 27815.dasm - AssignRect:second_assignments(int[,],short[,]) 32 ( 1.18% of base) : 50525.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseExpressionContinued(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax,uint):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax:this 31 ( 0.88% of base) : 50487.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseVariableDeclarator(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.TypeSyntax,int,bool,bool,Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken],byref,bool):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.VariableDeclaratorSyntax:this 29 ( 3.68% of base) : 27816.dasm - AssignRect:second_assignments(int[,],short[,]) 29 ( 1.12% of base) : 27237.dasm - System.Text.RegularExpressions.RegexParser:ScanCharClass(bool,bool):System.Text.RegularExpressions.RegexCharClass:this 26 ( 1.34% of base) : 48983.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.NamespaceOrTypeSymbol:LookupMetadataType(byref):Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:this 25 ( 1.43% of base) : 50479.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsPossibleLocalDeclarationStatement(bool):bool:this 23 ( 0.75% of base) : 14115.dasm - System.Text.RegularExpressions.RegexNode:CanBeMadeAtomic(System.Text.RegularExpressions.RegexNode,System.Text.RegularExpressions.RegexNode,bool,bool):bool 19 ( 4.95% of base) : 54553.dasm - System.Text.RegularExpressions.RegexCharClass:Analyze(System.String):System.Text.RegularExpressions.RegexCharClass+CharClassAnalysisResults 18 ( 0.25% of base) : 1828.dasm - System.Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo) 17 ( 3.05% of base) : 13431.dasm - System.Text.RegularExpressions.RegexParser:ScanBlank():this 16 ( 0.43% of base) : 50524.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParsePostFixExpression(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax:this 16 ( 0.33% of base) : 29801.dasm - System.Text.RegularExpressions.CompiledRegexRunner:Regex1_TryMatchAtCurrentPosition(System.Text.RegularExpressions.RegexRunner,System.ReadOnlySpan`1[ushort]):bool 16 ( 0.36% of base) : 27242.dasm - System.Text.RegularExpressions.CompiledRegexRunner:Regex1_TryMatchAtCurrentPosition(System.Text.RegularExpressions.RegexRunner,System.ReadOnlySpan`1[ushort]):bool 16 ( 0.35% of base) : 27245.dasm - System.Text.RegularExpressions.CompiledRegexRunner:Regex1_TryMatchAtCurrentPosition(System.Text.RegularExpressions.RegexRunner,System.ReadOnlySpan`1[ushort]):bool 16 ( 0.20% of base) : 11793.dasm - System.Text.RegularExpressions.RegexCompiler:EmitMatchCharacterClass(System.String):this 15 ( 1.28% of base) : 50446.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseTypeParameterList():Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.TypeParameterListSyntax:this Top method regressions (percentages): 3 (27.27% of base) : 44118.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this 2 (12.50% of base) : 48412.dasm - Microsoft.CodeAnalysis.SyntaxNode:get_IsList():bool:this 6 (11.32% of base) : 5981.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 3 ( 9.68% of base) : 14242.dasm - System.Text.RegularExpressions.RegexCharClass:IsNegated(System.String):bool 2 ( 9.09% of base) : 48481.dasm - Microsoft.CodeAnalysis.SyntaxTokenList:GetGreenNodeAt(Microsoft.CodeAnalysis.GreenNode,int):Microsoft.CodeAnalysis.GreenNode 3 ( 6.38% of base) : 23556.dasm - Benchstone.BenchI.NDhrystone:Proc2(byref) 3 ( 6.38% of base) : 12656.dasm - Benchstone.MDBenchI.MDNDhrystone:Proc2(byref) 4 ( 6.15% of base) : 14040.dasm - System.Text.RegularExpressions.RegexCharClass:IsEmpty(System.String):bool 2 ( 5.88% of base) : 14109.dasm - System.Text.RegularExpressions.RegexCharClass:IsNegated(System.String,int):bool 7 ( 5.83% of base) : 50509.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsDotOrColonColon():bool:this 8 ( 5.76% of base) : 48985.dasm - Microsoft.CodeAnalysis.MetadataTypeName:get_IsMangled():bool:this 2 ( 5.71% of base) : 48694.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:ItemInternal(int):Microsoft.CodeAnalysis.SyntaxNode:this 5 ( 5.10% of base) : 24963.dasm - EMFloat:RoundInternalFPF(byref) 5 ( 5.05% of base) : 26044.dasm - EMFloatClass:RoundInternalFPF(EMFloatClass+InternalFPF) 19 ( 4.95% of base) : 54553.dasm - System.Text.RegularExpressions.RegexCharClass:Analyze(System.String):System.Text.RegularExpressions.RegexCharClass+CharClassAnalysisResults 78 ( 4.84% of base) : 27304.dasm - AssignJagged:second_assignments(int[][],short[][]) 3 ( 4.69% of base) : 50433.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsPossibleAttributeDeclaration():bool:this 3 ( 4.69% of base) : 50507.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsTrueIdentifier(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken):bool:this 5 ( 4.17% of base) : 14041.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingleton(System.String):bool 5 ( 4.17% of base) : 14042.dasm - System.Text.RegularExpressions.RegexCharClass:IsSingletonInverse(System.String):bool ```
--------------------------------------------------------------------------------
coreclr_tests.run.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 366769604 (overridden on cmd) Total bytes of diff: 366775392 (overridden on cmd) Total bytes of delta: 5788 (0.00 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 117 : 436512.dasm (1.63% of base) 117 : 436298.dasm (1.63% of base) 108 : 434380.dasm (1.48% of base) 108 : 433965.dasm (1.48% of base) 105 : 434249.dasm (1.54% of base) 102 : 433772.dasm (1.41% of base) 82 : 434787.dasm (0.42% of base) 78 : 219643.dasm (4.84% of base) 78 : 401794.dasm (4.84% of base) 74 : 398895.dasm (1.67% of base) 72 : 219641.dasm (3.74% of base) 72 : 435627.dasm (0.23% of base) 57 : 435296.dasm (0.18% of base) 54 : 433128.dasm (4.85% of base) 54 : 433268.dasm (4.85% of base) 54 : 433267.dasm (4.94% of base) 54 : 433125.dasm (4.94% of base) 54 : 433131.dasm (4.85% of base) 54 : 433269.dasm (4.85% of base) 40 : 219664.dasm (1.80% of base) 94 total files with Code Size differences (0 improved, 94 regressed), 1 unchanged. Top method regressions (bytes): 117 ( 1.63% of base) : 436512.dasm - TestApp:RunAllTests():int 117 ( 1.63% of base) : 436298.dasm - TestApp:RunAllTests():int 108 ( 1.48% of base) : 434380.dasm - TestApp:RunAllTests():int 108 ( 1.48% of base) : 433965.dasm - TestApp:RunAllTests():int 105 ( 1.54% of base) : 434249.dasm - TestApp:RunAllTests():int 102 ( 1.41% of base) : 433772.dasm - TestApp:RunAllTests():int 82 ( 0.42% of base) : 434787.dasm - charMDArrTest:TestEntryPoint():int 78 ( 4.84% of base) : 219643.dasm - AssignJagged:second_assignments(int[][],short[][]) 78 ( 4.84% of base) : 401794.dasm - AssignJagged:second_assignments(int[][],short[][]) 74 ( 1.67% of base) : 398895.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseMemberDeclarationOrStatement(ushort,System.String):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.MemberDeclarationSyntax:this 72 ( 3.74% of base) : 219641.dasm - AssignJagged:second_assignments(int[][],short[][]) 72 ( 0.23% of base) : 435627.dasm - ushortMDArrTest:TestEntryPoint():int 57 ( 0.18% of base) : 435296.dasm - shortMDArrTest:TestEntryPoint():int 54 ( 4.85% of base) : 433131.dasm - Test_Class_ImplicitOverrideVirtualNewslot:TestGenInterface_GenType() 54 ( 4.85% of base) : 433128.dasm - Test_Class_ImplicitOverrideVirtualNewslot:TestGenInterface_NonGenType() 54 ( 4.94% of base) : 433125.dasm - Test_Class_ImplicitOverrideVirtualNewslot:TestNonGenInterface_GenType() 54 ( 4.85% of base) : 433269.dasm - Test_Class2_ImplicitOverrideVirtualNewslot:TestGenInterface_GenType() 54 ( 4.85% of base) : 433268.dasm - Test_Class2_ImplicitOverrideVirtualNewslot:TestGenInterface_NonGenType() 54 ( 4.94% of base) : 433267.dasm - Test_Class2_ImplicitOverrideVirtualNewslot:TestNonGenInterface_GenType() 40 ( 1.80% of base) : 219664.dasm - AssignRect:second_assignments(int[,],short[,]) Top method regressions (percentages): 4 (33.33% of base) : 446670.dasm - IlasmPortablePdbTests.IlasmPortablePdbTester+<>c:b__20_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 4 (33.33% of base) : 259303.dasm - System.Reflection.PortableExecutable.DebugDirectoryEntry:get_IsPortableCodeView():bool:this 4 (33.33% of base) : 259302.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 4 (33.33% of base) : 345813.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 3 (27.27% of base) : 227581.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this 3 (27.27% of base) : 398695.dasm - Program:TestStartWith(System.String):bool 16 (22.22% of base) : 389416.dasm - ldind_i2:main():int 11 (21.15% of base) : 4341.dasm - System.IO.PathInternal:IsExtended(System.ReadOnlySpan`1[ushort]):bool 12 (16.67% of base) : 389424.dasm - ldind_u2:main():int 3 (14.29% of base) : 404113.dasm - Tests_len1_1:Test_tst_12(System.String):bool 3 (14.29% of base) : 223792.dasm - Tests_len1_1:Test_tst_17(System.String):bool 3 (14.29% of base) : 404117.dasm - Tests_len1_1:Test_tst_17(System.String):bool 3 (14.29% of base) : 404110.dasm - Tests_len1_1:Test_tst_9(System.String):bool 3 (14.29% of base) : 223778.dasm - Tests_len1_1:Test_tst_9(System.String):bool 3 (14.29% of base) : 404144.dasm - Tests_len1_2:Test_tst_12(System.String):bool 3 (14.29% of base) : 404148.dasm - Tests_len1_2:Test_tst_17(System.String):bool 3 (14.29% of base) : 223865.dasm - Tests_len1_2:Test_tst_9(System.String):bool 3 (14.29% of base) : 404141.dasm - Tests_len1_2:Test_tst_9(System.String):bool 3 (14.29% of base) : 404176.dasm - Tests_len1_3:Test_tst_13(System.String):bool 3 (14.29% of base) : 404179.dasm - Tests_len1_3:Test_tst_17(System.String):bool ```
--------------------------------------------------------------------------------
libraries.crossgen2.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 34043181 (overridden on cmd) Total bytes of diff: 34067348 (overridden on cmd) Total bytes of delta: 24167 (0.07 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 476 : 85911.dasm (1.40% of base) 272 : 84401.dasm (1.77% of base) 260 : 98372.dasm (1.73% of base) 88 : 97858.dasm (1.70% of base) 64 : 90510.dasm (6.92% of base) 63 : 90511.dasm (5.95% of base) 57 : 120911.dasm (3.61% of base) 54 : 112994.dasm (2.69% of base) 54 : 112954.dasm (2.89% of base) 48 : 93614.dasm (1.62% of base) 48 : 88593.dasm (1.68% of base) 46 : 120905.dasm (2.71% of base) 38 : 112956.dasm (2.72% of base) 36 : 93542.dasm (1.59% of base) 34 : 120912.dasm (3.79% of base) 32 : 196642.dasm (16.08% of base) 31 : 208666.dasm (1.67% of base) 30 : 167864.dasm (1.50% of base) 28 : 87094.dasm (1.74% of base) 28 : 117469.dasm (1.81% of base) Top file improvements (bytes): -1 : 24664.dasm (-0.92% of base) -1 : 189454.dasm (-5.26% of base) -1 : 36267.dasm (-0.05% of base) 84 total files with Code Size differences (3 improved, 81 regressed), 2 unchanged. Top method regressions (bytes): 476 ( 1.40% of base) : 85911.dasm - Microsoft.Diagnostics.Tracing.Parsers.ClrTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 272 ( 1.77% of base) : 84401.dasm - Microsoft.Diagnostics.Tracing.Parsers.MicrosoftAntimalwareEngineTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 260 ( 1.73% of base) : 98372.dasm - Microsoft.Diagnostics.Tracing.Parsers.AspNet.AspNetTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 88 ( 1.70% of base) : 97858.dasm - Microsoft.Diagnostics.Tracing.Parsers.Clr.ClrRundownTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 64 ( 6.92% of base) : 90510.dasm - Microsoft.Diagnostics.Tracing.Parsers.Symbol.FileVersionTraceData:PayloadValue(int):System.Object:this 63 ( 5.95% of base) : 90511.dasm - Microsoft.Diagnostics.Tracing.Parsers.Symbol.FileVersionTraceData:ToXml(System.Text.StringBuilder):System.Text.StringBuilder:this 57 ( 3.61% of base) : 120911.dasm - System.Xml.DtdParser:ScanAttlist2():int:this 54 ( 2.89% of base) : 112954.dasm - System.Xml.DtdParser+d__183:MoveNext():this 54 ( 2.69% of base) : 112994.dasm - System.Xml.DtdParser+d__174:MoveNext():this 48 ( 1.62% of base) : 93614.dasm - Microsoft.Diagnostics.Tracing.Parsers.Kernel.HeapTraceProviderTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 48 ( 1.68% of base) : 88593.dasm - Microsoft.Diagnostics.Tracing.Parsers.SymbolTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 46 ( 2.71% of base) : 120905.dasm - System.Xml.DtdParser:ScanSubsetContent():int:this 38 ( 2.72% of base) : 112956.dasm - System.Xml.DtdParser+d__184:MoveNext():this 36 ( 1.59% of base) : 93542.dasm - Microsoft.Diagnostics.Tracing.Parsers.Kernel.ThreadPoolTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 34 ( 3.79% of base) : 120912.dasm - System.Xml.DtdParser:ScanAttlist6():int:this 32 (16.08% of base) : 196642.dasm - System.IPv6AddressHelper:IsLoopback(System.ReadOnlySpan`1[ushort]):bool 31 ( 1.67% of base) : 208666.dasm - Microsoft.Extensions.FileSystemGlobbing.Internal.Patterns.PatternBuilder:Build(System.String):Microsoft.Extensions.FileSystemGlobbing.Internal.IPattern:this 30 ( 1.50% of base) : 167864.dasm - System.Text.RegularExpressions.RegexCharClass:Canonicalize():this 28 ( 1.74% of base) : 87094.dasm - Microsoft.Diagnostics.Tracing.Parsers.JSDumpHeapTraceEventParser:EnumerateTemplates(System.Func`3[System.String,System.String,int],System.Action`1[Microsoft.Diagnostics.Tracing.TraceEvent]):this 28 ( 1.81% of base) : 117469.dasm - System.Xml.Schema.XsdDateTime+Parser:Parse(System.String,int):bool:this Top method improvements (bytes): -1 (-0.05% of base) : 36267.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this -1 (-0.92% of base) : 24664.dasm - System.Globalization.HebrewNumber:IsDigit(ushort):bool -1 (-5.26% of base) : 189454.dasm - System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this Top method regressions (percentages): 4 (36.36% of base) : 83935.dasm - Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this 4 (33.33% of base) : 47991.dasm - Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this 4 (33.33% of base) : 47990.dasm - Microsoft.Cci.ModulePropertiesForSerialization:get_RequiresAmdInstructionSet():bool:this 4 (33.33% of base) : 152203.dasm - System.Reflection.PortableExecutable.DebugDirectoryEntry:get_IsPortableCodeView():bool:this 4 (33.33% of base) : 154591.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 3 (27.27% of base) : 50783.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this 3 (27.27% of base) : 172325.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this 3 (27.27% of base) : 104059.dasm - Microsoft.FSharp.Core.PrintfImpl+FormatSpecifier:get_IsDecimalFormat():bool:this 3 (27.27% of base) : 196038.dasm - System.Drawing.Color:get_IsEmpty():bool:this 4 (25.00% of base) : 138496.dasm - System.Speech.Internal.Synthesis.SsmlParser:ElementPromptEngine(System.Speech.Internal.Synthesis.SsmlParser+SsmlAttributes):int 2 (18.18% of base) : 10581.dasm - System.Text.EncoderNLS:get_HasState():bool:this 7 (17.95% of base) : 182052.dasm - System.CSharpHelpers:IsPrefixTwoUnderscore(System.String):bool 7 (17.95% of base) : 120886.dasm - System.CSharpHelpers:IsPrefixTwoUnderscore(System.String):bool 3 (17.65% of base) : 82099.dasm - PEFile.PEHeader:get_IsPE64():bool:this 32 (16.08% of base) : 196642.dasm - System.IPv6AddressHelper:IsLoopback(System.ReadOnlySpan`1[ushort]):bool 3 (15.00% of base) : 82130.dasm - PEFile.PEHeader:get_CheckSum():uint:this 3 (15.00% of base) : 82120.dasm - PEFile.PEHeader:get_FileAlignment():uint:this 3 (15.00% of base) : 82129.dasm - PEFile.PEHeader:get_SizeOfHeaders():uint:this 3 (15.00% of base) : 82128.dasm - PEFile.PEHeader:get_SizeOfImage():uint:this 3 (15.00% of base) : 82127.dasm - PEFile.PEHeader:get_Win32VersionValue():uint:this Top method improvements (percentages): -1 (-5.26% of base) : 189454.dasm - System.Text.GB18030Encoding+GB18030Decoder:get_HasState():bool:this -1 (-0.92% of base) : 24664.dasm - System.Globalization.HebrewNumber:IsDigit(ushort):bool -1 (-0.05% of base) : 36267.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this ```
--------------------------------------------------------------------------------
libraries.pmi.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 52495507 (overridden on cmd) Total bytes of diff: 52527421 (overridden on cmd) Total bytes of delta: 31914 (0.06 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 81 : 68009.dasm (2.44% of base) 76 : 45348.dasm (1.97% of base) 59 : 120918.dasm (1.14% of base) 55 : 120958.dasm (1.11% of base) 54 : 120742.dasm (1.28% of base) 54 : 120757.dasm (1.15% of base) 53 : 67860.dasm (2.14% of base) 52 : 45413.dasm (8.33% of base) 49 : 67747.dasm (2.07% of base) 48 : 45180.dasm (1.22% of base) 48 : 67762.dasm (2.04% of base) 48 : 67864.dasm (2.34% of base) 48 : 67862.dasm (1.10% of base) 44 : 45579.dasm (2.11% of base) 43 : 67832.dasm (1.25% of base) 43 : 67853.dasm (1.74% of base) 42 : 120920.dasm (1.22% of base) 40 : 68028.dasm (3.27% of base) 40 : 67741.dasm (0.82% of base) 40 : 67599.dasm (3.26% of base) Top file improvements (bytes): -1 : 45700.dasm (-0.03% of base) 82 total files with Code Size differences (1 improved, 81 regressed), 2 unchanged. Top method regressions (bytes): 81 ( 2.44% of base) : 68009.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseInterpolatedStringInterpolation():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.InterpolationSyntax:this 76 ( 1.97% of base) : 45348.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseMemberDeclarationOrStatement(ushort,System.String):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.MemberDeclarationSyntax:this 59 ( 1.14% of base) : 120918.dasm - System.Xml.DtdParser+d__183:MoveNext():this 55 ( 1.11% of base) : 120958.dasm - System.Xml.DtdParser+d__174:MoveNext():this 54 ( 1.15% of base) : 120757.dasm - System.Xml.DtdParser:ScanAttlist2():int:this 54 ( 1.28% of base) : 120742.dasm - System.Xml.DtdParser:ScanSubsetContent():int:this 53 ( 2.14% of base) : 67860.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParsePropertyDefinition(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.AttributeListSyntax],Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.KeywordSyntax]):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.PropertyStatementSyntax:this 52 ( 8.33% of base) : 45413.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseEnumMemberDeclarations(byref,Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SeparatedSyntaxListBuilder`1[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.EnumMemberDeclarationSyntax]):this 49 ( 2.07% of base) : 67747.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseNewExpression():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ExpressionSyntax:this 48 ( 1.22% of base) : 45180.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.DirectiveParser:ParsePragmaDirective(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken,bool):Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.DirectiveTriviaSyntax:this 48 ( 2.04% of base) : 67762.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseFunctionOrSubLambdaHeader(byref,bool):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.LambdaHeaderSyntax:this 48 ( 1.10% of base) : 67862.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseGenericParameters():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.TypeParameterListSyntax:this 48 ( 2.34% of base) : 67864.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseParameters(byref,byref):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ParameterSyntax]:this 44 ( 2.11% of base) : 45579.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseArrayInitializer():Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.InitializerExpressionSyntax:this 43 ( 1.25% of base) : 67832.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseFieldOrPropertyAsClauseAndInitializer(bool,bool,byref,byref):this 43 ( 1.74% of base) : 67853.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseHandlesList():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.HandlesClauseSyntax:this 42 ( 1.22% of base) : 120920.dasm - System.Xml.DtdParser+d__184:MoveNext():this 40 ( 3.26% of base) : 67599.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.BlockContext:.ctor(ushort,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.StatementSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.BlockContext):this 40 ( 0.82% of base) : 67741.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseIfExpression():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ExpressionSyntax:this 40 ( 3.27% of base) : 68028.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseXmlAttribute(bool,bool,Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlNodeSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlNodeSyntax:this Top method improvements (bytes): -1 (-0.03% of base) : 45700.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this Top method regressions (percentages): 4 (36.36% of base) : 96230.dasm - Microsoft.Diagnostics.Tracing.Stacks.RecursionGuard:get_RequiresNewThread():bool:this 4 (33.33% of base) : 85658.dasm - Microsoft.Cci.ModulePropertiesForSerialization:get_Requires32bits():bool:this 4 (33.33% of base) : 85657.dasm - Microsoft.Cci.ModulePropertiesForSerialization:get_RequiresAmdInstructionSet():bool:this 4 (33.33% of base) : 165685.dasm - Microsoft.CodeAnalysis.Emit.EmitBaseline+<>c:b__2_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 4 (33.33% of base) : 69526.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:get_IsEndOfParse():bool:this 4 (33.33% of base) : 205592.dasm - System.Reflection.PortableExecutable.DebugDirectoryEntry:get_IsPortableCodeView():bool:this 4 (33.33% of base) : 149942.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 3 (27.27% of base) : 155349.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this 3 (27.27% of base) : 89006.dasm - Microsoft.CodeAnalysis.GreenNode:get_IsList():bool:this 3 (27.27% of base) : 24534.dasm - Microsoft.FSharp.Core.PrintfImpl+FormatSpecifier:get_IsDecimalFormat():bool:this 3 (27.27% of base) : 245495.dasm - System.Drawing.Color:get_IsEmpty():bool:this 3 (27.27% of base) : 132639.dasm - System.Runtime.InteropServices.Variant:get_AsBool():bool:this 6 (26.09% of base) : 56650.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken+MissingTokenWithTrivia:get_Value():System.Object:this 4 (25.00% of base) : 215879.dasm - System.Speech.Internal.Synthesis.SsmlParser:ElementPromptEngine(System.Speech.Internal.Synthesis.SsmlParser+SsmlAttributes):int 2 (20.00% of base) : 132616.dasm - System.Runtime.InteropServices.Variant:get_IsEmpty():bool:this 2 (18.18% of base) : 114906.dasm - MS.Internal.Xml.Cache.XPathNode:get_HasSibling():bool:this 2 (18.18% of base) : 175233.dasm - System.ComponentModel.MaskedTextProvider:get_IsPassword():bool:this 2 (18.18% of base) : 217038.dasm - System.Text.EncoderNLS:get_HasState():bool:this 2 (18.18% of base) : 267567.dasm - System.Threading.ReaderWriterLock+ThreadLocalLockEntry:get_IsFree():bool:this 7 (17.95% of base) : 114990.dasm - System.CSharpHelpers:IsPrefixTwoUnderscore(System.String):bool Top method improvements (percentages): -1 (-0.03% of base) : 45700.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:ScanXmlCrefToken(byref):bool:this ```
--------------------------------------------------------------------------------
libraries_tests.pmi.windows.x64.checked.mch
To reproduce these diffs on Windows x64: ``` superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64 ``` ``` Summary of Code Size diffs: (Lower is better) Total bytes of base: 124697145 (overridden on cmd) Total bytes of diff: 124702931 (overridden on cmd) Total bytes of delta: 5786 (0.00 % of base) diff is a regression. relative diff is a regression. ```
Detail diffs ``` Top file regressions (bytes): 102 : 195758.dasm (3.21% of base) 62 : 196203.dasm (0.85% of base) 62 : 195792.dasm (0.72% of base) 62 : 195721.dasm (2.97% of base) 58 : 335633.dasm (1.02% of base) 55 : 341079.dasm (5.13% of base) 52 : 195585.dasm (1.07% of base) 33 : 196371.dasm (5.35% of base) 33 : 184259.dasm (1.50% of base) 29 : 324143.dasm (1.12% of base) 29 : 30.dasm (1.12% of base) 28 : 195850.dasm (0.52% of base) 26 : 195935.dasm (0.93% of base) 26 : 237110.dasm (1.07% of base) 25 : 324840.dasm (0.93% of base) 24 : 80513.dasm (0.46% of base) 23 : 324101.dasm (0.75% of base) 23 : 80512.dasm (0.44% of base) 22 : 324796.dasm (0.63% of base) 22 : 196362.dasm (0.30% of base) 90 total files with Code Size differences (0 improved, 90 regressed), 1 unchanged. Top method regressions (bytes): 102 ( 3.21% of base) : 195758.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.ExpressionSyntaxExtensions:CanReplaceWithLValue(Microsoft.CodeAnalysis.VisualBasic.Syntax.ExpressionSyntax,Microsoft.CodeAnalysis.SemanticModel,System.Threading.CancellationToken):bool 62 ( 0.72% of base) : 195792.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.ParenthesizedExpressionSyntaxExtensions:CanRemoveParentheses(Microsoft.CodeAnalysis.VisualBasic.Syntax.ParenthesizedExpressionSyntax,Microsoft.CodeAnalysis.SemanticModel,System.Threading.CancellationToken):bool 62 ( 2.97% of base) : 195721.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.SemanticModelExtensions:DetermineAccessibilityConstraint(Microsoft.CodeAnalysis.SemanticModel,Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeSyntax,System.Threading.CancellationToken):int 62 ( 0.85% of base) : 196203.dasm - Microsoft.CodeAnalysis.VisualBasic.Formatting.AdjustSpaceFormattingRule:GetAdjustSpacesOperationSlow(byref,byref,byref):Microsoft.CodeAnalysis.Formatting.Rules.AdjustSpacesOperation:this 58 ( 1.02% of base) : 335633.dasm - Microsoft.XmlSerializer.Generator.Sgen:Run(System.String[]):int:this 55 ( 5.13% of base) : 341079.dasm - Microsoft.Build.Framework.EscapeHatches:.ctor():this 52 ( 1.07% of base) : 195585.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGeneration.VisualBasicSyntaxGenerator:GetModifierList(int,Microsoft.CodeAnalysis.Editing.DeclarationModifiers,Microsoft.CodeAnalysis.SyntaxNode,int,bool):Microsoft.CodeAnalysis.SyntaxTokenList 33 ( 5.35% of base) : 196371.dasm - Microsoft.CodeAnalysis.VisualBasic.Simplification.Simplifiers.NameSimplifier:CanSimplifyNullable(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.VisualBasic.Syntax.NameSyntax):bool 33 ( 1.50% of base) : 184259.dasm - System.Text.RegularExpressions.Tests.RegexCharacterSetTests:RegexRunner_Legacy_CharInSet():this 29 ( 1.12% of base) : 324143.dasm - System.Text.RegularExpressions.RegexParser:ScanCharClass(bool,bool):System.Text.RegularExpressions.RegexCharClass:this 29 ( 1.12% of base) : 30.dasm - System.Text.RegularExpressions.RegexParser:ScanCharClass(bool,bool):System.Text.RegularExpressions.RegexCharClass:this 28 ( 0.52% of base) : 195850.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.SyntaxNodeExtensions:UpdateStatements(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.StatementSyntax],Microsoft.CodeAnalysis.SyntaxAnnotation[],byref,byref) 26 ( 0.93% of base) : 195935.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.CastAnalyzer:IsUnnecessary():bool:this 26 ( 1.07% of base) : 237110.dasm - System.Net.Http.Tests.HeaderUtilitiesTest:GetNextNonEmptyOrWhitespaceIndex_UseDifferentInput_MatchExpectation():this 25 ( 0.93% of base) : 324840.dasm - System.Text.RegularExpressions.RegexParser:ScanCharClass(bool,bool):System.Text.RegularExpressions.RegexCharClass:this 24 ( 0.46% of base) : 80513.dasm - Microsoft.CodeAnalysis.Formatting.AbstractTriviaFormatter:FormatTrivia[ubyte](Microsoft.CodeAnalysis.Formatting.AbstractTriviaFormatter+Formatter`1[ubyte],Microsoft.CodeAnalysis.Formatting.AbstractTriviaFormatter+WhitespaceAppender`1[ubyte],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[ubyte],System.Threading.CancellationToken):Microsoft.CodeAnalysis.Formatting.LineColumn:this 23 ( 0.44% of base) : 80512.dasm - Microsoft.CodeAnalysis.Formatting.AbstractTriviaFormatter:FormatTrivia[System.__Canon](Microsoft.CodeAnalysis.Formatting.AbstractTriviaFormatter+Formatter`1[System.__Canon],Microsoft.CodeAnalysis.Formatting.AbstractTriviaFormatter+WhitespaceAppender`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],System.Threading.CancellationToken):Microsoft.CodeAnalysis.Formatting.LineColumn:this 23 ( 0.75% of base) : 324101.dasm - System.Text.RegularExpressions.RegexNode:CanBeMadeAtomic(System.Text.RegularExpressions.RegexNode,System.Text.RegularExpressions.RegexNode,bool,bool):bool 22 ( 0.30% of base) : 196362.dasm - Microsoft.CodeAnalysis.VisualBasic.Simplification.Simplifiers.NameSimplifier:TrySimplify(Microsoft.CodeAnalysis.VisualBasic.Syntax.NameSyntax,Microsoft.CodeAnalysis.SemanticModel,Microsoft.CodeAnalysis.VisualBasic.Simplification.VisualBasicSimplifierOptions,byref,byref,System.Threading.CancellationToken):bool:this 22 ( 0.63% of base) : 324796.dasm - System.Text.RegularExpressions.RegexNode:CanBeMadeAtomic(System.Text.RegularExpressions.RegexNode,System.Text.RegularExpressions.RegexNode,bool,bool):bool Top method regressions (percentages): 4 (33.33% of base) : 205917.dasm - System.Reflection.PortableExecutable.PEReader+<>c:b__38_0(System.Reflection.PortableExecutable.DebugDirectoryEntry):bool:this 3 (27.27% of base) : 4389.dasm - Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_0(Kerberos.NET.Dns.DnsRecord):bool:this 3 (27.27% of base) : 4391.dasm - Kerberos.NET.Dns.DnsQueryWin32+<>c:b__9_2(Kerberos.NET.Dns.DnsRecord):bool:this 2 (18.18% of base) : 235296.dasm - System.Buffers.Text.Tests.TestData+<>c__124`1[ubyte]:b__124_0(System.Buffers.Text.Tests.SupportedFormat):bool:this 3 (17.65% of base) : 200160.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_IsPE64():bool:this 3 (17.65% of base) : 167156.dasm - System.Net.Http.Functional.Tests.SocketsHttpHandler_Http2FlowControl_Test+<>c:b__6_0(System.Net.Test.Common.SettingsEntry):bool:this 3 (15.00% of base) : 200191.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_CheckSum():uint:this 3 (15.00% of base) : 200181.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_FileAlignment():uint:this 3 (15.00% of base) : 200180.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_SectionAlignment():uint:this 3 (15.00% of base) : 200190.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_SizeOfHeaders():uint:this 3 (15.00% of base) : 200189.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_SizeOfImage():uint:this 3 (15.00% of base) : 200188.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_Win32VersionValue():uint:this 3 (14.29% of base) : 261128.dasm - FluentAssertions.CallerIdentifier:IsStringLiteral(System.String):bool 3 (14.29% of base) : 200179.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_ImageBase():ulong:this 3 (14.29% of base) : 200197.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_SizeOfHeapCommit():ulong:this 3 (14.29% of base) : 200196.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_SizeOfHeapReserve():ulong:this 3 (14.29% of base) : 200195.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_SizeOfStackCommit():ulong:this 3 (14.29% of base) : 200194.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_SizeOfStackReserve():ulong:this 3 (13.64% of base) : 200187.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_MinorSubsystemVersion():ushort:this 3 (13.64% of base) : 200192.dasm - Microsoft.Diagnostics.Runtime.Utilities.PEHeader:get_Subsystem():ushort:this ```
--------------------------------------------------------------------------------
jakobbotsch commented 1 year ago

The Alpine version of the benchmark does not show the same regression: https://pvscmdupload.blob.core.windows.net/reports/allTestHistory%2frefs%2fheads%2fmain_x64_alpine%203.15%2fSystem.IO.Tests.Perf_Path.GetFullPathForReallyLongPath.html

That's odd since both of these measurements are on i7-8700 CPUs and should be measuring the same JIT codegen. So this may be some weird microarchitectural effect instead.

jakobbotsch commented 1 year ago

These benchmarks look to be better now, not sure if it's due to other changes or other factors: image

One thing to note is that the Alpine version of the benchmark (linked above) actually shows a perf improvement in the commit range that @EgorBo mentioned above, and that is supposedly the same CPU, just a different OS. So that makes me suspect that this is actually some kind of code alignment or data alignment related effect. I don't think there is anything actionable here.