dotnet / perf-autofiling-issues

A landing place for auto-filed performance issues before they receive triage
MIT License
9 stars 4 forks source link

[Perf] Windows/x86: 16 Regressions on 3/10/2023 8:23:08 AM #13953

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 3db965d1c9fcc8d9c4bc4c2dc9b644f61e7bb6ce
Compare a923c644067c4a37f0bb7c7a331a791d2e51c183
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock

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.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22Sherlock%20Holmes%22%2c%20Options%3a%20None).html>) 76.02 μs 83.60 μs 1.10 0.20 False Trace Trace
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22Sherlock%20Holmes%22%2c%20Options%3a%20NonBacktracking).html>) 85.31 μs 92.99 μs 1.09 0.18 False
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22(%3fm)%5eSherlock%20Holmes%7cSherlock%20Holmes%24%22%2c%20Options%3a%20NonBacktracking).html>) 86.31 μs 95.96 μs 1.11 0.19 False
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22Holmes%22%2c%20Options%3a%20None).html>) 113.62 μs 123.62 μs 1.09 0.10 False Trace Trace
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22Sherlock%5c%5cs%2bHolmes%22%2c%20Options%3a%20None).html>) 77.71 μs 86.23 μs 1.11 0.18 False
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22(%3fm)%5eSherlock%20Holmes%7cSherlock%20Holmes%24%22%2c%20Options%3a%20None).html>) 76.28 μs 85.04 μs 1.11 0.17 False
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22aqj%22%2c%20Options%3a%20None).html>) 64.15 μs 73.02 μs 1.14 0.30 False
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern%3a%20%22Sherlock%22%2c%20Options%3a%20None).html>) 75.26 μs 84.60 μs 1.12 0.20 False Trace Trace

