Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock #82106

Closed
performanceautofiler bot opened this issue Feb 14, 2023 · 8 comments · Fixed by #82170
Assignees
Labels
Milestone

Comments

@performanceautofiler
Copy link

No description provided.

@performanceautofiler
Copy link
Author

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
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 72.96 μs 96.87 μs 1.33 0.19 False
Count - Duration of single invocation 51.88 μs 73.89 μs 1.42 0.29 False
Count - Duration of single invocation 70.14 μs 89.80 μs 1.28 0.21 False
Count - Duration of single invocation 68.52 μs 89.48 μs 1.31 0.15 False
Count - Duration of single invocation 59.10 μs 84.34 μs 1.43 0.29 False
Count - Duration of single invocation 82.08 μs 93.32 μs 1.14 0.13 False Trace Trace
Count - Duration of single invocation 89.33 μs 108.18 μs 1.21 0.05 False
Count - Duration of single invocation 58.81 μs 82.97 μs 1.41 0.27 False
Count - Duration of single invocation 69.35 μs 90.77 μs 1.31 0.27 False
Count - Duration of single invocation 51.21 μs 74.41 μs 1.45 0.29 False
Count - Duration of single invocation 58.74 μs 73.80 μs 1.26 0.29 False Trace Trace
Count - Duration of single invocation 68.13 μs 96.62 μs 1.42 0.10 False
Count - Duration of single invocation 69.46 μs 86.91 μs 1.25 0.17 False
Count - Duration of single invocation 67.83 μs 89.35 μs 1.32 0.19 False Trace Trace
Count - Duration of single invocation 51.24 μs 78.95 μs 1.54 0.29 False
Count - Duration of single invocation 55.78 μs 72.09 μs 1.29 0.31 False
Count - Duration of single invocation 68.65 μs 90.18 μs 1.31 0.23 False
Count - Duration of single invocation 62.11 μs 82.40 μs 1.33 0.20 False Trace Trace
Count - Duration of single invocation 121.48 μs 140.84 μs 1.16 0.01 False
Count - Duration of single invocation 60.30 μs 83.76 μs 1.39 0.30 False Trace Trace
Count - Duration of single invocation 101.09 μs 122.77 μs 1.21 0.06 False Trace Trace
Count - Duration of single invocation 51.46 μs 72.95 μs 1.42 0.34 False
Count - Duration of single invocation 65.56 μs 86.83 μs 1.32 0.14 False
Count - Duration of single invocation 123.13 μs 142.18 μs 1.15 0.02 False
Count - Duration of single invocation 151.06 μs 165.95 μs 1.10 0.00 False
Count - Duration of single invocation 79.43 μs 93.93 μs 1.18 0.13 False
Count - Duration of single invocation 54.28 μs 69.37 μs 1.28 0.24 False

graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
graph
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: "aei", Options: Compiled)


Description of detection logic

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 96.87234730848859 > 74.84986740339059.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -29.715188038468774 (T) = (0 -92966.27483715476) / Math.Sqrt((3726009.8366956213 / (38)) + (9028173.226995554 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.29518831682286367 = (71778.19134842404 - 92966.27483715476) / 71778.19134842404 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: Compiled)

```log

Description of detection logic

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.8902748115578 > 54.80040134753138.
IsChangePoint: Marked as a change because one of 1/14/2023 12:48:25 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -24.996024178036613 (T) = (0 -73957.08531120537) / Math.Sqrt((2831346.4608696853 / (38)) + (14299883.644506386 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.40386580995239163 = (52681.021780645424 - 73957.08531120537) / 52681.021780645424 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: NonBacktracking)

```log

Description of detection logic

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 89.80267971396313 > 72.5168898543433.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -29.681221821161667 (T) = (0 -90319.82075390623) / Math.Sqrt((3818922.377922908 / (38)) + (9538050.593953976 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3160543274902402 = (68629.24946734468 - 90319.82075390623) / 68629.24946734468 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: "aei", Options: None)

```log

Description of detection logic

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 89.47601001381214 > 73.15751461416733.
IsChangePoint: Marked as a change because one of 1/14/2023 6:51:43 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -26.79399905269768 (T) = (0 -93351.55408697923) / Math.Sqrt((2400464.1782486243 / (37)) + (14773528.327348892 / (22))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (22) - 2, .025) and -0.3267967157655676 = (70358.5959911839 - 93351.55408697923) / 70358.5959911839 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: Compiled)

```log

Description of detection logic

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.34360215053762 > 61.51613529295729.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -23.650370116515795 (T) = (0 -78645.89139947464) / Math.Sqrt((3619955.823677836 / (38)) + (12504911.829010138 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3244745684585573 = (59378.93657784903 - 78645.89139947464) / 59378.93657784903 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: Compiled)

```log

Description of detection logic

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 93.31994579081633 > 81.9830681573276.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -26.514475194002088 (T) = (0 -97219.11526255272) / Math.Sqrt((3170599.647558037 / (39)) + (8450145.578825776 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.22858479709378646 = (79130.97695211941 - 97219.11526255272) / 79130.97695211941 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: "The", Options: Compiled)

```log

Description of detection logic

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 108.18302153716216 > 96.49548170066119.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -25.227228664297105 (T) = (0 -111644.39327268144) / Math.Sqrt((2612514.1221085996 / (39)) + (12416396.033317633 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.2188365036523151 = (91599.15455283171 - 111644.39327268144) / 91599.15455283171 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: Compiled)

```log

Description of detection logic

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 82.96645210597826 > 62.03522808768399.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -23.13804754870657 (T) = (0 -80273.9446024583) / Math.Sqrt((2904307.1746538472 / (38)) + (15606598.579011114 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3432074752907061 = (59762.87809527331 - 80273.9446024583) / 59762.87809527331 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

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 90.76799976915974 > 70.24720149811601.
IsChangePoint: Marked as a change because one of 1/12/2023 10:41:19 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -24.303028145149103 (T) = (0 -86955.69842647709) / Math.Sqrt((4282328.199810896 / (38)) + (13351879.706024881 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3107646158205867 = (66339.67485614466 - 86955.69842647709) / 66339.67485614466 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: "zqj", Options: NonBacktracking)

```log

Description of detection logic

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 74.40826790201004 > 53.80267474953557.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -29.275314135714257 (T) = (0 -73420.38323383353) / Math.Sqrt((3942483.8048246284 / (39)) + (8698228.073306918 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.3907232075482176 = (52792.951778859264 - 73420.38323383353) / 52792.951778859264 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: Compiled)

```log

Description of detection logic

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.80345174921383 > 63.27891709725088.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -21.718506833244003 (T) = (0 -80072.57396467013) / Math.Sqrt((3240437.2389765694 / (38)) + (16892603.093062587 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.33426755810716025 = (60012.381683223975 - 80072.57396467013) / 60012.381683223975 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: "aei", Options: NonBacktracking)

```log

Description of detection logic

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 96.61978383458647 > 73.29775620017848.
IsChangePoint: Marked as a change because one of 1/10/2023 12:53:48 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -28.34011834195347 (T) = (0 -92523.32114675567) / Math.Sqrt((2748605.660371803 / (38)) + (11768623.182369266 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.313531846762497 = (70438.58234179916 - 92523.32114675567) / 70438.58234179916 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

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.90704861111111 > 73.59820588466047.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -26.04074125480938 (T) = (0 -91140.26324677527) / Math.Sqrt((3380970.1742429114 / (39)) + (10696920.42077596 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.2759431033884911 = (71429.72363323747 - 91140.26324677527) / 71429.72363323747 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: None)

```log

Description of detection logic

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 89.35279761904764 > 68.45050879518516.
IsChangePoint: Marked as a change because one of 1/12/2023 10:41:19 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -21.29238000731319 (T) = (0 -84098.42863317454) / Math.Sqrt((3370521.224227761 / (38)) + (16600230.83948532 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.30292481876134086 = (64545.8797178527 - 84098.42863317454) / 64545.8797178527 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

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 78.94970686767171 > 53.599430958081314.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -24.629477826649136 (T) = (0 -74274.84806288814) / Math.Sqrt((3150276.6754477974 / (38)) + (16272936.844163468 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.43009960938588326 = (51936.83543119309 - 74274.84806288814) / 51936.83543119309 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: "zqj", Options: None)

```log

Description of detection logic

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 72.08705018939393 > 54.65553180314083.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -26.018970595370913 (T) = (0 -74230.57883138479) / Math.Sqrt((2770688.513077119 / (39)) + (13049840.258589625 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.39991049893187275 = (53025.23189019761 - 74230.57883138479) / 53025.23189019761 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

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 90.18297887080014 > 72.01959110795987.
IsChangePoint: Marked as a change because one of 1/14/2023 12:48:25 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -25.225242455508322 (T) = (0 -90278.95357813263) / Math.Sqrt((2691780.1318312697 / (39)) + (12474263.495904777 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.28673220971457086 = (70161.41579152568 - 90278.95357813263) / 70161.41579152568 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

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 82.40043987771739 > 67.51784533421412.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -27.775745171215643 (T) = (0 -83599.01609992047) / Math.Sqrt((2029775.8832603837 / (38)) + (10380588.697224177 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3171714290254592 = (63468.59205849401 - 83599.01609992047) / 63468.59205849401 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: NonBacktracking)

```log

Description of detection logic

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 140.84255516840884 > 127.68382273370914.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -27.977096350291742 (T) = (0 -139238.90597179494) / Math.Sqrt((3205794.0190959424 / (39)) + (8412525.310379166 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.1586872184796973 = (120169.53648154419 - 139238.90597179494) / 120169.53648154419 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: Compiled)

```log

Description of detection logic

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.76010472972973 > 62.68559026414545.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -22.218807045612795 (T) = (0 -79533.77589780335) / Math.Sqrt((3801853.2835764466 / (38)) + (14578512.440174755 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.32271061153149344 = (60129.38522184803 - 79533.77589780335) / 60129.38522184803 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

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 122.76928430821145 > 106.15924553282447.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -22.350162920813943 (T) = (0 -119342.85779787575) / Math.Sqrt((3029697.8038085015 / (38)) + (15522930.181810223 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.19898503635194284 = (99536.56983158927 - 119342.85779787575) / 99536.56983158927 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: "zqj", Options: Compiled)

```log

Description of detection logic

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 72.95059644670052 > 55.308655518740075.
IsChangePoint: Marked as a change because one of 1/12/2023 10:41:19 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -26.646979457615753 (T) = (0 -74832.51660128903) / Math.Sqrt((3670651.929292008 / (38)) + (11482651.56555284 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3889904876635924 = (53875.47090201034 - 74832.51660128903) / 53875.47090201034 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

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.83106104651162 > 69.3207981088049.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -26.72663679184223 (T) = (0 -87241.87841358407) / Math.Sqrt((2575267.7986378805 / (38)) + (11845136.130846854 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3132295405695537 = (66433.07641080543 - 87241.87841358407) / 66433.07641080543 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: "The", Options: None)

```log

Description of detection logic

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 142.17879013761467 > 127.53717830246363.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -28.8093523478058 (T) = (0 -141969.55735535818) / Math.Sqrt((2619573.000645219 / (38)) + (9118101.855415652 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.16426336434994449 = (121939.38390788887 - 141969.55735535818) / 121939.38390788887 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: "The", Options: NonBacktracking)

```log

Description of detection logic

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 165.95311971372803 > 156.8142167592701.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -28.953951329090405 (T) = (0 -165900.29441368274) / Math.Sqrt((4036419.635635368 / (38)) + (6014843.26545575 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.12048820596660573 = (148060.7234688083 - 165900.29441368274) / 148060.7234688083 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: NonBacktracking)

```log

Description of detection logic

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 93.93160403006556 > 81.4726171944167.
IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -27.686183411390154 (T) = (0 -98357.01701212334) / Math.Sqrt((3396679.6380397375 / (38)) + (10999860.416689094 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.2756734509918181 = (77102.03338922837 - 98357.01701212334) / 77102.03338922837 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: NonBacktracking)

```log

Description of detection logic

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 69.37011931454197 > 56.362613766405254.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -27.48386141052278 (T) = (0 -73824.89455245597) / Math.Sqrt((2728034.8353250944 / (38)) + (11403782.66025736 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.40054463773806426 = (52711.56131923516 - 73824.89455245597) / 52711.56131923516 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
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
Diff Diff

Regressions in System.Text.Tests.Perf_StringBuilder

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Append_ValueTypes_Interpolated - Duration of single invocation 3.14 μs 4.03 μs 1.28 0.01 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.Text.Tests.Perf_StringBuilder*'

Payloads

Baseline
Compare

Histogram

System.Text.Tests.Perf_StringBuilder.Append_ValueTypes_Interpolated


Description of detection logic

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 4.03325494363334 > 3.2944926349644463.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -100.83718417517476 (T) = (0 -4060.960213217877) / Math.Sqrt((2673.1370497540097 / (39)) + (460.1784245018673 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.3069460826685764 = (3107.2132715115845 - 4060.960213217877) / 3107.2132715115845 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.Text.Tests.Perf_StringBuilder.Append_ValueTypes_Interpolated()
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,98
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFFA0
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+90],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0A0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0B0],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+90],rax
       mov       rcx,offset MT_System.Text.StringBuilder
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       dword ptr [rsi+20],7FFFFFFF
       mov       rcx,offset MT_System.Char[]
       mov       edx,10
       call      CORINFO_HELP_NEWARR_1_VC
       lea       rcx,[rsi+8]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rsp+88]
       mov       rdx,8D661571745C000
       mov       r8,8A94AF400
       call      qword ptr [7FFC4BB111F8]; System.DateTimeOffset..ctor(System.DateTime, System.TimeSpan)
       mov       dword ptr [rsp+78],1
       mov       word ptr [rsp+7C],2
       mov       word ptr [rsp+7E],3
       mov       byte ptr [rsp+80],4
       mov       byte ptr [rsp+81],5
       mov       byte ptr [rsp+82],6
       mov       byte ptr [rsp+83],7
       mov       byte ptr [rsp+84],8
       mov       byte ptr [rsp+85],9
       mov       byte ptr [rsp+86],0A
       mov       byte ptr [rsp+87],0B
       mov       edi,1
M00_L01:
       xor       ecx,ecx
       mov       [rsp+50],rcx
       mov       rcx,18B85001E18
       mov       rcx,[rcx]
       mov       edx,100
       call      qword ptr [7FFC4BC69B30]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Char, System.Private.CoreLib]].Rent(Int32)
       mov       [rsp+58],rax
       test      rax,rax
       je        near ptr M00_L12
       lea       rbx,[rax+10]
       mov       ebp,[rax+8]
M00_L02:
       mov       [rsp+68],rbx
       mov       [rsp+70],ebp
       xor       edx,edx
       mov       [rsp+60],edx
       mov       byte ptr [rsp+64],0
       vmovups   xmm0,[rsp+78]
       vmovups   [rsp+40],xmm0
       lea       rdx,[rsp+40]
       lea       rcx,[rsp+50]
       call      qword ptr [7FFC4BE59D38]; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.Guid, System.Private.CoreLib]](System.Guid)
       mov       ecx,[rsp+60]
       mov       rdx,[rsp+68]
       mov       eax,[rsp+70]
       cmp       ecx,eax
       jae       short M00_L03
       mov       eax,ecx
       mov       word ptr [rdx+rax*2],20
       inc       ecx
       mov       [rsp+60],ecx
       jmp       short M00_L04
M00_L03:
       lea       rcx,[rsp+50]
       mov       rdx,1CC197767C8
       call      qword ptr [7FFC4BB15768]
M00_L04:
       lea       rcx,[rsp+50]
       mov       rdx,8D661571745C000
       call      qword ptr [7FFC4BE59D50]; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.DateTime, System.Private.CoreLib]](System.DateTime)
       mov       ecx,[rsp+60]
       mov       rdx,[rsp+68]
       mov       eax,[rsp+70]
       cmp       ecx,eax
       jae       short M00_L05
       mov       eax,ecx
       mov       word ptr [rdx+rax*2],20
       inc       ecx
       mov       [rsp+60],ecx
       jmp       short M00_L06
M00_L05:
       lea       rcx,[rsp+50]
       mov       rdx,1CC197767C8
       call      qword ptr [7FFC4BB15768]
M00_L06:
       lea       rcx,[rsp+50]
       mov       rdx,8A94AF400
       call      qword ptr [7FFC4BE59D68]; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.TimeSpan, System.Private.CoreLib]](System.TimeSpan)
       mov       ecx,[rsp+60]
       mov       rdx,[rsp+68]
       mov       eax,[rsp+70]
       cmp       ecx,eax
       jae       short M00_L07
       mov       eax,ecx
       mov       word ptr [rdx+rax*2],20
       inc       ecx
       mov       [rsp+60],ecx
       jmp       short M00_L08
M00_L07:
       lea       rcx,[rsp+50]
       mov       rdx,1CC197767C8
       call      qword ptr [7FFC4BB15768]
M00_L08:
       vmovups   xmm0,[rsp+88]
       vmovups   [rsp+30],xmm0
       lea       rdx,[rsp+30]
       lea       rcx,[rsp+50]
       call      qword ptr [7FFC4BE59D80]; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.DateTimeOffset, System.Private.CoreLib]](System.DateTimeOffset)
       mov       ecx,[rsp+60]
       cmp       ecx,[rsp+70]
       ja        near ptr M00_L11
       mov       rax,[rsp+68]
       mov       [rsp+20],rax
       mov       [rsp+28],ecx
       lea       rcx,[rsp+20]
       call      System.String..ctor(System.ReadOnlySpan`1<Char>)
       mov       rbx,rax
       mov       rdx,[rsp+58]
       xor       ecx,ecx
       vxorps    ymm0,ymm0,ymm0
       vmovdqu   ymmword ptr [rsp+50],ymm0
       mov       [rsp+70],rcx
       test      rdx,rdx
       je        short M00_L09
       mov       rcx,18B85001E18
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FFC4BC69B38]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Char, System.Private.CoreLib]].Return(Char[], Boolean)
M00_L09:
       mov       rdx,rbx
       test      rdx,rdx
       je        short M00_L10
       mov       r8d,[rdx+8]
       add       rdx,0C
       mov       rcx,rsi
       call      qword ptr [7FFC4BA6DD08]; System.Text.StringBuilder.Append(Char ByRef, Int32)
M00_L10:
       inc       edi
       cmp       edi,4
       jle       near ptr M00_L01
       mov       rax,rsi
       add       rsp,98
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M00_L11:
       call      qword ptr [7FFC4BC2D4E0]
       int       3
M00_L12:
       xor       ebx,ebx
       xor       ebp,ebp
       jmp       near ptr M00_L02
; Total bytes of code 749
; System.DateTimeOffset..ctor(System.DateTime, System.TimeSpan)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       rdi,rcx
       mov       rbx,rdx
       mov       rsi,r8
       mov       rax,0C000000000000000
       and       rax,rbx
       mov       rcx,rax
       test      rcx,rcx
       je        short M01_L00
       mov       rdx,4000000000000000
       cmp       rcx,rdx
       je        short M01_L00
       mov       rcx,rbx
       mov       edx,2
       call      qword ptr [7FFC4BE95138]
       mov       rdx,rax
       mov       rcx,rsi
       call      qword ptr [7FFC4BB13828]
       test      eax,eax
       jne       near ptr M01_L07
       jmp       short M01_L01
M01_L00:
       test      rax,rax
       jne       near ptr M01_L02
M01_L01:
       mov       rcx,rsi
       mov       rdx,1CA213D840BAF7D5
       mov       rax,rdx
       imul      rcx
       mov       rax,rdx
       shr       rax,3F
       sar       rdx,1A
       add       rax,rdx
       imul      rdx,rax,23C34600
       sub       rcx,rdx
       jne       near ptr M01_L03
       mov       rcx,0FFFFFF8AA7425000
       cmp       rsi,rcx
       jl        near ptr M01_L04
       mov       rcx,7558BDB000
       cmp       rsi,rcx
       jg        near ptr M01_L04
       mov       [rdi],ax
       mov       rcx,3FFFFFFFFFFFFFFF
       and       rcx,rbx
       sub       rcx,rsi
       js        near ptr M01_L05
       mov       rax,2BCA2875F4373FFF
       cmp       rcx,rax
       jg        near ptr M01_L05
       mov       rax,2BCA2875F4373FFF
       cmp       rcx,rax
       ja        near ptr M01_L06
       mov       [rdi+8],rcx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M01_L02:
       mov       rcx,4000000000000000
       cmp       rax,rcx
       jne       near ptr M01_L01
       mov       rcx,rsi
       xor       edx,edx
       call      qword ptr [7FFC4BB13828]
       test      eax,eax
       je        near ptr M01_L01
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFC4B9B7EE8]
       mov       rdi,rax
       mov       ecx,1C7B
       mov       rdx,7FFC4B724000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFC4B8EDBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFC4B9B7ED0]
       mov       rdi,rax
       mov       ecx,1C7B
       mov       rdx,7FFC4B724000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFC4B8EDBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L04:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C7B
       mov       rdx,7FFC4B724000
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       call      qword ptr [7FFC4B9B7EB8]
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFC4B9D9030]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L05:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C7B
       mov       rdx,7FFC4B724000
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       call      qword ptr [7FFC4B9B9288]
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFC4B9D9030]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L06:
       call      qword ptr [7FFC4BA8D108]
       int       3
M01_L07:
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFC4B9B7E88]
       mov       rdi,rax
       mov       ecx,1C7B
       mov       rdx,7FFC4B724000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFC4B8EDBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 655
; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Char, System.Private.CoreLib]].Rent(Int32)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,38
       mov       rdi,rcx
       mov       esi,edx
       mov       rcx,18B85000648
       mov       rbx,[rcx]
       lea       ecx,[rsi-1]
       or        ecx,0F
       xor       ebp,ebp
       lzcnt     ebp,ecx
       xor       ebp,1F
       add       ebp,0FFFFFFFD
       mov       rcx,7FFC4B844E68
       mov       edx,1E
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_DYNAMICCLASS
       mov       rcx,[rax]
       test      rcx,rcx
       je        short M02_L01
       mov       eax,[rcx+8]
       cmp       eax,ebp
       jbe       short M02_L01
       mov       eax,ebp
       shl       rax,4
       mov       r14,[rcx+rax+10]
       test      r14,r14
       je        short M02_L01
       xor       edx,edx
       mov       [rcx+rax+10],rdx
       cmp       byte ptr [rbx+9D],0
       je        short M02_L00
       mov       rcx,r14
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       esi,eax
       mov       r15d,[r14+8]
       cmp       [rdi],dil
       mov       rcx,rdi
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       r9d,eax
       mov       [rsp+20],ebp
       mov       edx,esi
       mov       r8d,r15d
       mov       rcx,rbx
       call      qword ptr [7FFC4BC5B348]; System.Buffers.ArrayPoolEventSource.BufferRented(Int32, Int32, Int32, Int32)
M02_L00:
       mov       rax,r14
       add       rsp,38
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M02_L01:
       mov       rcx,[rdi+10]
       mov       edx,[rcx+8]
       cmp       edx,ebp
       jbe       near ptr M02_L16
       mov       edx,ebp
       mov       rcx,[rcx+rdx*8+10]
       test      rcx,rcx
       je        near ptr M02_L15
       mov       r14,[rcx+8]
       mov       rcx,7FFC4B844E68
       mov       edx,2FE
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       cmp       byte ptr [7FFC4B845910],0
       jne       near ptr M02_L22
       mov       rcx,7FFC4B844E68
       mov       edx,34F
       call      CORINFO_HELP_GETSHARED_NONGCTHREADSTATIC_BASE
       mov       edx,[rax+9E4]
       lea       ecx,[rdx-1]
       mov       [rax+9E4],ecx
       movzx     eax,dx
       test      eax,eax
       je        near ptr M02_L11
       mov       r15d,edx
       sar       r15d,10
M02_L02:
       mov       rcx,7FFC4B844E68
       mov       edx,1F
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       eax,r15d
       xor       edx,edx
       div       dword ptr [7FFC4BE68A48]
       mov       esi,edx
       xor       r15d,r15d
       mov       r12d,[r14+8]
       test      r12d,r12d
       jle       short M02_L06
M02_L03:
       cmp       esi,r12d
       jae       near ptr M02_L24
       mov       ecx,esi
       mov       r13,[r14+rcx*8+10]
       cmp       [r13],r13b
       xor       eax,eax
       mov       [rsp+30],rax
       mov       rcx,r13
       call      System.Threading.Monitor.Enter(System.Object)
       mov       rcx,[r13+8]
       mov       eax,[r13+10]
       dec       eax
       cmp       [rcx+8],eax
       ja        short M02_L08
M02_L04:
       mov       rcx,r13
       call      System.Threading.Monitor.Exit(System.Object)
       mov       r13,[rsp+30]
       test      r13,r13
       jne       near ptr M02_L12
       inc       esi
       cmp       r12d,esi
       je        short M02_L07
M02_L05:
       inc       r15d
       cmp       r12d,r15d
       jg        short M02_L03
M02_L06:
       xor       r14d,r14d
       jmp       near ptr M02_L13
M02_L07:
       xor       esi,esi
       jmp       short M02_L05
M02_L08:
       mov       edx,eax
       mov       rdx,[rcx+rdx*8+10]
       mov       [rsp+30],rdx
       mov       r8d,eax
       xor       r9d,r9d
       mov       [rcx+r8*8+10],r9
       mov       [r13+10],eax
       jmp       short M02_L04
M02_L09:
       cmp       esi,400
       jl        near ptr M02_L18
       mov       rcx,1CC197748F8
       mov       rcx,[rcx]
       mov       edx,esi
       mov       r8d,10
       call      System.GC.AllocateNewArray(IntPtr, Int32, GC_ALLOC_FLAGS)
       mov       r14,rax
M02_L10:
       cmp       byte ptr [rbx+9D],0
       je        near ptr M02_L21
       cmp       [r14],r14b
       mov       rcx,r14
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       esi,eax
       mov       r15d,[r14+8]
       mov       rcx,rdi
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       r9d,eax
       mov       dword ptr [rsp+20],0FFFFFFFF
       mov       edx,esi
       mov       r8d,r15d
       mov       rcx,rbx
       call      qword ptr [7FFC4BC5B348]; System.Buffers.ArrayPoolEventSource.BufferRented(Int32, Int32, Int32, Int32)
       mov       r15d,[r14+8]
       mov       rcx,rdi
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       rcx,rbx
       mov       edx,esi
       mov       r8d,r15d
       mov       r9d,eax
       mov       rax,[rdi+10]
       cmp       [rax+8],ebp
       jle       near ptr M02_L19
       mov       eax,2
       jmp       near ptr M02_L20
M02_L11:
       call      qword ptr [7FFC4BE95F90]
       mov       r15d,eax
       jmp       near ptr M02_L02
M02_L12:
       mov       r14,r13
M02_L13:
       test      r14,r14
       je        short M02_L15
       cmp       byte ptr [rbx+9D],0
       je        short M02_L14
       mov       rcx,r14
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       esi,eax
       mov       r15d,[r14+8]
       mov       rcx,rdi
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       r9d,eax
       mov       [rsp+20],ebp
       mov       edx,esi
       mov       r8d,r15d
       mov       rcx,rbx
       call      qword ptr [7FFC4BC5B348]; System.Buffers.ArrayPoolEventSource.BufferRented(Int32, Int32, Int32, Int32)
M02_L14:
       mov       rax,r14
       add       rsp,38
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M02_L15:
       mov       ecx,10
       shlx      esi,ecx,ebp
       jmp       near ptr M02_L09
M02_L16:
       test      esi,esi
       jne       short M02_L17
       mov       rcx,7FFC4B844E68
       mov       edx,31
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rax,18B85001EA8
       mov       rax,[rax]
       add       rsp,38
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M02_L17:
       test      esi,esi
       jl        short M02_L23
       jmp       near ptr M02_L09
M02_L18:
       movsxd    rdx,esi
       mov       rcx,offset MT_System.Char[]
       call      CORINFO_HELP_NEWARR_1_VC
       mov       r14,rax
       jmp       near ptr M02_L10
M02_L19:
       mov       eax,1
M02_L20:
       mov       dword ptr [rsp+20],0FFFFFFFF
       mov       [rsp+28],eax
       call      qword ptr [7FFC4BC5B360]
M02_L21:
       mov       rax,r14
       add       rsp,38
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M02_L22:
       call      qword ptr [7FFC4B8E9CC0]
       mov       r15d,eax
       jmp       near ptr M02_L02
M02_L23:
       mov       ecx,164DC
       mov       rdx,7FFC4B724000
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       mov       edx,esi
       call      qword ptr [7FFC4BA39420]
       int       3
M02_L24:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 922
; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.Guid, System.Private.CoreLib]](System.Guid)
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,58
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       rdi,rcx
       mov       rsi,rdx
       cmp       byte ptr [rdi+14],0
       jne       short M03_L02
M03_L00:
       vmovups   xmm0,[rsi]
       vmovups   [rsp+40],xmm0
       lea       rbx,[rdi+18]
       mov       ebp,[rdi+10]
       cmp       ebp,[rbx+8]
       jbe       short M03_L01
       call      qword ptr [7FFC4BC2D4E0]
       int       3
M03_L01:
       mov       rdx,[rbx]
       mov       r9d,ebp
       lea       rdx,[rdx+r9*2]
       mov       r9d,[rbx+8]
       sub       r9d,ebp
       xor       r8d,r8d
       mov       [rsp+30],rdx
       mov       [rsp+38],r9d
       mov       [rsp+20],r8
       xor       edx,edx
       mov       [rsp+28],edx
       lea       rdx,[rsp+30]
       lea       r9,[rsp+20]
       lea       r8,[rsp+50]
       lea       rcx,[rsp+40]
       call      qword ptr [7FFC4B9D3BA0]; System.Guid.TryFormat(System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>)
       test      eax,eax
       je        short M03_L03
       mov       eax,[rsp+50]
       add       [rdi+10],eax
       add       rsp,58
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M03_L02:
       mov       rcx,rdi
       mov       rdx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFC4BE971F8]
       nop
       add       rsp,58
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M03_L03:
       mov       rcx,rdi
       call      qword ptr [7FFC4BB157B0]
       jmp       near ptr M03_L00
; Total bytes of code 194
; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.DateTime, System.Private.CoreLib]](System.DateTime)
       push      rdi
       push      rsi
       sub       rsp,58
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       vmovdqa   xmmword ptr [rsp+40],xmm4
       mov       rsi,rcx
       mov       rdi,rdx
       cmp       byte ptr [rsi+14],0
       je        short M04_L01
       mov       rcx,rsi
       mov       rdx,rdi
       xor       r8d,r8d
       call      qword ptr [7FFC4BE59DC8]
       nop
       add       rsp,58
       pop       rsi
       pop       rdi
       ret
M04_L00:
       mov       rcx,rsi
       call      qword ptr [7FFC4BB157B0]
M04_L01:
       lea       rcx,[rsi+18]
       mov       edx,[rsi+10]
       mov       r9d,[rcx+8]
       cmp       edx,r9d
       ja        short M04_L02
       mov       rcx,[rcx]
       mov       r8d,edx
       lea       rcx,[rcx+r8*2]
       sub       r9d,edx
       mov       rdx,[rsi]
       xor       r8d,r8d
       mov       [rsp+40],rcx
       mov       [rsp+48],r9d
       mov       [rsp+30],r8
       xor       ecx,ecx
       mov       [rsp+38],ecx
       mov       [rsp+20],rdx
       mov       rcx,8000000000000000
       mov       [rsp+28],rcx
       mov       rcx,rdi
       lea       rdx,[rsp+40]
       lea       r9,[rsp+30]
       lea       r8,[rsp+50]
       call      qword ptr [7FFC4BE5B1C8]; System.DateTimeFormat.TryFormat(System.DateTime, System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>, System.IFormatProvider, System.TimeSpan)
       test      eax,eax
       je        short M04_L00
       mov       eax,[rsp+50]
       add       [rsi+10],eax
       add       rsp,58
       pop       rsi
       pop       rdi
       ret
M04_L02:
       call      qword ptr [7FFC4BC2D4E0]
       int       3
; Total bytes of code 191
; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.TimeSpan, System.Private.CoreLib]](System.TimeSpan)
       push      rdi
       push      rsi
       sub       rsp,58
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       vmovdqa   xmmword ptr [rsp+40],xmm4
       mov       rsi,rcx
       mov       rdi,rdx
       cmp       byte ptr [rsi+14],0
       je        short M05_L01
       mov       rcx,rsi
       mov       rdx,rdi
       xor       r8d,r8d
       call      qword ptr [7FFC4BE5D0D8]
       nop
       add       rsp,58
       pop       rsi
       pop       rdi
       ret
