dotnet / perf-autofiling-issues

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

[Perf] Windows/x86: 16 Regressions on 1/21/2023 6:49:37 AM #12017

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ff12237f483eb0afdabf1aeb71b69ff992d6bd40
Compare 7ec3634ee579d89b6024f72b595bfd7118093fc5
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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Globalization.Tests.Perf_DateTimeCultureInfo.ToString(culturestring%3a%20fr).html>) 287.27 ns 305.16 ns 1.06 0.00 False Trace Trace
[ToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Globalization.Tests.Perf_DateTimeCultureInfo.ToString(culturestring%3a%20da).html>) 280.14 ns 297.31 ns 1.06 0.01 False Trace Trace

graph graph Test Report

Repro

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: fr) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 305.1647966107305 > 301.5243624649873. IsChangePoint: Marked as a change because one of 12/14/2022 12:26:48 AM, 1/13/2023 4:18:46 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -43.00000409700908 (T) = (0 -304.57682771121455) / Math.Sqrt((1.85333562770943 / (51)) + (1.9130369492225525 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.05761071447725551 = (287.98576219205336 - 304.57682771121455) / 287.98576219205336 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) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 xor ecx,ecx call dword ptr ds:[0B58B330]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 45 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],1CF055B5 mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B58B438] mov eax,esi cmp dword ptr [ebp-30],1CF055B5 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0AAA38D0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B58B378]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0AF7D690]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],1CF055B5 je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B58B420] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[89F7D08]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],1CF055B5 je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8AA5060] int 3 ; Total bytes of code 367 ``` ### Compare Jit Disasm ```assembly ; System.Globalization.Tests.Perf_DateTimeCultureInfo.ToString(System.Globalization.CultureInfo) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 xor ecx,ecx call dword ptr ds:[0B62B330]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 45 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],0CC63DDB1 mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B62B438] mov eax,esi cmp dword ptr [ebp-30],0CC63DDB1 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0AB551B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B62B378]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0ACFD690]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],0CC63DDB1 je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B62B420] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8A85C78]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],0CC63DDB1 je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8B05060] int 3 ; Total bytes of code 367 ``` #### System.Globalization.Tests.Perf_DateTimeCultureInfo.ToString(culturestring: da) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 297.31183729898754 > 293.6976277823341. IsChangePoint: Marked as a change because one of 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -37.32862571971911 (T) = (0 -296.02146258319806) / Math.Sqrt((0.9443691611442188 / (51)) + (2.7851777574623116 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.05691309285478016 = (280.08117657396775 - 296.02146258319806) / 280.08117657396775 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) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 xor ecx,ecx call dword ptr ds:[0B67B330]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 45 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],0E32A544 mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B67B438] mov eax,esi cmp dword ptr [ebp-30],0E32A544 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0AB938D0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B67B378]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0B06D690]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],0E32A544 je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B67B420] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8AE7D08]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],0E32A544 je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8B95060] int 3 ; Total bytes of code 367 ``` ### Compare Jit Disasm ```assembly ; System.Globalization.Tests.Perf_DateTimeCultureInfo.ToString(System.Globalization.CultureInfo) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 xor ecx,ecx call dword ptr ds:[0B32B330]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 45 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],273C18A6 mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B32B438] mov eax,esi cmp dword ptr [ebp-30],273C18A6 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0A8551B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B32B378]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0A9FD690]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],273C18A6 je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B32B420] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8785C78]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],273C18A6 je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8805060] int 3 ; Total bytes of code 367 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ff12237f483eb0afdabf1aeb71b69ff992d6bd40
Compare 7ec3634ee579d89b6024f72b595bfd7118093fc5
Diff Diff