graph graph graph 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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "Sherlock Holmes", Options: None) ```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 83.60095206391479 > 79.72063710111189. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -17.40175775538281 (T) = (0 -82959.34871776303) / Math.Sqrt((1794902.3838208932 / (43)) + (2760069.282715991 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.10753281038300415 = (74904.64204764664 - 82959.34871776303) / 74904.64204764664 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. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "Sherlock Holmes", 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 92.99164048227986 > 89.00233833984731. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 3/10/2023 8:23:08 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -13.91266947097682 (T) = (0 -93550.65775820902) / Math.Sqrt((2379006.031224797 / (44)) + (4521711.072257066 / (15))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (44) + (15) - 2, .025) and -0.09730136880068271 = (85255.20920515854 - 93550.65775820902) / 85255.20920515854 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. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "(?m)^Sherlock Holmes|Sherlock Holmes$", 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 95.9598136049193 > 87.29746512008535. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -19.152412922667917 (T) = (0 -93579.6353239162) / Math.Sqrt((2029190.6236588438 / (43)) + (3005904.5814841785 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.11015794855356675 = (84293.98307316704 - 93579.6353239162) / 84293.98307316704 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. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "Holmes", Options: None) ```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 123.61636659807957 > 116.74597962435075. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -27.2157809197702 (T) = (0 -126351.33116288763) / Math.Sqrt((2259853.8921463154 / (43)) + (3825577.4378835424 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.13163823892565257 = (111653.46558352627 - 126351.33116288763) / 111653.46558352627 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. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "Sherlock\\s+Holmes", Options: None) ```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 86.23407165942271 > 80.03109176601188. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -28.404515723620516 (T) = (0 -85935.46738936422) / Math.Sqrt((1451074.5668337536 / (43)) + (947789.9087914084 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.11208692819103061 = (77274.0558412557 - 85935.46738936422) / 77274.0558412557 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. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "(?m)^Sherlock Holmes|Sherlock Holmes$", Options: None) ```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 85.04376942704708 > 80.02480004704701. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -18.91435862995848 (T) = (0 -84797.19543167585) / Math.Sqrt((2108877.360006726 / (43)) + (2228037.530951978 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.10716228546293882 = (76589.67122079986 - 84797.19543167585) / 76589.67122079986 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. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "aqj", Options: None) ```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 73.015115521327 > 65.8106777815359. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -16.605147921138595 (T) = (0 -72029.32353163508) / Math.Sqrt((3153879.032114544 / (43)) + (3357214.2236636756 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.13982934882047984 = (63193.07675852757 - 72029.32353163508) / 63193.07675852757 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. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock.Count(Pattern: "Sherlock", Options: None) ```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 84.59567692800631 > 77.10879112909619. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -20.05887201397651 (T) = (0 -82697.76351526676) / Math.Sqrt((1381100.1376676676 / (43)) + (2302318.495940532 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.11329072038859812 = (74282.2714684991 - 82697.76351526676) / 74282.2714684991 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

Architecture x86
OS Windows 10.0.18362
Baseline 3db965d1c9fcc8d9c4bc4c2dc9b644f61e7bb6ce
Compare a923c644067c4a37f0bb7c7a331a791d2e51c183
Diff Diff

Regressions in System.Buffers.Tests.RentReturnArrayPoolTests<Byte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SingleSerial - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Tests.RentReturnArrayPoolTests(Byte).SingleSerial(RentalSize%3a%204096%2c%20ManipulateArray%3a%20False%2c%20Async%3a%20False%2c%20UseSharedPool%3a%20True).html>) 23.35 ns 30.40 ns 1.30 0.28 False
[MultipleSerial - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Tests.RentReturnArrayPoolTests(Byte).MultipleSerial(RentalSize%3a%204096%2c%20ManipulateArray%3a%20True%2c%20Async%3a%20True%2c%20UseSharedPool%3a%20True).html>) 11.82 μs 13.10 μs 1.11 0.12 False

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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Tests.RentReturnArrayPoolTests&lt;Byte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Buffers.Tests.RentReturnArrayPoolTests<Byte>.SingleSerial(RentalSize: 4096, ManipulateArray: False, Async: False, UseSharedPool: True) ```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 30.397087673611107 > 24.220915625. IsChangePoint: Marked as a change because one of 2/9/2023 11:32:54 PM, 2/13/2023 6:54:14 PM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -6.991643568349145 (T) = (0 -32.003281323617784) / Math.Sqrt((2.5985200564905915 / (43)) + (23.11897825077992 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.3662021708355188 = (23.424996685553324 - 32.003281323617784) / 23.424996685553324 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. ```#### System.Buffers.Tests.RentReturnArrayPoolTests<Byte>.MultipleSerial(RentalSize: 4096, ManipulateArray: True, Async: True, UseSharedPool: True) ```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 13.099968800000001 > 12.396937487499999. IsChangePoint: Marked as a change because one of 1/22/2023 3:25:37 PM, 2/1/2023 6:25:50 PM, 2/9/2023 4:10:34 PM, 2/12/2023 2:35:10 PM, 3/13/2023 6:11:08 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -5.2561982074280555 (T) = (0 -12903.707525) / Math.Sqrt((39071.776383817094 / (57)) + (77036.97612925184 / (2))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (57) + (2) - 2, .025) and -0.08772893586725776 = (11862.980839717882 - 12903.707525) / 11862.980839717882 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

Architecture x86
OS Windows 10.0.18362
Baseline 3db965d1c9fcc8d9c4bc4c2dc9b644f61e7bb6ce
Compare a923c644067c4a37f0bb7c7a331a791d2e51c183
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Replace_String - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.Replace_String(text%3a%20%22This%20is%20a%20very%20nice%20sentence%22%2c%20oldValue%3a%20%22bad%22%2c%20newValue%3a%20%22nice%22).html>) 10.89 ns 12.12 ns 1.11 0.03 False 138.29007243585895 144.66252751703666 1.0460803510254386) Trace Trace

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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence", oldValue: "bad", newValue: "nice") ```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 12.115221716456153 > 11.432841261787358. IsChangePoint: Marked as a change because one of 1/18/2023 3:20:52 PM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -29.77419479777106 (T) = (0 -12.154526399767569) / Math.Sqrt((0.005807331577228847 / (43)) + (0.028883736682329374 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.1209548156311731 = (10.843011895108146 - 12.154526399767569) / 10.843011895108146 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. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String) push dword ptr [esp+4] mov ecx,edx mov edx,[esp+0C] cmp [ecx],ecx call dword ptr ds:[4EC3018]; System.String.Replace(System.String, System.String) ret 8 ; Total bytes of code 21 ``` ```assembly ; System.String.Replace(System.String, System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,54 xor eax,eax mov [ebp-20],eax mov [ebp-18],eax mov [ebp-10],esp mov dword ptr [ebp-60],0E4CEF926 mov esi,ecx mov edi,edx mov ebx,[ebp+8] test edi,edi je near ptr M01_L18 cmp dword ptr [edi+4],0 je near ptr M01_L18 mov edx,8300004 test ebx,ebx cmove ebx,edx test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-10],esp mov [ebp-18],edx mov dword ptr [ebp-14],80 xor edx,edx mov [ebp-20],edx mov [ebp-1C],edx cmp dword ptr [edi+4],1 jne near ptr M01_L08 cmp dword ptr [ebx+4],1 jne short M01_L01 movzx edx,word ptr [edi+8] movzx ecx,word ptr [ebx+8] push ecx mov ecx,esi call dword ptr ds:[4EC3000]; System.String.Replace(Char, Char) cmp dword ptr [ebp-60],0E4CEF926 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L01: movzx eax,word ptr [edi+8] mov [ebp-24],eax xor edx,edx lea ecx,[eax-1] cmp ecx,0FE mov [ebp+8],ebx jae short M01_L05 M01_L02: lea ecx,[esi+edx*2+8] mov ebx,[esi+4] mov [ebp-28],edx sub ebx,edx push ebx movsx edx,ax call dword ptr ds:[4FDD660]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov ebx,eax mov [ebp-2C],ebx test ebx,ebx jl near ptr M01_L12 mov eax,[ebp-28] lea edx,[eax+ebx] mov ecx,[ebp-1C] mov [ebp-3C],ecx mov ecx,[ebp-18] mov [ebp-54],ecx mov ecx,[ebp-14] mov [ebp-48],ecx mov ecx,[ebp-3C] cmp ecx,[ebp-48] jae short M01_L03 mov ebx,[ebp-54] mov [ebx+ecx*4],edx inc ecx mov [ebp-1C],ecx jmp short M01_L04 M01_L03: lea ecx,[ebp-20] call dword ptr ds:[0B31FBB8] M01_L04: mov eax,[ebp-28] mov ebx,[ebp-2C] lea eax,[eax+ebx+1] mov edx,eax mov eax,[ebp-24] jmp short M01_L02 M01_L05: lea ecx,[esi+edx*2+8] mov ebx,[esi+4] mov [ebp-28],edx sub ebx,edx push ebx movsx edx,ax call dword ptr ds:[0B315B58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov ebx,eax mov [ebp-30],ebx test ebx,ebx jl near ptr M01_L12 mov eax,[ebp-28] lea edx,[eax+ebx] mov ecx,[ebp-1C] mov [ebp-40],ecx mov ecx,[ebp-18] mov [ebp-58],ecx mov ecx,[ebp-14] mov [ebp-4C],ecx mov ecx,[ebp-40] cmp ecx,[ebp-4C] jae short M01_L06 mov ebx,[ebp-58] mov [ebx+ecx*4],edx inc ecx mov [ebp-1C],ecx jmp short M01_L07 M01_L06: lea ecx,[ebp-20] call dword ptr ds:[0B31FBB8] M01_L07: mov eax,[ebp-28] mov ebx,[ebp-30] lea eax,[eax+ebx+1] mov edx,eax mov eax,[ebp-24] jmp short M01_L05 M01_L08: xor eax,eax mov [ebp+8],ebx M01_L09: lea ecx,[esi+eax*2+8] mov edx,[esi+4] mov [ebp-34],eax sub edx,eax lea ebx,[edi+8] push ebx push dword ptr [edi+4] call dword ptr ds:[4ECF5A0]; System.SpanHelpers.IndexOf(Char ByRef, Int32, Char ByRef, Int32) mov ebx,eax mov [ebp-38],ebx test ebx,ebx jl short M01_L12 mov eax,[ebp-34] lea edx,[eax+ebx] mov ecx,[ebp-1C] mov [ebp-44],ecx mov ecx,[ebp-18] mov [ebp-5C],ecx mov ecx,[ebp-14] mov [ebp-50],ecx mov ecx,[ebp-44] cmp ecx,[ebp-50] jae short M01_L10 mov ebx,[ebp-5C] mov [ebx+ecx*4],edx inc ecx mov [ebp-1C],ecx jmp short M01_L11 M01_L10: lea ecx,[ebp-20] call dword ptr ds:[0B31FBB8] M01_L11: mov eax,[ebp-34] add eax,[ebp-38] add eax,[edi+4] mov ebx,eax jmp short M01_L09 M01_L12: cmp dword ptr [ebp-1C],0 jne short M01_L14 mov eax,esi cmp dword ptr [ebp-60],0E4CEF926 je short M01_L13 call CORINFO_HELP_FAIL_FAST M01_L13: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L14: mov edx,[edi+4] mov ecx,[ebp-1C] cmp ecx,[ebp-14] ja short M01_L19 mov eax,[ebp-18] push dword ptr [ebp+8] push ecx push eax mov ecx,esi call dword ptr ds:[4EC3030] mov edi,eax mov esi,[ebp-20] test esi,esi jne short M01_L17 M01_L15: mov eax,edi cmp dword ptr [ebp-60],0E4CEF926 je short M01_L16 call CORINFO_HELP_FAIL_FAST M01_L16: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L17: xor ecx,ecx mov [ebp-20],ecx mov ecx,3404EC8 mov edx,31 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov ecx,ds:[7181F84] push 0 mov edx,esi cmp [ecx],ecx call dword ptr ds:[89CD658]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean) jmp short M01_L15 M01_L18: mov ecx,1687 mov edx,2D64000 call CORINFO_HELP_STRCNS mov edx,eax mov ecx,edi call dword ptr ds:[4ECBC48] int 3 M01_L19: call dword ptr ds:[8897270] int 3 ; Total bytes of code 657 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String) push dword ptr [esp+4] mov ecx,edx mov edx,[esp+0C] cmp [ecx],ecx call dword ptr ds:[7C43018]; System.String.Replace(System.String, System.String) ret 8 ; Total bytes of code 21 ``` ```assembly ; System.String.Replace(System.String, System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 xor eax,eax mov [ebp-20],eax mov [ebp-18],eax mov [ebp-10],esp mov dword ptr [ebp-60],4B407A65 mov esi,ecx mov edi,edx mov ebx,[ebp+8] test edi,edi je near ptr M01_L18 cmp dword ptr [edi+4],0 je near ptr M01_L18 mov edx,7C60004 test ebx,ebx cmove ebx,edx test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-10],esp mov [ebp-18],edx mov dword ptr [ebp-14],80 xor edx,edx mov [ebp-20],edx mov [ebp-1C],edx cmp dword ptr [edi+4],1 jne near ptr M01_L08 cmp dword ptr [ebx+4],1 jne short M01_L01 movzx edx,word ptr [edi+8] movzx ecx,word ptr [ebx+8] push ecx mov ecx,esi call dword ptr ds:[7C43000]; System.String.Replace(Char, Char) cmp dword ptr [ebp-60],4B407A65 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L01: movzx eax,word ptr [edi+8] mov [ebp-24],eax xor edx,edx lea ecx,[eax-1] cmp ecx,0FE mov [ebp+8],ebx jae short M01_L05 M01_L02: lea ecx,[esi+edx*2+8] mov ebx,[esi+4] mov [ebp-28],edx sub ebx,edx push ebx movsx edx,ax call dword ptr ds:[82FDF00]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov ebx,eax mov [ebp-2C],ebx test ebx,ebx jl near ptr M01_L12 mov eax,[ebp-28] lea edx,[eax+ebx] mov ecx,[ebp-1C] mov [ebp-3C],ecx mov ecx,[ebp-18] mov [ebp-54],ecx mov ecx,[ebp-14] mov [ebp-48],ecx mov ecx,[ebp-3C] cmp ecx,[ebp-48] jae short M01_L03 mov ebx,[ebp-54] mov [ebx+ecx*4],edx inc ecx mov [ebp-1C],ecx jmp short M01_L04 M01_L03: lea ecx,[ebp-20] call dword ptr ds:[0AD8FBE8] M01_L04: mov eax,[ebp-28] mov ebx,[ebp-2C] lea eax,[eax+ebx+1] mov edx,eax mov eax,[ebp-24] jmp short M01_L02 M01_L05: lea ecx,[esi+edx*2+8] mov ebx,[esi+4] mov [ebp-28],edx sub ebx,edx push ebx movsx edx,ax call dword ptr ds:[0AD85B58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov ebx,eax mov [ebp-30],ebx test ebx,ebx jl near ptr M01_L12 mov eax,[ebp-28] lea edx,[eax+ebx] mov ecx,[ebp-1C] mov [ebp-40],ecx mov ecx,[ebp-18] mov [ebp-58],ecx mov ecx,[ebp-14] mov [ebp-4C],ecx mov ecx,[ebp-40] cmp ecx,[ebp-4C] jae short M01_L06 mov ebx,[ebp-58] mov [ebx+ecx*4],edx inc ecx mov [ebp-1C],ecx jmp short M01_L07 M01_L06: lea ecx,[ebp-20] call dword ptr ds:[0AD8FBE8] M01_L07: mov eax,[ebp-28] mov ebx,[ebp-30] lea eax,[eax+ebx+1] mov edx,eax mov eax,[ebp-24] jmp short M01_L05 M01_L08: xor eax,eax mov [ebp+8],ebx M01_L09: lea ecx,[esi+eax*2+8] mov edx,[esi+4] mov [ebp-34],eax sub edx,eax lea ebx,[edi+8] push ebx push dword ptr [edi+4] call dword ptr ds:[7C4F5A0]; System.SpanHelpers.IndexOf(Char ByRef, Int32, Char ByRef, Int32) mov ebx,eax mov [ebp-38],ebx test ebx,ebx jl short M01_L12 mov eax,[ebp-34] lea edx,[eax+ebx] mov ecx,[ebp-1C] mov [ebp-44],ecx mov ecx,[ebp-18] mov [ebp-5C],ecx mov ecx,[ebp-14] mov [ebp-50],ecx mov ecx,[ebp-44] cmp ecx,[ebp-50] jae short M01_L10 mov ebx,[ebp-5C] mov [ebx+ecx*4],edx inc ecx mov [ebp-1C],ecx jmp short M01_L11 M01_L10: lea ecx,[ebp-20] call dword ptr ds:[0AD8FBE8] M01_L11: mov eax,[ebp-34] add eax,[ebp-38] add eax,[edi+4] mov ebx,eax jmp short M01_L09 M01_L12: cmp dword ptr [ebp-1C],0 jne short M01_L14 mov eax,esi cmp dword ptr [ebp-60],4B407A65 je short M01_L13 call CORINFO_HELP_FAIL_FAST M01_L13: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L14: mov edx,[edi+4] mov ecx,[ebp-1C] cmp ecx,[ebp-14] ja short M01_L19 mov eax,[ebp-18] push dword ptr [ebp+8] push ecx push eax mov ecx,esi call dword ptr ds:[7C43030] mov edi,eax mov esi,[ebp-20] test esi,esi jne short M01_L17 M01_L15: mov eax,edi cmp dword ptr [ebp-60],4B407A65 je short M01_L16 call CORINFO_HELP_FAIL_FAST M01_L16: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L17: xor ecx,ecx mov [ebp-20],ecx mov ecx,0C54F20 mov edx,31 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov ecx,ds:[6A81F7C] push 0 mov edx,esi cmp [ecx],ecx call dword ptr ds:[0AD4EAE8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean) jmp short M01_L15 M01_L18: mov ecx,1687 mov edx,604000 call CORINFO_HELP_STRCNS mov edx,eax mov ecx,edi call dword ptr ds:[7C4BC48] int 3 M01_L19: call dword ptr ds:[8307270] int 3 ; Total bytes of code 657 ``` ### 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)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 3db965d1c9fcc8d9c4bc4c2dc9b644f61e7bb6ce
Compare a923c644067c4a37f0bb7c7a331a791d2e51c183
Diff Diff

Regressions in System.Globalization.Tests.StringSearch

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IndexOf_Word_NotFound - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound(Options%3a%20(en-US%2c%20Ordinal%2c%20False)).html>) 29.59 ns 33.63 ns 1.14 0.19 False 302.7551229897453 335.7373600999527 1.1089403105206068) Trace Trace

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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Globalization.Tests.StringSearch*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound(Options: (en-US, Ordinal, False)) ```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 33.63181533543072 > 31.058419032524526. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -19.7389364874788 (T) = (0 -33.398077310606936) / Math.Sqrt((0.6296197917802125 / (43)) + (0.428215406634558 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.13670362579932774 = (29.38151735648901 - 33.398077310606936) / 29.38151735648901 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. ```### Baseline Jit Disasm ```assembly ; System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound() push ebp mov ebp,esp push edi push esi mov esi,ecx mov ecx,[esi+18] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+18] mov ecx,[esi+4] mov edx,[esi+1C] cmp [eax],al test ecx,ecx je short M00_L00 lea esi,[ecx+8] mov ecx,[ecx+4] mov edi,82E8540 add edi,8 push ecx push esi push 4 push edi mov ecx,eax call dword ptr ds:[89DFAF8]; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1, System.ReadOnlySpan`1, System.Globalization.CompareOptions) pop esi pop edi pop ebp ret M00_L00: mov ecx,27 call dword ptr ds:[8997588] int 3 ; Total bytes of code 73 ``` ```assembly ; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1, System.ReadOnlySpan`1, System.Globalization.CompareOptions) push ebp mov ebp,esp push esi test edx,0FFFFFFE0 je short M01_L02 cmp edx,40000000 jne short M01_L01 mov edx,[ebp+14] mov ecx,[ebp+0C] mov eax,[ebp+10] mov esi,[ebp+8] push esi push ecx mov ecx,eax call dword ptr ds:[82CF5A0]; System.SpanHelpers.IndexOf(Char ByRef, Int32, Char ByRef, Int32) M01_L00: pop esi pop ebp ret 10 M01_L01: cmp edx,10000000 jne short M01_L03 push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[89DF450] jmp short M01_L00 M01_L02: cmp dword ptr [ebp+0C],0 je short M01_L04 push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push 0 push 1 call dword ptr ds:[89DFB58] jmp short M01_L00 M01_L03: mov ecx,44 mov edx,59 call dword ptr ds:[8997540] int 3 M01_L04: xor eax,eax pop esi pop ebp ret 10 ; Total bytes of code 129 ``` ### Compare Jit Disasm ```assembly ; System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound() push ebp mov ebp,esp push edi push esi mov esi,ecx mov ecx,[esi+18] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+18] mov ecx,[esi+4] mov edx,[esi+1C] cmp [eax],al test ecx,ecx je short M00_L00 lea esi,[ecx+8] mov ecx,[ecx+4] mov edi,8418484 add edi,8 push ecx push esi push 4 push edi mov ecx,eax call dword ptr ds:[0B0DF5A0]; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1, System.ReadOnlySpan`1, System.Globalization.CompareOptions) pop esi pop edi pop ebp ret M00_L00: mov ecx,27 call dword ptr ds:[8AC7588] int 3 ; Total bytes of code 73 ``` ```assembly ; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1, System.ReadOnlySpan`1, System.Globalization.CompareOptions) push ebp mov ebp,esp push esi test edx,0FFFFFFE0 je short M01_L02 cmp edx,40000000 jne short M01_L01 mov edx,[ebp+14] mov ecx,[ebp+0C] mov eax,[ebp+10] mov esi,[ebp+8] push esi push ecx mov ecx,eax call dword ptr ds:[83FF5A0]; System.SpanHelpers.IndexOf(Char ByRef, Int32, Char ByRef, Int32) M01_L00: pop esi pop ebp ret 10 M01_L01: cmp edx,10000000 jne short M01_L03 push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[8B2F450] jmp short M01_L00 M01_L02: cmp dword ptr [ebp+0C],0 je short M01_L04 push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push 0 push 1 call dword ptr ds:[0B0DF600] jmp short M01_L00 M01_L03: mov ecx,45 mov edx,59 call dword ptr ds:[8AC7540] int 3 M01_L04: xor eax,eax pop esi pop ebp ret 10 ; Total bytes of code 129 ``` ### 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