M05_L00:
       mov       rcx,rsi
       call      qword ptr [7FFC4BB157B0]
M05_L01:
       lea       rcx,[rsi+18]
       mov       edx,[rsi+10]
       mov       r9d,[rcx+8]
       cmp       edx,r9d
       ja        short M05_L02
       mov       rcx,[rcx]
       mov       r8d,edx
       lea       rcx,[rcx+r8*2]
       sub       r9d,edx
       xor       edx,edx
       mov       [rsp+40],rcx
       mov       [rsp+48],r9d
       mov       [rsp+30],rdx
       xor       ecx,ecx
       mov       [rsp+38],ecx
       mov       rcx,[rsi]
       mov       [rsp+20],rcx
       mov       rcx,rdi
       lea       rdx,[rsp+40]
       lea       r9,[rsp+30]
       lea       r8,[rsp+50]
       call      qword ptr [7FFC4BE5D1C8]; System.Globalization.TimeSpanFormat.TryFormat(System.TimeSpan, System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>, System.IFormatProvider)
       test      eax,eax
       je        short M05_L00
       mov       eax,[rsp+50]
       add       [rsi+10],eax
       add       rsp,58
       pop       rsi
       pop       rdi
       ret
M05_L02:
       call      qword ptr [7FFC4BC2D4E0]
       int       3
; Total bytes of code 175
; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted[[System.DateTimeOffset, System.Private.CoreLib]](System.DateTimeOffset)
       push      r15
       push      r14
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,70
       vzeroupper
       xor       eax,eax
       mov       [rsp+38],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+40],xmm4
       mov       [rsp+50],rax
       mov       rsi,rcx
       mov       rdi,rdx
       cmp       byte ptr [rsi+14],0
       je        short M06_L01
       mov       rcx,rsi
       mov       rdx,rdi
       xor       r8d,r8d
       call      qword ptr [7FFC4BE5D2A0]
       nop
       add       rsp,70
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r14
       pop       r15
       ret
M06_L00:
       mov       rcx,rsi
       call      qword ptr [7FFC4BB157B0]
M06_L01:
       vmovups   xmm0,[rdi]
       vmovups   [rsp+58],xmm0
       lea       rcx,[rsi+18]
       mov       edx,[rsi+10]
       mov       ebx,[rcx+8]
       cmp       edx,ebx
       ja        near ptr M06_L02
       mov       rcx,[rcx]
       mov       eax,edx
       lea       rbp,[rcx+rax*2]
       sub       ebx,edx
       xor       r14d,r14d
       mov       r15,[rsi]
       mov       rcx,[rsp+60]
       movsx     rdx,word ptr [rsp+58]
       movsxd    rdx,edx
       imul      rdx,3C
       mov       rax,0D6BF94D5E5
       cmp       rdx,rax
       jg        near ptr M06_L04
       mov       rax,0FFFFFF29406B2A1B
       cmp       rdx,rax
       jl        near ptr M06_L04
       imul      r12,rdx,989680
       mov       rdx,r12
       call      qword ptr [7FFC4BA8DCC0]; System.DateTime.op_Addition(System.DateTime, System.TimeSpan)
       mov       rcx,3FFFFFFFFFFFFFFF
       and       rcx,rax
       mov       rdx,2BCA2875F4373FFF
       cmp       rcx,rdx
       ja        short M06_L03
       mov       [rsp+48],rbp
       mov       [rsp+50],ebx
       mov       [rsp+38],r14
       xor       edx,edx
       mov       [rsp+40],edx
       mov       [rsp+20],r15
       mov       [rsp+28],r12
       lea       rdx,[rsp+48]
       lea       r9,[rsp+38]
       lea       r8,[rsp+68]
       call      qword ptr [7FFC4BE5B1C8]; System.DateTimeFormat.TryFormat(System.DateTime, System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>, System.IFormatProvider, System.TimeSpan)
       test      eax,eax
       je        near ptr M06_L00
       mov       eax,[rsp+68]
       add       [rsi+10],eax
       add       rsp,70
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r14
       pop       r15
       ret
M06_L02:
       call      qword ptr [7FFC4BC2D4E0]
       int       3
M06_L03:
       call      qword ptr [7FFC4BA8D108]
       int       3
M06_L04:
       call      qword ptr [7FFC4BC2D6C0]
       int       3
; Total bytes of code 338
; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Char, System.Private.CoreLib]].Return(Char[], Boolean)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,58
       mov       rbx,rcx
       mov       rsi,rdx
       mov       edi,r8d
       test      rsi,rsi
       je        near ptr M07_L22
       mov       ebp,[rsi+8]
       lea       ecx,[rbp-1]
       or        ecx,0F
       xor       r14d,r14d
       lzcnt     r14d,ecx
       xor       r14d,1F
       add       r14d,0FFFFFFFD
       mov       rcx,7FFC4B844E68
       mov       edx,1E
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_DYNAMICCLASS
       mov       r15,[rax]
       test      r15,r15
       je        near ptr M07_L13
M07_L00:
       xor       r12d,r12d
       mov       r13d,1
       mov       edx,[r15+8]
       cmp       edx,r14d
       jbe       short M07_L02
       mov       r12d,1
       test      dil,dil
       jne       near ptr M07_L23
M07_L01:
       mov       edx,10
       shlx      edx,edx,r14d
       cmp       ebp,edx
       jne       near ptr M07_L15
       mov       edx,r14d
       shl       rdx,4
       lea       r15,[r15+rdx+10]
       mov       rdi,[r15]
       mov       rcx,r15
       mov       rdx,rsi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       ecx,ecx
       mov       [r15+8],ecx
       test      rdi,rdi
       jne       short M07_L04
M07_L02:
       mov       rcx,18B85000648
       mov       rdi,[rcx]
       cmp       byte ptr [rdi+9D],0
       jne       near ptr M07_L17
M07_L03:
       add       rsp,58
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M07_L04:
       mov       rcx,[rbx+10]
       cmp       r14d,[rcx+8]
       jae       near ptr M07_L27
       mov       edx,r14d
       mov       rax,[rcx+rdx*8+10]
       test      rax,rax
       je        near ptr M07_L14
M07_L05:
       mov       r15,[rax+8]
       mov       rcx,7FFC4B844E68
       mov       edx,2FE
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       cmp       byte ptr [7FFC4B845910],0
       jne       near ptr M07_L16
       mov       rcx,7FFC4B844E68
       mov       edx,34F
       call      CORINFO_HELP_GETSHARED_NONGCTHREADSTATIC_BASE
       mov       edx,[rax+9E4]
       lea       ecx,[rdx-1]
       mov       [rax+9E4],ecx
       movzx     eax,dx
       test      eax,eax
       je        near ptr M07_L12
       mov       r13d,edx
       sar       r13d,10
M07_L06:
       mov       rcx,7FFC4B844E68
       mov       edx,1F
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       eax,r13d
       xor       edx,edx
       div       dword ptr [7FFC4BE68A48]
       mov       r13d,edx
       xor       eax,eax
       mov       [rsp+50],eax
       mov       edx,[r15+8]
       mov       [rsp+44],edx
       test      edx,edx
       jle       near ptr M07_L26
M07_L07:
       cmp       r13d,edx
       jae       near ptr M07_L27
       mov       ecx,r13d
       mov       r8,[r15+rcx*8+10]
       mov       [rsp+38],r8
       cmp       [r8],r8b
       xor       r9d,r9d
       mov       [rsp+4C],r9d
       mov       rcx,r8
       call      System.Threading.Monitor.Enter(System.Object)
       mov       rax,[rsp+38]
       mov       rcx,[rax+8]
       mov       r9d,[rax+10]
       mov       [rsp+48],r9d
       cmp       [rcx+8],r9d
       jbe       short M07_L09
       test      r9d,r9d
       je        short M07_L11
M07_L08:
       movsxd    rdx,r9d
       mov       r8,rdi
       call      CORINFO_HELP_ARRADDR_ST
       mov       ecx,[rsp+48]
       inc       ecx
       mov       rax,[rsp+38]
       mov       [rax+10],ecx
       mov       dword ptr [rsp+4C],1
M07_L09:
       mov       rcx,rax
       call      System.Threading.Monitor.Exit(System.Object)
       mov       ecx,[rsp+4C]
       test      ecx,ecx
       je        near ptr M07_L24
       mov       r13d,1
M07_L10:
       jmp       near ptr M07_L02
M07_L11:
       xor       edx,edx
       mov       [rax+14],edx
       jmp       short M07_L08
M07_L12:
       call      qword ptr [7FFC4BE95F90]
       mov       r13d,eax
       jmp       near ptr M07_L06
M07_L13:
       mov       rcx,rbx
       call      qword ptr [7FFC4BC598E8]
       mov       r15,rax
       jmp       near ptr M07_L00
M07_L14:
       mov       rcx,rbx
       mov       edx,r14d
       call      qword ptr [7FFC4BC59870]
       jmp       near ptr M07_L05
M07_L15:
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rbp,rax
       call      qword ptr [7FFC4B9B92B8]
       mov       rsi,rax
       mov       ecx,1D3
       mov       rdx,7FFC4B724000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rsi
       mov       rcx,rbp
       call      qword ptr [7FFC4B8EDBD0]
       mov       rcx,rbp
       call      CORINFO_HELP_THROW
M07_L16:
       call      qword ptr [7FFC4B8E9CC0]
       mov       r13d,eax
       jmp       near ptr M07_L06