Regressions in System.Tests.Perf_DateTime

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_DateTime.ToString(format%3a%20null).html>) 312.32 ns 331.98 ns 1.06 0.01 False 2676.3676615170957 2794.3935547952765 1.0440992823875619 Trace Trace
[ToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_DateTime.ToString(format%3a%20%22G%22).html>) 312.70 ns 333.62 ns 1.07 0.01 False 2665.4122745854015 2785.4452166006363 1.0450335368977415 Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_DateTime*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_DateTime.ToString(format: null) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 331.98274237011583 > 328.15286936557794. IsChangePoint: Marked as a change because one of 12/14/2022 12:01:27 PM, 1/13/2023 4:18:46 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -23.14650179827211 (T) = (0 -335.7061065964193) / Math.Sqrt((7.543405320312097 / (51)) + (11.137237817482005 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.06585572769051379 = (314.9639279265536 - 335.7061065964193) / 314.9639279265536 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_DateTime.ToString(System.String) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 mov ecx,edx xor edx,edx call dword ptr ds:[0AF19678]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 47 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],13BFBE4A mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0AF19780] mov eax,esi cmp dword ptr [ebp-30],13BFBE4A je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0A4838D0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0AF196C0]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0AA69120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],13BFBE4A je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0AF19768] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[83C7D08]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],13BFBE4A je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8485060] int 3 ; Total bytes of code 367 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_DateTime.ToString(System.String) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 mov ecx,edx xor edx,edx call dword ptr ds:[0B779678]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 47 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],68EC7A09 mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B779780] mov eax,esi cmp dword ptr [ebp-30],68EC7A09 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0ACF51B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B7796C0]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0B2C9120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],68EC7A09 je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B779768] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8C95C78]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],68EC7A09 je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8D15060] int 3 ; Total bytes of code 367 ``` #### System.Tests.Perf_DateTime.ToString(format: "G") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 333.6245123022215 > 327.8472604097565. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/13/2023 4:18:46 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -22.05363639781273 (T) = (0 -334.3628942443974) / Math.Sqrt((14.416789381587552 / (51)) + (8.605747805059638 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.06222887227272771 = (314.7748126343054 - 334.3628942443974) / 314.7748126343054 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_DateTime.ToString(System.String) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 mov ecx,edx xor edx,edx call dword ptr ds:[0B739810]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 47 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],5BE70082 mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B739918] mov eax,esi cmp dword ptr [ebp-30],5BE70082 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0ACA38D0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B739858]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0B289120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],5BE70082 je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B739900] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8BE7D08]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],5BE70082 je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8CA5060] int 3 ; Total bytes of code 367 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_DateTime.ToString(System.String) push ebp mov ebp,esp sub esp,8 add ecx,8 mov eax,[ecx] mov ecx,[ecx+4] mov [ebp-8],eax mov [ebp-4],ecx push dword ptr [ebp-4] push dword ptr [ebp-8] push 80000000 push 0 mov ecx,edx xor edx,edx call dword ptr ds:[0AEB9810]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) mov esp,ebp pop ebp ret ; Total bytes of code 47 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],606E9C75 mov eax,edx test ecx,ecx je short M01_L01 cmp dword ptr [ecx+4],1 jne short M01_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M01_L04 cmp edx,72 jne short M01_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0AEB9918] mov eax,esi cmp dword ptr [ebp-30],606E9C75 je short M01_L00 call CORINFO_HELP_FAIL_FAST M01_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M01_L06 lea edx,[ecx+8] mov esi,[ecx+4] M01_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0A4351B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0AEB9858]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0AA09120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],606E9C75 je short M01_L03 call CORINFO_HELP_FAIL_FAST M01_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0AEB9900] mov ecx,[ebp-20] cmp ecx,edi ja short M01_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[83D5C78]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],606E9C75 je short M01_L05 call CORINFO_HELP_FAIL_FAST M01_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M01_L06: xor edx,edx xor esi,esi jmp near ptr M01_L02 M01_L07: call dword ptr ds:[8455060] int 3 ; Total bytes of code 367 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ff12237f483eb0afdabf1aeb71b69ff992d6bd40
Compare 7ec3634ee579d89b6024f72b595bfd7118093fc5
Diff Diff

Regressions in System.Tests.Perf_Boolean

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Boolean.TryParse(value%3a%20%220%22).html>) 7.75 ns 9.60 ns 1.24 0.01 False 51.13520789334244 65.3298520713384 1.2775904266900229 Trace Trace
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Boolean.TryParse(value%3a%20%22true%22).html>) 5.59 ns 7.12 ns 1.27 0.02 False 87.52848381777969 92.81182945893681 1.060361443620527 Trace Trace
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Boolean.TryParse(value%3a%20%22TRUE%22).html>) 5.59 ns 7.11 ns 1.27 0.02 False 88.12324731490735 92.50596804738515 1.0497339903602985
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Boolean.TryParse(value%3a%20%22false%22).html>) 8.48 ns 10.77 ns 1.27 0.01 False 111.11202167879541 129.7475912436285 1.1677187516100205 Trace Trace
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Boolean.TryParse(value%3a%20%22False%22).html>) 8.51 ns 10.88 ns 1.28 0.03 False 112.29369437759614 129.04516261264573 1.1491755020430754
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Boolean.TryParse(value%3a%20%22Bogus%22).html>) 14.93 ns 16.75 ns 1.12 0.01 False 152.26684814143363 168.7741431093047 1.108410301844156 Trace Trace

graph graph graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Boolean*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Boolean.TryParse(value: "0") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 9.595628981422859 > 8.131716239066677. IsChangePoint: Marked as a change because one of 11/11/2022 8:39:50 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -314.34257146551283 (T) = (0 -9.610447323641692) / Math.Sqrt((0.0006157191086520673 / (51)) + (0.00039835194377461246 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.2420782046070217 = (7.737393094891573 - 9.610447323641692) / 7.737393094891573 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L06 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,863754C add edx,8 cmp edi,4 jne short M00_L03 push 4 mov ecx,esi call dword ptr ds:[8E2BC60] mov ebx,eax M00_L01: test ebx,ebx je short M00_L07 mov dword ptr [ebp-10],1 M00_L02: mov eax,1 jmp short M00_L05 M00_L03: xor ebx,ebx jmp short M00_L01 M00_L04: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[37F9EA0]; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) M00_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L06: xor esi,esi xor edi,edi jmp short M00_L00 M00_L07: mov edx,8637534 add edx,8 mov ecx,edi cmp ecx,5 jne short M00_L10 mov ecx,edi cmp ecx,8 jge short M00_L08 push edi mov ecx,esi call dword ptr ds:[8E2BC60] mov ebx,eax jmp short M00_L09 M00_L08: push edi mov ecx,esi call dword ptr ds:[8E2BC30] mov ebx,eax M00_L09: test ebx,ebx jne short M00_L11 jmp short M00_L04 M00_L10: xor ebx,ebx jmp short M00_L09 M00_L11: xor eax,eax mov [ebp-10],eax jmp short M00_L02 ; Total bytes of code 155 ``` ```assembly ; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,[ebp+0C] cmp edi,5 jge short M01_L01 M01_L00: mov byte ptr [esi],0 xor eax,eax pop esi pop edi pop ebp ret 8 M01_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp+8] call dword ptr ds:[37F9B70] cmp [ebp+0C],edi je short M01_L00 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[37F9AE0] test eax,eax je short M01_L02 mov byte ptr [esi],1 mov eax,1 pop esi pop edi pop ebp ret 8 M01_L02: mov byte ptr [esi],0 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[37F9AF8] pop esi pop edi pop ebp ret 8 ; Total bytes of code 97 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L04 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,8A5754C add edx,8 mov ecx,edi cmp ecx,4 jne short M00_L01 cmp edi,8 jge short M00_L05 push edi mov ecx,esi call dword ptr ds:[914BC30] mov ebx,eax jmp short M00_L06 M00_L01: xor ebx,ebx M00_L02: test ebx,ebx je short M00_L09 mov dword ptr [ebp-10],1 M00_L03: mov eax,1 jmp short M00_L08 M00_L04: xor esi,esi xor edi,edi jmp short M00_L00 M00_L05: push edi mov ecx,esi call dword ptr ds:[914BC00] mov ebx,eax M00_L06: jmp short M00_L02 M00_L07: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[5609EA0]; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) M00_L08: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L09: mov ebx,8A57534 add ebx,8 mov ecx,5 call dword ptr ds:[8A214E0]; System.String.CheckStringComparison(System.StringComparison) push edi push esi push 5 push ebx call dword ptr ds:[0B307048]; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) test eax,eax je short M00_L07 xor eax,eax mov [ebp-10],eax jmp short M00_L03 ; Total bytes of code 152 ``` ```assembly ; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,[ebp+0C] cmp edi,5 jge short M01_L01 M01_L00: mov byte ptr [esi],0 xor eax,eax pop esi pop edi pop ebp ret 8 M01_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp+8] call dword ptr ds:[5609B70] cmp [ebp+0C],edi je short M01_L00 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[5609AE0] test eax,eax je short M01_L02 mov byte ptr [esi],1 mov eax,1 pop esi pop edi pop ebp ret 8 M01_L02: mov byte ptr [esi],0 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[5609AF8] pop esi pop edi pop ebp ret 8 ; Total bytes of code 97 ``` ```assembly ; System.String.CheckStringComparison(System.StringComparison) cmp ecx,5 ja short M02_L00 ret M02_L00: mov ecx,1A mov edx,2A call dword ptr ds:[9125330] int 3 ; Total bytes of code 23 ``` ```assembly ; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push esi mov eax,[ebp+14] cmp eax,[ebp+0C] je short M03_L00 xor eax,eax pop esi pop ebp ret 10 M03_L00: cmp dword ptr [ebp+0C],0 je short M03_L03 mov ecx,[ebp+10] mov edx,[ebp+8] mov esi,[ebp+14] cmp esi,8 jge short M03_L01 push esi call dword ptr ds:[914BC30] jmp short M03_L02 M03_L01: push esi call dword ptr ds:[914BC00] M03_L02: pop esi pop ebp ret 10 M03_L03: mov eax,1 pop esi pop ebp ret 10 ; Total bytes of code 70 ``` #### System.Tests.Perf_Boolean.TryParse(value: "true") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.123044510230607 > 5.882721061131169. IsChangePoint: Marked as a change because one of 11/11/2022 8:39:50 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -297.56291030713163 (T) = (0 -7.12025042914679) / Math.Sqrt((0.0007155976193899247 / (51)) + (0.00020310213969548918 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.27065678024711387 = (5.603598501053969 - 7.12025042914679) / 5.603598501053969 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L06 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,87C754C add edx,8 cmp edi,4 jne short M00_L03 push 4 mov ecx,esi call dword ptr ds:[8EBBC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax M00_L01: test ebx,ebx je short M00_L07 mov dword ptr [ebp-10],1 M00_L02: mov eax,1 jmp short M00_L05 M00_L03: xor ebx,ebx jmp short M00_L01 M00_L04: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[33F9EA0] M00_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L06: xor esi,esi xor edi,edi jmp short M00_L00 M00_L07: mov edx,87C7534 add edx,8 mov ecx,edi cmp ecx,5 jne short M00_L10 mov ecx,edi cmp ecx,8 jge short M00_L08 push edi mov ecx,esi call dword ptr ds:[8EBBC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L09 M00_L08: push edi mov ecx,esi call dword ptr ds:[8EBBC30] mov ebx,eax M00_L09: test ebx,ebx jne short M00_L11 jmp short M00_L04 M00_L10: xor ebx,ebx jmp short M00_L09 M00_L11: xor eax,eax mov [ebp-10],eax jmp short M00_L02 ; Total bytes of code 155 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[8EBBC00] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L04 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,814754C add edx,8 mov ecx,edi cmp ecx,4 jne short M00_L01 cmp edi,8 jge short M00_L05 push edi mov ecx,esi call dword ptr ds:[883BC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L06 M00_L01: xor ebx,ebx M00_L02: test ebx,ebx je short M00_L09 mov dword ptr [ebp-10],1 M00_L03: mov eax,1 jmp short M00_L08 M00_L04: xor esi,esi xor edi,edi jmp short M00_L00 M00_L05: push edi mov ecx,esi call dword ptr ds:[883BC00] mov ebx,eax M00_L06: jmp short M00_L02 M00_L07: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0E79EA0] M00_L08: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L09: mov ebx,8147534 add ebx,8 mov ecx,5 call dword ptr ds:[81114E0] push edi push esi push 5 push ebx call dword ptr ds:[0A9F7048] test eax,eax je short M00_L07 xor eax,eax mov [ebp-10],eax jmp short M00_L03 ; Total bytes of code 152 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[883BBD0] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` #### System.Tests.Perf_Boolean.TryParse(value: "TRUE") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.107051449576586 > 5.873516622803786. IsChangePoint: Marked as a change because one of 11/11/2022 8:39:50 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -126.35120506747538 (T) = (0 -7.116495876806845) / Math.Sqrt((0.00684864229898115 / (51)) + (0.0001208641938756902 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.2676226833959819 = (5.6140490147601625 - 7.116495876806845) / 5.6140490147601625 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L06 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,8307564 add edx,8 cmp edi,4 jne short M00_L03 push 4 mov ecx,esi call dword ptr ds:[89FBC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax M00_L01: test ebx,ebx je short M00_L07 mov dword ptr [ebp-10],1 M00_L02: mov eax,1 jmp short M00_L05 M00_L03: xor ebx,ebx jmp short M00_L01 M00_L04: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[4E19EA0] M00_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L06: xor esi,esi xor edi,edi jmp short M00_L00 M00_L07: mov edx,830754C add edx,8 mov ecx,edi cmp ecx,5 jne short M00_L10 mov ecx,edi cmp ecx,8 jge short M00_L08 push edi mov ecx,esi call dword ptr ds:[89FBC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L09 M00_L08: push edi mov ecx,esi call dword ptr ds:[89FBC30] mov ebx,eax M00_L09: test ebx,ebx jne short M00_L11 jmp short M00_L04 M00_L10: xor ebx,ebx jmp short M00_L09 M00_L11: xor eax,eax mov [ebp-10],eax jmp short M00_L02 ; Total bytes of code 155 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[89FBC00] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L04 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,89D7564 add edx,8 mov ecx,edi cmp ecx,4 jne short M00_L01 cmp edi,8 jge short M00_L05 push edi mov ecx,esi call dword ptr ds:[90CBC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L06 M00_L01: xor ebx,ebx M00_L02: test ebx,ebx je short M00_L09 mov dword ptr [ebp-10],1 M00_L03: mov eax,1 jmp short M00_L08 M00_L04: xor esi,esi xor edi,edi jmp short M00_L00 M00_L05: push edi mov ecx,esi call dword ptr ds:[90CBC00] mov ebx,eax M00_L06: jmp short M00_L02 M00_L07: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[3BF9EA0] M00_L08: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L09: mov ebx,89D754C add ebx,8 mov ecx,5 call dword ptr ds:[56814E0] push edi push esi push 5 push ebx call dword ptr ds:[0B287048] test eax,eax je short M00_L07 xor eax,eax mov [ebp-10],eax jmp short M00_L03 ; Total bytes of code 152 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[90CBBD0] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` #### System.Tests.Perf_Boolean.TryParse(value: "false") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 10.77114472902895 > 8.903150802906548. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -91.47713778969103 (T) = (0 -10.856172435378495) / Math.Sqrt((0.027732238195106444 / (51)) + (0.0033056821132895244 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.29692252367155086 = (8.370717785550504 - 10.856172435378495) / 8.370717785550504 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L06 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,893754C add edx,8 cmp edi,4 jne short M00_L03 push 4 mov ecx,esi call dword ptr ds:[902BC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax M00_L01: test ebx,ebx je short M00_L07 mov dword ptr [ebp-10],1 M00_L02: mov eax,1 jmp short M00_L05 M00_L03: xor ebx,ebx jmp short M00_L01 M00_L04: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[3A99EA0] M00_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L06: xor esi,esi xor edi,edi jmp short M00_L00 M00_L07: mov edx,8937534 add edx,8 mov ecx,edi cmp ecx,5 jne short M00_L10 mov ecx,edi cmp ecx,8 jge short M00_L08 push edi mov ecx,esi call dword ptr ds:[902BC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L09 M00_L08: push edi mov ecx,esi call dword ptr ds:[902BC30] mov ebx,eax M00_L09: test ebx,ebx jne short M00_L11 jmp short M00_L04 M00_L10: xor ebx,ebx jmp short M00_L09 M00_L11: xor eax,eax mov [ebp-10],eax jmp short M00_L02 ; Total bytes of code 155 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[902BC00] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L04 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,859754C add edx,8 mov ecx,edi cmp ecx,4 jne short M00_L01 cmp edi,8 jge short M00_L05 push edi mov ecx,esi call dword ptr ds:[8C8BC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L06 M00_L01: xor ebx,ebx M00_L02: test ebx,ebx je short M00_L09 mov dword ptr [ebp-10],1 M00_L03: mov eax,1 jmp short M00_L08 M00_L04: xor esi,esi xor edi,edi jmp short M00_L00 M00_L05: push edi mov ecx,esi call dword ptr ds:[8C8BC00] mov ebx,eax M00_L06: jmp short M00_L02 M00_L07: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[5199EA0] M00_L08: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L09: mov ebx,8597534 add ebx,8 mov ecx,5 call dword ptr ds:[85614E0]; System.String.CheckStringComparison(System.StringComparison) push edi push esi push 5 push ebx call dword ptr ds:[0AE47048]; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) test eax,eax je short M00_L07 xor eax,eax mov [ebp-10],eax jmp short M00_L03 ; Total bytes of code 152 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[8C8BBD0] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ```assembly ; System.String.CheckStringComparison(System.StringComparison) cmp ecx,5 ja short M02_L00 ret M02_L00: mov ecx,1A mov edx,2A call dword ptr ds:[8C65330] int 3 ; Total bytes of code 23 ``` ```assembly ; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push esi mov eax,[ebp+14] cmp eax,[ebp+0C] je short M03_L00 xor eax,eax pop esi pop ebp ret 10 M03_L00: cmp dword ptr [ebp+0C],0 je short M03_L03 mov ecx,[ebp+10] mov edx,[ebp+8] mov esi,[ebp+14] cmp esi,8 jge short M03_L01 push esi call dword ptr ds:[8C8BC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) jmp short M03_L02 M03_L01: push esi call dword ptr ds:[8C8BC00] M03_L02: pop esi pop ebp ret 10 M03_L03: mov eax,1 pop esi pop ebp ret 10 ; Total bytes of code 70 ``` #### System.Tests.Perf_Boolean.TryParse(value: "False") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 10.882538253639629 > 8.903488898873668. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -39.94284778763056 (T) = (0 -10.765019742486569) / Math.Sqrt((0.028560159747804986 / (51)) + (0.05150307467026283 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.2858492206304863 = (8.371914505814447 - 10.765019742486569) / 8.371914505814447 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L06 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,8AB754C add edx,8 cmp edi,4 jne short M00_L03 push 4 mov ecx,esi call dword ptr ds:[91ABC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax M00_L01: test ebx,ebx je short M00_L07 mov dword ptr [ebp-10],1 M00_L02: mov eax,1 jmp short M00_L05 M00_L03: xor ebx,ebx jmp short M00_L01 M00_L04: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[5589EA0] M00_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L06: xor esi,esi xor edi,edi jmp short M00_L00 M00_L07: mov edx,8AB4E08 add edx,8 mov ecx,edi cmp ecx,5 jne short M00_L10 mov ecx,edi cmp ecx,8 jge short M00_L08 push edi mov ecx,esi call dword ptr ds:[91ABC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L09 M00_L08: push edi mov ecx,esi call dword ptr ds:[91ABC30] mov ebx,eax M00_L09: test ebx,ebx jne short M00_L11 jmp short M00_L04 M00_L10: xor ebx,ebx jmp short M00_L09 M00_L11: xor eax,eax mov [ebp-10],eax jmp short M00_L02 ; Total bytes of code 155 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[91ABC00] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L04 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,7C1754C add edx,8 mov ecx,edi cmp ecx,4 jne short M00_L01 cmp edi,8 jge short M00_L05 push edi mov ecx,esi call dword ptr ds:[830BC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L06 M00_L01: xor ebx,ebx M00_L02: test ebx,ebx je short M00_L09 mov dword ptr [ebp-10],1 M00_L03: mov eax,1 jmp short M00_L08 M00_L04: xor esi,esi xor edi,edi jmp short M00_L00 M00_L05: push edi mov ecx,esi call dword ptr ds:[830BC00] mov ebx,eax M00_L06: jmp short M00_L02 M00_L07: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0E29EA0] M00_L08: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L09: mov ebx,7C14E08 add ebx,8 mov ecx,5 call dword ptr ds:[7BE14E0]; System.String.CheckStringComparison(System.StringComparison) push edi push esi push 5 push ebx call dword ptr ds:[0A4C7048]; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) test eax,eax je short M00_L07 xor eax,eax mov [ebp-10],eax jmp short M00_L03 ; Total bytes of code 152 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[830BBD0] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ```assembly ; System.String.CheckStringComparison(System.StringComparison) cmp ecx,5 ja short M02_L00 ret M02_L00: mov ecx,1A mov edx,2A call dword ptr ds:[82E5330] int 3 ; Total bytes of code 23 ``` ```assembly ; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push esi mov eax,[ebp+14] cmp eax,[ebp+0C] je short M03_L00 xor eax,eax pop esi pop ebp ret 10 M03_L00: cmp dword ptr [ebp+0C],0 je short M03_L03 mov ecx,[ebp+10] mov edx,[ebp+8] mov esi,[ebp+14] cmp esi,8 jge short M03_L01 push esi call dword ptr ds:[830BC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) jmp short M03_L02 M03_L01: push esi call dword ptr ds:[830BC00] M03_L02: pop esi pop ebp ret 10 M03_L03: mov eax,1 pop esi pop ebp ret 10 ; Total bytes of code 70 ``` #### System.Tests.Perf_Boolean.TryParse(value: "Bogus") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 16.75007200215666 > 15.67314887582263. IsChangePoint: Marked as a change because one of 11/11/2022 8:39:50 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -226.59139048179264 (T) = (0 -16.75837188448527) / Math.Sqrt((0.0017455553632088276 / (51)) + (0.0005368564455628825 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.12319742689336027 = (14.920237068951513 - 16.75837188448527) / 14.920237068951513 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L06 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,82F7564 add edx,8 cmp edi,4 jne short M00_L03 push 4 mov ecx,esi call dword ptr ds:[8AEBC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax M00_L01: test ebx,ebx je short M00_L07 mov dword ptr [ebp-10],1 M00_L02: mov eax,1 jmp short M00_L05 M00_L03: xor ebx,ebx jmp short M00_L01 M00_L04: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[4E59EA0]; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) M00_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L06: xor esi,esi xor edi,edi jmp short M00_L00 M00_L07: mov edx,82F754C add edx,8 mov ecx,edi cmp ecx,5 jne short M00_L10 mov ecx,edi cmp ecx,8 jge short M00_L08 push edi mov ecx,esi call dword ptr ds:[8AEBC60]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L09 M00_L08: push edi mov ecx,esi call dword ptr ds:[8AEBC30] mov ebx,eax M00_L09: test ebx,ebx jne short M00_L11 jmp short M00_L04 M00_L10: xor ebx,ebx jmp short M00_L09 M00_L11: xor eax,eax mov [ebp-10],eax jmp short M00_L02 ; Total bytes of code 155 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[8AEBC00] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ```assembly ; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,[ebp+0C] cmp edi,5 jge short M02_L01 M02_L00: mov byte ptr [esi],0 xor eax,eax pop esi pop edi pop ebp ret 8 M02_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp+8] call dword ptr ds:[4E59B70]; System.Boolean.TrimWhiteSpaceAndNull(System.ReadOnlySpan`1) cmp [ebp+0C],edi je short M02_L00 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[4E59AE0] test eax,eax je short M02_L02 mov byte ptr [esi],1 mov eax,1 pop esi pop edi pop ebp ret 8 M02_L02: mov byte ptr [esi],0 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[4E59AF8] pop esi pop edi pop ebp ret 8 ; Total bytes of code 97 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Boolean.TryParse(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax test edx,edx je short M00_L04 lea esi,[edx+8] mov edi,[edx+4] M00_L00: mov edx,7D57564 add edx,8 mov ecx,edi cmp ecx,4 jne short M00_L01 cmp edi,8 jge short M00_L05 push edi mov ecx,esi call dword ptr ds:[844BC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) mov ebx,eax jmp short M00_L06 M00_L01: xor ebx,ebx M00_L02: test ebx,ebx je short M00_L09 mov dword ptr [ebp-10],1 M00_L03: mov eax,1 jmp short M00_L08 M00_L04: xor esi,esi xor edi,edi jmp short M00_L00 M00_L05: push edi mov ecx,esi call dword ptr ds:[844BC00] mov ebx,eax M00_L06: jmp short M00_L02 M00_L07: push edi push esi lea ecx,[ebp-10] call dword ptr ds:[48B9EA0]; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) M00_L08: pop ecx pop ebx pop esi pop edi pop ebp ret M00_L09: mov ebx,7D5754C add ebx,8 mov ecx,5 call dword ptr ds:[49314E0]; System.String.CheckStringComparison(System.StringComparison) push edi push esi push 5 push ebx call dword ptr ds:[0A607048]; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) test eax,eax je short M00_L07 xor eax,eax mov [ebp-10],eax jmp short M00_L03 ; Total bytes of code 152 ``` ```assembly ; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov eax,[ebp+8] xor esi,esi cmp eax,2 jb near ptr M01_L03 M01_L00: mov edi,[ecx+esi] mov [ebp-10],edx mov ebx,[edx+esi] mov edx,edi or edx,ebx test edx,0FF80FF80 jne near ptr M01_L05 xor ebx,edi shl ebx,2 add edi,50005 or edi,0A000A0 add edi,1A001A or edi,0FF7FFF7F test edi,ebx jne near ptr M01_L07 add esi,4 add eax,0FFFFFFFE cmp eax,2 jae short M01_L02 M01_L01: test eax,eax je short M01_L04 movzx edi,word ptr [ecx+esi] mov edx,[ebp-10] movzx ebx,word ptr [edx+esi] mov edx,edi or edx,ebx cmp edx,7F ja short M01_L05 cmp edi,ebx je short M01_L04 or edi,20 lea eax,[edi-61] cmp eax,19 ja short M01_L07 mov eax,ebx or eax,20 xor edx,edx cmp edi,eax sete dl jmp short M01_L06 M01_L02: mov edx,[ebp-10] jmp near ptr M01_L00 M01_L03: mov [ebp-10],edx jmp short M01_L01 M01_L04: mov eax,1 pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L05: test edi,0FF80FF80 je short M01_L07 test ebx,0FF80FF80 je short M01_L07 mov edx,esi add edx,[ebp-10] push edx push eax add ecx,esi mov edx,eax call dword ptr ds:[844BBD0] xor edx,edx test eax,eax sete dl M01_L06: movzx eax,dl pop ecx pop ebx pop esi pop edi pop ebp ret 4 M01_L07: xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 234 ``` ```assembly ; System.Boolean.g__TryParseUncommon|20_0(System.ReadOnlySpan`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,[ebp+0C] cmp edi,5 jge short M02_L01 M02_L00: mov byte ptr [esi],0 xor eax,eax pop esi pop edi pop ebp ret 8 M02_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp+8] call dword ptr ds:[48B9B70]; System.Boolean.TrimWhiteSpaceAndNull(System.ReadOnlySpan`1) cmp [ebp+0C],edi je short M02_L00 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[48B9AE0] test eax,eax je short M02_L02 mov byte ptr [esi],1 mov eax,1 pop esi pop edi pop ebp ret 8 M02_L02: mov byte ptr [esi],0 push dword ptr [ebp+0C] push dword ptr [ebp+8] call dword ptr ds:[48B9AF8] pop esi pop edi pop ebp ret 8 ; Total bytes of code 97 ``` ```assembly ; System.String.CheckStringComparison(System.StringComparison) cmp ecx,5 ja short M03_L00 ret M03_L00: mov ecx,1A mov edx,2A call dword ptr ds:[8425330] int 3 ; Total bytes of code 23 ``` ```assembly ; System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push esi mov eax,[ebp+14] cmp eax,[ebp+0C] je short M04_L00 xor eax,eax pop esi pop ebp ret 10 M04_L00: cmp dword ptr [ebp+0C],0 je short M04_L03 mov ecx,[ebp+10] mov edx,[ebp+8] mov esi,[ebp+14] cmp esi,8 jge short M04_L01 push esi call dword ptr ds:[844BC30]; System.Globalization.Ordinal.EqualsIgnoreCase_Scalar(Char ByRef, Char ByRef, Int32) jmp short M04_L02 M04_L01: push esi call dword ptr ds:[844BC00] M04_L02: pop esi pop ebp ret 10 M04_L03: mov eax,1 pop esi pop ebp ret 10 ; Total bytes of code 70 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ff12237f483eb0afdabf1aeb71b69ff992d6bd40
Compare 7ec3634ee579d89b6024f72b595bfd7118093fc5
Diff Diff