Architecture x86
OS Windows 10.0.18362
Baseline 3db965d1c9fcc8d9c4bc4c2dc9b644f61e7bb6ce
Compare a923c644067c4a37f0bb7c7a331a791d2e51c183
Diff Diff

Regressions in System.Tests.Perf_Byte

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TryParse - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Byte.TryParse(value%3a%20%22255%22).html>) 11.44 ns 14.45 ns 1.26 0.53 False Trace Trace

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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Byte*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Byte.TryParse(value: "255") ```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 14.4482186245213 > 11.930654272945388. IsChangePoint: Marked as a change because one of 1/26/2023 7:55:58 PM, 2/17/2023 12:34:41 AM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -3.9929083994807355 (T) = (0 -13.102438103505166) / Math.Sqrt((0.6226005337848426 / (43)) + (1.4808959952934557 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.11074232137770754 = (11.796109548840795 - 13.102438103505166) / 11.796109548840795 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. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Byte.TryParse(System.String) push ebp mov ebp,esp push eax xor eax,eax mov [ebp-4],eax test edx,edx jne short M00_L00 xor eax,eax jmp short M00_L03 M00_L00: lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0A4C58B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-4] push ecx mov ecx,7 call dword ptr ds:[83DF0F0]; System.Number.TryParseUInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt32 ByRef) test eax,eax jne short M00_L01 cmp dword ptr [ebp-4],0FF jbe short M00_L02 M00_L01: xor eax,eax jmp short M00_L03 M00_L02: mov eax,1 M00_L03: mov esp,ebp pop ebp ret ; Total bytes of code 74 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,4874EC8 mov edx,254 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6A31234] test ecx,ecx jne short M01_L00 mov ecx,ds:[6A31224] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,7DA56F8 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[83D95D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[7D6B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseUInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,34 mov esi,ecx mov edi,edx cmp dword ptr [ebp+10],0 je near ptr M02_L09 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L16 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L16 M02_L00: xor edx,edx mov [ebp-14],edx test esi,4 je short M02_L01 cmp byte ptr [edi+71],0 je near ptr M02_L19 cmp eax,2B je near ptr M02_L17 cmp eax,2D je near ptr M02_L18 M02_L01: xor edi,edi lea ecx,[eax-30] cmp ecx,9 ja short M02_L09 cmp eax,30 jne short M02_L05 M02_L02: inc ebx cmp ebx,[ebp+10] jb near ptr M02_L24 M02_L03: mov esi,[ebp+8] mov [esi],edi xor eax,eax M02_L04: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L05: lea edi,[eax-30] inc ebx xor ecx,ecx M02_L06: cmp ebx,[ebp+10] jb short M02_L08 M02_L07: cmp dword ptr [ebp-14],0 jne short M02_L10 jmp short M02_L03 M02_L08: mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea edx,[eax-30] cmp edx,9 ja short M02_L11 inc ebx lea edx,[edi+edi*4] lea edi,[eax+edx*2-30] inc ecx cmp ecx,8 jge near ptr M02_L25 jmp short M02_L06 M02_L09: xor eax,eax mov esi,[ebp+8] mov [esi],eax mov eax,1 jmp short M02_L04 M02_L10: xor edx,edx mov esi,[ebp+8] mov [esi],edx mov eax,2 jmp short M02_L04 M02_L11: mov ecx,eax call dword ptr ds:[83DF348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L15 test esi,2 je short M02_L09 jmp short M02_L13 M02_L12: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] call dword ptr ds:[83DF348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L14 M02_L13: inc ebx cmp ebx,[ebp+10] jl short M02_L12 M02_L14: cmp ebx,[ebp+10] jae near ptr M02_L07 M02_L15: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[83DF2E8] test eax,eax jne near ptr M02_L07 jmp short M02_L09 M02_L16: inc ebx cmp ebx,[ebp+10] jae short M02_L09 mov ecx,[ebp+0C] movzx eax,word ptr [ecx+ebx*2] mov [ebp-10],eax mov ecx,eax call dword ptr ds:[83DF348]; System.Number.IsWhite(Int32) test eax,eax jne short M02_L16 mov eax,[ebp-10] jmp near ptr M02_L00 M02_L17: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L09 jmp near ptr M02_L23 M02_L18: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-14],edx jae near ptr M02_L09 jmp near ptr M02_L23 M02_L19: cmp byte ptr [edi+72],0 je short M02_L20 mov [ebp-10],eax cmp eax,2D mov eax,[ebp-10] jne short M02_L20 mov dword ptr [ebp-14],1 inc ebx cmp ebx,[ebp+10] jae near ptr M02_L09 jmp near ptr M02_L23 M02_L20: cmp ebx,[ebp+10] jbe short M02_L21 call dword ptr ds:[8447270] int 3 M02_L21: mov ecx,[ebp+0C] lea ecx,[ecx+ebx*2] mov [ebp-30],ecx mov ecx,[ebp+10] sub ecx,ebx mov ebx,[ebp-30] mov [ebp+0C],ebx mov [ebp+10],ecx xor ebx,ebx mov ecx,[edi+10] mov [ebp-28],ecx mov edi,[edi+14] mov [ebp-2C],edi test ecx,ecx je short M02_L22 cmp dword ptr [ecx+4],0 sete cl movzx ecx,cl test ecx,ecx jne short M02_L22 mov ecx,[ebp+0C] mov [ebp-38],ecx mov edi,[ebp+10] mov [ebp-1C],edi mov edi,[ebp-28] lea ecx,[edi+8] mov edi,[edi+4] mov [ebp-20],edi mov edi,[ebp-38] mov [ebp-3C],ecx mov ecx,[ebp-20] cmp ecx,[ebp-1C] jg short M02_L22 mov [ebp-10],eax add ecx,ecx push ecx mov ecx,edi mov edx,[ebp-3C] call dword ptr ds:[7D8F450] test eax,eax mov eax,[ebp-10] je short M02_L22 mov edi,[ebp-28] mov ebx,[edi+4] cmp ebx,[ebp+10] jae near ptr M02_L09 jmp near ptr M02_L23 M02_L22: mov edi,[ebp-2C] test edi,edi je near ptr M02_L01 xor ecx,ecx cmp dword ptr [edi+4],0 sete cl test ecx,ecx mov [ebp-2C],edi jne near ptr M02_L01 mov ecx,[ebp+0C] mov [ebp-34],ecx mov edi,[ebp+10] mov [ebp-18],edi mov edi,[ebp-2C] add edi,8 mov ecx,[ebp-2C] mov ecx,[ecx+4] mov [ebp-24],ecx mov ecx,[ebp-34] mov [ebp-40],ecx mov ecx,[ebp-24] cmp ecx,[ebp-18] jg near ptr M02_L01 mov [ebp-10],eax add ecx,ecx push ecx mov ecx,[ebp-40] mov edx,edi call dword ptr ds:[7D8F450] test eax,eax mov eax,[ebp-10] je near ptr M02_L01 mov edi,[ebp-2C] mov ebx,1 mov ecx,[edi+4] mov edi,ecx cmp edi,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L09 mov ebx,edi M02_L23: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx eax,word ptr [ecx+ebx*2] mov edi,eax jmp near ptr M02_L01 M02_L24: mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] mov eax,ecx cmp eax,30 je near ptr M02_L02 lea ecx,[eax-30] cmp ecx,9 jbe near ptr M02_L05 xor edx,edx mov [ebp-14],edx jmp near ptr M02_L11 M02_L25: cmp ebx,[ebp+10] jae near ptr M02_L07 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L11 inc ebx mov edx,[ebp-14] cmp edi,19999999 ja short M02_L27 cmp edi,19999999 jne short M02_L26 xor ecx,ecx cmp eax,35 setg cl jmp short M02_L28 M02_L26: xor ecx,ecx jmp short M02_L28 M02_L27: mov ecx,1 M02_L28: or ecx,edx movzx edx,cl lea ecx,[edi+edi*4] lea edi,[eax+ecx*2-30] cmp ebx,[ebp+10] mov [ebp-14],edx jae near ptr M02_L07 jmp short M02_L30 M02_L29: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-14],edx jae near ptr M02_L10 M02_L30: cmp ebx,[ebp+10] jae short M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 jbe short M02_L29 jmp near ptr M02_L11 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 910 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Byte.TryParse(System.String) push ebp mov ebp,esp push eax xor eax,eax mov [ebp-4],eax test edx,edx jne short M00_L00 xor eax,eax jmp short M00_L03 M00_L00: lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0A923288]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-4] push ecx mov ecx,7 call dword ptr ds:[88DF0F0]; System.Number.TryParseUInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt32 ByRef) test eax,eax jne short M00_L01 cmp dword ptr [ebp-4],0FF jbe short M00_L02 M00_L01: xor eax,eax jmp short M00_L03 M00_L02: mov eax,1 M00_L03: mov esp,ebp pop ebp ret ; Total bytes of code 74 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,3414F20 mov edx,253 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[706122C] test ecx,ecx jne short M01_L00 mov ecx,ds:[706121C] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,828568C mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[88D95D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[824B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseUInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,34 mov esi,ecx mov edi,edx cmp dword ptr [ebp+10],0 je near ptr M02_L09 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L16 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L16 M02_L00: xor edx,edx mov [ebp-14],edx test esi,4 je short M02_L01 cmp byte ptr [edi+71],0 je near ptr M02_L19 cmp eax,2B je near ptr M02_L17 cmp eax,2D je near ptr M02_L18 M02_L01: xor edi,edi lea ecx,[eax-30] cmp ecx,9 ja short M02_L09 cmp eax,30 jne short M02_L05 M02_L02: inc ebx cmp ebx,[ebp+10] jb near ptr M02_L24 M02_L03: mov esi,[ebp+8] mov [esi],edi xor eax,eax M02_L04: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L05: lea edi,[eax-30] inc ebx xor ecx,ecx M02_L06: cmp ebx,[ebp+10] jb short M02_L08 M02_L07: cmp dword ptr [ebp-14],0 jne short M02_L10 jmp short M02_L03 M02_L08: mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea edx,[eax-30] cmp edx,9 ja short M02_L11 inc ebx lea edx,[edi+edi*4] lea edi,[eax+edx*2-30] inc ecx cmp ecx,8 jge near ptr M02_L25 jmp short M02_L06 M02_L09: xor eax,eax mov esi,[ebp+8] mov [esi],eax mov eax,1 jmp short M02_L04 M02_L10: xor edx,edx mov esi,[ebp+8] mov [esi],edx mov eax,2 jmp short M02_L04 M02_L11: mov ecx,eax call dword ptr ds:[88DF348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L15 test esi,2 je short M02_L09 jmp short M02_L13 M02_L12: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] call dword ptr ds:[88DF348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L14 M02_L13: inc ebx cmp ebx,[ebp+10] jl short M02_L12 M02_L14: cmp ebx,[ebp+10] jae near ptr M02_L07 M02_L15: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[88DF2E8] test eax,eax jne near ptr M02_L07 jmp short M02_L09 M02_L16: inc ebx cmp ebx,[ebp+10] jae short M02_L09 mov ecx,[ebp+0C] movzx eax,word ptr [ecx+ebx*2] mov [ebp-10],eax mov ecx,eax call dword ptr ds:[88DF348]; System.Number.IsWhite(Int32) test eax,eax jne short M02_L16 mov eax,[ebp-10] jmp near ptr M02_L00 M02_L17: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L09 jmp near ptr M02_L23 M02_L18: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-14],edx jae near ptr M02_L09 jmp near ptr M02_L23 M02_L19: cmp byte ptr [edi+72],0 je short M02_L20 mov [ebp-10],eax cmp eax,2D mov eax,[ebp-10] jne short M02_L20 mov dword ptr [ebp-14],1 inc ebx cmp ebx,[ebp+10] jae near ptr M02_L09 jmp near ptr M02_L23 M02_L20: cmp ebx,[ebp+10] jbe short M02_L21 call dword ptr ds:[8927270] int 3 M02_L21: mov ecx,[ebp+0C] lea ecx,[ecx+ebx*2] mov [ebp-30],ecx mov ecx,[ebp+10] sub ecx,ebx mov ebx,[ebp-30] mov [ebp+0C],ebx mov [ebp+10],ecx xor ebx,ebx mov ecx,[edi+10] mov [ebp-28],ecx mov edi,[edi+14] mov [ebp-2C],edi test ecx,ecx je short M02_L22 cmp dword ptr [ecx+4],0 sete cl movzx ecx,cl test ecx,ecx jne short M02_L22 mov ecx,[ebp+0C] mov [ebp-38],ecx mov edi,[ebp+10] mov [ebp-1C],edi mov edi,[ebp-28] lea ecx,[edi+8] mov edi,[edi+4] mov [ebp-20],edi mov edi,[ebp-38] mov [ebp-3C],ecx mov ecx,[ebp-20] cmp ecx,[ebp-1C] jg short M02_L22 mov [ebp-10],eax add ecx,ecx push ecx mov ecx,edi mov edx,[ebp-3C] call dword ptr ds:[826F450] test eax,eax mov eax,[ebp-10] je short M02_L22 mov edi,[ebp-28] mov ebx,[edi+4] cmp ebx,[ebp+10] jae near ptr M02_L09 jmp near ptr M02_L23 M02_L22: mov edi,[ebp-2C] test edi,edi je near ptr M02_L01 xor ecx,ecx cmp dword ptr [edi+4],0 sete cl test ecx,ecx mov [ebp-2C],edi jne near ptr M02_L01 mov ecx,[ebp+0C] mov [ebp-34],ecx mov edi,[ebp+10] mov [ebp-18],edi mov edi,[ebp-2C] add edi,8 mov ecx,[ebp-2C] mov ecx,[ecx+4] mov [ebp-24],ecx mov ecx,[ebp-34] mov [ebp-40],ecx mov ecx,[ebp-24] cmp ecx,[ebp-18] jg near ptr M02_L01 mov [ebp-10],eax add ecx,ecx push ecx mov ecx,[ebp-40] mov edx,edi call dword ptr ds:[826F450] test eax,eax mov eax,[ebp-10] je near ptr M02_L01 mov edi,[ebp-2C] mov ebx,1 mov ecx,[edi+4] mov edi,ecx cmp edi,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L09 mov ebx,edi M02_L23: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx eax,word ptr [ecx+ebx*2] mov edi,eax jmp near ptr M02_L01 M02_L24: mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] mov eax,ecx cmp eax,30 je near ptr M02_L02 lea ecx,[eax-30] cmp ecx,9 jbe near ptr M02_L05 xor edx,edx mov [ebp-14],edx jmp near ptr M02_L11 M02_L25: cmp ebx,[ebp+10] jae near ptr M02_L07 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L11 inc ebx mov edx,[ebp-14] cmp edi,19999999 ja short M02_L27 cmp edi,19999999 jne short M02_L26 xor ecx,ecx cmp eax,35 setg cl jmp short M02_L28 M02_L26: xor ecx,ecx jmp short M02_L28 M02_L27: mov ecx,1 M02_L28: or ecx,edx movzx edx,cl lea ecx,[edi+edi*4] lea edi,[eax+ecx*2-30] cmp ebx,[ebp+10] mov [ebp-14],edx jae near ptr M02_L07 jmp short M02_L30 M02_L29: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-14],edx jae near ptr M02_L10 M02_L30: cmp ebx,[ebp+10] jae short M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 jbe short M02_L29 jmp near ptr M02_L11 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 910 ``` ### 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)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 3db965d1c9fcc8d9c4bc4c2dc9b644f61e7bb6ce
Compare a923c644067c4a37f0bb7c7a331a791d2e51c183
Diff Diff