M07_L17:
       test      ebp,ebp
       je        near ptr M07_L03
       mov       rcx,rsi
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       r15d,eax
       mov       [rsp+54],ebp
       cmp       [rbx],bl
       mov       rcx,rbx
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       [rsp+20],eax
       mov       rcx,rdi
       mov       r8d,r15d
       mov       r9d,[rsp+54]
       mov       edx,3
       call      qword ptr [7FFC4B9D52E8]; System.Diagnostics.Tracing.EventSource.WriteEvent(Int32, Int32, Int32, Int32)
       test      r13d,r12d
       jne       near ptr M07_L03
       mov       rcx,rsi
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       mov       esi,eax
       mov       rcx,rbx
       call      System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object)
       test      r12d,r12d
       jne       short M07_L18
       mov       ecx,0FFFFFFFF
       jmp       short M07_L19
M07_L18:
       mov       ecx,r14d
M07_L19:
       mov       edx,esi
       mov       r8d,ebp
       mov       r9d,eax
       test      r12d,r12d
       jne       short M07_L20
       mov       eax,1
       jmp       short M07_L21
M07_L20:
       xor       eax,eax
M07_L21:
       mov       [rsp+20],ecx
       mov       [rsp+28],eax
       mov       rcx,rdi
       call      qword ptr [7FFC4BC5B3C0]
       jmp       near ptr M07_L03
M07_L22:
       mov       ecx,2
       call      qword ptr [7FFC4BC2D7F8]
       int       3
M07_L23:
       mov       rcx,rsi
       call      qword ptr [7FFC4B859738]
       jmp       near ptr M07_L01
M07_L24:
       inc       r13d
       mov       ecx,[rsp+44]
       cmp       ecx,r13d
       jne       short M07_L25
       xor       r13d,r13d
M07_L25:
       mov       eax,[rsp+50]
       inc       eax
       cmp       ecx,eax
       mov       [rsp+50],eax
       mov       edx,ecx
       jg        near ptr M07_L07
M07_L26:
       xor       r13d,r13d
       jmp       near ptr M07_L10
M07_L27:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 892
; System.Text.StringBuilder.Append(Char ByRef, Int32)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       rdi,rcx
       mov       esi,r8d
       test      esi,esi
       je        short M08_L03
       mov       r8,[rdi+8]
       mov       ebx,[rdi+18]
       lea       ecx,[rbx+rsi]
       cmp       ecx,[r8+8]
       ja        short M08_L02
       movsxd    rcx,ebx
       lea       rcx,[r8+rcx*2+10]
       cmp       esi,2
       jle       short M08_L01
       movsxd    r8,esi
       add       r8,r8
       call      qword ptr [7FFC4B9D10A8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
M08_L00:
       add       esi,ebx
       mov       [rdi+18],esi
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M08_L01:
       movzx     r8d,word ptr [rdx]
       mov       [rcx],r8w
       cmp       esi,2
       jne       short M08_L00
       movzx     r8d,word ptr [rdx+2]
       mov       [rcx+2],r8w
       jmp       short M08_L00
M08_L02:
       mov       rcx,rdi
       mov       r8d,esi
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       jmp       qword ptr [7FFC4BA6DD20]; System.Text.StringBuilder.AppendWithExpansion(Char ByRef, Int32)
M08_L03:
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 123

Compare Jit Disasm

; System.Text.Tests.Perf_StringBuilder.Append_ValueTypes_Interpolated()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,80
       xor       eax,eax
       mov       [rsp+48],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+50],xmm4
       vmovdqa   xmmword ptr [rsp+60],xmm4
       vmovdqa   xmmword ptr [rsp+70],xmm4
       mov       rcx,offset MT_System.Text.StringBuilder
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       dword ptr [rsi+20],7FFFFFFF
       mov       rcx,offset MT_System.Char[]
       mov       edx,10
       call      CORINFO_HELP_NEWARR_1_VC
       lea       rcx,[rsi+8]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rsp+70]
       mov       rdx,8D661571745C000
       mov       r8,8A94AF400
       call      qword ptr [7FFE9CC911F8]; System.DateTimeOffset..ctor(System.DateTime, System.TimeSpan)
       mov       dword ptr [rsp+60],1
       mov       word ptr [rsp+64],2
       mov       word ptr [rsp+66],3
       mov       byte ptr [rsp+68],4
       mov       byte ptr [rsp+69],5
       mov       byte ptr [rsp+6A],6
       mov       byte ptr [rsp+6B],7
       mov       byte ptr [rsp+6C],8
       mov       byte ptr [rsp+6D],9
       mov       byte ptr [rsp+6E],0A
       mov       byte ptr [rsp+6F],0B
       mov       edi,1
       mov       rbx,28AB5627C98
       add       rbx,0C
M00_L00:
       mov       [rsp+48],rsi
       xor       edx,edx
       mov       [rsp+50],rdx
       mov       byte ptr [rsp+58],0
       vmovups   xmm0,[rsp+60]
       vmovups   [rsp+38],xmm0
       lea       rdx,[rsp+38]
       lea       rcx,[rsp+48]
       call      qword ptr [7FFE9CC01000]; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.Guid, System.Private.CoreLib]](System.Guid)
       mov       rcx,[rsp+48]
       cmp       [rcx],cl
       mov       rdx,rbx
       mov       r8d,1
       call      qword ptr [7FFE9CBEDD08]; System.Text.StringBuilder.Append(Char ByRef, Int32)
       lea       rcx,[rsp+48]
       mov       rdx,8D661571745C000
       call      qword ptr [7FFE9CFD9D38]; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.DateTime, System.Private.CoreLib]](System.DateTime)
       mov       rcx,[rsp+48]
       cmp       [rcx],cl
       mov       rdx,rbx
       mov       r8d,1
       call      qword ptr [7FFE9CBEDD08]; System.Text.StringBuilder.Append(Char ByRef, Int32)
       lea       rcx,[rsp+48]
       mov       rdx,8A94AF400
       call      qword ptr [7FFE9CFD9D50]; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.TimeSpan, System.Private.CoreLib]](System.TimeSpan)
       mov       rcx,[rsp+48]
       cmp       [rcx],cl
       mov       rdx,rbx
       mov       r8d,1
       call      qword ptr [7FFE9CBEDD08]; System.Text.StringBuilder.Append(Char ByRef, Int32)
       vmovups   xmm0,[rsp+70]
       vmovups   [rsp+28],xmm0
       lea       rdx,[rsp+28]
       lea       rcx,[rsp+48]
       call      qword ptr [7FFE9CFD9D68]; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.DateTimeOffset, System.Private.CoreLib]](System.DateTimeOffset)
       inc       edi
       cmp       edi,4
       jle       near ptr M00_L00
       mov       rax,rsi
       add       rsp,80
       pop       rbx
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 414
; System.DateTimeOffset..ctor(System.DateTime, System.TimeSpan)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       rdi,rcx
       mov       rbx,rdx
       mov       rsi,r8
       mov       rax,0C000000000000000
       and       rax,rbx
       mov       rcx,rax
       test      rcx,rcx
       je        short M01_L00
       mov       rdx,4000000000000000
       cmp       rcx,rdx
       je        short M01_L00
       mov       rcx,rbx
       mov       edx,2
       call      qword ptr [7FFE9D015138]
       mov       rdx,rax
       mov       rcx,rsi
       call      qword ptr [7FFE9CC93828]
       test      eax,eax
       jne       near ptr M01_L07
       jmp       short M01_L01
M01_L00:
       test      rax,rax
       jne       near ptr M01_L02
M01_L01:
       mov       rcx,rsi
       mov       rdx,1CA213D840BAF7D5
       mov       rax,rdx
       imul      rcx
       mov       rax,rdx
       shr       rax,3F
       sar       rdx,1A
       add       rax,rdx
       imul      rdx,rax,23C34600
       sub       rcx,rdx
       jne       near ptr M01_L03
       mov       rcx,0FFFFFF8AA7425000
       cmp       rsi,rcx
       jl        near ptr M01_L04
       mov       rcx,7558BDB000
       cmp       rsi,rcx
       jg        near ptr M01_L04
       mov       [rdi],ax
       mov       rcx,3FFFFFFFFFFFFFFF
       and       rcx,rbx
       sub       rcx,rsi
       js        near ptr M01_L05
       mov       rax,2BCA2875F4373FFF
       cmp       rcx,rax
       jg        near ptr M01_L05
       mov       rax,2BCA2875F4373FFF
       cmp       rcx,rax
       ja        near ptr M01_L06
       mov       [rdi+8],rcx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M01_L02:
       mov       rcx,4000000000000000
       cmp       rax,rcx
       jne       near ptr M01_L01
       mov       rcx,rsi
       xor       edx,edx
       call      qword ptr [7FFE9CC93828]
       test      eax,eax
       je        near ptr M01_L01
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFE9CB37EE8]
       mov       rdi,rax
       mov       ecx,1C7B
       mov       rdx,7FFE9C8A4000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFE9CA6DBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFE9CB37ED0]
       mov       rdi,rax
       mov       ecx,1C7B
       mov       rdx,7FFE9C8A4000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFE9CA6DBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L04:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C7B
       mov       rdx,7FFE9C8A4000
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       call      qword ptr [7FFE9CB37EB8]
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFE9CB59030]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L05:
       mov       rcx,offset MT_System.ArgumentOutOfRangeException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1C7B
       mov       rdx,7FFE9C8A4000
       call      CORINFO_HELP_STRCNS
       mov       rdi,rax
       call      qword ptr [7FFE9CB39288]
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFE9CB59030]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L06:
       call      qword ptr [7FFE9CC0D108]
       int       3
M01_L07:
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFE9CB37E88]
       mov       rdi,rax
       mov       ecx,1C7B
       mov       rdx,7FFE9C8A4000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFE9CA6DBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 655
; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.Guid, System.Private.CoreLib]](System.Guid)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,60
       vzeroupper
       xor       eax,eax
       mov       [rsp+28],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       [rsp+40],rax
       mov       rdi,rcx
       mov       rsi,rdx
       cmp       byte ptr [rdi+10],0
       je        short M02_L00
       mov       rcx,rdi
       mov       rdx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFE9D0313C0]
       nop
       add       rsp,60
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M02_L00:
       mov       rdx,[rdi]
       mov       r9,[rdx+8]
       mov       r8,r9
       mov       edx,[rdx+18]
       mov       ecx,edx
       mov       ebx,[r9+8]
       sub       ebx,edx
       mov       edx,ecx
       mov       r9d,ebx
       add       rdx,r9
       mov       r9d,[r8+8]
       cmp       rdx,r9
       ja        short M02_L02
       mov       edx,ecx
       lea       rdx,[r8+rdx*2+10]
       vmovups   xmm0,[rsi]
       vmovups   [rsp+48],xmm0
       xor       r9d,r9d
       mov       [rsp+38],rdx
       mov       [rsp+40],ebx
       mov       [rsp+28],r9
       xor       edx,edx
       mov       [rsp+30],edx
       lea       rdx,[rsp+38]
       lea       r9,[rsp+28]
       lea       r8,[rsp+58]
       lea       rcx,[rsp+48]
       call      qword ptr [7FFE9CB53BA0]; System.Guid.TryFormat(System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>)
       test      eax,eax
       je        short M02_L01
       cmp       [rsp+58],ebx
       ja        short M02_L03
       mov       rcx,[rdi]
       mov       edx,[rsp+58]
       add       [rcx+18],edx
       add       rsp,60
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M02_L01:
       mov       rcx,rdi
       mov       rdx,rsi
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFE9CFD9D80]; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormattedWithTempSpace[[System.Guid, System.Private.CoreLib]](System.Guid, Int32, System.String)
       nop
       add       rsp,60
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M02_L02:
       call      qword ptr [7FFE9CDAD4E0]
       int       3
M02_L03:
       call      qword ptr [7FFE9CDADBE8]
       int       3
; Total bytes of code 241
; System.Text.StringBuilder.Append(Char ByRef, Int32)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       rdi,rcx
       mov       esi,r8d
       test      esi,esi
       je        short M03_L03
       mov       r8,[rdi+8]
       mov       ebx,[rdi+18]
       lea       ecx,[rbx+rsi]
       cmp       ecx,[r8+8]
       ja        short M03_L02
       movsxd    rcx,ebx
       lea       rcx,[r8+rcx*2+10]
       cmp       esi,2
       jle       short M03_L01
       movsxd    r8,esi
       add       r8,r8
       call      qword ptr [7FFE9CB510A8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
M03_L00:
       add       esi,ebx
       mov       [rdi+18],esi
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       movzx     r8d,word ptr [rdx]
       mov       [rcx],r8w
       cmp       esi,2
       jne       short M03_L00
       movzx     r8d,word ptr [rdx+2]
       mov       [rcx+2],r8w
       jmp       short M03_L00
M03_L02:
       mov       rcx,rdi
       mov       r8d,esi
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       jmp       qword ptr [7FFE9CBEDD20]; System.Text.StringBuilder.AppendWithExpansion(Char ByRef, Int32)
M03_L03:
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 123
; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.DateTime, System.Private.CoreLib]](System.DateTime)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,60
       xor       eax,eax
       mov       [rsp+38],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+40],xmm4
       mov       [rsp+50],rax
       mov       rsi,rcx
       mov       rdi,rdx
       cmp       byte ptr [rsi+10],0
       je        short M04_L00
       mov       rcx,rsi
       mov       rdx,rdi
       xor       r8d,r8d
       call      qword ptr [7FFE9CFD9E10]
       nop
       add       rsp,60
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M04_L00:
       mov       rcx,[rsi]
       mov       rdx,[rcx+8]
       mov       r9,rdx
       mov       ecx,[rcx+18]
       mov       r8d,ecx
       mov       ebx,[rdx+8]
       sub       ebx,ecx
       mov       ecx,r8d
       mov       edx,ebx
       add       rcx,rdx
       mov       edx,[r9+8]
       cmp       rcx,rdx
       ja        near ptr M04_L02
       mov       ecx,r8d
       lea       rcx,[r9+rcx*2+10]
       xor       edx,edx
       mov       r9,[rsi+8]
       mov       [rsp+48],rcx
       mov       [rsp+50],ebx
       mov       [rsp+38],rdx
       xor       ecx,ecx
       mov       [rsp+40],ecx
       mov       [rsp+20],r9
       mov       rcx,8000000000000000
       mov       [rsp+28],rcx
       mov       rcx,rdi
       lea       rdx,[rsp+48]
       lea       r9,[rsp+38]
       lea       r8,[rsp+58]
       call      qword ptr [7FFE9CFDB1C8]; System.DateTimeFormat.TryFormat(System.DateTime, System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>, System.IFormatProvider, System.TimeSpan)
       test      eax,eax
       je        short M04_L01
       cmp       [rsp+58],ebx
       ja        short M04_L03
       mov       rcx,[rsi]
       mov       edx,[rsp+58]
       add       [rcx+18],edx
       add       rsp,60
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M04_L01:
       mov       rcx,rsi
       mov       rdx,rdi
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFE9CFD9DB0]; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormattedWithTempSpace[[System.DateTime, System.Private.CoreLib]](System.DateTime, Int32, System.String)
       nop
       add       rsp,60
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M04_L02:
       call      qword ptr [7FFE9CDAD4E0]
       int       3
M04_L03:
       call      qword ptr [7FFE9CDADBE8]
       int       3
; Total bytes of code 254
; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.TimeSpan, System.Private.CoreLib]](System.TimeSpan)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,50
       xor       eax,eax
       mov       [rsp+28],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       [rsp+40],rax
       mov       rsi,rcx
       mov       rdi,rdx
       cmp       byte ptr [rsi+10],0
       je        short M05_L00
       mov       rcx,rsi
       mov       rdx,rdi
       xor       r8d,r8d
       call      qword ptr [7FFE9CFDD0F0]
       nop
       add       rsp,50
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M05_L00:
       mov       rcx,[rsi]
       mov       rdx,[rcx+8]
       mov       r9,rdx
       mov       ecx,[rcx+18]
       mov       r8d,ecx
       mov       ebx,[rdx+8]
       sub       ebx,ecx
       mov       ecx,r8d
       mov       edx,ebx
       add       rcx,rdx
       mov       edx,[r9+8]
       cmp       rcx,rdx
       ja        short M05_L02
       mov       ecx,r8d
       lea       rcx,[r9+rcx*2+10]
       xor       edx,edx
       mov       [rsp+38],rcx
       mov       [rsp+40],ebx
       mov       [rsp+28],rdx
       xor       ecx,ecx
       mov       [rsp+30],ecx
       mov       rcx,[rsi+8]
       mov       [rsp+20],rcx
       mov       rcx,rdi
       lea       rdx,[rsp+38]
       lea       r9,[rsp+28]
       lea       r8,[rsp+48]
       call      qword ptr [7FFE9CFDD1E0]; System.Globalization.TimeSpanFormat.TryFormat(System.TimeSpan, System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>, System.IFormatProvider)
       test      eax,eax
       je        short M05_L01
       cmp       [rsp+48],ebx
       ja        short M05_L03
       mov       rcx,[rsi]
       mov       edx,[rsp+48]
       add       [rcx+18],edx
       add       rsp,50
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M05_L01:
       mov       rcx,rsi
       mov       rdx,rdi
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFE9CFDD0C0]
       nop
       add       rsp,50
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M05_L02:
       call      qword ptr [7FFE9CDAD4E0]
       int       3
M05_L03:
       call      qword ptr [7FFE9CDADBE8]
       int       3
; Total bytes of code 235
; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormatted[[System.DateTimeOffset, System.Private.CoreLib]](System.DateTimeOffset)
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,68
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       vmovdqa   xmmword ptr [rsp+40],xmm4
       mov       rdi,rcx
       mov       rsi,rdx
       cmp       byte ptr [rdi+10],0
       je        short M06_L00
       mov       rcx,rdi
       mov       rdx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFE9CFDD2D0]
       nop
       add       rsp,68
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M06_L00:
       mov       rcx,[rdi]
       mov       rax,[rcx+8]
       mov       rdx,rax
       mov       ecx,[rcx+18]
       mov       r8d,ecx
       mov       ebx,[rax+8]
       sub       ebx,ecx
       mov       ecx,r8d
       mov       eax,ebx
       add       rcx,rax
       mov       eax,[rdx+8]
       cmp       rcx,rax
       ja        near ptr M06_L02
       mov       ecx,r8d
       lea       rbp,[rdx+rcx*2+10]
       vmovups   xmm0,[rsi]
       vmovups   [rsp+50],xmm0
       xor       r14d,r14d
       mov       r15,[rdi+8]
       lea       rcx,[rsp+50]
       call      qword ptr [7FFE9CC91318]; System.DateTimeOffset.get_ClockDateTime()
       mov       rcx,rax
       movsx     rdx,word ptr [rsp+50]
       imul      rdx,3C
       mov       r9,0D6BF94D5E5
       cmp       rdx,r9
       jg        near ptr M06_L03
       mov       r9,0FFFFFF29406B2A1B
       cmp       rdx,r9
       jl        near ptr M06_L03
       imul      rdx,989680
       mov       [rsp+40],rbp
       mov       [rsp+48],ebx
       mov       [rsp+30],r14
       xor       r9d,r9d
       mov       [rsp+38],r9d
       mov       [rsp+20],r15
       mov       [rsp+28],rdx
       lea       rdx,[rsp+40]
       lea       r9,[rsp+30]
       lea       r8,[rsp+60]
       call      qword ptr [7FFE9CFDB1C8]; System.DateTimeFormat.TryFormat(System.DateTime, System.Span`1<Char>, Int32 ByRef, System.ReadOnlySpan`1<Char>, System.IFormatProvider, System.TimeSpan)
       test      eax,eax
       je        short M06_L01
       cmp       [rsp+60],ebx
       ja        short M06_L04
       mov       rcx,[rdi]
       mov       edx,[rsp+60]
       add       [rcx+18],edx
       add       rsp,68
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M06_L01:
       mov       rcx,rdi
       mov       rdx,rsi
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFE9CFDD2A0]; System.Text.StringBuilder+AppendInterpolatedStringHandler.AppendFormattedWithTempSpace[[System.DateTimeOffset, System.Private.CoreLib]](System.DateTimeOffset, Int32, System.String)
       nop
       add       rsp,68
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M06_L02:
       call      qword ptr [7FFE9CDAD4E0]
       int       3
M06_L03:
       call      qword ptr [7FFE9CDAD6C0]
       int       3
M06_L04:
       call      qword ptr [7FFE9CDADBE8]
       int       3
; Total bytes of code 346

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
Diff Diff

Regressions in System.Globalization.Tests.Perf_DateTimeCultureInfo

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ToString - Duration of single invocation 169.18 ns 182.03 ns 1.08 0.00 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.Globalization.Tests.Perf_DateTimeCultureInfo*'

Payloads

Baseline
Compare

Histogram

System.Globalization.Tests.Perf_DateTimeCultureInfo.ToString(culturestring: da)