Regressions in System.Tests.Perf_DateTimeOffset

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_DateTimeOffset.ToString(format%3a%20%22s%22).html>) 320.54 ns 342.73 ns 1.07 0.01 False 2788.6238919375264 2900.0067350649933 1.0399418664702318 Trace Trace
[ToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_DateTimeOffset.ToString(format%3a%20%22G%22).html>) 328.16 ns 345.98 ns 1.05 0.01 False 2776.5468393102906 2900.0120849572495 1.0444671935293655 Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_DateTimeOffset*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_DateTimeOffset.ToString(format: "s") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 342.7269491775467 > 337.8014198884469. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/13/2023 4:18:46 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -34.52849535043357 (T) = (0 -342.98921369195324) / Math.Sqrt((6.6606537162291435 / (51)) + (2.9992686222164466 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.059076383981544134 = (323.8569180463666 - 342.98921369195324) / 323.8569180463666 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_DateTimeOffset.ToString(System.String) push ebp mov ebp,esp push edi push esi sub esp,18 mov esi,edx cmp [ecx],cl lea edi,[ecx+4] lea edx,[ebp-10] mov ecx,edi call dword ptr ds:[0A935978]; System.DateTimeOffset.get_ClockDateTime() movsx eax,word ptr [edi] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge short M00_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl short M00_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-20],eax mov [ebp-1C],edx push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-1C] push dword ptr [ebp-20] mov ecx,esi xor edx,edx call dword ptr ds:[0B959810]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L00: call dword ptr ds:[8EC5240] int 3 ; Total bytes of code 122 ``` ```assembly ; System.DateTimeOffset.get_ClockDateTime() push ebp mov ebp,esp push edi push esi sub esp,30 mov esi,edx lea eax,[ecx+4] mov edx,[eax] mov eax,[eax+4] mov [ebp-18],edx mov [ebp-14],eax movsx eax,word ptr [ecx] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge near ptr M01_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl near ptr M01_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-28],eax mov [ebp-24],edx mov eax,[ebp-18] mov edx,[ebp-14] mov [ebp-30],eax mov [ebp-2C],edx mov eax,[ebp-30] mov edx,[ebp-2C] and eax,0FFFFFFFF and edx,3FFFFFFF add eax,[ebp-28] adc edx,[ebp-24] cmp eax,0F4374000 mov ecx,edx sbb ecx,2BCA2875 jae short M01_L01 mov ecx,[ebp-30] mov edi,[ebp-2C] and ecx,0 and edi,0C0000000 or eax,ecx or edx,edi mov [ebp-38],eax mov [ebp-34],edx mov eax,[ebp-38] mov edx,[ebp-34] and eax,0FFFFFFFF and edx,3FFFFFFF mov ecx,eax mov edi,edx cmp ecx,0F4374000 sbb edi,2BCA2875 jae short M01_L02 mov [ebp-20],eax mov [ebp-1C],edx mov eax,[ebp-20] mov [esi],eax mov eax,[ebp-1C] mov [esi+4],eax lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: call dword ptr ds:[8EC5240] int 3 M01_L01: mov ecx,1 call dword ptr ds:[8EDBA98] int 3 M01_L02: call dword ptr ds:[8EDBA38] int 3 ; Total bytes of code 248 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],82B1C539 mov eax,edx test ecx,ecx je short M02_L01 cmp dword ptr [ecx+4],1 jne short M02_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M02_L04 cmp edx,72 jne short M02_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B959918] mov eax,esi cmp dword ptr [ebp-30],82B1C539 je short M02_L00 call CORINFO_HELP_FAIL_FAST M02_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M02_L06 lea edx,[ecx+8] mov esi,[ecx+4] M02_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0AEC38D0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B959858]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0B4A9120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],82B1C539 je short M02_L03 call CORINFO_HELP_FAIL_FAST M02_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B959900] mov ecx,[ebp-20] cmp ecx,edi ja short M02_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8E07D08]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],82B1C539 je short M02_L05 call CORINFO_HELP_FAIL_FAST M02_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L06: xor edx,edx xor esi,esi jmp near ptr M02_L02 M02_L07: call dword ptr ds:[8EC5060] int 3 ; Total bytes of code 367 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_DateTimeOffset.ToString(System.String) push ebp mov ebp,esp push edi push esi sub esp,18 mov esi,edx cmp [ecx],cl lea edi,[ecx+4] lea edx,[ebp-10] mov ecx,edi call dword ptr ds:[8A27168]; System.DateTimeOffset.get_ClockDateTime() movsx eax,word ptr [edi] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge short M00_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl short M00_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-20],eax mov [ebp-1C],edx push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-1C] push dword ptr [ebp-20] mov ecx,esi xor edx,edx call dword ptr ds:[0B459810]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L00: call dword ptr ds:[89F5240] int 3 ; Total bytes of code 122 ``` ```assembly ; System.DateTimeOffset.get_ClockDateTime() push ebp mov ebp,esp push edi push esi sub esp,30 mov esi,edx lea eax,[ecx+4] mov edx,[eax] mov eax,[eax+4] mov [ebp-18],edx mov [ebp-14],eax movsx eax,word ptr [ecx] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge near ptr M01_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl near ptr M01_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-28],eax mov [ebp-24],edx mov eax,[ebp-18] mov edx,[ebp-14] mov [ebp-30],eax mov [ebp-2C],edx mov eax,[ebp-30] mov edx,[ebp-2C] and eax,0FFFFFFFF and edx,3FFFFFFF add eax,[ebp-28] adc edx,[ebp-24] cmp eax,0F4374000 mov ecx,edx sbb ecx,2BCA2875 jae short M01_L01 mov ecx,[ebp-30] mov edi,[ebp-2C] and ecx,0 and edi,0C0000000 or eax,ecx or edx,edi mov [ebp-38],eax mov [ebp-34],edx mov eax,[ebp-38] mov edx,[ebp-34] and eax,0FFFFFFFF and edx,3FFFFFFF mov ecx,eax mov edi,edx cmp ecx,0F4374000 sbb edi,2BCA2875 jae short M01_L02 mov [ebp-20],eax mov [ebp-1C],edx mov eax,[ebp-20] mov [esi],eax mov eax,[ebp-1C] mov [esi+4],eax lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: call dword ptr ds:[89F5240] int 3 M01_L01: mov ecx,1 call dword ptr ds:[89E9168] int 3 M01_L02: call dword ptr ds:[89E9108] int 3 ; Total bytes of code 248 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],1C2E03A3 mov eax,edx test ecx,ecx je short M02_L01 cmp dword ptr [ecx+4],1 jne short M02_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M02_L04 cmp edx,72 jne short M02_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B459918] mov eax,esi cmp dword ptr [ebp-30],1C2E03A3 je short M02_L00 call CORINFO_HELP_FAIL_FAST M02_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M02_L06 lea edx,[ecx+8] mov esi,[ecx+4] M02_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0A9D51B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B459858]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0AFA9120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],1C2E03A3 je short M02_L03 call CORINFO_HELP_FAIL_FAST M02_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B459900] mov ecx,[ebp-20] cmp ecx,edi ja short M02_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8975C78]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],1C2E03A3 je short M02_L05 call CORINFO_HELP_FAIL_FAST M02_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L06: xor edx,edx xor esi,esi jmp near ptr M02_L02 M02_L07: call dword ptr ds:[89F5060] int 3 ; Total bytes of code 367 ``` #### System.Tests.Perf_DateTimeOffset.ToString(format: "G") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 345.9755185127137 > 344.1727816488223. IsChangePoint: Marked as a change because one of 12/15/2022 5:36:17 AM, 1/13/2023 11:01:49 AM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -10.63788988051073 (T) = (0 -349.18999512171774) / Math.Sqrt((7.337782761475072 / (51)) + (64.53069616067239 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.06436053199353807 = (328.0749188131656 - 349.18999512171774) / 328.0749188131656 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_DateTimeOffset.ToString(System.String) push ebp mov ebp,esp push edi push esi sub esp,18 mov esi,edx cmp [ecx],cl lea edi,[ecx+4] lea edx,[ebp-10] mov ecx,edi call dword ptr ds:[0A6E5978]; System.DateTimeOffset.get_ClockDateTime() movsx eax,word ptr [edi] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge short M00_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl short M00_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-20],eax mov [ebp-1C],edx push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-1C] push dword ptr [ebp-20] mov ecx,esi xor edx,edx call dword ptr ds:[0B609810]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L00: call dword ptr ds:[8B75240] int 3 ; Total bytes of code 122 ``` ```assembly ; System.DateTimeOffset.get_ClockDateTime() push ebp mov ebp,esp push edi push esi sub esp,30 mov esi,edx lea eax,[ecx+4] mov edx,[eax] mov eax,[eax+4] mov [ebp-18],edx mov [ebp-14],eax movsx eax,word ptr [ecx] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge near ptr M01_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl near ptr M01_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-28],eax mov [ebp-24],edx mov eax,[ebp-18] mov edx,[ebp-14] mov [ebp-30],eax mov [ebp-2C],edx mov eax,[ebp-30] mov edx,[ebp-2C] and eax,0FFFFFFFF and edx,3FFFFFFF add eax,[ebp-28] adc edx,[ebp-24] cmp eax,0F4374000 mov ecx,edx sbb ecx,2BCA2875 jae short M01_L01 mov ecx,[ebp-30] mov edi,[ebp-2C] and ecx,0 and edi,0C0000000 or eax,ecx or edx,edi mov [ebp-38],eax mov [ebp-34],edx mov eax,[ebp-38] mov edx,[ebp-34] and eax,0FFFFFFFF and edx,3FFFFFFF mov ecx,eax mov edi,edx cmp ecx,0F4374000 sbb edi,2BCA2875 jae short M01_L02 mov [ebp-20],eax mov [ebp-1C],edx mov eax,[ebp-20] mov [esi],eax mov eax,[ebp-1C] mov [esi+4],eax lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: call dword ptr ds:[8B75240] int 3 M01_L01: mov ecx,1 call dword ptr ds:[8B8BA98] int 3 M01_L02: call dword ptr ds:[8B8BA38] int 3 ; Total bytes of code 248 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],7E521A23 mov eax,edx test ecx,ecx je short M02_L01 cmp dword ptr [ecx+4],1 jne short M02_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M02_L04 cmp edx,72 jne short M02_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B609918] mov eax,esi cmp dword ptr [ebp-30],7E521A23 je short M02_L00 call CORINFO_HELP_FAIL_FAST M02_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M02_L06 lea edx,[ecx+8] mov esi,[ecx+4] M02_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0AB738D0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B609858]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0B159120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],7E521A23 je short M02_L03 call CORINFO_HELP_FAIL_FAST M02_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B609900] mov ecx,[ebp-20] cmp ecx,edi ja short M02_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8AB7D08]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],7E521A23 je short M02_L05 call CORINFO_HELP_FAIL_FAST M02_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L06: xor edx,edx xor esi,esi jmp near ptr M02_L02 M02_L07: call dword ptr ds:[8B75060] int 3 ; Total bytes of code 367 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_DateTimeOffset.ToString(System.String) push ebp mov ebp,esp push edi push esi sub esp,18 mov esi,edx cmp [ecx],cl lea edi,[ecx+4] lea edx,[ebp-10] mov ecx,edi call dword ptr ds:[8BA7168]; System.DateTimeOffset.get_ClockDateTime() movsx eax,word ptr [edi] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge short M00_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl short M00_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-20],eax mov [ebp-1C],edx push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-1C] push dword ptr [ebp-20] mov ecx,esi xor edx,edx call dword ptr ds:[0B5D9810]; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L00: call dword ptr ds:[8B75240] int 3 ; Total bytes of code 122 ``` ```assembly ; System.DateTimeOffset.get_ClockDateTime() push ebp mov ebp,esp push edi push esi sub esp,30 mov esi,edx lea eax,[ecx+4] mov edx,[eax] mov eax,[eax+4] mov [ebp-18],edx mov [ebp-14],eax movsx eax,word ptr [ecx] mov ecx,3C imul ecx cmp eax,0BF94D5E6 mov ecx,edx sbb ecx,0D6 jge near ptr M01_L00 cmp eax,406B2A1B mov ecx,edx sbb ecx,0FFFFFF29 jl near ptr M01_L00 push edx push eax push 0 push 989680 call CORINFO_HELP_LMUL mov [ebp-28],eax mov [ebp-24],edx mov eax,[ebp-18] mov edx,[ebp-14] mov [ebp-30],eax mov [ebp-2C],edx mov eax,[ebp-30] mov edx,[ebp-2C] and eax,0FFFFFFFF and edx,3FFFFFFF add eax,[ebp-28] adc edx,[ebp-24] cmp eax,0F4374000 mov ecx,edx sbb ecx,2BCA2875 jae short M01_L01 mov ecx,[ebp-30] mov edi,[ebp-2C] and ecx,0 and edi,0C0000000 or eax,ecx or edx,edi mov [ebp-38],eax mov [ebp-34],edx mov eax,[ebp-38] mov edx,[ebp-34] and eax,0FFFFFFFF and edx,3FFFFFFF mov ecx,eax mov edi,edx cmp ecx,0F4374000 sbb edi,2BCA2875 jae short M01_L02 mov [ebp-20],eax mov [ebp-1C],edx mov eax,[ebp-20] mov [esi],eax mov eax,[ebp-1C] mov [esi+4],eax lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: call dword ptr ds:[8B75240] int 3 M01_L01: mov ecx,1 call dword ptr ds:[8B69168] int 3 M01_L02: call dword ptr ds:[8B69108] int 3 ; Total bytes of code 248 ``` ```assembly ; System.DateTimeFormat.Format(System.DateTime, System.String, System.IFormatProvider, System.TimeSpan) push ebp mov ebp,esp push edi push esi sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-2C],xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 mov [ebp-0C],esp mov dword ptr [ebp-30],955D2B70 mov eax,edx test ecx,ecx je short M02_L01 cmp dword ptr [ecx+4],1 jne short M02_L01 movzx edx,word ptr [ecx+8] or edx,20 cmp edx,6F je near ptr M02_L04 cmp edx,72 jne short M02_L01 mov ecx,1D call System.String.FastAllocateString(Int32) mov esi,eax lea ecx,[esi+8] mov eax,[esi+4] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push eax push ecx lea ecx,[ebp-24] call dword ptr ds:[0B5D9918] mov eax,esi cmp dword ptr [ebp-30],955D2B70 je short M02_L00 call CORINFO_HELP_FAIL_FAST M02_L00: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L01: test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-0C],esp mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov edx,[ebp-2C] mov esi,[ebp-28] xor edi,edi mov [ebp-1C],edi mov [ebp-14],edx mov [ebp-10],esi mov [ebp-18],edi test ecx,ecx je near ptr M02_L06 lea edx,[ecx+8] mov esi,[ecx+4] M02_L02: push dword ptr [ebp+14] push dword ptr [ebp+10] push esi push edx mov ecx,eax call dword ptr ds:[0AB551B0]; System.Globalization.DateTimeFormatInfo.GetInstance(System.IFormatProvider) mov ecx,eax push dword ptr [ebp+0C] push dword ptr [ebp+8] lea edx,[ebp-1C] call dword ptr ds:[0B5D9858]; System.DateTimeFormat.FormatStringBuilder(System.DateTime, System.ReadOnlySpan`1, System.Globalization.DateTimeFormatInfo, System.TimeSpan, System.Text.ValueStringBuilder ByRef) lea ecx,[ebp-1C] call dword ptr ds:[0B129120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-30],955D2B70 je short M02_L03 call CORINFO_HELP_FAIL_FAST M02_L03: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L04: test [esp],esp sub esp,44 lea ecx,[esp] mov [ebp-0C],esp mov [ebp-2C],ecx mov dword ptr [ebp-28],21 mov esi,[ebp-2C] mov edi,[ebp-28] push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-20] call dword ptr ds:[0B5D9900] mov ecx,[ebp-20] cmp ecx,edi ja short M02_L07 mov [ebp-2C],esi mov [ebp-28],ecx lea ecx,[ebp-2C] call dword ptr ds:[8AF5C78]; System.Span`1[[System.Char, System.Private.CoreLib]].ToString() cmp dword ptr [ebp-30],955D2B70 je short M02_L05 call CORINFO_HELP_FAIL_FAST M02_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret 10 M02_L06: xor edx,edx xor esi,esi jmp near ptr M02_L02 M02_L07: call dword ptr ds:[8B75060] int 3 ; Total bytes of code 367 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ff12237f483eb0afdabf1aeb71b69ff992d6bd40
Compare 7ec3634ee579d89b6024f72b595bfd7118093fc5
Diff Diff

Regressions in System.Buffers.Text.Tests.Utf8FormatterTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[FormatterInt32 - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value%3a%202147483647).html>) 18.37 ns 22.69 ns 1.23 0.04 False 230.91609808762755 260.98000434899893 1.1301940683666098 Trace Trace
[FormatterInt32 - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value%3a%204).html>) 1.56 ns 2.77 ns 1.78 0.08 False 30.770323851991154 41.72480489283905 1.3560079865762944 Trace Trace
[FormatterInt64 - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt64(value%3a%2012345).html>) 12.43 ns 15.27 ns 1.23 0.06 False 148.0160558376964 174.01942393080836 1.175679374416147 Trace Trace
[FormatterInt32 - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value%3a%2012345).html>) 11.54 ns 14.11 ns 1.22 0.07 False 152.42180282043364 181.59750656673233 1.191414241312119 Trace Trace

graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Text.Tests.Utf8FormatterTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 2147483647) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 22.687347545771583 > 19.298669491352943. IsChangePoint: Marked as a change because one of 1/15/2023 4:08:29 PM, 1/21/2023 1:51:00 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -11.474871322607484 (T) = (0 -22.28326592035734) / Math.Sqrt((1.1151644696748921 / (51)) + (0.2348167550982531 / (17))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .025) and -0.10774947655849923 = (20.115799097089965 - 22.28326592035734) / 20.115799097089965 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.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L17 lea esi,[eax+8] mov edi,[eax+4] M00_L00: mov ebx,edx sar ebx,1F mov eax,edx cmp eax,0A mov edx,ebx sbb edx,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp eax,80000000 mov edx,ebx sbb edx,0 jge near ptr M00_L12 cmp eax,80000000 mov edx,ebx sbb edx,0FFFFFFFF jl near ptr M00_L12 mov ebx,eax mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B667C34] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L19 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L18 dec eax cmp edi,eax ja near ptr M00_L18 inc ecx mov edx,ebx mov [ebp-18],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-14],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L19 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-14] mov ecx,esi sub ecx,eax mov eax,[ebp-18] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L19 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-18],eax jmp short M00_L05 M00_L08: mov eax,[ebp-18] jmp short M00_L06 M00_L09: mov esi,ecx mov edi,eax mov ecx,ebx call dword ptr ds:[0B09DCD8]; System.Buffers.Text.FormattingHelpers.CountDigits(UInt32) cmp eax,edi jle short M00_L10 xor eax,eax mov [ebp-10],eax jmp short M00_L11 M00_L10: mov [ebp-10],eax cmp eax,edi ja near ptr M00_L18 push eax push esi mov ecx,ebx call dword ptr ds:[0B09DD98]; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) mov eax,1 M00_L11: jmp short M00_L16 M00_L12: cmp eax,0C4653601 mov ecx,ebx sbb ecx,3B9AC9FF jge short M00_L14 cmp eax,3B9ACA00 mov ecx,ebx sbb ecx,0C4653600 jl short M00_L14 test ebx,ebx jl short M00_L13 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B099BB8] jmp short M00_L16 M00_L13: mov edx,eax neg edx adc ebx,0 neg ebx push ebx push edx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B099AF8] jmp short M00_L16 M00_L14: test ebx,ebx jl short M00_L15 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B099BD0] jmp short M00_L16 M00_L15: mov edx,eax neg edx mov ecx,ebx adc ecx,0 mov ebx,ecx neg ebx push ebx push edx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B099B10] M00_L16: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L17: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L18: call dword ptr ds:[8605060] int 3 M00_L19: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 498 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.CountDigits(UInt32) mov eax,ecx or eax,1 lzcnt eax,eax xor eax,1F lea eax,[eax*8+6B667C34] mov edx,[eax] mov eax,[eax+4] add edx,ecx adc eax,0 ret ; Total bytes of code 30 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,[ebp+0C] lea edi,[esi-1] test edi,edi jle short M02_L01 mov ebx,[ebp+8] M02_L00: lea eax,[ecx+30] mov [ebp-10],eax mov edx,0CCCCCCCD mov eax,ecx mul edx mov ecx,edx shr ecx,3 cmp edi,esi jae short M02_L02 lea eax,[ecx+ecx*4] add eax,eax mov edx,[ebp-10] sub edx,eax mov [ebx+edi],dl dec edi test edi,edi jg short M02_L00 M02_L01: test esi,esi je short M02_L02 mov ebx,[ebp+8] add ecx,30 mov [ebx],cl pop ecx pop ebx pop esi pop edi pop ebp ret 8 M02_L02: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 88 ``` ### Compare Jit Disasm ```assembly ; System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L29 lea esi,[eax+8] mov edi,[eax+4] M00_L00: mov ebx,edx sar ebx,1F mov eax,edx mov [ebp-2C],eax mov word ptr [ebp-14],0 cmp byte ptr [ebp-14],0 jne near ptr M00_L17 cmp byte ptr [ebp-13],0 jne near ptr M00_L17 cmp eax,0A mov edx,ebx sbb edx,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp eax,80000000 mov edx,ebx sbb edx,0 jge near ptr M00_L12 cmp eax,80000000 mov edx,ebx sbb edx,0FFFFFFFF jl near ptr M00_L12 mov ebx,eax mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B7A6D50] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L32 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L30 dec eax cmp edi,eax ja near ptr M00_L30 inc ecx mov edx,ebx mov [ebp-30],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-18],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L32 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-18] mov ecx,esi sub ecx,eax mov eax,[ebp-30] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L32 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-30],eax jmp short M00_L05 M00_L08: mov eax,[ebp-30] jmp short M00_L06 M00_L09: mov [ebp-20],ecx mov [ebp-1C],eax mov ecx,ebx or ecx,1 lzcnt ecx,ecx xor ecx,1F lea ecx,[ecx*8+6B7A6D50] mov edx,[ecx] mov ecx,[ecx+4] add edx,ebx adc ecx,0 cmp ecx,[ebp-1C] jle short M00_L10 xor ecx,ecx mov [ebp-10],ecx xor eax,eax jmp short M00_L11 M00_L10: mov [ebp-10],ecx push 0 push ecx lea ecx,[ebp-20] lea edx,[ebp-28] call dword ptr ds:[82CFC00]; System.Span`1[[System.Byte, System.Private.CoreLib]].Slice(Int32, Int32) push dword ptr [ebp-24] push dword ptr [ebp-28] mov ecx,ebx call dword ptr ds:[0AD2DDB0]; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) mov eax,1 M00_L11: jmp short M00_L16 M00_L12: cmp eax,0C4653601 mov ecx,ebx sbb ecx,3B9AC9FF jge short M00_L14 cmp eax,3B9ACA00 mov ecx,ebx sbb ecx,0C4653600 jl short M00_L14 test ebx,ebx jl short M00_L13 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0AD29BB8] jmp short M00_L16 M00_L13: mov ecx,eax neg ecx adc ebx,0 mov eax,ebx neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0AD29AF8] jmp short M00_L16 M00_L14: test ebx,ebx jl short M00_L15 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0AD29BD0] jmp short M00_L16 M00_L15: mov ecx,eax neg ecx mov eax,ebx adc eax,0 neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0AD29B10] M00_L16: jmp short M00_L19 M00_L17: movzx edx,byte ptr [ebp-14] cmp edx,58 ja near ptr M00_L22 cmp edx,47 ja short M00_L20 cmp edx,44 je near ptr M00_L25 cmp edx,47 jne near ptr M00_L28 M00_L18: lea ecx,[ebp-14] call dword ptr ds:[0AD296A8] test eax,eax jne near ptr M00_L31 push ebx push dword ptr [ebp-2C] push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0AD29AB0] M00_L19: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L20: cmp edx,4E je near ptr M00_L27 cmp edx,52 je short M00_L21 cmp edx,58 jne near ptr M00_L28 mov ecx,eax and ecx,0FFFFFFFF mov edx,ebx and edx,0 push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] xor edx,edx call dword ptr ds:[0AD29C00] jmp short M00_L19 M00_L21: jmp short M00_L18 M00_L22: cmp edx,67 ja short M00_L23 cmp edx,64 je short M00_L25 cmp edx,67 jne near ptr M00_L28 jmp short M00_L18 M00_L23: cmp edx,6E je short M00_L27 cmp edx,72 je short M00_L24 cmp edx,78 jne short M00_L28 mov ecx,eax and ecx,0FFFFFFFF mov edx,ebx and edx,0 push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] mov edx,1 call dword ptr ds:[0AD29C00] jmp near ptr M00_L19 M00_L24: jmp near ptr M00_L18 M00_L25: mov ecx,eax mov edx,ebx movzx eax,byte ptr [ebp-13] mov [ebp-34],esi mov esi,edi xor edi,edi xor ebx,ebx test edx,edx jge short M00_L26 mov ebx,1 neg ecx adc edx,0 neg edx M00_L26: push edx push ecx push esi push dword ptr [ebp-34] lea ecx,[ebp-10] push ecx mov ecx,eax mov edx,ebx call dword ptr ds:[0AD29B58] jmp near ptr M00_L19 M00_L27: push ebx push eax push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0AD29B28] jmp near ptr M00_L19 M00_L28: xor eax,eax mov [ebp-10],eax call dword ptr ds:[82C56D8] int 3 M00_L29: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L30: call dword ptr ds:[82C5060] int 3 M00_L31: mov ecx,offset MT_System.NotSupportedException call CORINFO_HELP_NEWSFAST mov esi,eax call dword ptr ds:[81DFC48] mov edx,eax mov ecx,esi call dword ptr ds:[8273C90] mov ecx,esi call CORINFO_HELP_THROW M00_L32: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 916 ``` ```assembly ; System.Span`1[[System.Byte, System.Private.CoreLib]].Slice(Int32, Int32) push ebp mov ebp,esp push edi push esi mov eax,[ebp+0C] mov esi,[ebp+8] mov edi,[ecx+4] cmp eax,edi ja short M01_L00 sub edi,eax cmp edi,esi jb short M01_L00 add eax,[ecx] mov [edx],eax mov [edx+4],esi pop esi pop edi pop ebp ret 8 M01_L00: call dword ptr ds:[82C5060] int 3 ; Total bytes of code 44 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,[ebp+0C] lea edi,[esi-1] test edi,edi jle short M02_L01 mov ebx,[ebp+8] M02_L00: lea eax,[ecx+30] mov [ebp-10],eax mov edx,0CCCCCCCD mov eax,ecx mul edx mov ecx,edx shr ecx,3 cmp edi,esi jae short M02_L02 lea eax,[ecx+ecx*4] add eax,eax mov edx,[ebp-10] sub edx,eax mov [ebx+edi],dl dec edi test edi,edi jg short M02_L00 M02_L01: test esi,esi je short M02_L02 mov ebx,[ebp+8] add ecx,30 mov [ebx],cl pop ecx pop ebx pop esi pop edi pop ebp ret 8 M02_L02: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 88 ``` #### System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 4) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.773816238848525 > 1.63463899858288. IsChangePoint: Marked as a change because one of 1/15/2023 4:08:29 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -30.962045976253954 (T) = (0 -2.385286594068747) / Math.Sqrt((0.0018130905160719131 / (14)) + (0.03198552510648424 / (54))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (54) - 2, .025) and -0.5354946903042552 = (1.553432004115955 - 2.385286594068747) / 1.553432004115955 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.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L17 lea esi,[eax+8] mov edi,[eax+4] M00_L00: mov ebx,edx sar ebx,1F mov eax,edx cmp eax,0A mov edx,ebx sbb edx,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp eax,80000000 mov edx,ebx sbb edx,0 jge near ptr M00_L12 cmp eax,80000000 mov edx,ebx sbb edx,0FFFFFFFF jl near ptr M00_L12 mov ebx,eax mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B667C34] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L19 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L18 dec eax cmp edi,eax ja near ptr M00_L18 inc ecx mov edx,ebx mov [ebp-18],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-14],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L19 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-14] mov ecx,esi sub ecx,eax mov eax,[ebp-18] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L19 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-18],eax jmp short M00_L05 M00_L08: mov eax,[ebp-18] jmp short M00_L06 M00_L09: mov esi,ecx mov edi,eax mov ecx,ebx call dword ptr ds:[0B30DCD8] cmp eax,edi jle short M00_L10 xor eax,eax mov [ebp-10],eax jmp short M00_L11 M00_L10: mov [ebp-10],eax cmp eax,edi ja near ptr M00_L18 push eax push esi mov ecx,ebx call dword ptr ds:[0B30DD98] mov eax,1 M00_L11: jmp short M00_L16 M00_L12: cmp eax,0C4653601 mov ecx,ebx sbb ecx,3B9AC9FF jge short M00_L14 cmp eax,3B9ACA00 mov ecx,ebx sbb ecx,0C4653600 jl short M00_L14 test ebx,ebx jl short M00_L13 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B309BB8] jmp short M00_L16 M00_L13: mov edx,eax neg edx adc ebx,0 neg ebx push ebx push edx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B309AF8] jmp short M00_L16 M00_L14: test ebx,ebx jl short M00_L15 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B309BD0] jmp short M00_L16 M00_L15: mov edx,eax neg edx mov ecx,ebx adc ecx,0 mov ebx,ecx neg ebx push ebx push edx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B309B10] M00_L16: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L17: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L18: call dword ptr ds:[8875060] int 3 M00_L19: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 498 ``` ### Compare Jit Disasm ```assembly ; System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L29 lea esi,[eax+8] mov edi,[eax+4] M00_L00: mov ebx,edx sar ebx,1F mov eax,edx mov [ebp-2C],eax mov word ptr [ebp-14],0 cmp byte ptr [ebp-14],0 jne near ptr M00_L17 cmp byte ptr [ebp-13],0 jne near ptr M00_L17 cmp eax,0A mov edx,ebx sbb edx,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp eax,80000000 mov edx,ebx sbb edx,0 jge near ptr M00_L12 cmp eax,80000000 mov edx,ebx sbb edx,0FFFFFFFF jl near ptr M00_L12 mov ebx,eax mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B7A6D50] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L32 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L30 dec eax cmp edi,eax ja near ptr M00_L30 inc ecx mov edx,ebx mov [ebp-30],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-18],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L32 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-18] mov ecx,esi sub ecx,eax mov eax,[ebp-30] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L32 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-30],eax jmp short M00_L05 M00_L08: mov eax,[ebp-30] jmp short M00_L06 M00_L09: mov [ebp-20],ecx mov [ebp-1C],eax mov ecx,ebx or ecx,1 lzcnt ecx,ecx xor ecx,1F lea ecx,[ecx*8+6B7A6D50] mov edx,[ecx] mov ecx,[ecx+4] add edx,ebx adc ecx,0 cmp ecx,[ebp-1C] jle short M00_L10 xor ecx,ecx mov [ebp-10],ecx xor eax,eax jmp short M00_L11 M00_L10: mov [ebp-10],ecx push 0 push ecx lea ecx,[ebp-20] lea edx,[ebp-28] call dword ptr ds:[895FC00] push dword ptr [ebp-24] push dword ptr [ebp-28] mov ecx,ebx call dword ptr ds:[0B3BDDB0] mov eax,1 M00_L11: jmp short M00_L16 M00_L12: cmp eax,0C4653601 mov ecx,ebx sbb ecx,3B9AC9FF jge short M00_L14 cmp eax,3B9ACA00 mov ecx,ebx sbb ecx,0C4653600 jl short M00_L14 test ebx,ebx jl short M00_L13 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B3B9BB8] jmp short M00_L16 M00_L13: mov ecx,eax neg ecx adc ebx,0 mov eax,ebx neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B3B9AF8] jmp short M00_L16 M00_L14: test ebx,ebx jl short M00_L15 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B3B9BD0] jmp short M00_L16 M00_L15: mov ecx,eax neg ecx mov eax,ebx adc eax,0 neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B3B9B10] M00_L16: jmp short M00_L19 M00_L17: movzx edx,byte ptr [ebp-14] cmp edx,58 ja near ptr M00_L22 cmp edx,47 ja short M00_L20 cmp edx,44 je near ptr M00_L25 cmp edx,47 jne near ptr M00_L28 M00_L18: lea ecx,[ebp-14] call dword ptr ds:[0B3B96A8] test eax,eax jne near ptr M00_L31 push ebx push dword ptr [ebp-2C] push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0B3B9AB0] M00_L19: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L20: cmp edx,4E je near ptr M00_L27 cmp edx,52 je short M00_L21 cmp edx,58 jne near ptr M00_L28 mov ecx,eax and ecx,0FFFFFFFF mov edx,ebx and edx,0 push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] xor edx,edx call dword ptr ds:[0B3B9C00] jmp short M00_L19 M00_L21: jmp short M00_L18 M00_L22: cmp edx,67 ja short M00_L23 cmp edx,64 je short M00_L25 cmp edx,67 jne near ptr M00_L28 jmp short M00_L18 M00_L23: cmp edx,6E je short M00_L27 cmp edx,72 je short M00_L24 cmp edx,78 jne short M00_L28 mov ecx,eax and ecx,0FFFFFFFF mov edx,ebx and edx,0 push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] mov edx,1 call dword ptr ds:[0B3B9C00] jmp near ptr M00_L19 M00_L24: jmp near ptr M00_L18 M00_L25: mov ecx,eax mov edx,ebx movzx eax,byte ptr [ebp-13] mov [ebp-34],esi mov esi,edi xor edi,edi xor ebx,ebx test edx,edx jge short M00_L26 mov ebx,1 neg ecx adc edx,0 neg edx M00_L26: push edx push ecx push esi push dword ptr [ebp-34] lea ecx,[ebp-10] push ecx mov ecx,eax mov edx,ebx call dword ptr ds:[0B3B9B58] jmp near ptr M00_L19 M00_L27: push ebx push eax push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0B3B9B28] jmp near ptr M00_L19 M00_L28: xor eax,eax mov [ebp-10],eax call dword ptr ds:[89556D8] int 3 M00_L29: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L30: call dword ptr ds:[8955060] int 3 M00_L31: mov ecx,offset MT_System.NotSupportedException call CORINFO_HELP_NEWSFAST mov esi,eax call dword ptr ds:[886FC48] mov edx,eax mov ecx,esi call dword ptr ds:[8903C90] mov ecx,esi call CORINFO_HELP_THROW M00_L32: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 916 ``` #### System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt64(value: 12345) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 15.265473231361089 > 12.369004179596791. IsChangePoint: Marked as a change because one of 1/15/2023 4:08:29 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -27.495489485640192 (T) = (0 -14.586578976663017) / Math.Sqrt((0.04855430396702777 / (14)) + (0.38592563901590743 / (54))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (54) - 2, .025) and -0.24101475839541214 = (11.753751418333609 - 14.586578976663017) / 11.753751418333609 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.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt64(Int64) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L17 lea esi,[eax+8] mov edi,[eax+4] M00_L00: cmp dword ptr [ebp+8],0A mov eax,[ebp+0C] sbb eax,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: mov eax,[ebp+8] add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0 jge near ptr M00_L12 cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0FFFFFFFF jl near ptr M00_L12 mov ebx,[ebp+8] mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6BA37C34] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L19 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L18 dec eax cmp edi,eax ja near ptr M00_L18 inc ecx mov edx,ebx mov [ebp-18],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-14],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L19 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-14] mov ecx,esi sub ecx,eax mov eax,[ebp-18] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L19 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-18],eax jmp short M00_L05 M00_L08: mov eax,[ebp-18] jmp short M00_L06 M00_L09: mov esi,ecx mov edi,eax mov ecx,ebx call dword ptr ds:[0B70DCD8]; System.Buffers.Text.FormattingHelpers.CountDigits(UInt32) cmp eax,edi jle short M00_L10 xor eax,eax mov [ebp-10],eax jmp short M00_L11 M00_L10: mov [ebp-10],eax cmp eax,edi ja near ptr M00_L18 push eax push esi mov ecx,ebx call dword ptr ds:[0B70DD98]; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) mov eax,1 M00_L11: jmp near ptr M00_L16 M00_L12: cmp dword ptr [ebp+8],0C4653601 mov ecx,[ebp+0C] sbb ecx,3B9AC9FF jge short M00_L14 cmp dword ptr [ebp+8],3B9ACA00 mov ecx,[ebp+0C] sbb ecx,0C4653600 jl short M00_L14 cmp dword ptr [ebp+0C],0 jl short M00_L13 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B709BB8] jmp short M00_L16 M00_L13: mov ecx,[ebp+8] mov eax,[ebp+0C] mov ebx,ecx neg ebx adc eax,0 neg eax push eax push ebx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B709AF8] jmp short M00_L16 M00_L14: cmp dword ptr [ebp+0C],0 jl short M00_L15 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B709BD0] jmp short M00_L16 M00_L15: mov ecx,[ebp+8] mov eax,[ebp+0C] mov ebx,ecx neg ebx adc eax,0 neg eax push eax push ebx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B709B10] M00_L16: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M00_L17: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L18: call dword ptr ds:[8C75060] int 3 M00_L19: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 534 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.CountDigits(UInt32) mov eax,ecx or eax,1 lzcnt eax,eax xor eax,1F lea eax,[eax*8+6BA37C34] mov edx,[eax] mov eax,[eax+4] add edx,ecx adc eax,0 ret ; Total bytes of code 30 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,[ebp+0C] lea edi,[esi-1] test edi,edi jle short M02_L01 mov ebx,[ebp+8] M02_L00: lea eax,[ecx+30] mov [ebp-10],eax mov edx,0CCCCCCCD mov eax,ecx mul edx mov ecx,edx shr ecx,3 cmp edi,esi jae short M02_L02 lea eax,[ecx+ecx*4] add eax,eax mov edx,[ebp-10] sub edx,eax mov [ebx+edi],dl dec edi test edi,edi jg short M02_L00 M02_L01: test esi,esi je short M02_L02 mov ebx,[ebp+8] add ecx,30 mov [ebx],cl pop ecx pop ebx pop esi pop edi pop ebp ret 8 M02_L02: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 88 ``` ### Compare Jit Disasm ```assembly ; System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt64(Int64) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L27 lea esi,[eax+8] mov edi,[eax+4] M00_L00: mov word ptr [ebp-14],0 cmp byte ptr [ebp-14],0 jne near ptr M00_L17 cmp byte ptr [ebp-13],0 jne near ptr M00_L17 cmp dword ptr [ebp+8],0A mov eax,[ebp+0C] sbb eax,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: mov eax,[ebp+8] add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0 jge near ptr M00_L12 cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0FFFFFFFF jl near ptr M00_L12 mov ebx,[ebp+8] mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6AFF6D50] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L30 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L28 dec eax cmp edi,eax ja near ptr M00_L28 inc ecx mov edx,ebx mov [ebp-2C],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-18],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L30 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-18] mov ecx,esi sub ecx,eax mov eax,[ebp-2C] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L30 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-2C],eax jmp short M00_L05 M00_L08: mov eax,[ebp-2C] jmp short M00_L06 M00_L09: mov [ebp-20],ecx mov [ebp-1C],eax mov ecx,ebx or ecx,1 lzcnt ecx,ecx xor ecx,1F lea ecx,[ecx*8+6AFF6D50] mov edx,[ecx] mov ecx,[ecx+4] add edx,ebx adc ecx,0 cmp ecx,[ebp-1C] jle short M00_L10 xor ecx,ecx mov [ebp-10],ecx xor eax,eax jmp short M00_L11 M00_L10: mov [ebp-10],ecx push 0 push ecx lea ecx,[ebp-20] lea edx,[ebp-28] call dword ptr ds:[87CFC00]; System.Span`1[[System.Byte, System.Private.CoreLib]].Slice(Int32, Int32) push dword ptr [ebp-24] push dword ptr [ebp-28] mov ecx,ebx call dword ptr ds:[0B22DDB0]; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) mov eax,1 M00_L11: jmp near ptr M00_L16 M00_L12: cmp dword ptr [ebp+8],0C4653601 mov ecx,[ebp+0C] sbb ecx,3B9AC9FF jge short M00_L14 cmp dword ptr [ebp+8],3B9ACA00 mov ecx,[ebp+0C] sbb ecx,0C4653600 jl short M00_L14 cmp dword ptr [ebp+0C],0 jl short M00_L13 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B229BB8] jmp short M00_L16 M00_L13: mov ecx,[ebp+8] mov eax,[ebp+0C] neg ecx adc eax,0 neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B229AF8] jmp short M00_L16 M00_L14: cmp dword ptr [ebp+0C],0 jl short M00_L15 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B229BD0] jmp short M00_L16 M00_L15: mov ecx,[ebp+8] mov eax,[ebp+0C] neg ecx adc eax,0 neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B229B10] M00_L16: jmp short M00_L19 M00_L17: movzx ebx,byte ptr [ebp-14] cmp ebx,58 ja near ptr M00_L21 cmp ebx,47 ja short M00_L20 cmp ebx,44 je near ptr M00_L23 cmp ebx,47 jne near ptr M00_L26 M00_L18: lea ecx,[ebp-14] call dword ptr ds:[0B2296A8] test eax,eax jne near ptr M00_L29 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0B229AB0] M00_L19: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M00_L20: cmp ebx,4E je near ptr M00_L25 cmp ebx,52 je short M00_L18 cmp ebx,58 jne near ptr M00_L26 mov ecx,[ebp+8] mov edx,[ebp+0C] and ecx,0FFFFFFFF and edx,0FFFFFFFF push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] xor edx,edx call dword ptr ds:[0B229C00] jmp short M00_L19 M00_L21: cmp ebx,67 ja short M00_L22 cmp ebx,64 je short M00_L23 cmp ebx,67 jne near ptr M00_L26 jmp short M00_L18 M00_L22: cmp ebx,6E je short M00_L25 cmp ebx,72 je near ptr M00_L18 cmp ebx,78 jne short M00_L26 mov ecx,[ebp+8] mov edx,[ebp+0C] and ecx,0FFFFFFFF and edx,0FFFFFFFF push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] mov edx,1 call dword ptr ds:[0B229C00] jmp near ptr M00_L19 M00_L23: mov ecx,[ebp+8] mov edx,[ebp+0C] movzx eax,byte ptr [ebp-13] xor ebx,ebx test edx,edx jge short M00_L24 mov ebx,1 neg ecx adc edx,0 neg edx M00_L24: push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx mov ecx,eax mov edx,ebx call dword ptr ds:[0B229B58] jmp near ptr M00_L19 M00_L25: push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0B229B28] jmp near ptr M00_L19 M00_L26: xor eax,eax mov [ebp-10],eax call dword ptr ds:[87C56D8] int 3 M00_L27: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L28: call dword ptr ds:[87C5060] int 3 M00_L29: mov ecx,offset MT_System.NotSupportedException call CORINFO_HELP_NEWSFAST mov esi,eax call dword ptr ds:[86DFC48] mov edx,eax mov ecx,esi call dword ptr ds:[8773C90] mov ecx,esi call CORINFO_HELP_THROW M00_L30: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 945 ``` ```assembly ; System.Span`1[[System.Byte, System.Private.CoreLib]].Slice(Int32, Int32) push ebp mov ebp,esp push edi push esi mov eax,[ebp+0C] mov esi,[ebp+8] mov edi,[ecx+4] cmp eax,edi ja short M01_L00 sub edi,eax cmp edi,esi jb short M01_L00 add eax,[ecx] mov [edx],eax mov [edx+4],esi pop esi pop edi pop ebp ret 8 M01_L00: call dword ptr ds:[87C5060] int 3 ; Total bytes of code 44 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,[ebp+0C] lea edi,[esi-1] test edi,edi jle short M02_L01 mov ebx,[ebp+8] M02_L00: lea eax,[ecx+30] mov [ebp-10],eax mov edx,0CCCCCCCD mov eax,ecx mul edx mov ecx,edx shr ecx,3 cmp edi,esi jae short M02_L02 lea eax,[ecx+ecx*4] add eax,eax mov edx,[ebp-10] sub edx,eax mov [ebx+edi],dl dec edi test edi,edi jg short M02_L00 M02_L01: test esi,esi je short M02_L02 mov ebx,[ebp+8] add ecx,30 mov [ebx],cl pop ecx pop ebx pop esi pop edi pop ebp ret 8 M02_L02: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 88 ``` #### System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 12345) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 14.111858767594548 > 12.123537423734275. IsChangePoint: Marked as a change because one of 1/15/2023 4:08:29 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -27.482368948404716 (T) = (0 -13.563730450080712) / Math.Sqrt((0.017159882471151636 / (14)) + (0.24146742887167555 / (54))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (54) - 2, .025) and -0.18054872536741837 = (11.489344030132527 - 13.563730450080712) / 11.489344030132527 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.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L17 lea esi,[eax+8] mov edi,[eax+4] M00_L00: mov ebx,edx sar ebx,1F mov eax,edx cmp eax,0A mov edx,ebx sbb edx,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp eax,80000000 mov edx,ebx sbb edx,0 jge near ptr M00_L12 cmp eax,80000000 mov edx,ebx sbb edx,0FFFFFFFF jl near ptr M00_L12 mov ebx,eax mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B667C34] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L19 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L18 dec eax cmp edi,eax ja near ptr M00_L18 inc ecx mov edx,ebx mov [ebp-18],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-14],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L19 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-14] mov ecx,esi sub ecx,eax mov eax,[ebp-18] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L19 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-18],eax jmp short M00_L05 M00_L08: mov eax,[ebp-18] jmp short M00_L06 M00_L09: mov esi,ecx mov edi,eax mov ecx,ebx call dword ptr ds:[0BA7DCD8]; System.Buffers.Text.FormattingHelpers.CountDigits(UInt32) cmp eax,edi jle short M00_L10 xor eax,eax mov [ebp-10],eax jmp short M00_L11 M00_L10: mov [ebp-10],eax cmp eax,edi ja near ptr M00_L18 push eax push esi mov ecx,ebx call dword ptr ds:[0BA7DD98]; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) mov eax,1 M00_L11: jmp short M00_L16 M00_L12: cmp eax,0C4653601 mov ecx,ebx sbb ecx,3B9AC9FF jge short M00_L14 cmp eax,3B9ACA00 mov ecx,ebx sbb ecx,0C4653600 jl short M00_L14 test ebx,ebx jl short M00_L13 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0BA79BB8] jmp short M00_L16 M00_L13: mov edx,eax neg edx adc ebx,0 neg ebx push ebx push edx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0BA79AF8] jmp short M00_L16 M00_L14: test ebx,ebx jl short M00_L15 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0BA79BD0] jmp short M00_L16 M00_L15: mov edx,eax neg edx mov ecx,ebx adc ecx,0 mov ebx,ecx neg ebx push ebx push edx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0BA79B10] M00_L16: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L17: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L18: call dword ptr ds:[8FE5060] int 3 M00_L19: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 498 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.CountDigits(UInt32) mov eax,ecx or eax,1 lzcnt eax,eax xor eax,1F lea eax,[eax*8+6B667C34] mov edx,[eax] mov eax,[eax+4] add edx,ecx adc eax,0 ret ; Total bytes of code 30 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,[ebp+0C] lea edi,[esi-1] test edi,edi jle short M02_L01 mov ebx,[ebp+8] M02_L00: lea eax,[ecx+30] mov [ebp-10],eax mov edx,0CCCCCCCD mov eax,ecx mul edx mov ecx,edx shr ecx,3 cmp edi,esi jae short M02_L02 lea eax,[ecx+ecx*4] add eax,eax mov edx,[ebp-10] sub edx,eax mov [ebx+edi],dl dec edi test edi,edi jg short M02_L00 M02_L01: test esi,esi je short M02_L02 mov ebx,[ebp+8] add ecx,30 mov [ebx],cl pop ecx pop ebx pop esi pop edi pop ebp ret 8 M02_L02: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 88 ``` ### Compare Jit Disasm ```assembly ; System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov eax,[ecx+4] test eax,eax je near ptr M00_L29 lea esi,[eax+8] mov edi,[eax+4] M00_L00: mov ebx,edx sar ebx,1F mov eax,edx mov [ebp-2C],eax mov word ptr [ebp-14],0 cmp byte ptr [ebp-14],0 jne near ptr M00_L17 cmp byte ptr [ebp-13],0 jne near ptr M00_L17 cmp eax,0A mov edx,ebx sbb edx,0 jae short M00_L03 test edi,edi jne short M00_L01 xor eax,eax mov [ebp-10],eax jmp short M00_L02 M00_L01: add eax,30 mov [esi],al mov dword ptr [ebp-10],1 mov eax,1 M00_L02: jmp near ptr M00_L16 M00_L03: cmp eax,80000000 mov edx,ebx sbb edx,0 jge near ptr M00_L12 cmp eax,80000000 mov edx,ebx sbb edx,0FFFFFFFF jl near ptr M00_L12 mov ebx,eax mov ecx,esi mov eax,edi test ebx,ebx jge near ptr M00_L09 neg ebx mov edx,ebx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B7A6D50] mov esi,[edx] mov edi,[edx+4] add esi,ebx adc edi,0 cmp edi,eax jl short M00_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M00_L11 M00_L04: test eax,eax je near ptr M00_L32 mov byte ptr [ecx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M00_L30 dec eax cmp edi,eax ja near ptr M00_L30 inc ecx mov edx,ebx mov [ebp-30],ecx lea ebx,[edi-1] test ebx,ebx jle short M00_L08 M00_L05: lea esi,[edx+30] mov [ebp-18],esi mov esi,0CCCCCCCD mov eax,edx mul esi shr edx,3 cmp ebx,edi jae near ptr M00_L32 lea eax,[edx+edx*4] add eax,eax mov esi,[ebp-18] mov ecx,esi sub ecx,eax mov eax,[ebp-30] mov [eax+ebx],cl dec ebx test ebx,ebx jg short M00_L07 M00_L06: test edi,edi je near ptr M00_L32 lea ecx,[edx+30] mov [eax],cl mov eax,1 jmp short M00_L11 M00_L07: mov [ebp-30],eax jmp short M00_L05 M00_L08: mov eax,[ebp-30] jmp short M00_L06 M00_L09: mov [ebp-20],ecx mov [ebp-1C],eax mov ecx,ebx or ecx,1 lzcnt ecx,ecx xor ecx,1F lea ecx,[ecx*8+6B7A6D50] mov edx,[ecx] mov ecx,[ecx+4] add edx,ebx adc ecx,0 cmp ecx,[ebp-1C] jle short M00_L10 xor ecx,ecx mov [ebp-10],ecx xor eax,eax jmp short M00_L11 M00_L10: mov [ebp-10],ecx push 0 push ecx lea ecx,[ebp-20] lea edx,[ebp-28] call dword ptr ds:[87DFC00]; System.Span`1[[System.Byte, System.Private.CoreLib]].Slice(Int32, Int32) push dword ptr [ebp-24] push dword ptr [ebp-28] mov ecx,ebx call dword ptr ds:[0B23DDB0]; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) mov eax,1 M00_L11: jmp short M00_L16 M00_L12: cmp eax,0C4653601 mov ecx,ebx sbb ecx,3B9AC9FF jge short M00_L14 cmp eax,3B9ACA00 mov ecx,ebx sbb ecx,0C4653600 jl short M00_L14 test ebx,ebx jl short M00_L13 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B239BB8] jmp short M00_L16 M00_L13: mov ecx,eax neg ecx adc ebx,0 mov eax,ebx neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B239AF8] jmp short M00_L16 M00_L14: test ebx,ebx jl short M00_L15 push ebx push eax push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B239BD0] jmp short M00_L16 M00_L15: mov ecx,eax neg ecx mov eax,ebx adc eax,0 neg eax push eax push ecx push edi push esi lea ecx,[ebp-10] call dword ptr ds:[0B239B10] M00_L16: jmp short M00_L19 M00_L17: movzx edx,byte ptr [ebp-14] cmp edx,58 ja near ptr M00_L22 cmp edx,47 ja short M00_L20 cmp edx,44 je near ptr M00_L25 cmp edx,47 jne near ptr M00_L28 M00_L18: lea ecx,[ebp-14] call dword ptr ds:[0B2396A8] test eax,eax jne near ptr M00_L31 push ebx push dword ptr [ebp-2C] push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0B239AB0] M00_L19: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L20: cmp edx,4E je near ptr M00_L27 cmp edx,52 je short M00_L21 cmp edx,58 jne near ptr M00_L28 mov ecx,eax and ecx,0FFFFFFFF mov edx,ebx and edx,0 push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] xor edx,edx call dword ptr ds:[0B239C00] jmp short M00_L19 M00_L21: jmp short M00_L18 M00_L22: cmp edx,67 ja short M00_L23 cmp edx,64 je short M00_L25 cmp edx,67 jne near ptr M00_L28 jmp short M00_L18 M00_L23: cmp edx,6E je short M00_L27 cmp edx,72 je short M00_L24 cmp edx,78 jne short M00_L28 mov ecx,eax and ecx,0FFFFFFFF mov edx,ebx and edx,0 push edx push ecx push edi push esi lea ecx,[ebp-10] push ecx movzx ecx,byte ptr [ebp-13] mov edx,1 call dword ptr ds:[0B239C00] jmp near ptr M00_L19 M00_L24: jmp near ptr M00_L18 M00_L25: mov ecx,eax mov edx,ebx movzx eax,byte ptr [ebp-13] mov [ebp-34],esi mov esi,edi xor edi,edi xor ebx,ebx test edx,edx jge short M00_L26 mov ebx,1 neg ecx adc edx,0 neg edx M00_L26: push edx push ecx push esi push dword ptr [ebp-34] lea ecx,[ebp-10] push ecx mov ecx,eax mov edx,ebx call dword ptr ds:[0B239B58] jmp near ptr M00_L19 M00_L27: push ebx push eax push edi push esi movzx ecx,byte ptr [ebp-13] lea edx,[ebp-10] call dword ptr ds:[0B239B28] jmp near ptr M00_L19 M00_L28: xor eax,eax mov [ebp-10],eax call dword ptr ds:[87D56D8] int 3 M00_L29: xor esi,esi xor edi,edi jmp near ptr M00_L00 M00_L30: call dword ptr ds:[87D5060] int 3 M00_L31: mov ecx,offset MT_System.NotSupportedException call CORINFO_HELP_NEWSFAST mov esi,eax call dword ptr ds:[86EFC48] mov edx,eax mov ecx,esi call dword ptr ds:[8783C90] mov ecx,esi call CORINFO_HELP_THROW M00_L32: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 916 ``` ```assembly ; System.Span`1[[System.Byte, System.Private.CoreLib]].Slice(Int32, Int32) push ebp mov ebp,esp push edi push esi mov eax,[ebp+0C] mov esi,[ebp+8] mov edi,[ecx+4] cmp eax,edi ja short M01_L00 sub edi,eax cmp edi,esi jb short M01_L00 add eax,[ecx] mov [edx],eax mov [edx+4],esi pop esi pop edi pop ebp ret 8 M01_L00: call dword ptr ds:[87D5060] int 3 ; Total bytes of code 44 ``` ```assembly ; System.Buffers.Text.FormattingHelpers.WriteDigits(UInt32, System.Span`1) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,[ebp+0C] lea edi,[esi-1] test edi,edi jle short M02_L01 mov ebx,[ebp+8] M02_L00: lea eax,[ecx+30] mov [ebp-10],eax mov edx,0CCCCCCCD mov eax,ecx mul edx mov ecx,edx shr ecx,3 cmp edi,esi jae short M02_L02 lea eax,[ecx+ecx*4] add eax,eax mov edx,[ebp-10] sub edx,eax mov [ebx+edi],dl dec edi test edi,edi jg short M02_L00 M02_L01: test esi,esi je short M02_L02 mov ebx,[ebp+8] add ecx,30 mov [ebx],cl pop ecx pop ebx pop esi pop edi pop ebp ret 8 M02_L02: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 88 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)