Regressions in System.Tests.Perf_Int32

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Parse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Int32.Parse(value%3a%20%22-2147483648%22).html>) 23.21 ns 26.26 ns 1.13 0.53 False Trace Trace
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Int32.TryParse(value%3a%20%2212345%22).html>) 13.21 ns 15.76 ns 1.19 0.53 False 181.20891499883086 186.80948101292762 1.0309066803591473) Trace Trace
[ParseHex - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Int32.ParseHex(value%3a%20%223039%22).html>) 11.85 ns 18.52 ns 1.56 0.50 False Trace Trace

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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Int32*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Int32.Parse(value: "-2147483648") ```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 26.259173307507343 > 22.901661505446906. IsChangePoint: Marked as a change because one of 1/26/2023 2:33:00 AM, 2/16/2023 9:09:51 PM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -8.01736418186377 (T) = (0 -26.791081682976955) / Math.Sqrt((3.3256468143347413 / (43)) + (2.2205506865350517 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.1616039570062097 = (23.063869162451326 - 26.791081682976955) / 23.063869162451326 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. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Int32.Parse(System.String) push ebp mov ebp,esp push edi push esi push eax test edx,edx je short M00_L00 lea esi,[edx+8] mov edi,[edx+4] push edi push esi call dword ptr ds:[0A8558B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-0C] push ecx mov ecx,7 call dword ptr ds:[87DF018]; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) mov ecx,eax test ecx,ecx jne short M00_L01 mov eax,[ebp-0C] pop ecx pop esi pop edi pop ebp ret M00_L00: mov ecx,11 call dword ptr ds:[8847588] int 3 M00_L01: push edi push esi mov edx,9 call dword ptr ds:[87DF378] int 3 ; Total bytes of code 81 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,4C64EC8 mov edx,254 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6F51234] test ecx,ecx jne short M01_L00 mov ecx,ds:[6F51224] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,81A56F8 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[87D95D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[816B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,2C mov esi,ecx mov edi,edx cmp dword ptr [ebp+10],0 je near ptr M02_L10 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L23 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L23 M02_L00: mov ecx,1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edi+71],0 je near ptr M02_L25 cmp eax,2D je near ptr M02_L13 cmp eax,2B je near ptr M02_L24 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi lea edx,[eax-30] cmp edx,9 ja near ptr M02_L10 cmp eax,30 je near ptr M02_L11 M02_L02: lea edi,[eax-30] inc ebx xor eax,eax M02_L03: mov edx,[ebp+10] cmp ebx,edx jae near ptr M02_L05 mov [ebp-1C],ecx mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx lea edi,[edi+edi*4] lea edi,[ecx+edi*2-30] inc eax cmp eax,8 mov ecx,[ebp-1C] jl short M02_L03 cmp ebx,edx jae short M02_L05 mov [ebp-1C],ecx mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 ja short M02_L08 inc ebx xor ecx,ecx cmp edi,0CCCCCCC setg cl mov [ebp-20],ecx lea edi,[edi+edi*4] lea edi,[eax+edi*2-30] mov eax,[ebp-1C] mov ecx,eax shr ecx,1F add ecx,7FFFFFFF cmp edi,ecx seta cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl cmp ebx,edx jb short M02_L07 M02_L04: test ecx,ecx mov ecx,eax jne near ptr M02_L16 M02_L05: imul ecx,edi mov edi,[ebp+8] mov [edi],ecx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov [ebp-1C],eax mov [ebp-20],ecx jmp short M02_L15 M02_L08: mov [ebp-2C],edx mov ecx,eax jmp near ptr M02_L17 M02_L09: mov [ebp-2C],edx jmp near ptr M02_L17 M02_L10: xor eax,eax mov edi,[ebp+8] mov [edi],eax mov eax,1 jmp short M02_L06 M02_L11: inc ebx mov edx,[ebp+10] cmp ebx,edx jae short M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je short M02_L11 mov [ebp-1C],ecx lea ecx,[eax-30] cmp ecx,9 mov [ebp-2C],edx ja short M02_L12 mov ecx,[ebp-1C] jmp near ptr M02_L02 M02_L12: mov ecx,eax jmp short M02_L17 M02_L13: mov dword ptr [ebp-1C],0FFFFFFFF inc ebx cmp ebx,[ebp+10] jae short M02_L10 jmp near ptr M02_L29 M02_L14: mov eax,1 inc ebx mov [ebp-2C],edx cmp ebx,edx mov [ebp-20],eax mov edx,[ebp-2C] jae short M02_L16 M02_L15: cmp ebx,edx jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea eax,[ecx-30] cmp eax,9 jbe short M02_L14 mov [ebp-2C],edx jmp short M02_L17 M02_L16: xor ecx,ecx mov edi,[ebp+8] mov [edi],ecx mov eax,2 jmp near ptr M02_L06 M02_L17: call dword ptr ds:[87DF348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L21 test byte ptr [ebp-10],2 je near ptr M02_L10 mov esi,[ebp-2C] jmp short M02_L19 M02_L18: cmp ebx,esi jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] call dword ptr ds:[87DF348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L20 M02_L19: inc ebx cmp ebx,esi jl short M02_L18 M02_L20: cmp ebx,esi jae short M02_L22 M02_L21: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[87DF2E8] test eax,eax mov eax,[ebp-1C] mov ecx,[ebp-20] jne near ptr M02_L04 jmp near ptr M02_L10 M02_L22: mov eax,[ebp-1C] mov ecx,[ebp-20] jmp near ptr M02_L04 M02_L23: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax mov ecx,eax call dword ptr ds:[87DF348]; System.Number.IsWhite(Int32) test eax,eax jne short M02_L23 mov eax,[ebp-18] jmp near ptr M02_L00 M02_L24: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov esi,[ebp-10] mov [ebp-1C],ecx jmp near ptr M02_L29 M02_L25: cmp byte ptr [edi+72],0 je short M02_L26 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L26 mov ecx,0FFFFFFFF inc ebx cmp ebx,[ebp+10] mov [ebp-1C],ecx jae near ptr M02_L10 mov esi,[ebp-10] jmp near ptr M02_L29 M02_L26: cmp ebx,[ebp+10] jbe short M02_L27 call dword ptr ds:[8847270] int 3 M02_L27: mov [ebp-1C],ecx mov edx,[ebp+0C] lea edx,[edx+ebx*2] mov ecx,[ebp+10] sub ecx,ebx mov [ebp+0C],edx mov [ebp+10],ecx xor ebx,ebx mov edx,[edi+10] mov [ebp-30],edx mov edi,[edi+14] mov [ebp-34],edi test edx,edx je short M02_L28 xor ecx,ecx cmp dword ptr [edx+4],0 sete cl test ecx,ecx jne short M02_L28 mov ecx,[ebp+0C] mov edi,[ebp+10] mov [ebp-28],edi lea edi,[edx+8] mov edx,[edx+4] cmp edx,[ebp-28] jg short M02_L28 mov [ebp-18],eax add edx,edx push edx mov edx,edi call dword ptr ds:[818F450] test eax,eax mov eax,[ebp-18] je short M02_L28 mov ebx,[ebp-30] mov ebx,[ebx+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L10 mov esi,[ebp-10] mov ebx,[ebp-14] jmp near ptr M02_L29 M02_L28: mov edi,[ebp-34] test edi,edi mov ecx,[ebp-1C] je near ptr M02_L01 xor edx,edx cmp dword ptr [edi+4],0 sete dl test edx,edx mov [ebp-34],edi jne near ptr M02_L01 mov [ebp-14],ebx mov [ebp-1C],ecx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-34] add ebx,8 mov ecx,[ebp-34] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-24],ecx mov [ebp-38],ebx jg short M02_L30 mov [ebp-18],eax mov edi,[ebp-34] mov ebx,[ebp-24] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-38] call dword ptr ds:[818F450] test eax,eax mov eax,[ebp-18] mov ecx,[ebp-1C] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov ecx,[edi+4] mov edi,ecx cmp edi,[ebp+10] mov ebx,edi jae near ptr M02_L10 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov ecx,[ebp-1C] jmp near ptr M02_L01 M02_L30: mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 972 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Int32.Parse(System.String) push ebp mov ebp,esp push edi push esi push eax test edx,edx je short M00_L00 lea esi,[edx+8] mov edi,[edx+4] push edi push esi call dword ptr ds:[0A763288]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-0C] push ecx mov ecx,7 call dword ptr ds:[868F018]; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) mov ecx,eax test ecx,ecx jne short M00_L01 mov eax,[ebp-0C] pop ecx pop esi pop edi pop ebp ret M00_L00: mov ecx,11 call dword ptr ds:[86F7588] int 3 M00_L01: push edi push esi mov edx,9 call dword ptr ds:[868F378] int 3 ; Total bytes of code 81 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,2CF4F20 mov edx,253 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6EF122C] test ecx,ecx jne short M01_L00 mov ecx,ds:[6EF121C] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,807568C mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[86895D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[4CFB8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,2C mov esi,ecx mov edi,edx cmp dword ptr [ebp+10],0 je near ptr M02_L10 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L23 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L23 M02_L00: mov ecx,1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edi+71],0 je near ptr M02_L25 cmp eax,2D je near ptr M02_L13 cmp eax,2B je near ptr M02_L24 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi lea edx,[eax-30] cmp edx,9 ja near ptr M02_L10 cmp eax,30 je near ptr M02_L11 M02_L02: lea edi,[eax-30] inc ebx xor eax,eax M02_L03: mov edx,[ebp+10] cmp ebx,edx jae near ptr M02_L05 mov [ebp-1C],ecx mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx lea edi,[edi+edi*4] lea edi,[ecx+edi*2-30] inc eax cmp eax,8 mov ecx,[ebp-1C] jl short M02_L03 cmp ebx,edx jae short M02_L05 mov [ebp-1C],ecx mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 ja short M02_L08 inc ebx xor ecx,ecx cmp edi,0CCCCCCC setg cl mov [ebp-20],ecx lea edi,[edi+edi*4] lea edi,[eax+edi*2-30] mov eax,[ebp-1C] mov ecx,eax shr ecx,1F add ecx,7FFFFFFF cmp edi,ecx seta cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl cmp ebx,edx jb short M02_L07 M02_L04: test ecx,ecx mov ecx,eax jne near ptr M02_L16 M02_L05: imul ecx,edi mov edi,[ebp+8] mov [edi],ecx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov [ebp-1C],eax mov [ebp-20],ecx jmp short M02_L15 M02_L08: mov [ebp-2C],edx mov ecx,eax jmp near ptr M02_L17 M02_L09: mov [ebp-2C],edx jmp near ptr M02_L17 M02_L10: xor eax,eax mov edi,[ebp+8] mov [edi],eax mov eax,1 jmp short M02_L06 M02_L11: inc ebx mov edx,[ebp+10] cmp ebx,edx jae short M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je short M02_L11 mov [ebp-1C],ecx lea ecx,[eax-30] cmp ecx,9 mov [ebp-2C],edx ja short M02_L12 mov ecx,[ebp-1C] jmp near ptr M02_L02 M02_L12: mov ecx,eax jmp short M02_L17 M02_L13: mov dword ptr [ebp-1C],0FFFFFFFF inc ebx cmp ebx,[ebp+10] jae short M02_L10 jmp near ptr M02_L29 M02_L14: mov eax,1 inc ebx mov [ebp-2C],edx cmp ebx,edx mov [ebp-20],eax mov edx,[ebp-2C] jae short M02_L16 M02_L15: cmp ebx,edx jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea eax,[ecx-30] cmp eax,9 jbe short M02_L14 mov [ebp-2C],edx jmp short M02_L17 M02_L16: xor ecx,ecx mov edi,[ebp+8] mov [edi],ecx mov eax,2 jmp near ptr M02_L06 M02_L17: call dword ptr ds:[868F348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L21 test byte ptr [ebp-10],2 je near ptr M02_L10 mov esi,[ebp-2C] jmp short M02_L19 M02_L18: cmp ebx,esi jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] call dword ptr ds:[868F348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L20 M02_L19: inc ebx cmp ebx,esi jl short M02_L18 M02_L20: cmp ebx,esi jae short M02_L22 M02_L21: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[868F2E8] test eax,eax mov eax,[ebp-1C] mov ecx,[ebp-20] jne near ptr M02_L04 jmp near ptr M02_L10 M02_L22: mov eax,[ebp-1C] mov ecx,[ebp-20] jmp near ptr M02_L04 M02_L23: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax mov ecx,eax call dword ptr ds:[868F348]; System.Number.IsWhite(Int32) test eax,eax jne short M02_L23 mov eax,[ebp-18] jmp near ptr M02_L00 M02_L24: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov esi,[ebp-10] mov [ebp-1C],ecx jmp near ptr M02_L29 M02_L25: cmp byte ptr [edi+72],0 je short M02_L26 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L26 mov ecx,0FFFFFFFF inc ebx cmp ebx,[ebp+10] mov [ebp-1C],ecx jae near ptr M02_L10 mov esi,[ebp-10] jmp near ptr M02_L29 M02_L26: cmp ebx,[ebp+10] jbe short M02_L27 call dword ptr ds:[86F7270] int 3 M02_L27: mov [ebp-1C],ecx mov edx,[ebp+0C] lea edx,[edx+ebx*2] mov ecx,[ebp+10] sub ecx,ebx mov [ebp+0C],edx mov [ebp+10],ecx xor ebx,ebx mov edx,[edi+10] mov [ebp-30],edx mov edi,[edi+14] mov [ebp-34],edi test edx,edx je short M02_L28 xor ecx,ecx cmp dword ptr [edx+4],0 sete cl test ecx,ecx jne short M02_L28 mov ecx,[ebp+0C] mov edi,[ebp+10] mov [ebp-28],edi lea edi,[edx+8] mov edx,[edx+4] cmp edx,[ebp-28] jg short M02_L28 mov [ebp-18],eax add edx,edx push edx mov edx,edi call dword ptr ds:[4EAF450] test eax,eax mov eax,[ebp-18] je short M02_L28 mov ebx,[ebp-30] mov ebx,[ebx+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L10 mov esi,[ebp-10] mov ebx,[ebp-14] jmp near ptr M02_L29 M02_L28: mov edi,[ebp-34] test edi,edi mov ecx,[ebp-1C] je near ptr M02_L01 xor edx,edx cmp dword ptr [edi+4],0 sete dl test edx,edx mov [ebp-34],edi jne near ptr M02_L01 mov [ebp-14],ebx mov [ebp-1C],ecx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-34] add ebx,8 mov ecx,[ebp-34] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-24],ecx mov [ebp-38],ebx jg short M02_L30 mov [ebp-18],eax mov edi,[ebp-34] mov ebx,[ebp-24] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-38] call dword ptr ds:[4EAF450] test eax,eax mov eax,[ebp-18] mov ecx,[ebp-1C] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov ecx,[edi+4] mov edi,ecx cmp edi,[ebp+10] mov ebx,edi jae near ptr M02_L10 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov ecx,[ebp-1C] jmp near ptr M02_L01 M02_L30: mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 972 ``` #### System.Tests.Perf_Int32.TryParse(value: "12345") ```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 15.760065693308835 > 14.23822057367007. IsChangePoint: Marked as a change because one of 1/26/2023 1:49:07 PM, 2/16/2023 4:50:02 PM, 3/10/2023 12:53:36 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -4.831635303924586 (T) = (0 -16.391104660601258) / Math.Sqrt((1.2348942781259271 / (43)) + (3.5422453641676985 / (16))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (16) - 2, .025) and -0.17290766182719802 = (13.97476135083524 - 16.391104660601258) / 13.97476135083524 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. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Int32.TryParse(System.String) push ebp mov ebp,esp push eax xor eax,eax mov [ebp-4],eax test edx,edx je short M00_L01 lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0B0F58B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-4] push ecx mov ecx,7 call dword ptr ds:[907F018]; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) test eax,eax sete al movzx eax,al M00_L00: mov esp,ebp pop ebp ret M00_L01: xor edx,edx mov [ebp-4],edx xor eax,eax jmp short M00_L00 ; Total bytes of code 65 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,3C14EC8 mov edx,254 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[7881234] test ecx,ecx jne short M01_L00 mov ecx,ds:[7881224] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,8A456F8 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[90795D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[8A0B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,2C mov esi,ecx mov edi,edx cmp dword ptr [ebp+10],0 je near ptr M02_L10 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L23 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L23 M02_L00: mov ecx,1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edi+71],0 je near ptr M02_L25 cmp eax,2D je near ptr M02_L13 cmp eax,2B je near ptr M02_L24 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi lea edx,[eax-30] cmp edx,9 ja near ptr M02_L10 cmp eax,30 je near ptr M02_L11 M02_L02: lea edi,[eax-30] inc ebx xor eax,eax M02_L03: mov edx,[ebp+10] cmp ebx,edx jae near ptr M02_L05 mov [ebp-1C],ecx mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx lea edi,[edi+edi*4] lea edi,[ecx+edi*2-30] inc eax cmp eax,8 mov ecx,[ebp-1C] jl short M02_L03 cmp ebx,edx jae short M02_L05 mov [ebp-1C],ecx mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 ja short M02_L08 inc ebx xor ecx,ecx cmp edi,0CCCCCCC setg cl mov [ebp-20],ecx lea edi,[edi+edi*4] lea edi,[eax+edi*2-30] mov eax,[ebp-1C] mov ecx,eax shr ecx,1F add ecx,7FFFFFFF cmp edi,ecx seta cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl cmp ebx,edx jb short M02_L07 M02_L04: test ecx,ecx mov ecx,eax jne near ptr M02_L16 M02_L05: imul ecx,edi mov edi,[ebp+8] mov [edi],ecx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov [ebp-1C],eax mov [ebp-20],ecx jmp short M02_L15 M02_L08: mov [ebp-2C],edx mov ecx,eax jmp near ptr M02_L17 M02_L09: mov [ebp-2C],edx jmp near ptr M02_L17 M02_L10: xor eax,eax mov edi,[ebp+8] mov [edi],eax mov eax,1 jmp short M02_L06 M02_L11: inc ebx mov edx,[ebp+10] cmp ebx,edx jae short M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je short M02_L11 mov [ebp-1C],ecx lea ecx,[eax-30] cmp ecx,9 mov [ebp-2C],edx ja short M02_L12 mov ecx,[ebp-1C] jmp near ptr M02_L02 M02_L12: mov ecx,eax jmp short M02_L17 M02_L13: mov dword ptr [ebp-1C],0FFFFFFFF inc ebx cmp ebx,[ebp+10] jae short M02_L10 jmp near ptr M02_L29 M02_L14: mov eax,1 inc ebx mov [ebp-2C],edx cmp ebx,edx mov [ebp-20],eax mov edx,[ebp-2C] jae short M02_L16 M02_L15: cmp ebx,edx jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea eax,[ecx-30] cmp eax,9 jbe short M02_L14 mov [ebp-2C],edx jmp short M02_L17 M02_L16: xor ecx,ecx mov edi,[ebp+8] mov [edi],ecx mov eax,2 jmp near ptr M02_L06 M02_L17: call dword ptr ds:[907F348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L21 test byte ptr [ebp-10],2 je near ptr M02_L10 mov esi,[ebp-2C] jmp short M02_L19 M02_L18: cmp ebx,esi jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] call dword ptr ds:[907F348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L20 M02_L19: inc ebx cmp ebx,esi jl short M02_L18 M02_L20: cmp ebx,esi jae short M02_L22 M02_L21: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[907F2E8] test eax,eax mov eax,[ebp-1C] mov ecx,[ebp-20] jne near ptr M02_L04 jmp near ptr M02_L10 M02_L22: mov eax,[ebp-1C] mov ecx,[ebp-20] jmp near ptr M02_L04 M02_L23: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax mov ecx,eax call dword ptr ds:[907F348]; System.Number.IsWhite(Int32) test eax,eax jne short M02_L23 mov eax,[ebp-18] jmp near ptr M02_L00 M02_L24: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov esi,[ebp-10] mov [ebp-1C],ecx jmp near ptr M02_L29 M02_L25: cmp byte ptr [edi+72],0 je short M02_L26 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L26 mov ecx,0FFFFFFFF inc ebx cmp ebx,[ebp+10] mov [ebp-1C],ecx jae near ptr M02_L10 mov esi,[ebp-10] jmp near ptr M02_L29 M02_L26: cmp ebx,[ebp+10] jbe short M02_L27 call dword ptr ds:[90E7270] int 3 M02_L27: mov [ebp-1C],ecx mov edx,[ebp+0C] lea edx,[edx+ebx*2] mov ecx,[ebp+10] sub ecx,ebx mov [ebp+0C],edx mov [ebp+10],ecx xor ebx,ebx mov edx,[edi+10] mov [ebp-30],edx mov edi,[edi+14] mov [ebp-34],edi test edx,edx je short M02_L28 xor ecx,ecx cmp dword ptr [edx+4],0 sete cl test ecx,ecx jne short M02_L28 mov ecx,[ebp+0C] mov edi,[ebp+10] mov [ebp-28],edi lea edi,[edx+8] mov edx,[edx+4] cmp edx,[ebp-28] jg short M02_L28 mov [ebp-18],eax add edx,edx push edx mov edx,edi call dword ptr ds:[8A2F450] test eax,eax mov eax,[ebp-18] je short M02_L28 mov ebx,[ebp-30] mov ebx,[ebx+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L10 mov esi,[ebp-10] mov ebx,[ebp-14] jmp near ptr M02_L29 M02_L28: mov edi,[ebp-34] test edi,edi mov ecx,[ebp-1C] je near ptr M02_L01 xor edx,edx cmp dword ptr [edi+4],0 sete dl test edx,edx mov [ebp-34],edi jne near ptr M02_L01 mov [ebp-14],ebx mov [ebp-1C],ecx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-34] add ebx,8 mov ecx,[ebp-34] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-24],ecx mov [ebp-38],ebx jg short M02_L30 mov [ebp-18],eax mov edi,[ebp-34] mov ebx,[ebp-24] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-38] call dword ptr ds:[8A2F450] test eax,eax mov eax,[ebp-18] mov ecx,[ebp-1C] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov ecx,[edi+4] mov edi,ecx cmp edi,[ebp+10] mov ebx,edi jae near ptr M02_L10 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov ecx,[ebp-1C] jmp near ptr M02_L01 M02_L30: mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 972 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Int32.TryParse(System.String) push ebp mov ebp,esp push eax xor eax,eax mov [ebp-4],eax test edx,edx je short M00_L01 lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0B0E3288]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-4] push ecx mov ecx,7 call dword ptr ds:[907F018]; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) test eax,eax sete al movzx eax,al M00_L00: mov esp,ebp pop ebp ret M00_L01: xor edx,edx mov [ebp-4],edx xor eax,eax jmp short M00_L00 ; Total bytes of code 65 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,3C14F20 mov edx,253 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[786122C] test ecx,ecx jne short M01_L00 mov ecx,ds:[786121C] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,8A4568C mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[90795D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[8A0B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt32IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,2C mov esi,ecx mov edi,edx cmp dword ptr [ebp+10],0 je near ptr M02_L10 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L23 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L23 M02_L00: mov ecx,1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edi+71],0 je near ptr M02_L25 cmp eax,2D je near ptr M02_L13 cmp eax,2B je near ptr M02_L24 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi lea edx,[eax-30] cmp edx,9 ja near ptr M02_L10 cmp eax,30 je near ptr M02_L11 M02_L02: lea edi,[eax-30] inc ebx xor eax,eax M02_L03: mov edx,[ebp+10] cmp ebx,edx jae near ptr M02_L05 mov [ebp-1C],ecx mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx lea edi,[edi+edi*4] lea edi,[ecx+edi*2-30] inc eax cmp eax,8 mov ecx,[ebp-1C] jl short M02_L03 cmp ebx,edx jae short M02_L05 mov [ebp-1C],ecx mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] lea ecx,[eax-30] cmp ecx,9 ja short M02_L08 inc ebx xor ecx,ecx cmp edi,0CCCCCCC setg cl mov [ebp-20],ecx lea edi,[edi+edi*4] lea edi,[eax+edi*2-30] mov eax,[ebp-1C] mov ecx,eax shr ecx,1F add ecx,7FFFFFFF cmp edi,ecx seta cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl cmp ebx,edx jb short M02_L07 M02_L04: test ecx,ecx mov ecx,eax jne near ptr M02_L16 M02_L05: imul ecx,edi mov edi,[ebp+8] mov [edi],ecx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov [ebp-1C],eax mov [ebp-20],ecx jmp short M02_L15 M02_L08: mov [ebp-2C],edx mov ecx,eax jmp near ptr M02_L17 M02_L09: mov [ebp-2C],edx jmp near ptr M02_L17 M02_L10: xor eax,eax mov edi,[ebp+8] mov [edi],eax mov eax,1 jmp short M02_L06 M02_L11: inc ebx mov edx,[ebp+10] cmp ebx,edx jae short M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je short M02_L11 mov [ebp-1C],ecx lea ecx,[eax-30] cmp ecx,9 mov [ebp-2C],edx ja short M02_L12 mov ecx,[ebp-1C] jmp near ptr M02_L02 M02_L12: mov ecx,eax jmp short M02_L17 M02_L13: mov dword ptr [ebp-1C],0FFFFFFFF inc ebx cmp ebx,[ebp+10] jae short M02_L10 jmp near ptr M02_L29 M02_L14: mov eax,1 inc ebx mov [ebp-2C],edx cmp ebx,edx mov [ebp-20],eax mov edx,[ebp-2C] jae short M02_L16 M02_L15: cmp ebx,edx jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea eax,[ecx-30] cmp eax,9 jbe short M02_L14 mov [ebp-2C],edx jmp short M02_L17 M02_L16: xor ecx,ecx mov edi,[ebp+8] mov [edi],ecx mov eax,2 jmp near ptr M02_L06 M02_L17: call dword ptr ds:[907F348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L21 test byte ptr [ebp-10],2 je near ptr M02_L10 mov esi,[ebp-2C] jmp short M02_L19 M02_L18: cmp ebx,esi jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] call dword ptr ds:[907F348]; System.Number.IsWhite(Int32) test eax,eax je short M02_L20 M02_L19: inc ebx cmp ebx,esi jl short M02_L18 M02_L20: cmp ebx,esi jae short M02_L22 M02_L21: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[907F2E8] test eax,eax mov eax,[ebp-1C] mov ecx,[ebp-20] jne near ptr M02_L04 jmp near ptr M02_L10 M02_L22: mov eax,[ebp-1C] mov ecx,[ebp-20] jmp near ptr M02_L04 M02_L23: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax mov ecx,eax call dword ptr ds:[907F348]; System.Number.IsWhite(Int32) test eax,eax jne short M02_L23 mov eax,[ebp-18] jmp near ptr M02_L00 M02_L24: inc ebx cmp ebx,[ebp+10] jae near ptr M02_L10 mov esi,[ebp-10] mov [ebp-1C],ecx jmp near ptr M02_L29 M02_L25: cmp byte ptr [edi+72],0 je short M02_L26 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L26 mov ecx,0FFFFFFFF inc ebx cmp ebx,[ebp+10] mov [ebp-1C],ecx jae near ptr M02_L10 mov esi,[ebp-10] jmp near ptr M02_L29 M02_L26: cmp ebx,[ebp+10] jbe short M02_L27 call dword ptr ds:[90E7270] int 3 M02_L27: mov [ebp-1C],ecx mov edx,[ebp+0C] lea edx,[edx+ebx*2] mov ecx,[ebp+10] sub ecx,ebx mov [ebp+0C],edx mov [ebp+10],ecx xor ebx,ebx mov edx,[edi+10] mov [ebp-30],edx mov edi,[edi+14] mov [ebp-34],edi test edx,edx je short M02_L28 xor ecx,ecx cmp dword ptr [edx+4],0 sete cl test ecx,ecx jne short M02_L28 mov ecx,[ebp+0C] mov edi,[ebp+10] mov [ebp-28],edi lea edi,[edx+8] mov edx,[edx+4] cmp edx,[ebp-28] jg short M02_L28 mov [ebp-18],eax add edx,edx push edx mov edx,edi call dword ptr ds:[8A2F450] test eax,eax mov eax,[ebp-18] je short M02_L28 mov ebx,[ebp-30] mov ebx,[ebx+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L10 mov esi,[ebp-10] mov ebx,[ebp-14] jmp near ptr M02_L29 M02_L28: mov edi,[ebp-34] test edi,edi mov ecx,[ebp-1C] je near ptr M02_L01 xor edx,edx cmp dword ptr [edi+4],0 sete dl test edx,edx mov [ebp-34],edi jne near ptr M02_L01 mov [ebp-14],ebx mov [ebp-1C],ecx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-34] add ebx,8 mov ecx,[ebp-34] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-24],ecx mov [ebp-38],ebx jg short M02_L30 mov [ebp-18],eax mov edi,[ebp-34] mov ebx,[ebp-24] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-38] call dword ptr ds:[8A2F450] test eax,eax mov eax,[ebp-18] mov ecx,[ebp-1C] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov ecx,[edi+4] mov edi,ecx cmp edi,[ebp+10] mov ebx,edi jae near ptr M02_L10 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov ecx,[ebp-1C] jmp near ptr M02_L01 M02_L30: mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 972 ``` #### System.Tests.Perf_Int32.ParseHex(value: "3039") ```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 18.52493443891027 > 12.439662674695889. IsChangePoint: Marked as a change because one of 1/26/2023 1:49:07 PM, 2/14/2023 9:29:25 PM, 3/9/2023 1:54:27 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -6.17023703736478 (T) = (0 -14.959887441416841) / Math.Sqrt((1.1276640553246438 / (40)) + (2.486114132720701 / (19))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (40) + (19) - 2, .025) and -0.19686661179995116 = (12.499210266145592 - 14.959887441416841) / 12.499210266145592 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. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Int32.ParseHex(System.String) push ebp mov ebp,esp push edi push esi push eax test edx,edx je short M00_L00 lea esi,[edx+8] mov edi,[edx+4] call dword ptr ds:[0A8558B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() xor edx,edx mov [ebp-0C],edx push edi push esi lea edx,[ebp-0C] mov ecx,203 call dword ptr ds:[876F108]; System.Number.TryParseUInt32HexNumberStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, UInt32 ByRef) mov ecx,eax test ecx,ecx jne short M00_L01 mov eax,[ebp-0C] pop ecx pop esi pop edi pop ebp ret M00_L00: mov ecx,11 call dword ptr ds:[87D7588] int 3 M00_L01: push edi push esi mov edx,9 call dword ptr ds:[876F378] int 3 ; Total bytes of code 83 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,4BF4EC8 mov edx,254 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6EA1234] test ecx,ecx jne short M01_L00 mov ecx,ds:[6EA1224] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,81356F8 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[87695D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[80FB8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseUInt32HexNumberStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, UInt32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-18],edx mov edi,[ebp+0C] test edi,edi je near ptr M02_L07 xor edx,edx mov ebx,[ebp+8] mov [ebp-1C],ebx movzx eax,word ptr [ebx] mov [ebp-10],ecx test cl,1 je short M02_L00 cmp eax,20 je near ptr M02_L15 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L15 M02_L00: xor ecx,ecx mov [ebp-14],ecx xor ecx,ecx cmp eax,100 jge short M02_L07 movzx ebx,byte ptr [eax+5D5D2F18] cmp ebx,0FF je short M02_L07 cmp eax,30 je near ptr M02_L16 cmp eax,100 jge near ptr M02_L17 M02_L01: movzx ecx,byte ptr [eax+5D5D2F18] M02_L02: mov ebx,ecx inc edx xor ecx,ecx M02_L03: cmp edx,edi jae short M02_L05 mov eax,[ebp-1C] movzx esi,word ptr [eax+edx*2] cmp esi,100 jge near ptr M02_L19 movzx eax,byte ptr [esi+5D5D2F18] M02_L04: cmp eax,0FF je short M02_L09 inc edx shl ebx,4 add ebx,eax inc ecx cmp ecx,7 jl short M02_L03 cmp edx,edi jb near ptr M02_L20 M02_L05: mov esi,[ebp-18] mov [esi],ebx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M02_L07: xor eax,eax mov esi,[ebp-18] mov [esi],eax mov eax,1 jmp short M02_L06 M02_L08: xor eax,eax mov esi,[ebp-18] mov [esi],eax mov eax,2 jmp short M02_L06 M02_L09: cmp esi,20 je short M02_L10 lea eax,[esi-9] cmp eax,4 setbe al movzx eax,al test eax,eax je short M02_L14 M02_L10: test byte ptr [ebp-10],2 je short M02_L07 mov ecx,ebx jmp short M02_L12 M02_L11: cmp edx,edi jae near ptr M02_L25 mov ebx,[ebp-1C] movzx eax,word ptr [ebx+edx*2] cmp eax,20 je short M02_L12 add eax,0FFFFFFF7 cmp eax,4 setbe al movzx eax,al test eax,eax je short M02_L13 M02_L12: inc edx cmp edx,edi jl short M02_L11 M02_L13: cmp edx,edi jae near ptr M02_L24 mov ebx,ecx M02_L14: push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,edx call dword ptr ds:[876F2E8] test eax,eax mov ecx,ebx jne near ptr M02_L24 jmp near ptr M02_L07 M02_L15: inc edx cmp edx,edi jae near ptr M02_L07 mov ebx,[ebp-1C] movzx eax,word ptr [ebx+edx*2] cmp eax,20 je short M02_L15 lea ecx,[eax-9] cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx jne short M02_L15 jmp near ptr M02_L00 M02_L16: inc edx cmp edx,edi mov ebx,ecx jae near ptr M02_L05 mov ecx,[ebp-1C] movzx eax,word ptr [ecx+edx*2] cmp eax,30 mov ecx,ebx je short M02_L16 cmp eax,100 jge short M02_L18 movzx ebx,byte ptr [eax+5D5D2F18] cmp ebx,0FF mov ebx,ecx mov esi,eax je near ptr M02_L09 cmp esi,100 mov eax,esi jl near ptr M02_L01 M02_L17: mov ecx,0FF jmp near ptr M02_L02 M02_L18: mov ebx,ecx mov esi,eax jmp near ptr M02_L09 M02_L19: mov eax,0FF jmp near ptr M02_L04 M02_L20: mov ecx,[ebp-1C] movzx eax,word ptr [ecx+edx*2] cmp eax,100 jge short M02_L23 movzx ecx,byte ptr [eax+5D5D2F18] cmp ecx,0FF mov esi,eax je near ptr M02_L09 M02_L21: inc edx cmp edx,edi jae near ptr M02_L08 mov ecx,[ebp-1C] movzx eax,word ptr [ecx+edx*2] cmp eax,100 jge short M02_L22 movzx ecx,byte ptr [eax+5D5D2F18] cmp ecx,0FF jne short M02_L21 M02_L22: mov ecx,1 mov [ebp-14],ecx mov esi,eax jmp near ptr M02_L09 M02_L23: mov esi,eax jmp near ptr M02_L09 M02_L24: cmp dword ptr [ebp-14],0 jne near ptr M02_L08 mov ebx,ecx jmp near ptr M02_L05 M02_L25: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 595 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Int32.ParseHex(System.String) push ebp mov ebp,esp push edi push esi push eax test edx,edx je short M00_L00 lea esi,[edx+8] mov edi,[edx+4] call dword ptr ds:[0B0C3288]; System.Globalization.NumberFormatInfo.get_CurrentInfo() xor edx,edx mov [ebp-0C],edx push edi push esi lea edx,[ebp-0C] mov ecx,203 call dword ptr ds:[8FEF108]; System.Number.TryParseUInt32HexNumberStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, UInt32 ByRef) mov ecx,eax test ecx,ecx jne short M00_L01 mov eax,[ebp-0C] pop ecx pop esi pop edi pop ebp ret M00_L00: mov ecx,11 call dword ptr ds:[9057588] int 3 M00_L01: push edi push esi mov edx,9 call dword ptr ds:[8FEF378] int 3 ; Total bytes of code 83 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,5474F20 mov edx,253 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[772122C] test ecx,ecx jne short M01_L00 mov ecx,ds:[772121C] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,89B568C mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8FE95D0] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[897B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseUInt32HexNumberStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, UInt32 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-18],edx mov edi,[ebp+0C] test edi,edi je near ptr M02_L07 xor edx,edx mov ebx,[ebp+8] mov [ebp-1C],ebx movzx eax,word ptr [ebx] mov [ebp-10],ecx test cl,1 je short M02_L00 cmp eax,20 je near ptr M02_L15 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L15 M02_L00: xor ecx,ecx mov [ebp-14],ecx xor ecx,ecx cmp eax,100 jge short M02_L07 movzx ebx,byte ptr [eax+6C442D50] cmp ebx,0FF je short M02_L07 cmp eax,30 je near ptr M02_L16 cmp eax,100 jge near ptr M02_L17 M02_L01: movzx ecx,byte ptr [eax+6C442D50] M02_L02: mov ebx,ecx inc edx xor ecx,ecx M02_L03: cmp edx,edi jae short M02_L05 mov eax,[ebp-1C] movzx esi,word ptr [eax+edx*2] cmp esi,100 jge near ptr M02_L19 movzx eax,byte ptr [esi+6C442D50] M02_L04: cmp eax,0FF je short M02_L09 inc edx shl ebx,4 add ebx,eax inc ecx cmp ecx,7 jl short M02_L03 cmp edx,edi jb near ptr M02_L20 M02_L05: mov esi,[ebp-18] mov [esi],ebx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M02_L07: xor eax,eax mov esi,[ebp-18] mov [esi],eax mov eax,1 jmp short M02_L06 M02_L08: xor eax,eax mov esi,[ebp-18] mov [esi],eax mov eax,2 jmp short M02_L06 M02_L09: cmp esi,20 je short M02_L10 lea eax,[esi-9] cmp eax,4 setbe al movzx eax,al test eax,eax je short M02_L14 M02_L10: test byte ptr [ebp-10],2 je short M02_L07 mov ecx,ebx jmp short M02_L12 M02_L11: cmp edx,edi jae near ptr M02_L25 mov ebx,[ebp-1C] movzx eax,word ptr [ebx+edx*2] cmp eax,20 je short M02_L12 add eax,0FFFFFFF7 cmp eax,4 setbe al movzx eax,al test eax,eax je short M02_L13 M02_L12: inc edx cmp edx,edi jl short M02_L11 M02_L13: cmp edx,edi jae near ptr M02_L24 mov ebx,ecx M02_L14: push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,edx call dword ptr ds:[8FEF2E8] test eax,eax mov ecx,ebx jne near ptr M02_L24 jmp near ptr M02_L07 M02_L15: inc edx cmp edx,edi jae near ptr M02_L07 mov ebx,[ebp-1C] movzx eax,word ptr [ebx+edx*2] cmp eax,20 je short M02_L15 lea ecx,[eax-9] cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx jne short M02_L15 jmp near ptr M02_L00 M02_L16: inc edx cmp edx,edi mov ebx,ecx jae near ptr M02_L05 mov ecx,[ebp-1C] movzx eax,word ptr [ecx+edx*2] cmp eax,30 mov ecx,ebx je short M02_L16 cmp eax,100 jge short M02_L18 movzx ebx,byte ptr [eax+6C442D50] cmp ebx,0FF mov ebx,ecx mov esi,eax je near ptr M02_L09 cmp esi,100 mov eax,esi jl near ptr M02_L01 M02_L17: mov ecx,0FF jmp near ptr M02_L02 M02_L18: mov ebx,ecx mov esi,eax jmp near ptr M02_L09 M02_L19: mov eax,0FF jmp near ptr M02_L04 M02_L20: mov ecx,[ebp-1C] movzx eax,word ptr [ecx+edx*2] cmp eax,100 jge short M02_L23 movzx ecx,byte ptr [eax+6C442D50] cmp ecx,0FF mov esi,eax je near ptr M02_L09 M02_L21: inc edx cmp edx,edi jae near ptr M02_L08 mov ecx,[ebp-1C] movzx eax,word ptr [ecx+edx*2] cmp eax,100 jge short M02_L22 movzx ecx,byte ptr [eax+6C442D50] cmp ecx,0FF jne short M02_L21 M02_L22: mov ecx,1 mov [ebp-14],ecx mov esi,eax jmp near ptr M02_L09 M02_L23: mov esi,eax jmp near ptr M02_L09 M02_L24: cmp dword ptr [ebp-14],0 jne near ptr M02_L08 mov ebx,ecx jmp near ptr M02_L05 M02_L25: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 595 ``` ### 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)