Description of detection logic

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 182.0293935015464 > 178.79465037669007.
IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/11/2023 11:00:48 PM, 1/27/2023 7:12:54 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -22.94392078855576 (T) = (0 -179.41871902678406) / Math.Sqrt((2.202429374523519 / (38)) + (1.8479516706634347 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.050620122849537076 = (170.77411247383773 - 179.41871902678406) / 170.77411247383773 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.Perf_DateTimeCultureInfo.ToString(System.Globalization.CultureInfo)
       sub       rsp,28
       mov       rcx,[rcx+10]
       mov       r9,8000000000000000
       mov       r8,rdx
       xor       edx,edx
       call      qword ptr [7FFCE9EAD6A8]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan)
       nop
       add       rsp,28
       ret
; Total bytes of code 35
; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan)
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,0A0
       lea       rbp,[rsp+30]
       vxorps    xmm4,xmm4,xmm4
       mov       rax,0FFFFFFFFFFFFFFA0
M01_L00:
       vmovdqa   xmmword ptr [rbp+rax+70],xmm4
       vmovdqa   xmmword ptr [rbp+rax+80],xmm4
       vmovdqa   xmmword ptr [rbp+rax+90],xmm4
       add       rax,30
       jne       short M01_L00
       mov       rax,62DAF345D806
       mov       [rbp+8],rax
       mov       rsi,rcx
       mov       rax,r8
       mov       rdi,r9
       test      rdx,rdx
       je        short M01_L02
       mov       ebx,[rdx+8]
       cmp       ebx,1
       jne       short M01_L02
       movzx     ecx,word ptr [rdx+0C]
       or        ecx,20
       cmp       ecx,6F
       je        near ptr M01_L05
       cmp       ecx,72
       jne       short M01_L02
       mov       ecx,1D
       call      System.String.FastAllocateString(Int32)
       mov       rbx,rax
       lea       rcx,[rbx+0C]
       mov       edx,[rbx+8]
       mov       [rbp+20],rcx
       mov       [rbp+28],edx
       mov       rcx,rsi
       mov       rdx,rdi
       lea       r8,[rbp+20]
       lea       r9,[rbp+40]
       call      qword ptr [7FFCE9EAD7B0]
       mov       rax,rbx
       mov       rcx,62DAF345D806
       cmp       [rbp+8],rcx
       je        short M01_L01
       call      CORINFO_HELP_FAIL_FAST
M01_L01:
       nop
       lea       rsp,[rbp+70]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L02:
       test      [rsp],esp
       sub       rsp,200
       lea       rcx,[rsp+30]
       mov       [rbp+30],rcx
       mov       dword ptr [rbp+38],100
       mov       rcx,[rbp+30]
       mov       r8d,[rbp+38]
       xor       r9d,r9d
       mov       [rbp+50],r9
       mov       [rbp+60],rcx
       mov       [rbp+68],r8d
       mov       [rbp+58],r9d
       test      rdx,rdx
       je        near ptr M01_L07
       lea       rcx,[rdx+0C]
       mov       ebx,[rdx+8]
       mov       r8d,ebx
M01_L03:
       mov       [rbp+10],rcx
       mov       [rbp+18],r8d
       mov       rcx,rax
       call      qword ptr [7FFCE9C5F1B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider)
       mov       r8,rax
       lea       rdx,[rbp+50]
       mov       [rsp+20],rdx
       lea       rdx,[rbp+10]
       mov       rcx,rsi
       mov       r9,rdi
       call      qword ptr [7FFCE9EAD6F0]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1<Char>, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef)
       lea       rcx,[rbp+50]
       call      qword ptr [7FFCE9D476F0]; System.Text.ValueStringBuilder.ToString()
       mov       rcx,62DAF345D806
       cmp       [rbp+8],rcx
       je        short M01_L04
       call      CORINFO_HELP_FAIL_FAST
M01_L04:
       nop
       lea       rsp,[rbp+70]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L05:
       test      [rsp],esp
       sub       rsp,50
       lea       rcx,[rsp+30]
       mov       [rbp+30],rcx
       mov       dword ptr [rbp+38],21
       mov       rbx,[rbp+30]
       mov       r14d,[rbp+38]
       mov       rcx,rsi
       mov       rdx,rdi
       mov       [rbp+20],rbx
       mov       [rbp+28],r14d
       lea       r8,[rbp+20]
       lea       r9,[rbp+48]
       call      qword ptr [7FFCE9EAD798]
       mov       ecx,[rbp+48]
       cmp       ecx,r14d
       ja        short M01_L08
       mov       [rbp+30],rbx
       mov       [rbp+38],ecx
       lea       rcx,[rbp+30]
       call      qword ptr [7FFCE9A65D38]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString()
       mov       rcx,62DAF345D806
       cmp       [rbp+8],rcx
       je        short M01_L06
       call      CORINFO_HELP_FAIL_FAST
M01_L06:
       nop
       lea       rsp,[rbp+70]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L07:
       xor       ecx,ecx
       xor       r8d,r8d
       jmp       near ptr M01_L03
M01_L08:
       call      qword ptr [7FFCE9C7D4E0]
       int       3
; Total bytes of code 496

Compare Jit Disasm

; System.Globalization.Tests.Perf_DateTimeCultureInfo.ToString(System.Globalization.CultureInfo)
       sub       rsp,28
       mov       rcx,[rcx+10]
       mov       r9,8000000000000000
       mov       r8,rdx
       xor       edx,edx
       call      qword ptr [7FF90CC2D6A8]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan)
       nop
       add       rsp,28
       ret
; Total bytes of code 35
; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan)
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,0A0
       lea       rbp,[rsp+30]
       vxorps    xmm4,xmm4,xmm4
       mov       rax,0FFFFFFFFFFFFFFA0
M01_L00:
       vmovdqa   xmmword ptr [rbp+rax+70],xmm4
       vmovdqa   xmmword ptr [rbp+rax+80],xmm4
       vmovdqa   xmmword ptr [rbp+rax+90],xmm4
       add       rax,30
       jne       short M01_L00
       mov       rax,0E3DD7AABDF59
       mov       [rbp+8],rax
       mov       rsi,rcx
       mov       rax,r8
       mov       rdi,r9
       test      rdx,rdx
       je        short M01_L02
       mov       ebx,[rdx+8]
       cmp       ebx,1
       jne       short M01_L02
       movzx     ecx,word ptr [rdx+0C]
       or        ecx,20
       cmp       ecx,6F
       je        near ptr M01_L05
       cmp       ecx,72
       jne       short M01_L02
       mov       ecx,1D
       call      System.String.FastAllocateString(Int32)
       mov       rbx,rax
       lea       rcx,[rbx+0C]
       mov       edx,[rbx+8]
       mov       [rbp+20],rcx
       mov       [rbp+28],edx
       mov       rcx,rsi
       mov       rdx,rdi
       lea       r8,[rbp+20]
       lea       r9,[rbp+40]
       call      qword ptr [7FF90CC2D7B0]
       mov       rax,rbx
       mov       rcx,0E3DD7AABDF59
       cmp       [rbp+8],rcx
       je        short M01_L01
       call      CORINFO_HELP_FAIL_FAST
M01_L01:
       nop
       lea       rsp,[rbp+70]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L02:
       test      [rsp],esp
       sub       rsp,200
       lea       rcx,[rsp+30]
       mov       [rbp+30],rcx
       mov       dword ptr [rbp+38],100
       mov       rcx,[rbp+30]
       mov       r8d,[rbp+38]
       xor       r9d,r9d
       mov       [rbp+50],r9
       mov       [rbp+60],rcx
       mov       [rbp+68],r8d
       mov       [rbp+58],r9d
       test      rdx,rdx
       je        near ptr M01_L07
       lea       rcx,[rdx+0C]
       mov       ebx,[rdx+8]
       mov       r8d,ebx
M01_L03:
       mov       [rbp+10],rcx
       mov       [rbp+18],r8d
       mov       rcx,rax
       call      qword ptr [7FF90C9DF1B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider)
       mov       r8,rax
       lea       rdx,[rbp+50]
       mov       [rsp+20],rdx
       lea       rdx,[rbp+10]
       mov       rcx,rsi
       mov       r9,rdi
       call      qword ptr [7FF90CC2D6F0]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1<Char>, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef)
       lea       rcx,[rbp+50]
       call      qword ptr [7FF90CAC76F0]; System.Text.ValueStringBuilder.ToString()
       mov       rcx,0E3DD7AABDF59
       cmp       [rbp+8],rcx
       je        short M01_L04
       call      CORINFO_HELP_FAIL_FAST
M01_L04:
       nop
       lea       rsp,[rbp+70]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L05:
       test      [rsp],esp
       sub       rsp,50
       lea       rcx,[rsp+30]
       mov       [rbp+30],rcx
       mov       dword ptr [rbp+38],21
       mov       rbx,[rbp+30]
       mov       r14d,[rbp+38]
       mov       rcx,rsi
       mov       rdx,rdi
       mov       [rbp+20],rbx
       mov       [rbp+28],r14d
       lea       r8,[rbp+20]
       lea       r9,[rbp+48]
       call      qword ptr [7FF90CC2D798]
       mov       ecx,[rbp+48]
       cmp       ecx,r14d
       ja        short M01_L08
       mov       [rbp+30],rbx
       mov       [rbp+38],ecx
       lea       rcx,[rbp+30]
       call      qword ptr [7FF90C7E5D38]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString()
       mov       rcx,0E3DD7AABDF59
       cmp       [rbp+8],rcx
       je        short M01_L06
       call      CORINFO_HELP_FAIL_FAST
M01_L06:
       nop
       lea       rsp,[rbp+70]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L07:
       xor       ecx,ecx
       xor       r8d,r8d
       jmp       near ptr M01_L03
M01_L08:
       call      qword ptr [7FF90C9FD4E0]
       int       3
; Total bytes of code 496

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_SliceSlice

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Count - Duration of single invocation 602.98 ms 838.07 ms 1.39 0.43 False 4675000000 5011000000 1.0718716577540106) Trace Trace
Count - Duration of single invocation 629.66 ms 869.31 ms 1.38 0.26 False
Count - Duration of single invocation 576.61 ms 821.39 ms 1.42 0.40 False 4468142857.142858 4801428571.428572 1.0745915528982959) 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.Text.RegularExpressions.Tests.Perf_Regex_Industry_SliceSlice*'

Payloads

Baseline
Compare

Histogram

System.Text.RegularExpressions.Tests.Perf_Regex_Industry_SliceSlice.Count(Options: None)


Description of detection logic

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 838.0709846153845 > 631.9228434615385.
IsChangePoint: Marked as a change because one of 1/14/2023 6:09:05 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -21.308464825946754 (T) = (0 -810051072.64319) / Math.Sqrt((387667531386299.75 / (37)) + (1476570386629781.8 / (22))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (22) - 2, .025) and -0.301600881773555 = (622349818.5860311 - 810051072.64319) / 622349818.5860311 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
; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__()
       push      rbp
       sub       rsp,20
       lea       rbp,[rsp+20]
       mov       [rbp+10],rcx
       mov       rcx,[rbp+10]
       cmp       dword ptr [rcx+1C],0B
       jne       short M00_L00
       mov       rcx,[rbp+10]
       call      qword ptr [7FFC21B3BAE0]
       nop
       add       rsp,20
       pop       rbp
       ret
M00_L00:
       xor       eax,eax
       add       rsp,20
       pop       rbp
       ret
; Total bytes of code 49

Compare Jit Disasm

; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__()
       push      rbp
       sub       rsp,20
       lea       rbp,[rsp+20]
       mov       [rbp+10],rcx
       mov       rcx,[rbp+10]
       cmp       dword ptr [rcx+1C],0B
       jne       short M00_L00
       mov       rcx,[rbp+10]
       call      qword ptr [7FFED1D7BAE0]
       nop
       add       rsp,20
       pop       rbp
       ret
M00_L00:
       xor       eax,eax
       add       rsp,20
       pop       rbp
       ret
; Total bytes of code 49

System.Text.RegularExpressions.Tests.Perf_Regex_Industry_SliceSlice.Count(Options: NonBacktracking)


Description of detection logic

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 869.3120666666666 > 662.5981125000001.
IsChangePoint: Marked as a change because one of 1/14/2023 12:48:25 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -21.520727029129944 (T) = (0 -815309505.4653679) / Math.Sqrt((209881427853515.47 / (39)) + (1365528672101770.2 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.27678829130323623 = (638562799.3448857 - 815309505.4653679) / 638562799.3448857 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_SliceSlice.Count(Options: Compiled)

```log

Description of detection logic

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 821.3934333333334 > 612.1267215.
IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -21.28893036001055 (T) = (0 -793150587.943723) / Math.Sqrt((348038118917967.2 / (38)) + (1620935986502663.2 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.3232656159677625 = (599388798.7210013 - 793150587.943723) / 599388798.7210013 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
; BenchmarkDotNet.Autogenerated.Runnable_2.__ForDisassemblyDiagnoser__()
       push      rbp
       sub       rsp,20
       lea       rbp,[rsp+20]
       mov       [rbp+10],rcx
       mov       rcx,[rbp+10]
       cmp       dword ptr [rcx+1C],0B
       jne       short M00_L00
       mov       rcx,[rbp+10]
       call      qword ptr [7FFC21B3BAE0]
       nop
       add       rsp,20
       pop       rbp
       ret
M00_L00:
       xor       eax,eax
       add       rsp,20
       pop       rbp
       ret
; Total bytes of code 49

Compare Jit Disasm

; BenchmarkDotNet.Autogenerated.Runnable_2.__ForDisassemblyDiagnoser__()
       push      rbp
       sub       rsp,20
       lea       rbp,[rsp+20]
       mov       [rbp+10],rcx
       mov       rcx,[rbp+10]
       cmp       dword ptr [rcx+1C],0B
       jne       short M00_L00
       mov       rcx,[rbp+10]
       call      qword ptr [7FFED1D5BAE0]
       nop
       add       rsp,20
       pop       rbp
       ret
M00_L00:
       xor       eax,eax
       add       rsp,20
       pop       rbp
       ret
; Total bytes of code 49

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Count - Duration of single invocation 1.99 ms 2.78 ms 1.40 0.44 False
Count - Duration of single invocation 2.31 ms 2.72 ms 1.18 0.41 False
Count - Duration of single invocation 2.17 ms 2.72 ms 1.25 0.35 False
Count - Duration of single invocation 2.01 ms 2.75 ms 1.37 0.50 False
Count - Duration of single invocation 2.41 ms 2.59 ms 1.08 0.34 False

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_Leipzig*'

Payloads

Baseline
Compare

Histogram

System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "Twain", Options: Compiled)


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 2.7815227678571426 > 2.2186029492187505.
IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -10.980608877681446 (T) = (0 -2527852.6784265623) / Math.Sqrt((6629270268.360029 / (38)) + (31061638284.233612 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.20920596141096226 = (2090506.2984282156 - 2527852.6784265623) / 2090506.2984282156 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_Leipzig.Count(Pattern: "[a-z]shing", Options: Compiled)

```log

Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 2.7165909375 > 2.2877771984375.
IsChangePoint: Marked as a change because one of 12/12/2022 10:47:19 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -10.70701832623391 (T) = (0 -2651932.0965709644) / Math.Sqrt((12693947141.11817 / (38)) + (18979233276.918037 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.1623462377824378 = (2281533.6862365617 - 2651932.0965709644) / 2281533.6862365617 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_Leipzig.Count(Pattern: "Twain", Options: NonBacktracking)

```log

Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 2.717962429906542 > 2.2637893558087345.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -16.588883670148373 (T) = (0 -2646118.895606584) / Math.Sqrt((6551848534.67761 / (39)) + (13435297336.120438 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.2120338858697603 = (2183205.376067286 - 2646118.895606584) / 2183205.376067286 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_Leipzig.Count(Pattern: "Twain", Options: None)

```log

Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 2.7463696180555557 > 2.163528521033654.
IsChangePoint: Marked as a change because one of 12/13/2022 12:26:27 AM, 2/9/2023 10:24:28 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -6.826703950789848 (T) = (0 -2510618.6446169224) / Math.Sqrt((24264139648.943176 / (42)) + (46602654960.764885 / (19))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (42) + (19) - 2, .025) and -0.1760387624198033 = (2134809.4338753796 - 2510618.6446169224) / 2134809.4338753796 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_Leipzig.Count(Pattern: "[a-z]shing", Options: NonBacktracking)

```log

Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 2.589221821305842 > 2.523901204589521.
IsChangePoint: Marked as a change because one of 12/13/2022 5:38:37 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -11.446839985905465 (T) = (0 -2925743.6918008137) / Math.Sqrt((9093831245.4052 / (39)) + (35098499093.656425 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.2009172367396391 = (2436257.5557195703 - 2925743.6918008137) / 2436257.5557195703 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
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
Diff Diff

Regressions in System.Collections.ContainsTrue<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
LinkedList - Duration of single invocation 640.44 μs 675.29 μs 1.05 0.09 False
ImmutableArray - Duration of single invocation 429.65 μs 501.15 μs 1.17 0.08 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.Collections.ContainsTrue&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsTrue<String>.LinkedList(Size: 512)


Description of detection logic

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 675.2940277777778 > 674.9176.
IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -7.52968621802091 (T) = (0 -694115.0762915565) / Math.Sqrt((279990609.354664 / (39)) + (493823495.5320357 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.06274963145836604 = (653131.3262739521 - 694115.0762915565) / 653131.3262739521 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.Collections.ContainsTrue&lt;String&gt;.ImmutableArray(Size: 512)

```log

Description of detection logic

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 501.151796875 > 448.93430808212065.
IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -25.961149689248053 (T) = (0 -504121.9591289121) / Math.Sqrt((149987031.55350184 / (39)) + (92679964.08871563 / (21))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (21) - 2, .025) and -0.17370626533085007 = (429512.88070938917 - 504121.9591289121) / 429512.88070938917 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
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Count - Duration of single invocation 1.58 ms 1.77 ms 1.12 0.05 False 13890234.375 14534166.666666666 1.0463586340073305)
Count - Duration of single invocation 3.56 ms 3.89 ms 1.09 0.06 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.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas*'

Payloads

Baseline
Compare

Histogram

System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count(Pattern: "[\w]+://[^/\\s?#]+[^\\s?#]+(?:\?[^\\s#])?(?:#[^\\s])?", Options: Compiled)


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 1.7652769791666667 > 1.6171040814985793.
IsChangePoint: Marked as a change because one of 1/12/2023 6:14:36 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -20.06121293506038 (T) = (0 -1760188.0594032856) / Math.Sqrt((921938534.1727813 / (39)) + (1860125782.8837204 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.13449126601882141 = (1551521.913059914 - 1760188.0594032856) / 1551521.913059914 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.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count()
       mov       rdx,rcx
       mov       rcx,[rdx+10]
       mov       rdx,[rdx+18]
       jmp       qword ptr [7FFE9CA2B678]; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String)
; Total bytes of code 17
; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String)
       push      rsi
       sub       rsp,20
       xor       esi,esi
       cmp       [rcx],ecx
       call      qword ptr [7FFE9C965600]; System.Text.RegularExpressions.Regex.Match(System.String)
       cmp       dword ptr [rax+30],0
       je        short M01_L01
M01_L00:
       inc       esi
       mov       rcx,rax
       cmp       [rcx],ecx
       call      qword ptr [7FFE9CB2F108]; System.Text.RegularExpressions.Match.NextMatch()
       cmp       dword ptr [rax+30],0
       jne       short M01_L00
M01_L01:
       mov       eax,esi
       add       rsp,20
       pop       rsi
       ret
; Total bytes of code 48

Compare Jit Disasm

; System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count()
       mov       rdx,rcx
       mov       rcx,[rdx+10]
       mov       rdx,[rdx+18]
       jmp       qword ptr [7FFF31D3B678]; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String)
; Total bytes of code 17
; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String)
       push      rsi
       sub       rsp,20
       xor       esi,esi
       cmp       [rcx],ecx
       call      qword ptr [7FFF31C75600]; System.Text.RegularExpressions.Regex.Match(System.String)
       cmp       dword ptr [rax+30],0
       je        short M01_L01
M01_L00:
       inc       esi
       mov       rcx,rax
       cmp       [rcx],ecx
       call      qword ptr [7FFF31E4F108]; System.Text.RegularExpressions.Match.NextMatch()
       cmp       dword ptr [rax+30],0
       jne       short M01_L00
M01_L01:
       mov       eax,esi
       add       rsp,20
       pop       rsi
       ret
; Total bytes of code 48

System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count(Pattern: "[\w]+://[^/\\s?#]+[^\\s?#]+(?:\?[^\\s#])?(?:#[^\\s])?", Options: NonBacktracking)


Description of detection logic

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 3.89171925925926 > 3.743128563103865.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -16.46658496994072 (T) = (0 -3865345.176338863) / Math.Sqrt((3588911517.855957 / (38)) + (3834008660.65582 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.0750763358846612 = (3595414.620635417 - 3865345.176338863) / 3595414.620635417 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
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
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
LastIndexOf_Word_NotFound - Duration of single invocation 28.62 ns 33.87 ns 1.18 0.22 False Trace Trace
IndexOf_Word_NotFound - Duration of single invocation 25.01 ns 30.20 ns 1.21 0.26 False 266.5951917227432 276.51978794858843 1.0372272138957657) Trace Trace

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.Globalization.Tests.StringSearch*'

Payloads

Baseline
Compare

Histogram

System.Globalization.Tests.StringSearch.LastIndexOf_Word_NotFound(Options: (en-US, Ordinal, False))


Description of detection logic

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.87308137779227 > 29.977611763164102.
IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -23.191486269482617 (T) = (0 -33.74303773567776) / Math.Sqrt((1.1760467895650084 / (39)) + (0.4708318613791624 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.18491557951918708 = (28.477166068970035 - 33.74303773567776) / 28.477166068970035 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.LastIndexOf_Word_NotFound()
       push      rsi
       sub       rsp,40
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       rsi,rcx
       mov       rcx,[rsi+30]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r9d,[rsi+38]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       r8,[rdx+0C]
       mov       edx,[rdx+8]
       mov       rax,2A071C3A0F0
       add       rax,0C
       mov       [rsp+30],r8
       mov       [rsp+38],edx
       mov       [rsp+20],rax
       mov       dword ptr [rsp+28],4
       lea       rdx,[rsp+30]
       lea       r8,[rsp+20]
       call      qword ptr [7FF8051CB630]; System.Globalization.CompareInfo.LastIndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,40
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FF80532D7F8]
       int       3
; Total bytes of code 134
; System.Globalization.CompareInfo.LastIndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       push      rdi
       push      rsi
       sub       rsp,38
       test      r9d,0FFFFFFE0
       je        near ptr M01_L03
       cmp       r9d,40000000
       jne       short M01_L01
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       mov       r9,[r8]
       mov       eax,[r8+8]
       mov       r8,r9
       mov       r9d,eax
       call      qword ptr [7FF8050A1420]; System.SpanHelpers.LastIndexOf(Char ByRef, Int32, Char ByRef, Int32)
M01_L00:
       nop
       add       rsp,38
       pop       rsi
       pop       rdi
       ret
M01_L01:
       cmp       r9d,10000000
       jne       short M01_L02
       mov       rcx,rdx
       mov       rdx,r8
       call      qword ptr [7FF8051C9768]
       jmp       short M01_L00
M01_L02:
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FF8050C7840]
       mov       rdi,rax
       mov       ecx,1C89
       mov       rdx,7FF804E34000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FF804FFDBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       cmp       dword ptr [r8+8],0
       jne       short M01_L04
       mov       eax,[rdx+8]
       jmp       short M01_L00
M01_L04:
       xor       eax,eax
       mov       [rsp+20],rax
       mov       [rsp+28],eax
       call      qword ptr [7FF8051CB4F8]
       jmp       near ptr M01_L00
; Total bytes of code 188

Compare Jit Disasm

; System.Globalization.Tests.StringSearch.LastIndexOf_Word_NotFound()
       push      rsi
       sub       rsp,40
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       rsi,rcx
       mov       rcx,[rsi+30]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r9d,[rsi+38]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       r8,[rdx+0C]
       mov       edx,[rdx+8]
       mov       rax,2384846B710
       add       rax,0C
       mov       [rsp+30],r8
       mov       [rsp+38],edx
       mov       [rsp+20],rax
       mov       dword ptr [rsp+28],4
       lea       rdx,[rsp+30]
       lea       r8,[rsp+20]
       call      qword ptr [7FFECA1DB630]; System.Globalization.CompareInfo.LastIndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,40
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FFECA33D7F8]
       int       3
; Total bytes of code 134
; System.Globalization.CompareInfo.LastIndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       push      rdi
       push      rsi
       sub       rsp,38
       test      r9d,0FFFFFFE0
       je        near ptr M01_L03
       cmp       r9d,40000000
       jne       short M01_L01
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       mov       r9,[r8]
       mov       eax,[r8+8]
       mov       r8,r9
       mov       r9d,eax
       call      qword ptr [7FFECA0B1420]; System.SpanHelpers.LastIndexOf(Char ByRef, Int32, Char ByRef, Int32)
M01_L00:
       nop
       add       rsp,38
       pop       rsi
       pop       rdi
       ret
M01_L01:
       cmp       r9d,10000000
       jne       short M01_L02
       mov       rcx,rdx
       mov       rdx,r8
       call      qword ptr [7FFECA1D9768]
       jmp       short M01_L00
M01_L02:
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFECA0D7840]
       mov       rdi,rax
       mov       ecx,1C89
       mov       rdx,7FFEC9E44000
       call      CORINFO_HELP_STRCNS
       mov       r8,rax
       mov       rdx,rdi
       mov       rcx,rsi
       call      qword ptr [7FFECA00DBD0]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
M01_L03:
       cmp       dword ptr [r8+8],0
       jne       short M01_L04
       mov       eax,[rdx+8]
       jmp       short M01_L00
M01_L04:
       xor       eax,eax
       mov       [rsp+20],rax
       mov       [rsp+28],eax
       call      qword ptr [7FFECA1DB4F8]
       jmp       near ptr M01_L00
; Total bytes of code 188

System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound(Options: (en-US, Ordinal, False))


Description of detection logic

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.198143361229885 > 26.15476635524929.
IsChangePoint: Marked as a change because one of 1/10/2023 7:48:18 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -32.44925690863216 (T) = (0 -30.560651004992245) / Math.Sqrt((0.45668063016683386 / (39)) + (0.4276232925573408 / (22))) is less than -2.000995378087428 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (39) + (22) - 2, .025) and -0.23060597463992888 = (24.83382303903911 - 30.560651004992245) / 24.83382303903911 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      rsi
       sub       rsp,40
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       rsi,rcx
       mov       rcx,[rsi+30]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r9d,[rsi+38]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       r8,[rdx+0C]
       mov       edx,[rdx+8]
       mov       rax,20B3A01A0F0
       add       rax,0C
       mov       [rsp+30],r8
       mov       [rsp+38],edx
       mov       [rsp+20],rax
       mov       dword ptr [rsp+28],4
       lea       rdx,[rsp+30]
       lea       r8,[rsp+20]
       call      qword ptr [7FFF30F5B498]; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,40
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FFF310BD7F8]
       int       3
; Total bytes of code 134
; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       sub       rsp,38
       test      r9d,0FFFFFFE0
       je        short M01_L02
       cmp       r9d,40000000
       jne       short M01_L01
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       mov       r9,[r8]
       mov       eax,[r8+8]
       mov       r8,r9
       mov       r9d,eax
       call      qword ptr [7FFF30E31408]; System.SpanHelpers.IndexOf(Char ByRef, Int32, Char ByRef, Int32)
M01_L00:
       nop
       add       rsp,38
       ret
M01_L01:
       cmp       r9d,10000000
       jne       short M01_L03
       mov       rcx,rdx
       mov       rdx,r8
       call      qword ptr [7FFF30F59750]
       jmp       short M01_L00
M01_L02:
       cmp       dword ptr [r8+8],0
       je        short M01_L04
       xor       eax,eax
       mov       [rsp+20],rax
       mov       dword ptr [rsp+28],1
       call      qword ptr [7FFF30F5B4F8]
       jmp       short M01_L00
M01_L03:
       mov       ecx,44
       mov       edx,59
       call      qword ptr [7FFF310BD7B0]
       int       3
M01_L04:
       xor       eax,eax
       add       rsp,38
       ret
; Total bytes of code 130

Compare Jit Disasm

; System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound()
       push      rsi
       sub       rsp,40
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       rsi,rcx
       mov       rcx,[rsi+30]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r9d,[rsi+38]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       r8,[rdx+0C]
       mov       edx,[rdx+8]
       mov       rax,16C6AEDB710
       add       rax,0C
       mov       [rsp+30],r8
       mov       [rsp+38],edx
       mov       [rsp+20],rax
       mov       dword ptr [rsp+28],4
       lea       rdx,[rsp+30]
       lea       r8,[rsp+20]
       call      qword ptr [7FFF31A1B498]; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,40
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FFF31B7D7F8]
       int       3
; Total bytes of code 134
; System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       sub       rsp,38
       test      r9d,0FFFFFFE0
       je        short M01_L02
       cmp       r9d,40000000
       jne       short M01_L01
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       mov       r9,[r8]
       mov       eax,[r8+8]
       mov       r8,r9
       mov       r9d,eax
       call      qword ptr [7FFF318F1408]; System.SpanHelpers.IndexOf(Char ByRef, Int32, Char ByRef, Int32)
M01_L00:
       nop
       add       rsp,38
       ret
M01_L01:
       cmp       r9d,10000000
       jne       short M01_L03
       mov       rcx,rdx
       mov       rdx,r8
       call      qword ptr [7FFF31A19750]
       jmp       short M01_L00
M01_L02:
       cmp       dword ptr [r8+8],0
       je        short M01_L04
       xor       eax,eax
       mov       [rsp+20],rax
       mov       dword ptr [rsp+28],1
       call      qword ptr [7FFF31A1B4F8]
       jmp       short M01_L00
M01_L03:
       mov       ecx,44
       mov       edx,59
       call      qword ptr [7FFF31B7D7B0]
       int       3
M01_L04:
       xor       eax,eax
       add       rsp,38
       ret
; Total bytes of code 130

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare fe1607679b977b453d43c4de276968dd9ae6d5ec
Diff Diff

Regressions in System.Numerics.Tests.Perf_BigInteger

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Parse - Duration of single invocation 1.57 μs 1.71 μs 1.09 0.00 False 18085.11563206399 19151.453684922246 1.0589621915918355)

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.Numerics.Tests.Perf_BigInteger*'

Payloads

Baseline
Compare

Histogram

System.Numerics.Tests.Perf_BigInteger.Parse(numberString: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890)


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 1.7106812887870537 > 1.6528650054316716.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsRegressionStdDev: Marked as regression because -68.92176273324088 (T) = (0 -1709.257182523983) / Math.Sqrt((47.13345526864503 / (38)) + (53.75412066555609 / (22))) is less than -2.001717484144427 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (22) - 2, .025) and -0.08388319016996176 = (1576.97545088411 - 1709.257182523983) / 1576.97545088411 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.Numerics.Tests.Perf_BigInteger.Parse(BigIntegerData)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,0B0
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+40],xmm4
       mov       rax,0FFFFFFFFFFFFFFA0
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+0B0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0C0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0D0],xmm4
       add       rax,30
       jne       short M00_L00
       mov       rsi,rdx
       mov       rdi,[r8+8]
       call      qword ptr [7FFA4944D8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       test      rax,rax
       je        near ptr M00_L05
       mov       rcx,rax
       call      qword ptr [7FFA4944DD08]; System.Globalization.NumberFormatInfo.<GetInstance>g__GetProviderNonNull|44_0(System.IFormatProvider)
       mov       rbx,rax
M00_L01:
       test      rdi,rdi
       je        near ptr M00_L09
       lea       rbp,[rdi+0C]
       mov       edi,[rdi+8]
       lea       rdx,[rsp+0A8]
       mov       ecx,7
       call      qword ptr [7FFA4953F810]; System.Numerics.BigNumber.TryValidateParseStyleInteger(System.Globalization.NumberStyles, System.ArgumentException ByRef)
       test      eax,eax
       je        near ptr M00_L10
       lea       rdx,[rsp+90]
       mov       ecx,7
       call      qword ptr [7FFA4953F810]; System.Numerics.BigNumber.TryValidateParseStyleInteger(System.Globalization.NumberStyles, System.ArgumentException ByRef)
       test      eax,eax
       je        near ptr M00_L11
       mov       rcx,offset MT_System.Text.StringBuilder
       call      CORINFO_HELP_NEWSFAST
       mov       r14,rax
       mov       dword ptr [r14+20],7FFFFFFF
       mov       rcx,offset MT_System.Char[]
       mov       edx,10
       call      CORINFO_HELP_NEWARR_1_VC
       lea       rcx,[r14+8]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       [rsp+78],r14
       xor       edx,edx
       mov       [rsp+80],edx
       mov       [rsp+84],edx
       mov       byte ptr [rsp+88],0
       mov       rdx,[rsp+78]
       xor       ecx,ecx
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+60],xmm0
       mov       [rsp+70],rcx
       mov       qword ptr [rsp+70],1
       mov       [rsp+58],rbp
       mov       r14,rbp
       mov       [rsp+50],r14
       mov       [rsp+20],rdx
       mov       [rsp+28],rbx
       mov       [rsp+30],ecx
       mov       rdx,[rsp+50]
       movsxd    rcx,edi
       lea       rdx,[rdx+rcx*2]
       lea       rcx,[rsp+50]
       lea       r9,[rsp+60]
       mov       r8d,7
       call      qword ptr [7FFA495733F0]; System.Globalization.FormatProvider+Number.ParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Text.StringBuilder, System.Globalization.NumberFormatInfo, Boolean)
       test      eax,eax
       je        short M00_L02
       mov       rcx,[rsp+50]
       sub       rcx,r14
       mov       rdx,rcx
       shr       rdx,3F
       add       rcx,rdx
       sar       rcx,1
       mov       edx,edi
       cmp       rcx,rdx
       jge       near ptr M00_L06
       mov       [rsp+40],rbp
       mov       [rsp+48],edi
       lea       rcx,[rsp+40]
       mov       rdx,[rsp+50]
       sub       rdx,r14
       mov       rax,rdx
       shr       rax,3F
       add       rdx,rax
       sar       rdx,1
       call      qword ptr [7FFA49573408]
       test      eax,eax
       jne       near ptr M00_L06
M00_L02:
       xor       ecx,ecx
M00_L03:
       xor       edx,edx
       mov       [rsp+58],rdx
       test      ecx,ecx
       jne       near ptr M00_L07
       xor       ecx,ecx
       mov       [rsp+80],ecx
       mov       [rsp+84],ecx
       mov       byte ptr [rsp+88],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+98],xmm0
       mov       edi,1
M00_L04:
       xor       edx,edx
       mov       [rsp+90],rdx
       mov       ecx,edi
       test      ecx,ecx
       jne       near ptr M00_L08
       mov       rdx,[rsp+98]
       mov       rcx,rsi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       eax,[rsp+0A0]
       mov       [rsi+8],eax
       mov       rax,rsi
       add       rsp,0B0
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M00_L05:
       call      qword ptr [7FFA4944D8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       rbx,rax
       jmp       near ptr M00_L01
M00_L06:
       xor       ecx,ecx
       mov       [rsp+58],rcx
       mov       ecx,1
       jmp       near ptr M00_L03
M00_L07:
       mov       ecx,[rsp+60]
       mov       [rsp+80],ecx
       mov       ecx,[rsp+64]
       mov       [rsp+84],ecx
       mov       ecx,[rsp+68]
       mov       [rsp+88],cl
       lea       rcx,[rsp+78]
       lea       rdx,[rsp+98]
       call      qword ptr [7FFA4953F8A0]; System.Numerics.BigNumber.NumberToBigInteger(BigNumberBuffer ByRef, System.Numerics.BigInteger ByRef)
       mov       edi,eax
       jmp       near ptr M00_L04
M00_L08:
       call      qword ptr [7FFA4953F7E0]
       int       3
M00_L09:
       mov       ecx,1
       mov       rdx,7FFA494F8A70
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFA49265BA0]
       int       3
M00_L10:
       mov       rcx,[rsp+0A8]
       call      CORINFO_HELP_THROW
M00_L11:
       mov       rcx,[rsp+90]
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 713
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FFA49094E68
       mov       edx,250
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,208D8400488
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,208D8400468
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,2496CF05EE0
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FFA49257030]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FFA4912D8B8]
       int       3
; Total bytes of code 157
; System.Globalization.NumberFormatInfo.<GetInstance>g__GetProviderNonNull|44_0(System.IFormatProvider)
       push      rsi
       sub       rsp,20
       mov       rsi,rcx
       mov       rdx,rsi
       mov       rcx,offset MT_System.Globalization.CultureInfo
       call      qword ptr [7FFA4912D828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object)
       test      rax,rax
       je        short M02_L00
       cmp       byte ptr [rax+61],0
       jne       short M02_L00
       mov       rcx,[rax+18]
       test      rcx,rcx
       je        short M02_L03
       mov       rax,rcx
       add       rsp,20
       pop       rsi
       ret
M02_L00:
       mov       rax,rsi
       test      rax,rax
       je        short M02_L01
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       je        short M02_L01
       xor       eax,eax
M02_L01:
       test      rax,rax
       je        short M02_L04
M02_L02:
       add       rsp,20
       pop       rsi
       ret
M02_L03:
       mov       rcx,rax
       mov       rax,[rax]
       mov       rax,[rax+50]
       add       rsp,20
       pop       rsi
       jmp       qword ptr [rax+10]
M02_L04:
       mov       rcx,rsi
       mov       r11,7FFA48F80598
       mov       rdx,2496CF05EE0
       call      qword ptr [r11]
       mov       rdx,rax
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       call      qword ptr [7FFA4912D828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object)
       test      rax,rax
       jne       short M02_L02
       add       rsp,20
       pop       rsi
       jmp       qword ptr [7FFA4944D8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
; Total bytes of code 172
; System.Numerics.BigNumber.TryValidateParseStyleInteger(System.Globalization.NumberStyles, System.ArgumentException ByRef)
       push      rdi
       push      rsi
       sub       rsp,28
       mov       rsi,rdx
       test      ecx,0FFFFFC00
       je        short M03_L00
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       mov       rcx,2496CF09F70
       call      qword ptr [7FFA49573018]
       mov       dword ptr [rdi+70],0E0434352
       mov       dword ptr [rdi+74],80131500
       lea       rcx,[rdi+10]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       dword ptr [rdi+74],80131501
       mov       rdx,2496CF066E8
       mov       [rdi+78],rdx
       mov       dword ptr [rdi+74],80070057
       mov       rcx,rsi
       mov       rdx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M03_L00:
       test      ecx,200
       je        short M03_L01
       test      ecx,0FFFFFDFC
       je        short M03_L01
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       mov       rcx,2496CF09FC0
       call      qword ptr [7FFA49573018]
       mov       dword ptr [rdi+70],0E0434352
       mov       dword ptr [rdi+74],80131500
       lea       rcx,[rdi+10]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       dword ptr [rdi+74],80131501
       mov       rdx,2496CF066E8
       mov       [rdi+78],rdx
       mov       dword ptr [rdi+74],80070057
       mov       rcx,rsi
       mov       rdx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M03_L01:
       xor       eax,eax
       mov       [rsi],rax
       mov       eax,1
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 266
; System.Globalization.FormatProvider+Number.ParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Text.StringBuilder, System.Globalization.NumberFormatInfo, Boolean)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,0C8
       xor       eax,eax
       mov       [rsp+38],rax
       vxorps    xmm4,xmm4,xmm4
       mov       rax,0FFFFFFFFFFFFFFA0
M04_L00:
       vmovdqa   xmmword ptr [rsp+rax+0A0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0B0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0C0],xmm4
       add       rax,30
       jne       short M04_L00
       mov       r15,rcx
       mov       rsi,rdx
       mov       edi,r8d
       mov       rbx,r9
       mov       r14,[rsp+130]
       mov       rbp,[rsp+138]
       xor       ecx,ecx
       mov       [rbx+4],ecx
       mov       byte ptr [rbx+8],0
       xor       r13d,r13d
       mov       rcx,[rbp+28]
       xor       eax,eax
       cmp       dword ptr [rcx+8],1
       sete      al
       cmp       dword ptr [rcx+8],1
       jne       short M04_L05
       movzx     eax,word ptr [rcx+0C]
       cmp       eax,208B
       ja        short M04_L01
       cmp       eax,2012
       je        short M04_L03
       cmp       eax,207B
       je        short M04_L03
       cmp       eax,208B
       je        short M04_L03
       jmp       short M04_L04
M04_L01:
       cmp       eax,2796
       ja        short M04_L02
       cmp       eax,2212
       je        short M04_L03
       cmp       eax,2796
       je        short M04_L03
       jmp       short M04_L04
M04_L02:
       cmp       eax,0FE63
       je        short M04_L03
       cmp       eax,0FF0D
       jne       short M04_L04
M04_L03:
       mov       eax,1
       jmp       short M04_L05
M04_L04:
       xor       eax,eax
M04_L05:
       mov       [rsp+0C4],eax
       xor       r9d,r9d
       test      edi,100
       je        short M04_L06
       mov       r13,[rbp+50]
       mov       r10,[rbp+48]
       mov       r11,[rbp+40]
       mov       dword ptr [rsp+0C0],1
       jmp       short M04_L07
M04_L06:
       mov       r10,[rbp+30]
       mov       [rsp+28],r10
       mov       r11,[rbp+38]
       mov       [rsp+20],r11
       mov       [rsp+0C0],r9d
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
M04_L07:
       xor       r8d,r8d
       xor       edx,edx
       test      r14,r14
       setne     dl
       mov       [rsp+0B8],edx
       test      edx,edx
       jne       short M04_L08
       mov       ecx,20
       jmp       short M04_L09
M04_L08:
       mov       ecx,7FFFFFFF
M04_L09:
       mov       [rsp+0B4],ecx
       mov       [rsp+110],r15
       mov       r12,[r15]
       cmp       r12,rsi
       jb        short M04_L10
       xor       ecx,ecx
       jmp       short M04_L11
M04_L10:
       movzx     ecx,word ptr [r12]
M04_L11:
       movzx     ecx,cx
       mov       r15,[rbx+10]
       mov       [rsp+0A8],r15
M04_L12:
       cmp       ecx,20
       je        short M04_L13
       cmp       ecx,9
       jl        short M04_L14
       mov       [rsp+0B0],ecx
       cmp       ecx,0D
       mov       ecx,[rsp+0B0]
       jg        short M04_L14
M04_L13:
       test      dil,1
       je        short M04_L14
       test      r8b,1
       je        near ptr M04_L26
       test      r8b,20
       jne       near ptr M04_L26
       cmp       dword ptr [rbp+0A8],2
       je        near ptr M04_L26
M04_L14:
       test      dil,4
       je        near ptr M04_L23
       mov       [rsp+0BC],r8d
       test      r8b,1
       jne       short M04_L15
       mov       r15,[rbp+20]
       test      r15,r15
       jne       short M04_L16
       xor       r15d,r15d
       mov       [rsp+0B0],ecx
       mov       [rsp+28],r10
       mov       [rsp+20],r11
       jmp       short M04_L17
M04_L15:
       mov       r8d,[rsp+0BC]
       jmp       near ptr M04_L23
M04_L16:
       add       r15,0C
       mov       [rsp+98],r15
       mov       r15,[rsp+98]
       mov       [rsp+0B0],ecx
       mov       [rsp+28],r10
       mov       [rsp+20],r11
M04_L17:
       mov       rcx,r12
       mov       rdx,rsi
       mov       r8,r15
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+98],rcx
       test      rax,rax
       jne       short M04_L21
       mov       rcx,[rbp+28]
       test      rcx,rcx
       jne       short M04_L18
       xor       r8d,r8d
       jmp       short M04_L19
M04_L18:
       add       rcx,0C
       mov       [rsp+90],rcx
       mov       r8,[rsp+90]
M04_L19:
       mov       rcx,r12
       mov       rdx,rsi
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+90],rcx
       xor       ecx,ecx
       test      rax,rax
       sete      cl
       test      [rsp+0C4],ecx
       je        short M04_L20
       cmp       r12,rsi
       jae       short M04_L20
       cmp       word ptr [r12],2D
       jne       short M04_L20
       lea       rax,[r12+2]
M04_L20:
       test      rax,rax
       mov       ecx,[rsp+0B0]
       je        short M04_L22
       mov       byte ptr [rbx+8],1
M04_L21:
       mov       r12d,[rsp+0BC]
       or        r12d,1
       jmp       near ptr M04_L25
M04_L22:
       mov       r8d,[rsp+0BC]
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
M04_L23:
       mov       [rsp+0B0],ecx
       cmp       ecx,28
       jne       short M04_L24
       test      dil,10
       je        short M04_L24
       test      r8b,1
       jne       short M04_L24
       or        r8d,3
       mov       [rsp+0BC],r8d
       mov       byte ptr [rbx+8],1
       mov       r8d,[rsp+0BC]
       jmp       short M04_L26
M04_L24:
       test      r13,r13
       je        near ptr M04_L30
       mov       [rsp+0BC],r8d
       mov       [rsp+28],r10
       mov       [rsp+20],r11
       lea       r15,[r13+0C]
       mov       [rsp+88],r15
       mov       r15,[rsp+88]
       mov       rcx,r12
       mov       rdx,rsi
       mov       r8,r15
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+88],rcx
       test      rax,rax
       je        short M04_L27
       mov       r12d,[rsp+0BC]
       or        r12d,20
       xor       r13d,r13d
M04_L25:
       add       rax,0FFFFFFFFFFFFFFFE
       mov       rcx,rax
       mov       r8d,r12d
       mov       r12,rcx
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
M04_L26:
       add       r12,2
       cmp       r12,rsi
       jb        short M04_L28
       xor       ecx,ecx
       jmp       short M04_L29
M04_L27:
       mov       r8d,[rsp+0BC]
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
       jmp       short M04_L30
M04_L28:
       movzx     ecx,word ptr [r12]
M04_L29:
       movzx     ecx,cx
       jmp       near ptr M04_L12
M04_L30:
       xor       r15d,r15d
       xor       edx,edx
       mov       [rsp+0A4],edx
       mov       [rsp+28],r10
M04_L31:
       mov       ecx,[rsp+0B0]
       lea       r10d,[rcx-30]
       cmp       r10d,9
       jbe       short M04_L32
       test      edi,200
       je        near ptr M04_L43
       mov       r10d,ecx
       or        r10d,20
       movzx     r10d,r10w
       add       r10d,0FFFFFF9F
       cmp       r10d,5
       ja        near ptr M04_L43
M04_L32:
       or        r8d,4
       cmp       ecx,30
       jne       short M04_L33
       mov       [rsp+0BC],r8d
       test      r8b,8
       jne       short M04_L34
       mov       r10d,[rsp+0B8]
       test      r10d,r10d
       je        near ptr M04_L41
       test      edi,200
       je        near ptr M04_L41
       mov       r8d,[rsp+0BC]
M04_L33:
       cmp       r15d,[rsp+0B4]
       jge       near ptr M04_L38
       cmp       dword ptr [rsp+0B8],0
       je        short M04_L36
       mov       [rsp+20],r11
       mov       r10d,[r14+18]
       mov       r11,[r14+8]
       cmp       [r11+8],r10d
       jbe       short M04_L35
       mov       r10d,r10d
       mov       [rsp+0B0],ecx
       mov       [r11+r10*2+10],cx
       inc       dword ptr [r14+18]
       mov       [rsp+0BC],r8d
       jmp       short M04_L37
M04_L34:
       mov       r8d,[rsp+0BC]
       jmp       short M04_L33
M04_L35:
       mov       [rsp+0B0],ecx
       mov       [rsp+0BC],r8d
       mov       rcx,r14
       mov       edx,[rsp+0B0]
       mov       r8d,1
       call      qword ptr [7FFA492BD510]; System.Text.StringBuilder.Append(Char, Int32)
       jmp       short M04_L37
M04_L36:
       lea       r10d,[r15+1]
       movsxd    r15,r15d
       mov       rdx,[rsp+0A8]
       mov       [rdx+r15*2],cx
       mov       [rsp+0B0],ecx
       mov       [rsp+0BC],r8d
       mov       [rsp+20],r11
       mov       [rsp+0A8],rdx
       mov       r15d,r10d
M04_L37:
       xor       ecx,ecx
       cmp       dword ptr [rsp+0B0],30
       setne     cl
       movzx     r10d,byte ptr [rsp+140]
       or        ecx,r10d
       je        short M04_L40
       mov       [rsp+0A4],r15d
       mov       r8d,[rsp+0BC]
       mov       r11,[rsp+20]
M04_L38:
       test      r8b,10
       jne       short M04_L39
       lea       rcx,[rbx+4]
       inc       dword ptr [rcx]
M04_L39:
       or        r8d,8
       jmp       near ptr M04_L63
M04_L40:
       mov       r8d,[rsp+0BC]
       mov       r11,[rsp+20]
       jmp       short M04_L38
M04_L41:
       mov       r8d,[rsp+0BC]
       test      r8b,10
       je        short M04_L42
       lea       rcx,[rbx+4]
       dec       dword ptr [rcx]
       jmp       near ptr M04_L63
M04_L42:
       jmp       near ptr M04_L63
M04_L43:
       test      dil,20
       je        near ptr M04_L53
       mov       [rsp+0BC],r8d
       test      r8b,10
       jne       short M04_L44
       mov       r10,[rsp+28]
       test      r10,r10
       jne       short M04_L45
       xor       edx,edx
       mov       [rsp+0B0],ecx
       mov       [rsp+78],rdx
       mov       [rsp+28],r10
       mov       [rsp+20],r11
       jmp       short M04_L46
M04_L44:
       mov       r8d,[rsp+0BC]
       jmp       near ptr M04_L53
M04_L45:
       mov       [rsp+28],r10
       lea       rdx,[r10+0C]
       mov       [rsp+80],rdx
       mov       rdx,[rsp+80]
       mov       [rsp+78],rdx
       mov       [rsp+0B0],ecx
       mov       [rsp+20],r11
M04_L46:
       mov       rcx,r12
       mov       rdx,rsi
       mov       r8,[rsp+78]
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+80],rcx
       test      rax,rax
       jne       short M04_L51
       cmp       dword ptr [rsp+0C0],0
       je        short M04_L48
       test      byte ptr [rsp+0BC],20
       jne       short M04_L47
       mov       rcx,[rbp+30]
       test      rcx,rcx
       jne       short M04_L49
       xor       r8d,r8d
       jmp       short M04_L50
M04_L47:
       mov       ecx,[rsp+0B0]
       mov       r8d,[rsp+0BC]
       mov       r11,[rsp+20]
       jmp       short M04_L53
M04_L48:
       mov       ecx,[rsp+0B0]
       mov       r8d,[rsp+0BC]
       mov       r11,[rsp+20]
       jmp       short M04_L53
M04_L49:
       add       rcx,0C
       mov       [rsp+70],rcx
       mov       r8,[rsp+70]
M04_L50:
       mov       rcx,r12
       mov       rdx,rsi
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+70],rcx
       test      rax,rax
       mov       ecx,[rsp+0B0]
       je        short M04_L52
M04_L51:
       mov       r12d,[rsp+0BC]
       or        r12d,10
       jmp       near ptr M04_L62
M04_L52:
       mov       r8d,[rsp+0BC]
       mov       r11,[rsp+20]
M04_L53:
       test      dil,40
       je        near ptr M04_L67
       test      r8b,4
       je        near ptr M04_L67
       mov       [rsp+0BC],r8d
       test      r8b,10
       jne       short M04_L54
       test      r11,r11
       jne       short M04_L55
       xor       r10d,r10d
       mov       [rsp+0B0],ecx
       mov       [rsp+20],r11
       jmp       short M04_L56
M04_L54:
       mov       r8d,[rsp+0BC]
       jmp       near ptr M04_L67
M04_L55:
       mov       [rsp+20],r11
       lea       r10,[r11+0C]
       mov       [rsp+68],r10
       mov       r10,[rsp+68]
       mov       [rsp+0B0],ecx
M04_L56:
       mov       rcx,r12
       mov       rdx,rsi
       mov       r8,r10
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+68],rcx
       test      rax,rax
       jne       short M04_L59
       cmp       dword ptr [rsp+0C0],0
       je        short M04_L58
       test      byte ptr [rsp+0BC],20
       jne       short M04_L57
       mov       rcx,[rbp+38]
       test      rcx,rcx
       jne       short M04_L60
       xor       r8d,r8d
       jmp       short M04_L61
M04_L57:
       mov       ecx,[rsp+0B0]
       mov       r8d,[rsp+0BC]
       jmp       near ptr M04_L67
M04_L58:
       mov       ecx,[rsp+0B0]
       mov       r8d,[rsp+0BC]
       jmp       short M04_L67
M04_L59:
       mov       r12d,[rsp+0BC]
       jmp       short M04_L62
M04_L60:
       add       rcx,0C
       mov       [rsp+60],rcx
       mov       r8,[rsp+60]
M04_L61:
       mov       rcx,r12
       mov       rdx,rsi
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+60],rcx
       test      rax,rax
       mov       ecx,[rsp+0B0]
       je        short M04_L64
       mov       r12d,[rsp+0BC]
M04_L62:
       lea       rcx,[rax-2]
       mov       r9,rcx
       mov       r8d,r12d
       mov       r12,r9
       mov       r11,[rsp+20]
M04_L63:
       add       r12,2
       cmp       r12,rsi
       jb        short M04_L65
       xor       ecx,ecx
       jmp       short M04_L66
M04_L64:
       mov       r8d,[rsp+0BC]
       jmp       short M04_L67
M04_L65:
       movzx     ecx,word ptr [r12]
M04_L66:
       movzx     ecx,cx
       mov       [rsp+0B0],ecx
       jmp       near ptr M04_L31
M04_L67:
       xor       r15d,r15d
       mov       edx,[rsp+0A4]
       mov       [rbx],edx
       cmp       dword ptr [rsp+0B8],0
       je        short M04_L69
       mov       edx,[r14+18]
       mov       r9,[r14+8]
       mov       r10d,[r9+8]
       cmp       r10d,edx
       jbe       short M04_L68
       mov       edx,edx
       mov       word ptr [r9+rdx*2+10],0
       inc       dword ptr [r14+18]
       mov       [rsp+0B0],ecx
       mov       [rsp+0BC],r8d
       jmp       short M04_L70
M04_L68:
       mov       [rsp+0B0],ecx
       mov       [rsp+0BC],r8d
       mov       rcx,r14
       xor       edx,edx
       mov       r8d,1
       call      qword ptr [7FFA492BD510]; System.Text.StringBuilder.Append(Char, Int32)
       jmp       short M04_L70
M04_L69:
       movsxd    rdx,edx
       mov       r14,[rsp+0A8]
       mov       word ptr [r14+rdx*2],0
       mov       [rsp+0B0],ecx
       mov       [rsp+0BC],r8d
M04_L70:
       test      byte ptr [rsp+0BC],4
       je        near ptr M04_L116
       mov       ecx,[rsp+0B0]
       cmp       ecx,45
       je        short M04_L71
       cmp       ecx,65
       jne       near ptr M04_L97
M04_L71:
       test      dil,80
       je        near ptr M04_L97
       lea       rcx,[r12+2]
       mov       r14,rcx
       cmp       r14,rsi
       jb        short M04_L72
       xor       ecx,ecx
       jmp       short M04_L73
M04_L72:
       movzx     ecx,word ptr [r14]
M04_L73:
       movzx     ecx,cx
       mov       [rsp+0B0],ecx
       mov       rcx,[rbp+20]
       test      rcx,rcx
       jne       short M04_L74
       xor       r10d,r10d
       jmp       short M04_L75
M04_L74:
       add       rcx,0C
       mov       [rsp+58],rcx
       mov       r10,[rsp+58]
M04_L75:
       mov       rcx,r14
       mov       rdx,rsi
       mov       r8,r10
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+58],rcx
       test      rax,rax
       je        short M04_L78
       mov       r14,rax
       cmp       r14,rsi
       jb        short M04_L76
       xor       ecx,ecx
       jmp       short M04_L77
M04_L76:
       movzx     ecx,word ptr [r14]
M04_L77:
       movzx     r9d,cx
       mov       [rsp+0B0],r9d
       jmp       short M04_L84
M04_L78:
       mov       rcx,[rbp+28]
       test      rcx,rcx
       jne       short M04_L79
       xor       r8d,r8d
       jmp       short M04_L80
M04_L79:
       add       rcx,0C
       mov       [rsp+50],rcx
       mov       r8,[rsp+50]
M04_L80:
       mov       rcx,r14
       mov       rdx,rsi
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+50],rcx
       xor       ecx,ecx
       test      rax,rax
       sete      cl
       test      [rsp+0C4],ecx
       je        short M04_L81
       cmp       r14,rsi
       jae       short M04_L81
       cmp       word ptr [r14],2D
       jne       short M04_L81
       lea       rax,[r14+2]
M04_L81:
       test      rax,rax
       je        short M04_L84
       mov       r14,rax
       cmp       r14,rsi
       jb        short M04_L82
       xor       ecx,ecx
       jmp       short M04_L83
M04_L82:
       movzx     ecx,word ptr [r14]
M04_L83:
       movzx     ecx,cx
       mov       r15d,ecx
       mov       ecx,1
       mov       [rsp+0B0],r15d
       mov       r15d,ecx
M04_L84:
       mov       r9d,[rsp+0B0]
       lea       ecx,[r9-30]
       cmp       ecx,9
       ja        near ptr M04_L94
       xor       ecx,ecx
       jmp       short M04_L89
M04_L85:
       cmp       ecx,5F5E100
       mov       r9d,r12d
       jl        short M04_L89
       mov       ecx,7FFFFFFF
       xor       edx,edx
       mov       [rbx+4],edx
       lea       edx,[r9-30]
       cmp       edx,9
       mov       r12d,r9d
       ja        short M04_L92
M04_L86:
       add       r14,2
       cmp       r14,rsi
       jb        short M04_L87
       xor       r9d,r9d
       jmp       short M04_L88
M04_L87:
       movzx     r9d,word ptr [r14]
M04_L88:
       movzx     r9d,r9w
       mov       r12d,r9d
       lea       edx,[r12-30]
       cmp       edx,9
       jbe       short M04_L86
       mov       r9d,r12d
       mov       r12d,r9d
       jmp       short M04_L92
M04_L89:
       lea       ecx,[rcx+rcx*4]
       lea       ecx,[r9+rcx*2-30]
       add       r14,2
       cmp       r14,rsi
       jb        short M04_L90
       xor       r9d,r9d
       jmp       short M04_L91
M04_L90:
       movzx     r9d,word ptr [r14]
M04_L91:
       movzx     r9d,r9w
       mov       r12d,r9d
       lea       edx,[r12-30]
       cmp       edx,9
       jbe       short M04_L85
M04_L92:
       test      r15d,r15d
       je        short M04_L93
       neg       ecx
M04_L93:
       lea       rdx,[rbx+4]
       add       [rdx],ecx
       mov       ecx,r12d
       mov       r12,r14
       jmp       short M04_L97
M04_L94:
       mov       r14,r12
       cmp       r14,rsi
       jb        short M04_L95
       xor       ecx,ecx
       jmp       short M04_L96
M04_L95:
       movzx     ecx,word ptr [r14]
M04_L96:
       movzx     r12d,cx
       mov       ecx,r12d
       mov       r12,r14
M04_L97:
       cmp       ecx,20
       je        short M04_L98
       cmp       ecx,9
       jl        short M04_L99
       mov       [rsp+0B0],ecx
       cmp       ecx,0D
       mov       ecx,[rsp+0B0]
       jg        short M04_L99
M04_L98:
       test      dil,2
       jne       near ptr M04_L110
M04_L99:
       test      dil,8
       je        near ptr M04_L106
       test      byte ptr [rsp+0BC],1
       jne       near ptr M04_L106
       mov       rdx,[rbp+20]
       test      rdx,rdx
       jne       short M04_L100
       xor       r9d,r9d
       mov       [rsp+0B0],ecx
       jmp       short M04_L101
M04_L100:
       add       rdx,0C
       mov       [rsp+48],rdx
       mov       r9,[rsp+48]
       mov       [rsp+0B0],ecx
M04_L101:
       mov       rcx,r12
       mov       rdx,rsi
       mov       r8,r9
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+48],rcx
       test      rax,rax
       jne       short M04_L105
       mov       rcx,[rbp+28]
       test      rcx,rcx
       jne       short M04_L102
       xor       r8d,r8d
       jmp       short M04_L103
M04_L102:
       add       rcx,0C
       mov       [rsp+40],rcx
       mov       r8,[rsp+40]
M04_L103:
       mov       rcx,r12
       mov       rdx,rsi
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+40],rcx
       xor       ecx,ecx
       test      rax,rax
       sete      cl
       test      [rsp+0C4],ecx
       je        short M04_L104
       cmp       r12,rsi
       jae       short M04_L104
       cmp       word ptr [r12],2D
       jne       short M04_L104
       lea       rax,[r12+2]
M04_L104:
       test      rax,rax
       mov       ecx,[rsp+0B0]
       je        short M04_L106
       mov       byte ptr [rbx+8],1
M04_L105:
       mov       r12d,[rsp+0BC]
       or        r12d,1
       jmp       short M04_L109
M04_L106:
       cmp       ecx,29
       jne       short M04_L108
       mov       r8d,[rsp+0BC]
       test      r8b,2
       je        short M04_L107
       and       r8d,0FFFFFFFD
       mov       [rsp+0BC],r8d
       jmp       short M04_L110
M04_L107:
       mov       [rsp+0BC],r8d
M04_L108:
       test      r13,r13
       je        short M04_L113
       add       r13,0C
       mov       [rsp+38],r13
       mov       rcx,[rsp+38]
       mov       [rsp+30],rcx
       mov       rcx,r12
       mov       rdx,rsi
       mov       r8,[rsp+30]
       call      qword ptr [7FFA495733A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       edx,edx
       mov       [rsp+38],rdx
       test      rax,rax
       je        short M04_L113
       xor       r13d,r13d
       mov       r12d,[rsp+0BC]
M04_L109:
       add       rax,0FFFFFFFFFFFFFFFE
       mov       r14,rax
       mov       [rsp+0BC],r12d
       mov       r12,r14
M04_L110:
       add       r12,2
       cmp       r12,rsi
       jb        short M04_L111
       xor       edx,edx
       jmp       short M04_L112
M04_L111:
       movzx     edx,word ptr [r12]
M04_L112:
       movzx     ecx,dx
       mov       r14d,ecx
       mov       ecx,r14d
       jmp       near ptr M04_L97
M04_L113:
       mov       r8d,[rsp+0BC]
       test      r8b,2
       jne       short M04_L116
       test      r8b,8
       jne       short M04_L115
       cmp       byte ptr [rsp+140],0
       jne       short M04_L114
       xor       eax,eax
       mov       [rbx+4],eax
M04_L114:
       test      r8b,10
       jne       short M04_L115
       mov       byte ptr [rbx+8],0
M04_L115:
       mov       r15,[rsp+110]
       mov       [r15],r12
       mov       eax,1
       add       rsp,0C8
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M04_L116:
       mov       r15,[rsp+110]
       mov       [r15],r12
       xor       eax,eax
       add       rsp,0C8
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
; Total bytes of code 3088
; System.Numerics.BigNumber.NumberToBigInteger(BigNumberBuffer ByRef, System.Numerics.BigInteger ByRef)
       push      rbp
       push      rsi
       sub       rsp,48
       lea       rbp,[rsp+50]
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-20],xmm4
       xor       eax,eax
       mov       [rbp-10],rax
       mov       [rbp-30],rsp
       mov       eax,[rcx+0C]
       mov       [rbp-18],eax
       cmp       dword ptr [rbp-18],7FFFFFFF
       jne       short M05_L00
       xor       eax,eax
       mov       [rdx],rax
       mov       [rdx+8],rax
       mov       eax,2
       add       rsp,48
       pop       rsi
       pop       rbp
       ret
M05_L00:
       cmp       dword ptr [rbp-18],0
       jge       short M05_L01
       xor       eax,eax
       mov       [rdx],rax
       mov       [rdx+8],rax
       mov       eax,1
       add       rsp,48
       pop       rsi
       pop       rbp
       ret
M05_L01:
       mov       r8,[rcx]
       mov       eax,[r8+1C]
       add       eax,[r8+18]
       cmp       eax,[7FFA494F8F68]
       jg        short M05_L02
       lea       r8,[rbp-20]
       call      qword ptr [7FFA4953F948]; System.Numerics.BigNumber.<NumberToBigInteger>g__Naive|14_0(BigNumberBuffer ByRef, System.Numerics.BigInteger ByRef, <>c__DisplayClass14_0 ByRef)
       mov       esi,eax
       jmp       short M05_L03
M05_L02:
       lea       r8,[rbp-20]
       call      qword ptr [7FFA4953F978]
       mov       esi,eax
M05_L03:
       cmp       qword ptr [rbp-20],0
       je        short M05_L04
       mov       rcx,7FFA49094E68
       mov       edx,22
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,208D8401EF8
       mov       rcx,[rcx]
       mov       rdx,[rbp-20]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFA496E7550]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M05_L04:
       mov       eax,esi
       add       rsp,48
       pop       rsi
       pop       rbp
       ret
       push      rbp
       push      rsi
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+50]
       cmp       qword ptr [rbp-20],0
       je        short M05_L05
       mov       rcx,7FFA49094E68
       mov       edx,22
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,208D8401EF8
       mov       rcx,[rcx]
       mov       rdx,[rbp-20]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFA496E7550]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M05_L05:
       nop
       add       rsp,28
       pop       rsi
       pop       rbp
       ret
; Total bytes of code 284

Compare Jit Disasm

; System.Numerics.Tests.Perf_BigInteger.Parse(BigIntegerData)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,0B0
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+40],xmm4
       mov       rax,0FFFFFFFFFFFFFFA0
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+0B0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0C0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0D0],xmm4
       add       rax,30
       jne       short M00_L00
       mov       rsi,rdx
       mov       rdi,[r8+8]
       call      qword ptr [7FFBDA65D8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       test      rax,rax
       je        near ptr M00_L05
       mov       rcx,rax
       call      qword ptr [7FFBDA65DD08]; System.Globalization.NumberFormatInfo.<GetInstance>g__GetProviderNonNull|44_0(System.IFormatProvider)
       mov       rbx,rax
M00_L01:
       test      rdi,rdi
       je        near ptr M00_L09
       lea       rbp,[rdi+0C]
       mov       edi,[rdi+8]
       lea       rdx,[rsp+0A8]
       mov       ecx,7
       call      qword ptr [7FFBDA74F810]; System.Numerics.BigNumber.TryValidateParseStyleInteger(System.Globalization.NumberStyles, System.ArgumentException ByRef)
       test      eax,eax
       je        near ptr M00_L10
       lea       rdx,[rsp+90]
       mov       ecx,7
       call      qword ptr [7FFBDA74F810]; System.Numerics.BigNumber.TryValidateParseStyleInteger(System.Globalization.NumberStyles, System.ArgumentException ByRef)
       test      eax,eax
       je        near ptr M00_L11
       mov       rcx,offset MT_System.Text.StringBuilder
       call      CORINFO_HELP_NEWSFAST
       mov       r14,rax
       mov       dword ptr [r14+20],7FFFFFFF
       mov       rcx,offset MT_System.Char[]
       mov       edx,10
       call      CORINFO_HELP_NEWARR_1_VC
       lea       rcx,[r14+8]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       [rsp+78],r14
       xor       edx,edx
       mov       [rsp+80],edx
       mov       [rsp+84],edx
       mov       byte ptr [rsp+88],0
       mov       rdx,[rsp+78]
       xor       ecx,ecx
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+60],xmm0
       mov       [rsp+70],rcx
       mov       qword ptr [rsp+70],1
       mov       [rsp+58],rbp
       mov       r14,rbp
       mov       [rsp+50],r14
       mov       [rsp+20],rdx
       mov       [rsp+28],rbx
       mov       [rsp+30],ecx
       mov       rdx,[rsp+50]
       movsxd    rcx,edi
       lea       rdx,[rdx+rcx*2]
       lea       rcx,[rsp+50]
       lea       r9,[rsp+60]
       mov       r8d,7
       call      qword ptr [7FFBDA7833F0]; System.Globalization.FormatProvider+Number.ParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Text.StringBuilder, System.Globalization.NumberFormatInfo, Boolean)
       test      eax,eax
       je        short M00_L02
       mov       rcx,[rsp+50]
       sub       rcx,r14
       mov       rdx,rcx
       shr       rdx,3F
       add       rcx,rdx
       sar       rcx,1
       mov       edx,edi
       cmp       rcx,rdx
       jge       near ptr M00_L06
       mov       [rsp+40],rbp
       mov       [rsp+48],edi
       lea       rcx,[rsp+40]
       mov       rdx,[rsp+50]
       sub       rdx,r14
       mov       rax,rdx
       shr       rax,3F
       add       rdx,rax
       sar       rdx,1
       call      qword ptr [7FFBDA783408]
       test      eax,eax
       jne       near ptr M00_L06
M00_L02:
       xor       ecx,ecx
M00_L03:
       xor       edx,edx
       mov       [rsp+58],rdx
       test      ecx,ecx
       jne       near ptr M00_L07
       xor       ecx,ecx
       mov       [rsp+80],ecx
       mov       [rsp+84],ecx
       mov       byte ptr [rsp+88],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+98],xmm0
       mov       edi,1
M00_L04:
       xor       edx,edx
       mov       [rsp+90],rdx
       mov       ecx,edi
       test      ecx,ecx
       jne       near ptr M00_L08
       mov       rdx,[rsp+98]
       mov       rcx,rsi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       eax,[rsp+0A0]
       mov       [rsi+8],eax
       mov       rax,rsi
       add       rsp,0B0
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M00_L05:
       call      qword ptr [7FFBDA65D8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       rbx,rax
       jmp       near ptr M00_L01
M00_L06:
       xor       ecx,ecx
       mov       [rsp+58],rcx
       mov       ecx,1
       jmp       near ptr M00_L03
M00_L07:
       mov       ecx,[rsp+60]
       mov       [rsp+80],ecx
       mov       ecx,[rsp+64]
       mov       [rsp+84],ecx
       mov       ecx,[rsp+68]
       mov       [rsp+88],cl
       lea       rcx,[rsp+78]
       lea       rdx,[rsp+98]
       call      qword ptr [7FFBDA74F8A0]; System.Numerics.BigNumber.NumberToBigInteger(BigNumberBuffer ByRef, System.Numerics.BigInteger ByRef)
       mov       edi,eax
       jmp       near ptr M00_L04
M00_L08:
       call      qword ptr [7FFBDA74F7E0]
       int       3
M00_L09:
       mov       ecx,1
       mov       rdx,7FFBDA708F80
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFBDA475BA0]
       int       3
M00_L10:
       mov       rcx,[rsp+0A8]
       call      CORINFO_HELP_THROW
M00_L11:
       mov       rcx,[rsp+90]
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 713
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FFBDA2A4E68
       mov       edx,250
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,14A21800488
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,14A21800468
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,18AB6297408
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FFBDA4675D0]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FFBDA33D8B8]
       int       3
; Total bytes of code 157
; System.Globalization.NumberFormatInfo.<GetInstance>g__GetProviderNonNull|44_0(System.IFormatProvider)
       push      rsi
       sub       rsp,20
       mov       rsi,rcx
       mov       rdx,rsi
       mov       rcx,offset MT_System.Globalization.CultureInfo
       call      qword ptr [7FFBDA33D828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object)
       test      rax,rax
       je        short M02_L00
       cmp       byte ptr [rax+61],0
       jne       short M02_L00
       mov       rcx,[rax+18]
       test      rcx,rcx
       je        short M02_L03
       mov       rax,rcx
       add       rsp,20
       pop       rsi
       ret
M02_L00:
       mov       rax,rsi
       test      rax,rax
       je        short M02_L01
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       xor       r11d,r11d
       cmp       [rax],rcx
       cmovne    rax,r11
M02_L01:
       test      rax,rax
       je        short M02_L04
M02_L02:
       add       rsp,20
       pop       rsi
       ret
M02_L03:
       mov       rcx,rax
       mov       rax,[rax]
       mov       rax,[rax+50]
       add       rsp,20
       pop       rsi
       jmp       qword ptr [rax+10]
M02_L04:
       mov       rcx,rsi
       mov       r11,7FFBDA1905A0
       mov       rdx,18AB6297408
       call      qword ptr [r11]
       mov       rdx,rax
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       call      qword ptr [7FFBDA33D828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object)
       test      rax,rax
       jne       short M02_L02
       add       rsp,20
       pop       rsi
       jmp       qword ptr [7FFBDA65D8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
; Total bytes of code 175
; System.Numerics.BigNumber.TryValidateParseStyleInteger(System.Globalization.NumberStyles, System.ArgumentException ByRef)
       push      rdi
       push      rsi
       sub       rsp,28
       mov       rsi,rdx
       test      ecx,0FFFFFC00
       je        short M03_L00
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       mov       rcx,18AB629B590
       call      qword ptr [7FFBDA783018]
       mov       dword ptr [rdi+70],0E0434352
       mov       dword ptr [rdi+74],80131500
       lea       rcx,[rdi+10]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       dword ptr [rdi+74],80131501
       mov       rdx,18AB6297BE8
       mov       [rdi+78],rdx
       mov       dword ptr [rdi+74],80070057
       mov       rcx,rsi
       mov       rdx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M03_L00:
       test      ecx,200
       je        short M03_L01
       test      ecx,0FFFFFDFC
       je        short M03_L01
       mov       rcx,offset MT_System.ArgumentException
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       mov       rcx,18AB629B5E0
       call      qword ptr [7FFBDA783018]
       mov       dword ptr [rdi+70],0E0434352
       mov       dword ptr [rdi+74],80131500
       lea       rcx,[rdi+10]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       dword ptr [rdi+74],80131501
       mov       rdx,18AB6297BE8
       mov       [rdi+78],rdx
       mov       dword ptr [rdi+74],80070057
       mov       rcx,rsi
       mov       rdx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M03_L01:
       xor       eax,eax
       mov       [rsi],rax
       mov       eax,1
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 266
; System.Globalization.FormatProvider+Number.ParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Text.StringBuilder, System.Globalization.NumberFormatInfo, Boolean)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,0D8
       xor       eax,eax
       mov       [rsp+38],rax
       vxorps    xmm4,xmm4,xmm4
       mov       rax,0FFFFFFFFFFFFFFA0
M04_L00:
       vmovdqa   xmmword ptr [rsp+rax+0A0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0B0],xmm4
       vmovdqa   xmmword ptr [rsp+rax+0C0],xmm4
       add       rax,30
       jne       short M04_L00
       mov       r15,rcx
       mov       rsi,rdx
       mov       edi,r8d
       mov       rbx,r9
       mov       r14,[rsp+140]
       mov       rbp,[rsp+148]
       xor       ecx,ecx
       mov       [rbx+4],ecx
       mov       byte ptr [rbx+8],0
       xor       r13d,r13d
       mov       rcx,[rbp+28]
       xor       eax,eax
       cmp       dword ptr [rcx+8],1
       sete      al
       cmp       dword ptr [rcx+8],1
       jne       short M04_L05
       movzx     eax,word ptr [rcx+0C]
       cmp       eax,208B
       ja        short M04_L01
       cmp       eax,2012
       je        short M04_L03
       cmp       eax,207B
       je        short M04_L03
       cmp       eax,208B
       je        short M04_L03
       jmp       short M04_L04
M04_L01:
       cmp       eax,2796
       ja        short M04_L02
       cmp       eax,2212
       je        short M04_L03
       cmp       eax,2796
       je        short M04_L03
       jmp       short M04_L04
M04_L02:
       cmp       eax,0FE63
       je        short M04_L03
       cmp       eax,0FF0D
       jne       short M04_L04
M04_L03:
       mov       eax,1
       jmp       short M04_L05
M04_L04:
       xor       eax,eax
M04_L05:
       mov       [rsp+0D4],eax
       xor       r9d,r9d
       test      edi,100
       je        short M04_L06
       mov       r13,[rbp+50]
       mov       r10,[rbp+48]
       mov       r11,[rbp+40]
       mov       dword ptr [rsp+0D0],1
       jmp       short M04_L07
M04_L06:
       mov       r10,[rbp+30]
       mov       [rsp+28],r10
       mov       r11,[rbp+38]
       mov       [rsp+20],r11
       mov       [rsp+0D0],r9d
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
M04_L07:
       xor       r8d,r8d
       xor       edx,edx
       test      r14,r14
       setne     dl
       mov       [rsp+0C8],edx
       mov       ecx,7FFFFFFF
       mov       r12d,20
       test      edx,edx
       cmove     ecx,r12d
       mov       r12d,ecx
       mov       [rsp+0C4],r12d
       mov       [rsp+120],r15
       mov       rcx,[r15]
       cmp       rcx,rsi
       jb        short M04_L08
       xor       r12d,r12d
       jmp       short M04_L09
M04_L08:
       movzx     r12d,word ptr [rcx]
M04_L09:
       movzx     r12d,r12w
       mov       r15,[rbx+10]
       mov       [rsp+0A8],r15
M04_L10:
       cmp       r12d,20
       je        short M04_L11
       cmp       r12d,9
       jl        short M04_L12
       cmp       r12d,0D
       jg        short M04_L12
M04_L11:
       test      dil,1
       je        short M04_L12
       test      r8b,1
       je        near ptr M04_L26
       test      r8b,20
       jne       near ptr M04_L26
       cmp       dword ptr [rbp+0A8],2
       je        near ptr M04_L26
M04_L12:
       test      dil,4
       je        near ptr M04_L23
       mov       [rsp+0CC],r8d
       test      r8b,1
       jne       short M04_L13
       mov       r15,[rbp+20]
       test      r15,r15
       jne       short M04_L14
       xor       r15d,r15d
       mov       [rsp+28],r10
       mov       [rsp+20],r11
       jmp       short M04_L15
M04_L13:
       mov       r8d,[rsp+0CC]
       jmp       near ptr M04_L23
M04_L14:
       add       r15,0C
       mov       [rsp+98],r15
       mov       r15,[rsp+98]
       mov       [rsp+28],r10
       mov       [rsp+20],r11
M04_L15:
       mov       [rsp+0B8],rcx
       mov       rdx,rsi
       mov       r8,r15
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+98],rcx
       test      rax,rax
       jne       near ptr M04_L19
       mov       rcx,[rbp+28]
       test      rcx,rcx
       jne       short M04_L16
       xor       r8d,r8d
       jmp       short M04_L17
M04_L16:
       add       rcx,0C
       mov       [rsp+90],rcx
       mov       r8,[rsp+90]
M04_L17:
       mov       rcx,[rsp+0B8]
       mov       rdx,rsi
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+90],rcx
       xor       ecx,ecx
       test      rax,rax
       sete      cl
       test      [rsp+0D4],ecx
       je        short M04_L18
       mov       r9,[rsp+0B8]
       cmp       r9,rsi
       jae       short M04_L22
       cmp       word ptr [r9],2D
       jne       short M04_L21
       lea       rax,[r9+2]
       mov       [rsp+0B8],r9
M04_L18:
       test      rax,rax
       mov       rcx,[rsp+0B8]
       je        short M04_L20
       mov       byte ptr [rbx+8],1
M04_L19:
       mov       r12d,[rsp+0CC]
       or        r12d,1
       jmp       near ptr M04_L25
M04_L20:
       mov       r8d,[rsp+0CC]
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
       jmp       short M04_L23
M04_L21:
       mov       [rsp+0B8],r9
       jmp       short M04_L18
M04_L22:
       mov       [rsp+0B8],r9
       jmp       short M04_L18
M04_L23:
       cmp       r12d,28
       jne       short M04_L24
       test      dil,10
       je        short M04_L24
       test      r8b,1
       jne       short M04_L24
       or        r8d,3
       mov       [rsp+0CC],r8d
       mov       byte ptr [rbx+8],1
       mov       r8d,[rsp+0CC]
       jmp       short M04_L26
M04_L24:
       test      r13,r13
       je        near ptr M04_L30
       mov       [rsp+0CC],r8d
       mov       [rsp+28],r10
       mov       [rsp+20],r11
       lea       r15,[r13+0C]
       mov       [rsp+88],r15
       mov       r15,[rsp+88]
       mov       [rsp+0B8],rcx
       mov       rdx,rsi
       mov       r8,r15
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+88],rcx
       test      rax,rax
       mov       rcx,[rsp+0B8]
       je        short M04_L27
       mov       r12d,[rsp+0CC]
       or        r12d,20
       xor       r13d,r13d
M04_L25:
       lea       rcx,[rax-2]
       mov       r8d,r12d
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
M04_L26:
       add       rcx,2
       mov       r12,rcx
       cmp       r12,rsi
       jb        short M04_L28
       xor       ecx,ecx
       jmp       short M04_L29
M04_L27:
       mov       r8d,[rsp+0CC]
       mov       r10,[rsp+28]
       mov       r11,[rsp+20]
       jmp       short M04_L30
M04_L28:
       mov       [rsp+0B8],r12
       movzx     ecx,word ptr [r12]
       mov       r12,[rsp+0B8]
M04_L29:
       movzx     ecx,cx
       mov       eax,ecx
       mov       rcx,r12
       mov       r12d,eax
       jmp       near ptr M04_L10
M04_L30:
       xor       r15d,r15d
       xor       edx,edx
       mov       [rsp+0A4],edx
       mov       [rsp+28],r10
M04_L31:
       lea       r10d,[r12-30]
       cmp       r10d,9
       jbe       short M04_L32
       test      edi,200
       je        near ptr M04_L43
       mov       r10d,r12d
       or        r10d,20
       movzx     r10d,r10w
       add       r10d,0FFFFFF9F
       cmp       r10d,5
       ja        near ptr M04_L43
M04_L32:
       or        r8d,4
       cmp       r12d,30
       jne       short M04_L33
       mov       [rsp+0CC],r8d
       test      r8b,8
       jne       short M04_L34
       mov       r10d,[rsp+0C8]
       test      r10d,r10d
       je        near ptr M04_L41
       test      edi,200
       je        near ptr M04_L41
       mov       r8d,[rsp+0CC]
M04_L33:
       cmp       r15d,[rsp+0C4]
       jge       near ptr M04_L38
       cmp       dword ptr [rsp+0C8],0
       je        short M04_L36
       mov       [rsp+20],r11
       mov       r10d,[r14+18]
       mov       r11,[r14+8]
       cmp       [r11+8],r10d
       jbe       short M04_L35
       mov       r10d,r10d
       mov       [r11+r10*2+10],r12w
       inc       dword ptr [r14+18]
       mov       [rsp+0B8],rcx
       mov       [rsp+0CC],r8d
       jmp       short M04_L37
M04_L34:
       mov       r8d,[rsp+0CC]
       jmp       short M04_L33
M04_L35:
       mov       [rsp+0B8],rcx
       mov       [rsp+0CC],r8d
       mov       rcx,r14
       mov       edx,r12d
       mov       r8d,1
       call      qword ptr [7FFBDA4CD510]; System.Text.StringBuilder.Append(Char, Int32)
       jmp       short M04_L37
M04_L36:
       lea       r10d,[r15+1]
       movsxd    r15,r15d
       mov       rdx,[rsp+0A8]
       mov       [rdx+r15*2],r12w
       mov       [rsp+0B8],rcx
       mov       [rsp+0CC],r8d
       mov       [rsp+20],r11
       mov       [rsp+0A8],rdx
       mov       r15d,r10d
M04_L37:
       xor       r10d,r10d
       cmp       r12d,30
       setne     r10b
       movzx     r12d,byte ptr [rsp+150]
       or        r10d,r12d
       je        short M04_L40
       mov       [rsp+0A4],r15d
       mov       rcx,[rsp+0B8]
       mov       r8d,[rsp+0CC]
       mov       r11,[rsp+20]
M04_L38:
       test      r8b,10
       jne       short M04_L39
       lea       r12,[rbx+4]
       inc       dword ptr [r12]
M04_L39:
       or        r8d,8
       jmp       near ptr M04_L63
M04_L40:
       mov       rcx,[rsp+0B8]
       mov       r8d,[rsp+0CC]
       mov       r11,[rsp+20]
       jmp       short M04_L38
M04_L41:
       mov       r8d,[rsp+0CC]
       test      r8b,10
       je        short M04_L42
       lea       r12,[rbx+4]
       dec       dword ptr [r12]
       jmp       near ptr M04_L63
M04_L42:
       jmp       near ptr M04_L63
M04_L43:
       test      dil,20
       je        near ptr M04_L53
       mov       [rsp+0CC],r8d
       test      r8b,10
       jne       short M04_L44
       mov       r10,[rsp+28]
       test      r10,r10
       jne       short M04_L45
       xor       edx,edx
       mov       [rsp+78],rdx
       mov       [rsp+28],r10
       mov       [rsp+20],r11
       jmp       short M04_L46
M04_L44:
       mov       r8d,[rsp+0CC]
       jmp       near ptr M04_L53
M04_L45:
       mov       [rsp+28],r10
       lea       rdx,[r10+0C]
       mov       [rsp+80],rdx
       mov       rdx,[rsp+80]
       mov       [rsp+78],rdx
       mov       [rsp+20],r11
M04_L46:
       mov       [rsp+0B8],rcx
       mov       rdx,rsi
       mov       r8,[rsp+78]
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+80],rcx
       test      rax,rax
       jne       near ptr M04_L51
       cmp       dword ptr [rsp+0D0],0
       je        short M04_L48
       test      byte ptr [rsp+0CC],20
       jne       short M04_L47
       mov       rcx,[rbp+30]
       test      rcx,rcx
       jne       short M04_L49
       xor       r8d,r8d
       jmp       short M04_L50
M04_L47:
       mov       rcx,[rsp+0B8]
       mov       r8d,[rsp+0CC]
       mov       r11,[rsp+20]
       jmp       short M04_L53
M04_L48:
       mov       rcx,[rsp+0B8]
       mov       r8d,[rsp+0CC]
       mov       r11,[rsp+20]
       jmp       short M04_L53
M04_L49:
       add       rcx,0C
       mov       [rsp+70],rcx
       mov       r8,[rsp+70]
M04_L50:
       mov       rcx,[rsp+0B8]
       mov       rdx,rsi
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+70],rcx
       test      rax,rax
       mov       rcx,[rsp+0B8]
       je        short M04_L52
M04_L51:
       mov       r12d,[rsp+0CC]
       or        r12d,10
       jmp       near ptr M04_L62
M04_L52:
       mov       r8d,[rsp+0CC]
       mov       r11,[rsp+20]
M04_L53:
       test      dil,40
       je        near ptr M04_L67
       test      r8b,4
       je        near ptr M04_L67
       mov       [rsp+0CC],r8d
       test      r8b,10
       jne       short M04_L54
       test      r11,r11
       jne       short M04_L55
       xor       r10d,r10d
       mov       [rsp+20],r11
       jmp       short M04_L56
M04_L54:
       mov       r8d,[rsp+0CC]
       jmp       near ptr M04_L67
M04_L55:
       mov       [rsp+20],r11
       lea       r10,[r11+0C]
       mov       [rsp+68],r10
       mov       r10,[rsp+68]
M04_L56:
       mov       [rsp+0B8],rcx
       mov       rdx,rsi
       mov       r8,r10
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+68],rcx
       test      rax,rax
       jne       short M04_L59
       cmp       dword ptr [rsp+0D0],0
       je        short M04_L58
       test      byte ptr [rsp+0CC],20
       jne       short M04_L57
       mov       rcx,[rbp+38]
       test      rcx,rcx
       jne       short M04_L60
       xor       r8d,r8d
       jmp       short M04_L61
M04_L57:
       mov       rcx,[rsp+0B8]
       mov       r8d,[rsp+0CC]
       jmp       near ptr M04_L67
M04_L58:
       mov       rcx,[rsp+0B8]
       mov       r8d,[rsp+0CC]
       jmp       near ptr M04_L67
M04_L59:
       mov       r12d,[rsp+0CC]
       jmp       short M04_L62
M04_L60:
       add       rcx,0C
       mov       [rsp+60],rcx
       mov       r8,[rsp+60]
M04_L61:
       mov       rcx,[rsp+0B8]
       mov       rdx,rsi
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+60],rcx
       test      rax,rax
       mov       rcx,[rsp+0B8]
       je        short M04_L64
       mov       r12d,[rsp+0CC]
M04_L62:
       lea       rcx,[rax-2]
       mov       r9,rcx
       mov       r8d,r12d
       mov       r11,[rsp+20]
M04_L63:
       add       rcx,2
       mov       r12,rcx
       cmp       r12,rsi
       jb        short M04_L65
       xor       ecx,ecx
       jmp       short M04_L66
M04_L64:
       mov       r8d,[rsp+0CC]
       jmp       short M04_L67
M04_L65:
       mov       [rsp+0B8],r12
       movzx     ecx,word ptr [r12]
       mov       r12,[rsp+0B8]
M04_L66:
       movzx     ecx,cx
       mov       eax,ecx
       mov       rcx,r12
       mov       r12d,eax
       jmp       near ptr M04_L31
M04_L67:
       xor       r15d,r15d
       mov       edx,[rsp+0A4]
       mov       [rbx],edx
       cmp       dword ptr [rsp+0C8],0
       je        short M04_L69
       mov       edx,[r14+18]
       mov       r9,[r14+8]
       mov       r10d,[r9+8]
       cmp       r10d,edx
       jbe       short M04_L68
       mov       edx,edx
       mov       word ptr [r9+rdx*2+10],0
       inc       dword ptr [r14+18]
       mov       [rsp+0B8],rcx
       mov       [rsp+0CC],r8d
       jmp       short M04_L70
M04_L68:
       mov       [rsp+0B8],rcx
       mov       [rsp+0CC],r8d
       mov       rcx,r14
       xor       edx,edx
       mov       r8d,1
       call      qword ptr [7FFBDA4CD510]; System.Text.StringBuilder.Append(Char, Int32)
       jmp       short M04_L70
M04_L69:
       movsxd    rdx,edx
       mov       r14,[rsp+0A8]
       mov       word ptr [r14+rdx*2],0
       mov       [rsp+0B8],rcx
       mov       [rsp+0CC],r8d
M04_L70:
       test      byte ptr [rsp+0CC],4
       je        near ptr M04_L117
       cmp       r12d,45
       je        short M04_L71
       cmp       r12d,65
       jne       near ptr M04_L96
M04_L71:
       test      dil,80
       je        near ptr M04_L96
       mov       rcx,[rsp+0B8]
       mov       r14,rcx
       lea       rcx,[r14+2]
       mov       r12,rcx
       cmp       r12,rsi
       jb        short M04_L72
       xor       ecx,ecx
       jmp       short M04_L73
M04_L72:
       movzx     ecx,word ptr [r12]
M04_L73:
       movzx     ecx,cx
       mov       [rsp+0B4],ecx
       mov       rcx,[rbp+20]
       test      rcx,rcx
       jne       short M04_L74
       xor       r10d,r10d
       jmp       short M04_L75
M04_L74:
       add       rcx,0C
       mov       [rsp+58],rcx
       mov       r10,[rsp+58]
M04_L75:
       mov       rcx,r12
       mov       rdx,rsi
       mov       r8,r10
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+58],rcx
       test      rax,rax
       je        short M04_L78
       mov       r12,rax
       cmp       r12,rsi
       jb        short M04_L76
       xor       ecx,ecx
       jmp       short M04_L77
M04_L76:
       movzx     ecx,word ptr [r12]
M04_L77:
       movzx     r9d,cx
       mov       [rsp+0B4],r9d
       jmp       near ptr M04_L84
M04_L78:
       mov       rcx,[rbp+28]
       test      rcx,rcx
       jne       short M04_L79
       xor       r8d,r8d
       jmp       short M04_L80
M04_L79:
       add       rcx,0C
       mov       [rsp+50],rcx
       mov       r8,[rsp+50]
M04_L80:
       mov       rcx,r12
       mov       rdx,rsi
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+50],rcx
       xor       ecx,ecx
       test      rax,rax
       sete      cl
       test      [rsp+0D4],ecx
       je        short M04_L81
       cmp       r12,rsi
       jae       short M04_L81
       lea       rcx,[r12+2]
       cmp       word ptr [r12],2D
       cmove     rax,rcx
M04_L81:
       test      rax,rax
       je        short M04_L84
       mov       r12,rax
       cmp       r12,rsi
       jb        short M04_L82
       xor       ecx,ecx
       jmp       short M04_L83
M04_L82:
       movzx     ecx,word ptr [r12]
M04_L83:
       movzx     ecx,cx
       mov       r15d,ecx
       mov       ecx,1
       mov       [rsp+0B4],r15d
       mov       r15d,ecx
M04_L84:
       mov       r9d,[rsp+0B4]
       lea       ecx,[r9-30]
       cmp       ecx,9
       ja        near ptr M04_L93
       xor       ecx,ecx
       jmp       short M04_L89
M04_L85:
       cmp       ecx,5F5E100
       mov       r9d,r14d
       jl        short M04_L89
       mov       ecx,7FFFFFFF
       xor       edx,edx
       mov       [rbx+4],edx
       lea       edx,[r9-30]
       cmp       edx,9
       mov       r14d,r9d
       ja        short M04_L92
M04_L86:
       add       r12,2
       cmp       r12,rsi
       jb        short M04_L87
       xor       r9d,r9d
       jmp       short M04_L88
M04_L87:
       movzx     r9d,word ptr [r12]
M04_L88:
       movzx     r9d,r9w
       mov       r14d,r9d
       lea       edx,[r14-30]
       cmp       edx,9
       jbe       short M04_L86
       mov       r9d,r14d
       mov       r14d,r9d
       jmp       short M04_L92
M04_L89:
       lea       ecx,[rcx+rcx*4]
       lea       ecx,[r9+rcx*2-30]
       add       r12,2
       cmp       r12,rsi
       jb        short M04_L90
       xor       r9d,r9d
       jmp       short M04_L91
M04_L90:
       movzx     r9d,word ptr [r12]
M04_L91:
       movzx     r9d,r9w
       mov       r14d,r9d
       lea       edx,[r14-30]
       cmp       edx,9
       jbe       short M04_L85
M04_L92:
       mov       edx,ecx
       neg       edx
       test      r15d,r15d
       cmovne    ecx,edx
       lea       rdx,[rbx+4]
       add       [rdx],ecx
       mov       [rsp+0B8],r12
       mov       r12d,r14d
       jmp       short M04_L96
M04_L93:
       mov       r12,r14
       cmp       r12,rsi
       jb        short M04_L94
       xor       ecx,ecx
       jmp       short M04_L95
M04_L94:
       movzx     ecx,word ptr [r12]
M04_L95:
       movzx     r14d,cx
       mov       r15d,r14d
       mov       [rsp+0B8],r12
       mov       r12d,r15d
M04_L96:
       cmp       r12d,20
       je        short M04_L97
       cmp       r12d,9
       jl        short M04_L98
       cmp       r12d,0D
       jg        short M04_L98
M04_L97:
       test      dil,2
       jne       near ptr M04_L111
M04_L98:
       test      dil,8
       je        near ptr M04_L107
       test      byte ptr [rsp+0CC],1
       jne       near ptr M04_L107
       mov       rdx,[rbp+20]
       test      rdx,rdx
       jne       short M04_L99
       xor       r9d,r9d
       jmp       short M04_L100
M04_L99:
       add       rdx,0C
       mov       [rsp+48],rdx
       mov       r9,[rsp+48]
M04_L100:
       mov       rcx,[rsp+0B8]
       mov       rdx,rsi
       mov       r8,r9
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+48],rcx
       test      rax,rax
       jne       short M04_L104
       mov       rcx,[rbp+28]
       test      rcx,rcx
       jne       short M04_L101
       xor       r8d,r8d
       jmp       short M04_L102
M04_L101:
       add       rcx,0C
       mov       [rsp+40],rcx
       mov       r8,[rsp+40]
M04_L102:
       mov       rcx,[rsp+0B8]
       mov       rdx,rsi
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       ecx,ecx
       mov       [rsp+40],rcx
       xor       ecx,ecx
       test      rax,rax
       sete      cl
       test      [rsp+0D4],ecx
       je        short M04_L103
       mov       r14,[rsp+0B8]
       cmp       r14,rsi
       jae       short M04_L106
       cmp       word ptr [r14],2D
       jne       short M04_L105
       lea       rax,[r14+2]
       mov       [rsp+0B8],r14
M04_L103:
       test      rax,rax
       je        short M04_L107
       mov       byte ptr [rbx+8],1
M04_L104:
       mov       r12d,[rsp+0CC]
       or        r12d,1
       jmp       near ptr M04_L110
M04_L105:
       mov       [rsp+0B8],r14
       jmp       short M04_L103
M04_L106:
       mov       [rsp+0B8],r14
       jmp       short M04_L103
M04_L107:
       cmp       r12d,29
       jne       short M04_L109
       mov       r8d,[rsp+0CC]
       test      r8b,2
       je        short M04_L108
       and       r8d,0FFFFFFFD
       mov       [rsp+0CC],r8d
       jmp       short M04_L111
M04_L108:
       mov       [rsp+0CC],r8d
M04_L109:
       test      r13,r13
       je        near ptr M04_L114
       add       r13,0C
       mov       [rsp+38],r13
       mov       rdx,[rsp+38]
       mov       [rsp+30],rdx
       mov       rcx,[rsp+0B8]
       mov       rdx,rsi
       mov       r8,[rsp+30]
       call      qword ptr [7FFBDA7833A8]; System.Globalization.FormatProvider+Number.MatchChars(Char*, Char*, Char*)
       xor       edx,edx
       mov       [rsp+38],rdx
       test      rax,rax
       je        short M04_L114
       xor       r13d,r13d
       mov       r12d,[rsp+0CC]
M04_L110:
       lea       rcx,[rax-2]
       mov       r14,rcx
       mov       [rsp+0B8],r14
       mov       [rsp+0CC],r12d
M04_L111:
       mov       rcx,[rsp+0B8]
       add       rcx,2
       mov       r14,rcx
       cmp       r14,rsi
       jb        short M04_L112
       xor       edx,edx
       jmp       short M04_L113
M04_L112:
       movzx     edx,word ptr [r14]
M04_L113:
       movzx     r12d,dx
       mov       [rsp+0B8],r14
       jmp       near ptr M04_L96
M04_L114:
       mov       r8d,[rsp+0CC]
       test      r8b,2
       jne       short M04_L117
       test      r8b,8
       jne       short M04_L116
       cmp       byte ptr [rsp+150],0
       jne       short M04_L115
       xor       eax,eax
       mov       [rbx+4],eax
M04_L115:
       test      r8b,10
       jne       short M04_L116
       mov       byte ptr [rbx+8],0
M04_L116:
       mov       r15,[rsp+120]
       mov       rcx,[rsp+0B8]
       mov       [r15],rcx
       mov       eax,1
       add       rsp,0D8
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M04_L117:
       mov       r15,[rsp+120]
       mov       rcx,[rsp+0B8]
       mov       [r15],rcx
       xor       eax,eax
       add       rsp,0D8
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
; Total bytes of code 3276
; System.Numerics.BigNumber.NumberToBigInteger(BigNumberBuffer ByRef, System.Numerics.BigInteger ByRef)
       push      rbp
       push      rsi
       sub       rsp,48
       lea       rbp,[rsp+50]
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-20],xmm4
       xor       eax,eax
       mov       [rbp-10],rax
       mov       [rbp-30],rsp
       mov       eax,[rcx+0C]
       mov       [rbp-18],eax
       cmp       dword ptr [rbp-18],7FFFFFFF
       jne       short M05_L00
       xor       eax,eax
       mov       [rdx],rax
       mov       [rdx+8],rax
       mov       eax,2
       add       rsp,48
       pop       rsi
       pop       rbp
       ret
M05_L00:
       cmp       dword ptr [rbp-18],0
       jge       short M05_L01
       xor       eax,eax
       mov       [rdx],rax
       mov       [rdx+8],rax
       mov       eax,1
       add       rsp,48
       pop       rsi
       pop       rbp
       ret
M05_L01:
       mov       r8,[rcx]
       mov       eax,[r8+1C]
       add       eax,[r8+18]
       cmp       eax,[7FFBDA709478]
       jg        short M05_L02
       lea       r8,[rbp-20]
       call      qword ptr [7FFBDA74F948]; System.Numerics.BigNumber.<NumberToBigInteger>g__Naive|14_0(BigNumberBuffer ByRef, System.Numerics.BigInteger ByRef, <>c__DisplayClass14_0 ByRef)
       mov       esi,eax
       jmp       short M05_L03
M05_L02:
       lea       r8,[rbp-20]
       call      qword ptr [7FFBDA74F978]
       mov       esi,eax
M05_L03:
       cmp       qword ptr [rbp-20],0
       je        short M05_L04
       mov       rcx,7FFBDA2A4E68
       mov       edx,22
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,14A21801F08
       mov       rcx,[rcx]
       mov       rdx,[rbp-20]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFBDA8F86F8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M05_L04:
       mov       eax,esi
       add       rsp,48
       pop       rsi
       pop       rbp
       ret
       push      rbp
       push      rsi
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+50]
       cmp       qword ptr [rbp-20],0
       je        short M05_L05
       mov       rcx,7FFBDA2A4E68
       mov       edx,22
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       rcx,14A21801F08
       mov       rcx,[rcx]
       mov       rdx,[rbp-20]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFBDA8F86F8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M05_L05:
       nop
       add       rsp,28
       pop       rsi
       pop       rbp
       ret
; Total bytes of code 284

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler performanceautofiler bot added the untriaged New issue has not been triaged by the area owner label Feb 14, 2023
@cincuranet cincuranet removed the untriaged New issue has not been triaged by the area owner label Feb 14, 2023
@cincuranet cincuranet changed the title [Perf] Windows/x64: 44 Regressions on 2/9/2023 12:40:40 PM Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_RustLang_Sherlock Feb 14, 2023
@cincuranet cincuranet transferred this issue from dotnet/perf-autofiling-issues Feb 14, 2023
@ghost ghost added the untriaged New issue has not been triaged by the area owner label Feb 14, 2023
@ghost
Copy link

ghost commented Feb 14, 2023

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

Issue Details

null

Author: performanceautofiler[bot]
Assignees: EgorBo
Labels:

area-System.Text.RegularExpressions

Milestone: -

@cincuranet
Copy link
Contributor

cincuranet commented Feb 14, 2023

Commit range: 3ff80e9...4da62e4

Probably caused by #81267.

cc @jakobbotsch

@jakobbotsch
Copy link
Member

jakobbotsch commented Feb 15, 2023

Yep, definitely caused by #81267. This all comes from two if-conversions inside System.SpanHelpers.IndexOf for this code:

// Overlap with the current chunk for trailing elements
if (offset > searchSpaceMinusValueTailLengthAndVector)
offset = searchSpaceMinusValueTailLengthAndVector;

G_M3489_IG16:
@@ -224,10 +224,9 @@ G_M3489_IG16:
        cmp      r15, rcx
        je       G_M3489_IG27
        cmp      r15, r12
-       jle      SHORT G_M3489_IG15
-       mov      r15, r12
+       cmovg    r15, r12
        jmp      SHORT G_M3489_IG15
-                                                ;; size=26 bbWeight=0 PerfScore 0.00
+                                                ;; size=25 bbWeight=0 PerfScore 0.00
 G_M3489_IG17:
        vpmovmskb eax, ymm0
                                                 ;; size=4 bbWeight=0 PerfScore 0.00
@@ -335,41 +334,40 @@ G_M3489_IG28:
 G_M3489_IG29:
        mov      rax, bword ptr [rsp+28H]
        cmp      r15, r12
+       cmovg    r15, r12
        mov      bword ptr [rsp+28H], rax
-       jle      G_M3489_IG25
-       mov      r15, r12
        jmp      G_M3489_IG25
-                                                ;; size=27 bbWeight=0 PerfScore 0.00
+                                                ;; size=22 bbWeight=0 PerfScore 0.00

We do try to avoid if-conversion inside loops, but the loop structure here is complicated so we probably do not recognize it (hence the low bbWeight).

jakobbotsch added a commit to jakobbotsch/runtime that referenced this issue Feb 15, 2023
The BB weight approach does not detect unnatural loops.

Fix dotnet#82106
@ghost ghost added the in-pr There is an active PR which will close this issue when it is merged label Feb 15, 2023
@buyaa-n buyaa-n added this to the 8.0.0 milestone Feb 15, 2023
@ghost ghost removed the untriaged New issue has not been triaged by the area owner label Feb 15, 2023
jakobbotsch added a commit that referenced this issue Feb 16, 2023
The BB weight approach does not detect unnatural loops.

Fix #82106
@ghost ghost removed the in-pr There is an active PR which will close this issue when it is merged label Feb 16, 2023
@ghost ghost locked as resolved and limited conversation to collaborators Mar 18, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants