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: 42 Regressions on 1/3/2023 9:28:36 AM #11517

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Get - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount%3a%2016%2c%20KeysCountPerProvider%3a%2020).html>) 3.60 ms 3.79 ms 1.05 0.04 False 35616666.66666667 37039583.333333336 1.0399508656995788 Trace Trace
[Get - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount%3a%208%2c%20KeysCountPerProvider%3a%2020).html>) 970.22 μs 1.04 ms 1.07 0.06 False 9436000 9806915.629322268 1.039308566057892 Trace Trace
[Get - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount%3a%2032%2c%20KeysCountPerProvider%3a%2010).html>) 7.02 ms 7.56 ms 1.08 0.10 False 74584615.38461539 77639506.17283951 1.0409587255021797 Trace Trace
[Get - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount%3a%208%2c%20KeysCountPerProvider%3a%2040).html>) 2.13 ms 2.31 ms 1.08 0.05 False 21005797.101449274 21940740.740740743 1.044508838906521 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 'Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount: 16, KeysCountPerProvider: 20) ```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 3.7874993939393935 > 3.7805413483671053. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -9.598852398650186 (T) = (0 -3850021.8423850685) / Math.Sqrt((1884828406.7399304 / (14)) + (16315754064.372295 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.06587576518836283 = (3612073.7220295914 - 3850021.8423850685) / 3612073.7220295914 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 ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0BE5FF00]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0BE4FD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0BE4FD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0BE5EFA8 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0BE4FD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0BE4FDE8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0BE910C0]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[87CB630] int 3 ; Total bytes of code 233 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0BA0D390]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0BA19BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0BA19BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0BA0C438 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0BA19BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0BA19C2C call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0BA0D510]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[507B630] int 3 ; Total bytes of code 233 ``` #### Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount: 8, KeysCountPerProvider: 20) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.0362005809128632 > 1023.2525341045673. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -4.335297712500318 (T) = (0 -1043284.3404137229) / Math.Sqrt((1942907087.495593 / (14)) + (290899583.17183495 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.053118572654244425 = (990661.7996340757 - 1043284.3404137229) / 990661.7996340757 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 ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0B57FF00]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0B56FD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0B56FD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0B57EFA8 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0B56FD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0B56FDE8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0B5B10C0]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[7EEB630] int 3 ; Total bytes of code 233 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0B81D390]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0B829BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0B829BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0B81C438 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0B829BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0B829C2C call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0B81D510]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[819B630] int 3 ; Total bytes of code 233 ``` #### Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount: 32, KeysCountPerProvider: 10) ```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.562529004329003 > 7.483991048529412. IsChangePoint: Marked as a change because one of 1/3/2023 12:19:11 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -14.751675761503293 (T) = (0 -7603420.706469705) / Math.Sqrt((8603337095.810068 / (13)) + (21236602562.010925 / (35))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (13) + (35) - 2, .025) and -0.0742308893962276 = (7078013.471334095 - 7603420.706469705) / 7078013.471334095 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 ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0B5FFF00]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0B5EFD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0B5EFD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0B5FEFA8 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0B5EFD94 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0B5EFDE8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0B6310C0]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[7F6B630] int 3 ; Total bytes of code 233 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0B8CD390]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0B8D9BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0B8D9BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0B8CC438 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0B8D9BD8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0B8D9C2C call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0B8CD510]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[4F3B630] int 3 ; Total bytes of code 233 ``` #### Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get(ConfigurationProvidersCount: 8, KeysCountPerProvider: 40) ```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.3114567283950618 > 2.263456814655173. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -13.118501588669256 (T) = (0 -2309122.687407841) / Math.Sqrt((205131073.29812527 / (14)) + (4076622883.2987633 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.07054890106472957 = (2156952.087953451 - 2309122.687407841) / 2156952.087953451 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 ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0B7AFF00]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0B79FD54 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0B79FD54 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0B7AEFA8 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0B79FD54 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0B79FDA8 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0B7E10C0]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[811B630] int 3 ; Total bytes of code 233 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks.Get() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[Microsoft.Extensions.Configuration.ConfigurationBinderBenchmarks+MySettings, MicroBenchmarks]](Microsoft.Extensions.Configuration.IConfiguration) call dword ptr ds:[0B86D390]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov [ebp-10],edx mov edi,ecx mov esi,edx mov ebx,[esi+0C] cmp dword ptr [ebx+8],0 je short M01_L00 mov ecx,[ebx+8] jmp short M01_L01 M01_L00: mov ecx,esi mov edx,0B879B98 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L01: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L06 mov eax,[ebx+8] test eax,eax je short M01_L02 mov [ebp-14],eax jmp short M01_L03 M01_L02: mov ecx,esi mov edx,0B879B98 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov [ebp-14],eax M01_L03: mov ecx,offset MT_System.Action`1[[Microsoft.Extensions.Configuration.BinderOptions, Microsoft.Extensions.Configuration.Binder]] call CORINFO_HELP_NEWSFAST mov [ebp-1C],eax mov ecx,[ebp-14] call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE mov ecx,[eax] test ecx,ecx je short M01_L09 mov eax,[ebp-1C] lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-1C],eax mov dword ptr [eax+0C],0B86C438 mov ecx,[ebx+8] test ecx,ecx je short M01_L04 jmp short M01_L05 M01_L04: mov ecx,esi mov edx,0B879B98 call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ecx,eax M01_L05: call CORINFO_HELP_GETGENERICS_GCSTATIC_BASE lea edx,[eax+4] mov eax,[ebp-1C] call CORINFO_HELP_ASSIGN_REF_EAX mov [ebp-18],eax mov eax,[ebp-18] M01_L06: cmp dword ptr [ebx+0C],0 je short M01_L07 mov ebx,[ebx+0C] jmp short M01_L08 M01_L07: mov [ebp-18],eax mov ecx,esi mov edx,0B879BEC call CORINFO_HELP_RUNTIMEHANDLE_METHOD mov ebx,eax mov eax,[ebp-18] M01_L08: push ebx mov ecx,edi mov edx,eax call dword ptr ds:[0B86D510]; Microsoft.Extensions.Configuration.ConfigurationBinder.Get[[System.__Canon, System.Private.CoreLib]](Microsoft.Extensions.Configuration.IConfiguration, System.Action`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L09: call dword ptr ds:[81EB630] int 3 ; Total bytes of code 233 ``` ### 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 ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Collections.ContainsTrue<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[HashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsTrue(Int32).HashSet(Size%3a%20512).html>) 4.35 μs 6.43 μs 1.48 0.26 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrue&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsTrue<Int32>.HashSet(Size: 512) ```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 6.428614139854409 > 4.630080526573558. IsChangePoint: Marked as a change because one of 11/18/2022 4:41:14 PM, 12/6/2022 2:12:43 AM, 12/12/2022 5:25:39 PM, 12/14/2022 5:20:21 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -53.15278494763284 (T) = (0 -6649.055171929061) / Math.Sqrt((1596.2547710259923 / (14)) + (56761.07657949154 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.5096539245664843 = (4404.357226334783 - 6649.055171929061) / 4404.357226334783 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Memory.Span<Char>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IndexOfAnyThreeValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyThreeValues(Size%3a%2033).html>) 7.79 ns 9.50 ns 1.22 0.12 False
[IndexOfAnyThreeValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyThreeValues(Size%3a%204).html>) 6.25 ns 8.29 ns 1.33 0.10 False
[IndexOfAnyThreeValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyThreeValues(Size%3a%20512).html>) 25.66 ns 29.26 ns 1.14 0.19 False
[IndexOfAnyTwoValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyTwoValues(Size%3a%20512).html>) 23.21 ns 25.46 ns 1.10 0.06 False
[IndexOfAnyFourValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyFourValues(Size%3a%204).html>) 7.63 ns 8.63 ns 1.13 0.11 False
[IndexOfValue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfValue(Size%3a%204).html>) 3.35 ns 4.81 ns 1.43 0.17 False
[IndexOfAnyFourValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyFourValues(Size%3a%2033).html>) 9.13 ns 10.71 ns 1.17 0.08 False
[BinarySearch - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).BinarySearch(Size%3a%20512).html>) 13.71 ns 15.77 ns 1.15 0.07 False
[IndexOfAnyFourValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyFourValues(Size%3a%20512).html>) 26.42 ns 29.48 ns 1.12 0.16 False
[IndexOfAnyFiveValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyFiveValues(Size%3a%204).html>) 8.77 ns 9.87 ns 1.13 0.23 False
[SequenceEqual - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).SequenceEqual(Size%3a%20512).html>) 22.31 ns 26.25 ns 1.18 0.30 False
[IndexOfAnyTwoValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyTwoValues(Size%3a%204).html>) 5.68 ns 7.13 ns 1.26 0.12 False
[IndexOfAnyFiveValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyFiveValues(Size%3a%2033).html>) 11.21 ns 12.53 ns 1.12 0.08 False
[IndexOfAnyTwoValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfAnyTwoValues(Size%3a%2033).html>) 6.17 ns 8.33 ns 1.35 0.18 False
[IndexOfValue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfValue(Size%3a%2033).html>) 4.81 ns 6.19 ns 1.29 0.10 False
[IndexOfValue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Char).IndexOfValue(Size%3a%20512).html>) 15.42 ns 17.45 ns 1.13 0.17 False

graph graph graph graph graph graph graph graph graph graph 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.Memory.Span&lt;Char&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Char>.IndexOfAnyThreeValues(Size: 33) ```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.496004062519136 > 7.615237259647857. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -28.689774897221557 (T) = (0 -9.569741679815351) / Math.Sqrt((0.027877133401086884 / (14)) + (0.14800357268773315 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.3136994669347323 = (7.284574532213614 - 9.569741679815351) / 7.284574532213614 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyThreeValues(Size: 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 8.291254706735248 > 6.565497290742968. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -27.874760849065755 (T) = (0 -8.307271623374787) / Math.Sqrt((0.07130531958892208 / (14)) + (0.0013051780308336609 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.31643028998551537 = (6.310453114434332 - 8.307271623374787) / 6.310453114434332 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyThreeValues(Size: 512) ```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 29.258558731294954 > 26.944647904121005. IsChangePoint: Marked as a change because one of 11/22/2022 2:57:03 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -12.549110483513598 (T) = (0 -29.054389166689415) / Math.Sqrt((0.34290669962230014 / (14)) + (1.1075463608898954 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.11505180452414253 = (26.056537506872708 - 29.054389166689415) / 26.056537506872708 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyTwoValues(Size: 512) ```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 25.45838053534978 > 23.740290746684934. IsChangePoint: Marked as a change because one of 11/21/2022 12:46:21 PM, 12/14/2022 5:20:21 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -16.667968565372757 (T) = (0 -25.342461225834015) / Math.Sqrt((0.08223498743647492 / (14)) + (0.7628530721456446 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.12443552311406865 = (22.537940775518475 - 25.342461225834015) / 22.537940775518475 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyFourValues(Size: 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 8.630616781518784 > 8.0087424792028. IsChangePoint: Marked as a change because one of 1/3/2023 12:19:11 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -8.182317037514807 (T) = (0 -8.698712019929287) / Math.Sqrt((0.13451891032056681 / (13)) + (0.1123529403562469 / (35))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (13) + (35) - 2, .025) and -0.12299646462517848 = (7.745983441570894 - 8.698712019929287) / 7.745983441570894 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfValue(Size: 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 4.805791083509907 > 3.522166875280038. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -12.354489398450097 (T) = (0 -4.800505329509283) / Math.Sqrt((0.13984031659431156 / (14)) + (0.0016465397365455186 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.34740755008259 = (3.5627715825215867 - 4.800505329509283) / 3.5627715825215867 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyFourValues(Size: 33) ```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.713281830230448 > 9.562542522607325. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -26.94101669012241 (T) = (0 -10.759449792793855) / Math.Sqrt((0.0020014739608639064 / (14)) + (0.12138124937809355 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.18004688235580077 = (9.117815532306732 - 10.759449792793855) / 9.117815532306732 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.BinarySearch(Size: 512) ```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.765827223726825 > 14.376826273619063. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 12/21/2022 9:23:17 AM, 1/5/2023 11:35:29 PM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -72.69237789547198 (T) = (0 -15.8269096331846) / Math.Sqrt((0.010372653101228263 / (30)) + (0.007748331499917887 / (18))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (30) + (18) - 2, .025) and -0.14674040476264064 = (13.801649935288145 - 15.8269096331846) / 13.801649935288145 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyFourValues(Size: 512) ```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 29.48240009035938 > 28.08785593337689. IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -7.771205658518013 (T) = (0 -28.66106339195476) / Math.Sqrt((0.42989136918639165 / (14)) + (0.531609897575271 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.061987393237337686 = (26.988139006608204 - 28.66106339195476) / 26.988139006608204 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyFiveValues(Size: 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 9.874075767970119 > 9.199079896663921. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -8.731892735846337 (T) = (0 -9.964997395706249) / Math.Sqrt((0.18408900075924414 / (14)) + (0.038117032401793795 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.11691430764907039 = (8.921899672572918 - 9.964997395706249) / 8.921899672572918 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.SequenceEqual(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 26.251122403520252 > 23.80601982908204. IsChangePoint: Marked as a change because one of 10/25/2022 7:09:53 PM, 11/2/2022 4:14:20 AM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -11.17218306114501 (T) = (0 -25.496984520379147) / Math.Sqrt((0.39732047680003374 / (14)) + (1.0969746961264049 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.12095733517465526 = (22.7457225358238 - 25.496984520379147) / 22.7457225358238 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyTwoValues(Size: 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 7.128251266915451 > 5.51881696144166. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -26.0975116879662 (T) = (0 -7.101339837318405) / Math.Sqrt((0.05415676613433617 / (14)) + (0.00961317582760418 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.3102329477179349 = (5.41990632252607 - 7.101339837318405) / 5.41990632252607 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyFiveValues(Size: 33) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 12.530525048172104 > 11.784712707930915. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -47.78087084798113 (T) = (0 -12.522802274789601) / Math.Sqrt((0.005447770929863084 / (14)) + (0.01180247246310607 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.11548669610349911 = (11.226312531142629 - 12.522802274789601) / 11.226312531142629 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfAnyTwoValues(Size: 33) ```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 8.332610760154271 > 6.469993975387671. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -68.97871514565654 (T) = (0 -8.352188554295132) / Math.Sqrt((0.00017876004603690059 / (14)) + (0.03371111361538145 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.3545035815633921 = (6.166235857903667 - 8.352188554295132) / 6.166235857903667 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfValue(Size: 33) ```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 6.1936697482212635 > 5.0919653778919045. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -18.253953224267114 (T) = (0 -6.209893476694521) / Math.Sqrt((0.06750501432841075 / (14)) + (0.0035169874240760244 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.25991185971280184 = (4.92883167089964 - 6.209893476694521) / 4.92883167089964 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Char>.IndexOfValue(Size: 512) ```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 17.452510899596785 > 17.063097313315666. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -19.796276437234745 (T) = (0 -18.18683955753027) / Math.Sqrt((0.06894508099904556 / (14)) + (0.1585437553977302 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.11929678965741672 = (16.248451461293584 - 18.18683955753027) / 16.248451461293584 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Memory.Span<Byte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IndexOfAnyTwoValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfAnyTwoValues(Size%3a%20512).html>) 12.77 ns 15.08 ns 1.18 0.08 False
[IndexOfAnyThreeValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfAnyThreeValues(Size%3a%204).html>) 5.62 ns 8.48 ns 1.51 0.05 False
[IndexOfAnyTwoValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfAnyTwoValues(Size%3a%204).html>) 5.18 ns 7.08 ns 1.37 0.09 False
[IndexOfAnyThreeValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfAnyThreeValues(Size%3a%20512).html>) 15.39 ns 18.14 ns 1.18 0.16 False
[IndexOfAnyTwoValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfAnyTwoValues(Size%3a%2033).html>) 4.30 ns 5.78 ns 1.34 0.19 False
[IndexOfAnyThreeValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfAnyThreeValues(Size%3a%2033).html>) 5.05 ns 7.22 ns 1.43 0.10 False
[Reverse - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).Reverse(Size%3a%2033).html>) 4.44 ns 5.52 ns 1.24 0.13 False
[IndexOfValue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfValue(Size%3a%2033).html>) 3.61 ns 4.64 ns 1.29 0.06 False

graph graph 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.Memory.Span&lt;Byte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Byte>.IndexOfAnyTwoValues(Size: 512) ```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.080714791726473 > 13.384559128789045. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -39.54704280370847 (T) = (0 -15.057442115494766) / Math.Sqrt((0.001548908302213576 / (14)) + (0.11261953382834614 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.18156015581178928 = (12.743694886317126 - 15.057442115494766) / 12.743694886317126 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.IndexOfAnyThreeValues(Size: 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 8.47513135593693 > 5.918138393001166. IsChangePoint: Marked as a change because one of 12/17/2022 10:44:50 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -29.50633599695873 (T) = (0 -8.48325948389443) / Math.Sqrt((0.1218057856224633 / (14)) + (0.0005144800265071267 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.48085206086150084 = (5.72863401287986 - 8.48325948389443) / 5.72863401287986 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.IndexOfAnyTwoValues(Size: 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 7.080478208409721 > 5.439896902134364. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -99.11760251691112 (T) = (0 -7.075972140437649) / Math.Sqrt((0.0007046005900405907 / (14)) + (0.010540357593737592 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.36221456222954046 = (5.194462265075471 - 7.075972140437649) / 5.194462265075471 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.IndexOfAnyThreeValues(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 18.13723932100658 > 16.147851286781556. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -25.978945378733357 (T) = (0 -17.96690626326507) / Math.Sqrt((0.08624282290354755 / (14)) + (0.15067893521109813 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.17482760654724464 = (15.293227843078053 - 17.96690626326507) / 15.293227843078053 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.IndexOfAnyTwoValues(Size: 33) ```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 5.776489666532975 > 4.508069440575236. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -41.42295970178233 (T) = (0 -5.80496813623714) / Math.Sqrt((0.0020448068689261616 / (14)) + (0.03956268175230191 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.34814283043036215 = (4.3058999426522515 - 5.80496813623714) / 4.3058999426522515 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.IndexOfAnyThreeValues(Size: 33) ```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.216734059719641 > 5.277548117648291. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -99.21662562549874 (T) = (0 -7.254344564032597) / Math.Sqrt((0.0005332906337095961 / (14)) + (0.0159132270092869 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.4444443476235109 = (5.022238880970314 - 7.254344564032597) / 5.022238880970314 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.Reverse(Size: 33) ```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 5.523235466315321 > 4.671535039767478. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -41.08800124742366 (T) = (0 -5.547321821579229) / Math.Sqrt((0.017683357923393192 / (30)) + (0.0005633757534144932 / (18))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (30) + (18) - 2, .025) and -0.22630004092455464 = (4.523625243783642 - 5.547321821579229) / 4.523625243783642 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.IndexOfValue(Size: 33) ```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 4.6364760202331805 > 3.78842359575423. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -8.546346195588528 (T) = (0 -4.734394503339212) / Math.Sqrt((3.879609074901823E-05 / (14)) + (0.5885765992404114 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.31152170880388036 = (3.6098483704528403 - 4.734394503339212) / 3.6098483704528403 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in BenchmarksGame.RegexRedux_1

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[RunBench - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/BenchmarksGame.RegexRedux_1.RunBench.html>) 54.63 ms 57.95 ms 1.06 0.01 False 332583333.3333333 356900000 1.073114507642195 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'BenchmarksGame.RegexRedux_1*'
### Payloads [Baseline]() [Compare]() ### Histogram #### BenchmarksGame.RegexRedux_1.RunBench ```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 57.950498333333336 > 57.439732875. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -55.06715820955288 (T) = (0 -57932592.806103215) / Math.Sqrt((23547927422.236076 / (14)) + (58535224209.51813 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.058710730931075775 = (54719944.84759288 - 57932592.806103215) / 54719944.84759288 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 ; BenchmarksGame.RegexRedux_1.RunBench() push ebp mov ebp,esp push edi push esi push ebx sub esp,44 mov esi,[ecx+4] mov ecx,offset MT_System.Text.RegularExpressions.Regex call CORINFO_HELP_NEWSFAST mov edi,eax push 8 mov ecx,edi mov edx,8227754 call dword ptr ds:[0AE05030]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) test esi,esi je near ptr M00_L20 mov ebx,esi test byte ptr [edi+20],40 jne short M00_L00 xor esi,esi jmp short M00_L01 M00_L00: mov ebx,esi mov esi,[ebx+4] M00_L01: mov ecx,edi call dword ptr ds:[0AE052B8]; System.Text.RegularExpressions.Regex.get_RegexReplacementWeakReference() mov ecx,eax push dword ptr [edi+0C] push dword ptr [edi+24] push dword ptr [edi+10] push dword ptr [edi+20] mov edx,8220004 call dword ptr ds:[0B34B420]; System.Text.RegularExpressions.RegexReplacement.GetOrCreate(System.WeakReference`1, System.String, System.Collections.Hashtable, Int32, System.Collections.Hashtable, System.Text.RegularExpressions.RegexOptions) mov ecx,eax push ebx push 0FFFFFFFF push esi mov edx,edi cmp [ecx],ecx call dword ptr ds:[0B34B480]; System.Text.RegularExpressions.RegexReplacement.Replace(System.Text.RegularExpressions.Regex, System.String, Int32, Int32) mov esi,eax mov ecx,offset MT_System.String[] mov edx,9 call CORINFO_HELP_NEWARR_1_OBJ mov edi,eax mov dword ptr [edi+8],8227770 mov dword ptr [edi+0C],82277A0 mov dword ptr [edi+10],82277E0 mov dword ptr [edi+14],8227820 mov dword ptr [edi+18],8227860 mov dword ptr [edi+1C],82278A0 mov dword ptr [edi+20],82278E0 mov dword ptr [edi+24],8227920 mov dword ptr [edi+28],8227960 xor ebx,ebx M00_L02: mov eax,[edi+ebx*4+8] mov [ebp-24],eax xor edx,edx mov [ebp-10],edx mov ecx,offset MT_System.Text.RegularExpressions.Regex call CORINFO_HELP_NEWSFAST mov [ebp-2C],eax push 8 mov ecx,eax mov edx,[ebp-24] call dword ptr ds:[0AE05030]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) mov ecx,[ebp-2C] test esi,esi je near ptr M00_L20 mov edx,[esi+4] test byte ptr [ecx+20],40 jne short M00_L03 xor eax,eax jmp short M00_L04 M00_L03: mov eax,esi mov eax,[eax+4] M00_L04: push 0FFFFFFFF push esi push 0 push edx push eax mov edx,2 call dword ptr ds:[0AE052E8]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) cmp dword ptr [eax+1C],0 je short M00_L06 M00_L05: mov edx,[ebp-10] inc edx mov [ebp-10],edx mov ecx,eax cmp [ecx],ecx call dword ptr ds:[0B34B240]; System.Text.RegularExpressions.Match.NextMatch() cmp dword ptr [eax+1C],0 jne short M00_L05 M00_L06: inc ebx cmp ebx,9 jl short M00_L02 mov ecx,offset MT_BenchmarksGame.RegexRedux_1+IUB[] mov edx,5 call CORINFO_HELP_NEWARR_1_VC mov edi,eax lea ecx,[edi+8] mov dword ptr [ecx],82279A0 mov dword ptr [ecx+4],82279BC lea ecx,[edi+10] mov dword ptr [ecx],82279D0 mov dword ptr [ecx+4],8227A04 lea ecx,[edi+18] mov dword ptr [ecx],8227A18 mov dword ptr [ecx+4],8227A38 lea ecx,[edi+20] mov dword ptr [ecx],8227A4C mov dword ptr [ecx+4],8227A68 lea ecx,[edi+28] mov dword ptr [ecx],8227A78 mov dword ptr [ecx+4],8220638 mov [ebp-28],edi xor ebx,ebx M00_L07: mov [ebp-14],ebx lea ecx,[edi+ebx*8+8] mov eax,[ecx] mov [ebp-4C],eax mov edx,[ecx+4] mov [ebp-50],edx mov ecx,offset MT_System.Text.RegularExpressions.Regex call CORINFO_HELP_NEWSFAST mov ecx,eax mov [ebp-30],ecx push 8 mov edx,[ebp-4C] call dword ptr ds:[0AE05030]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) mov ecx,[ebp-30] test esi,esi je near ptr M00_L20 mov eax,ecx mov edx,[ebp-50] test byte ptr [eax+20],40 jne short M00_L08 mov ecx,eax xor eax,eax jmp short M00_L09 M00_L08: mov ecx,eax mov eax,edx mov [ebp-38],esi mov edx,[esi+4] mov [ebp-18],edx mov edx,eax mov eax,[ebp-18] mov esi,[ebp-38] M00_L09: mov [ebp-3C],edx test edx,edx je near ptr M00_L21 mov edi,[ecx+18] test edi,edi mov [ebp-18],eax jne short M00_L12 mov [ebp-34],ecx lea edi,[ecx+18] mov ecx,offset MT_System.WeakReference`1[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions]] call CORINFO_HELP_NEWFAST mov [ebp-40],eax xor ecx,ecx xor edx,edx call System.Runtime.InteropServices.GCHandle.InternalAlloc(System.Object, System.Runtime.InteropServices.GCHandleType) mov edx,[ebp-40] mov [edx+4],eax push 0 mov ecx,edi call System.Threading.Interlocked.CompareExchange(System.Object ByRef, System.Object, System.Object) mov edi,eax test edi,edi jne short M00_L11 mov edi,[ebp-34] mov ecx,[edi+18] mov eax,ecx mov [ebp-38],esi mov ecx,edi mov edi,eax M00_L10: mov eax,[ecx+0C] mov [ebp-44],eax mov esi,[ecx+24] mov [ebp-20],esi mov esi,[ecx+10] mov [ebp-48],esi mov [ebp-34],ecx mov esi,[ecx+20] mov [ebp-1C],esi mov esi,[edi+4] and esi,0FFFFFFFE jne short M00_L13 xor esi,esi jmp short M00_L16 M00_L11: mov [ebp-38],esi mov ecx,[ebp-34] jmp short M00_L10 M00_L12: mov [ebp-38],esi jmp short M00_L10 M00_L13: test esi,2 je short M00_L15 and esi,0FFFFFFFC mov esi,[esi] mov eax,[esi+8] mov eax,[eax] test eax,eax jne short M00_L14 mov ecx,esi call dword ptr ds:[0B34D888] M00_L14: mov esi,eax jmp short M00_L16 M00_L15: mov esi,[esi] M00_L16: test esi,esi je near ptr M00_L19 mov eax,[esi+0C] cmp [eax],al mov edx,[ebp-3C] cmp eax,edx je short M00_L18 mov ebx,[eax+4] cmp ebx,[edx+4] jne short M00_L17 lea ebx,[eax+8] mov eax,[eax+4] add eax,eax push eax mov [ebp-3C],edx add edx,8 mov ecx,ebx call dword ptr ds:[81DF120]; System.SpanHelpers.SequenceEqual(Byte ByRef, Byte ByRef, UIntPtr) test eax,eax mov edx,[ebp-3C] jne short M00_L18 M00_L17: push dword ptr [ebp-44] push dword ptr [ebp-20] push dword ptr [ebp-48] mov ecx,edx mov edx,[ebp-1C] call dword ptr ds:[0B34D048]; System.Text.RegularExpressions.RegexParser.ParseReplacement(System.String, System.Text.RegularExpressions.RegexOptions, System.Collections.Hashtable, Int32, System.Collections.Hashtable) mov esi,eax mov ecx,edi mov edx,esi call dword ptr ds:[880DCC0]; System.WeakReference`1[[System.__Canon, System.Private.CoreLib]].SetTarget(System.__Canon) M00_L18: push dword ptr [ebp-38] push 0FFFFFFFF push dword ptr [ebp-18] mov ecx,esi mov edx,[ebp-34] cmp [ecx],ecx call dword ptr ds:[0B34B480]; System.Text.RegularExpressions.RegexReplacement.Replace(System.Text.RegularExpressions.Regex, System.String, Int32, Int32) mov esi,eax mov ebx,[ebp-14] inc ebx cmp ebx,5 mov edi,[ebp-28] jl near ptr M00_L07 mov eax,[esi+4] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L19: mov edx,[ebp-3C] jmp short M00_L17 M00_L20: mov ecx,7 call dword ptr ds:[0B34B390] int 3 M00_L21: mov ecx,0D call dword ptr ds:[0B34B390] int 3 ; Total bytes of code 854 ``` ```assembly ; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) push ebp mov ebp,esp push dword ptr [ebp+8] mov eax,ds:[6F95020] add eax,4 push dword ptr [eax+4] push dword ptr [eax] push 0 call dword ptr ds:[0AE05078]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions, System.TimeSpan, System.Globalization.CultureInfo) pop ebp ret 4 ; Total bytes of code 31 ``` ```assembly ; System.Text.RegularExpressions.Regex.get_RegexReplacementWeakReference() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov eax,[esi+18] test eax,eax jne short M02_L00 lea edi,[esi+18] mov ecx,offset MT_System.WeakReference`1[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions]] call CORINFO_HELP_NEWFAST mov ebx,eax xor ecx,ecx xor edx,edx call System.Runtime.InteropServices.GCHandle.InternalAlloc(System.Object, System.Runtime.InteropServices.GCHandleType) mov [ebx+4],eax push 0 mov ecx,edi mov edx,ebx call System.Threading.Interlocked.CompareExchange(System.Object ByRef, System.Object, System.Object) test eax,eax jne short M02_L00 mov eax,[esi+18] M02_L00: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 65 ``` ```assembly ; System.Text.RegularExpressions.RegexReplacement.GetOrCreate(System.WeakReference`1, System.String, System.Collections.Hashtable, Int32, System.Collections.Hashtable, System.Text.RegularExpressions.RegexOptions) push ebp mov ebp,esp push edi push esi push ebx mov edi,ecx mov esi,edx mov ecx,[edi+4] and ecx,0FFFFFFFE jne short M03_L00 xor ebx,ebx jmp short M03_L03 M03_L00: test cl,2 je short M03_L02 and ecx,0FFFFFFFC mov ecx,[ecx] mov eax,[ecx+8] mov ebx,[eax] test ebx,ebx jne short M03_L01 call dword ptr ds:[0B34D888] mov ebx,eax M03_L01: jmp short M03_L03 M03_L02: mov ebx,[ecx] M03_L03: test ebx,ebx je short M03_L04 mov edx,[ebx+0C] cmp [edx],dl cmp edx,esi je short M03_L05 test esi,esi je short M03_L04 mov ecx,[edx+4] cmp ecx,[esi+4] jne short M03_L04 lea ecx,[edx+8] mov edx,[edx+4] add edx,edx push edx lea edx,[esi+8] call dword ptr ds:[81DF120]; System.SpanHelpers.SequenceEqual(Byte ByRef, Byte ByRef, UIntPtr) test eax,eax jne short M03_L05 M03_L04: push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,esi mov edx,[ebp+8] call dword ptr ds:[0B34D048]; System.Text.RegularExpressions.RegexParser.ParseReplacement(System.String, System.Text.RegularExpressions.RegexOptions, System.Collections.Hashtable, Int32, System.Collections.Hashtable) mov ebx,eax mov ecx,edi mov edx,ebx call dword ptr ds:[880DCC0]; System.WeakReference`1[[System.__Canon, System.Private.CoreLib]].SetTarget(System.__Canon) M03_L05: mov eax,ebx pop ebx pop esi pop edi pop ebp ret 10 ; Total bytes of code 141 ``` ```assembly ; System.Text.RegularExpressions.RegexReplacement.Replace(System.Text.RegularExpressions.Regex, System.String, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,5C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov edi,ecx mov ebx,edx mov esi,[ebp+10] mov edx,[ebp+0C] mov ecx,[ebp+8] cmp edx,0FFFFFFFF jl near ptr M04_L16 mov [ebp+8],ecx cmp [esi+4],ecx jb near ptr M04_L17 mov [ebp+0C],edx test edx,edx jne short M04_L00 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L00: mov eax,ds:[6F94E4C] mov [ebp-64],eax lea ecx,[ebp-38] mov edx,esi call dword ptr ds:[0A94D318]; System.MemoryExtensions.AsMemory(System.String) mov [ebp-2C],edi mov ecx,[ebp-64] mov [ebp-20],ecx xor ecx,ecx mov [ebp-1C],ecx mov ecx,[ebp-38] mov [ebp-18],ecx mov ecx,[ebp-34] mov [ebp-14],ecx mov ecx,[ebp-30] mov [ebp-10],ecx xor ecx,ecx mov [ebp-28],ecx mov ecx,[ebp+0C] mov [ebp-24],ecx test byte ptr [ebx+20],40 jne near ptr M04_L06 mov eax,ds:[6F950B0] mov edx,[ebp+8] mov [ebp-44],edx lea ecx,[ebp-2C] mov [ebp-5C],ecx test eax,eax jne short M04_L01 mov ecx,offset MT_System.Text.RegularExpressions.MatchCallback`1[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[6F950AC] test ecx,ecx je near ptr M04_L18 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B5AC300 mov edx,6F950B0 call CORINFO_HELP_ASSIGN_REF_EAX M04_L01: mov edx,[ebp-44] mov ecx,[ebp-5C] cmp byte ptr [edi+10],0 jne short M04_L02 mov edi,1 mov [ebp-60],ebx mov [ebp-48],edi jmp short M04_L03 nop nop nop M04_L02: mov [ebp-60],ebx mov dword ptr [ebp-48],2 M04_L03: lea ebx,[esi+8] mov edi,[esi+4] push edi push ebx push edx push ecx push eax push dword ptr [ebp-48] push 1 push offset MD_System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) mov ecx,[ebp-60] mov edx,esi call dword ptr ds:[0B5AD660]; System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.__Canon, System.Private.CoreLib],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) cmp dword ptr [ebp-1C],0 jne short M04_L04 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L04: mov edx,[ebp-28] cmp edx,[ebp-10] ja near ptr M04_L19 mov ecx,[ebp-18] mov eax,edx add eax,[ebp-14] mov esi,[ebp-10] sub esi,edx mov edx,[ebp-20] mov edi,[ebp-1C] mov ebx,[edx+4] cmp ebx,edi jbe short M04_L05 lea ebx,[edi+edi*2] lea ebx,[edx+ebx*4+8] mov edx,ebx call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov [ebx+4],eax mov [ebx+8],esi inc edi mov [ebp-1C],edi jmp near ptr M04_L15 M04_L05: push esi push eax push ecx lea ecx,[ebp-20] call dword ptr ds:[0B5ABF18]; System.Text.SegmentStringBuilder.GrowAndAdd(System.ReadOnlyMemory`1) jmp near ptr M04_L15 M04_L06: mov ecx,[esi+4] mov [ebp-28],ecx mov eax,ds:[6F950B4] mov ecx,[ebp+8] mov [ebp-3C],ecx lea ecx,[ebp-2C] mov [ebp-54],ecx test eax,eax jne short M04_L07 mov ecx,offset MT_System.Text.RegularExpressions.MatchCallback`1[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[6F950AC] test ecx,ecx je near ptr M04_L18 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B5AC318 mov edx,6F950B4 call CORINFO_HELP_ASSIGN_REF_EAX M04_L07: mov edx,[ebp-3C] mov ecx,[ebp-54] cmp byte ptr [edi+10],0 jne short M04_L08 mov edi,1 mov [ebp-58],ebx mov [ebp-40],edi jmp short M04_L09 M04_L08: mov [ebp-58],ebx mov dword ptr [ebp-40],2 M04_L09: lea ebx,[esi+8] mov edi,[esi+4] push edi push ebx push edx push ecx push eax push dword ptr [ebp-40] push 1 push offset MD_System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) mov ecx,[ebp-58] mov edx,esi call dword ptr ds:[0B5AD660]; System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.__Canon, System.Private.CoreLib],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) cmp dword ptr [ebp-1C],0 jne short M04_L10 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L10: mov ecx,[ebp-28] cmp ecx,[ebp-10] ja near ptr M04_L19 mov eax,[ebp-18] mov esi,[ebp-14] mov edx,[ebp-20] mov edi,[ebp-1C] mov ebx,[edx+4] cmp ebx,edi jbe short M04_L11 lea ebx,[edi+edi*2] lea ebx,[edx+ebx*4+8] mov edx,ebx call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX mov [ebx+4],esi mov [ebx+8],ecx inc edi mov [ebp-1C],edi jmp short M04_L12 M04_L11: push ecx push esi push eax lea ecx,[ebp-20] call dword ptr ds:[0B5ABF18]; System.Text.SegmentStringBuilder.GrowAndAdd(System.ReadOnlyMemory`1) M04_L12: mov eax,[ebp-20] mov ebx,[ebp-1C] test eax,eax je near ptr M04_L20 mov ecx,[eax+4] cmp [eax+4],ebx jb near ptr M04_L21 add eax,8 M04_L13: cmp ebx,1 jle short M04_L15 lea ecx,[ebx+ebx*2] lea ebx,[eax+ecx*4-0C] M04_L14: mov edx,[eax] mov [ebp-68],edx mov ecx,[eax+4] mov [ebp-4C],ecx mov esi,[eax+8] mov [ebp-50],esi mov edi,eax mov esi,ebx call CORINFO_HELP_ASSIGN_BYREF movsd movsd mov ecx,[ebp-68] mov edx,ebx call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov ecx,[ebp-4C] mov [ebx+4],ecx mov ecx,[ebp-50] mov [ebx+8],ecx add eax,0C add ebx,0FFFFFFF4 cmp eax,ebx jb short M04_L14 M04_L15: lea ecx,[ebp-20] call dword ptr ds:[0B5ABF60]; System.Text.SegmentStringBuilder.ToString() lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L16: mov ecx,3 mov edx,1 call dword ptr ds:[0B34B3C0] int 3 M04_L17: mov ecx,0E xor edx,edx call dword ptr ds:[0B34B3C0] int 3 M04_L18: call dword ptr ds:[81EB630] int 3 M04_L19: mov ecx,21 call dword ptr ds:[88A53A8] int 3 M04_L20: test ebx,ebx jne short M04_L21 xor eax,eax xor ebx,ebx jmp near ptr M04_L13 M04_L21: call dword ptr ds:[88A5060] int 3 ; Total bytes of code 821 ``` ```assembly ; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-30],eax mov [ebp-34],eax mov [ebp-18],eax mov [ebp-2C],ecx mov esi,edx mov ebx,[ebp+14] mov edi,[ebp+10] mov [ebp+14],ebx mov edx,[ebx+4] mov [ebp-28],edx mov eax,[ebp+8] cmp edx,eax jb near ptr M05_L14 mov eax,[ebp+0C] cmp edx,eax jb near ptr M05_L15 cmp [ecx],cl lea eax,[ecx+1C] xor ebx,ebx xchg ebx,[eax] test ebx,ebx jne short M05_L00 mov eax,[ecx+8] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov ebx,eax mov ecx,[ebp-2C] M05_L00: mov [ebp-30],ebx lea eax,[ecx+2C] push dword ptr [eax+4] push dword ptr [eax] mov ecx,ebx cmp [ecx],ecx call dword ptr ds:[0B353888]; System.Text.RegularExpressions.RegexRunner.InitializeTimeout(System.TimeSpan) lea edx,[ebx+0C] mov eax,[ebp+14] call CORINFO_HELP_ASSIGN_REF_EAX mov ecx,[ebp-28] cmp ecx,edi jb near ptr M05_L08 sub ecx,edi mov edx,[ebp+0C] cmp ecx,edx jb near ptr M05_L08 mov [ebp+14],eax lea ecx,[eax+edi*2+8] mov [ebp-3C],ecx mov [ebp-24],edx push edx push ecx mov eax,[ebp+8] sub eax,edi push eax push esi mov ecx,ebx mov edx,[ebp-2C] call dword ptr ds:[0B353870]; System.Text.RegularExpressions.RegexRunner.InitializeForScan(System.Text.RegularExpressions.Regex, System.ReadOnlySpan`1, Int32, System.Text.RegularExpressions.RegexRunnerMode) cmp dword ptr [ebp+18],0 jne short M05_L03 mov ecx,[ebp-24] mov eax,ecx mov edx,1 mov ecx,[ebp-2C] test byte ptr [ecx+20],40 je short M05_L01 xor eax,eax mov edx,0FFFFFFFF M05_L01: cmp [ebx+2C],eax jne short M05_L02 mov edx,ds:[6F95018] mov [ebp-34],edx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M05_L11 jmp near ptr M05_L12 M05_L02: add [ebx+30],edx M05_L03: push dword ptr [ebp-24] push dword ptr [ebp-3C] mov ecx,ebx mov eax,[ebx] mov eax,[eax+28] call dword ptr [eax+10] mov eax,[ebx+1C] mov [ebp-38],eax mov edx,[eax+2C] cmp dword ptr [edx+4],0 jbe short M05_L04 cmp dword ptr [edx+8],0 jle short M05_L09 test esi,esi je short M05_L05 lea edx,[eax+4] mov ecx,[ebp+14] call CORINFO_HELP_ASSIGN_REF_ECX xor edx,edx mov [ebx+1C],edx jmp short M05_L06 M05_L04: call CORINFO_HELP_RNGCHKFAIL M05_L05: xor edx,edx mov [eax+4],edx jmp short M05_L07 M05_L06: mov edx,[ebx+30] push edi push esi mov ecx,eax call dword ptr ds:[0B34B348]; System.Text.RegularExpressions.Match.Tidy(Int32, Int32, System.Text.RegularExpressions.RegexRunnerMode) mov esi,[ebp-38] mov edx,esi M05_L07: mov [ebp-34],edx jmp short M05_L10 M05_L08: mov ecx,21 call dword ptr ds:[88A53A8] int 3 M05_L09: xor edx,edx mov [eax+4],edx mov edx,ds:[6F95018] jmp short M05_L07 M05_L10: xor edx,edx mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX jmp short M05_L13 M05_L11: mov dword ptr [ebp-18],0 jmp short M05_L13 M05_L12: xor edx,edx mov ebx,[ebp-30] mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX pop eax jmp eax M05_L13: mov eax,[ebp-34] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M05_L14: mov ecx,0E xor edx,edx call dword ptr ds:[0B34B3C0] int 3 M05_L15: mov ecx,8 mov edx,2 call dword ptr ds:[0B34B3C0] int 3 ; Total bytes of code 467 ``` ```assembly ; System.Text.RegularExpressions.Match.NextMatch() push ebp mov ebp,esp push esi mov edx,[ecx+24] test edx,edx jne short M06_L00 mov eax,ecx pop esi pop ebp ret M06_L00: push dword ptr [ecx+0C] push dword ptr [ecx+4] mov eax,[ecx+30] push eax mov esi,[ecx+38] sub esi,eax push esi push dword ptr [ecx+34] mov ecx,edx mov edx,2 call dword ptr ds:[0AE052E8]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) pop esi pop ebp ret ; Total bytes of code 51 ``` ```assembly ; System.SpanHelpers.SequenceEqual(Byte ByRef, Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx vzeroupper mov esi,[ebp+8] cmp esi,4 jb short M07_L03 cmp ecx,edx je near ptr M07_L11 cmp esi,20 jae short M07_L00 cmp esi,10 jb short M07_L07 jmp near ptr M07_L12 M07_L00: xor eax,eax add esi,0FFFFFFE0 je short M07_L02 M07_L01: vmovdqu ymm0,ymmword ptr [ecx+eax] vpcmpeqb ymm0,ymm0,[edx+eax] vpmovmskb edi,ymm0 cmp edi,0FFFFFFFF jne short M07_L10 add eax,20 cmp esi,eax ja short M07_L01 M07_L02: vmovdqu ymm0,ymmword ptr [ecx+esi] vpcmpeqb ymm0,ymm0,[edx+esi] vpmovmskb ecx,ymm0 cmp ecx,0FFFFFFFF jne short M07_L10 jmp short M07_L11 M07_L03: xor eax,eax mov edi,esi and edi,2 je short M07_L04 movzx eax,word ptr [ecx] movzx ebx,word ptr [edx] sub eax,ebx M07_L04: test esi,1 jne near ptr M07_L15 M07_L05: test eax,eax sete al movzx eax,al M07_L06: vzeroupper pop ebx pop esi pop edi pop ebp ret 4 M07_L07: xor eax,eax add esi,0FFFFFFFC je short M07_L09 M07_L08: mov edi,[ecx+eax] cmp edi,[edx+eax] jne short M07_L10 add eax,4 cmp esi,eax ja short M07_L08 M07_L09: mov eax,[ecx+esi] cmp eax,[edx+esi] sete al movzx eax,al jmp short M07_L06 M07_L10: xor eax,eax vzeroupper pop ebx pop esi pop edi pop ebp ret 4 M07_L11: mov eax,1 vzeroupper pop ebx pop esi pop edi pop ebp ret 4 M07_L12: xor eax,eax add esi,0FFFFFFF0 je short M07_L14 M07_L13: vmovdqu xmm0,xmmword ptr [ecx+eax] vpcmpeqb xmm0,xmm0,[edx+eax] vpmovmskb edi,xmm0 cmp edi,0FFFF jne short M07_L10 add eax,10 cmp esi,eax ja short M07_L13 M07_L14: vmovdqu xmm0,xmmword ptr [ecx+esi] vpcmpeqb xmm0,xmm0,[edx+esi] vpmovmskb eax,xmm0 cmp eax,0FFFF jne short M07_L10 jmp short M07_L11 M07_L15: movzx ecx,byte ptr [ecx+edi] movzx edx,byte ptr [edx+edi] sub ecx,edx or ecx,eax mov eax,ecx jmp near ptr M07_L05 ; Total bytes of code 282 ``` ```assembly ; System.Text.RegularExpressions.RegexParser.ParseReplacement(System.String, System.Text.RegularExpressions.RegexOptions, System.Collections.Hashtable, Int32, System.Collections.Hashtable) push ebp mov ebp,esp push edi push esi push ebx sub esp,7C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-80],xmm4 vmovdqu xmmword ptr [ebp-70],xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 xor eax,eax mov [ebp-30],eax mov [ebp-2C],eax mov [ebp-28],eax mov [ebp-1C],eax mov [ebp-10],esp mov dword ptr [ebp-88],58147CB6 mov esi,ecx mov edi,edx mov ebx,[ebp+10] test edi,200 jne short M08_L00 call dword ptr ds:[8867180]; System.Globalization.CultureInfo.get_CurrentCulture() jmp short M08_L01 M08_L00: mov eax,ds:[6F912A0] M08_L01: test [esp],esp sub esp,80 lea ecx,[esp] mov [ebp-10],esp push edi push eax push ebx push dword ptr [ebp+0C] push dword ptr [ebp+8] push 20 push ecx lea ecx,[ebp-80] mov edx,esi call dword ptr ds:[0B34D000]; System.Text.RegularExpressions.RegexParser..ctor(System.String, System.Text.RegularExpressions.RegexOptions, System.Globalization.CultureInfo, System.Collections.Hashtable, Int32, System.Collections.Hashtable, System.Span`1) lea ecx,[ebp-80] call dword ptr ds:[0B34D108]; System.Text.RegularExpressions.RegexParser.ScanReplacement() mov edi,eax mov ecx,offset MT_System.Text.RegularExpressions.RegexReplacement call CORINFO_HELP_NEWSFAST mov [ebp-84],eax push edi push ebx mov ecx,eax mov edx,esi call dword ptr ds:[0B34B408]; System.Text.RegularExpressions.RegexReplacement..ctor(System.String, System.Text.RegularExpressions.RegexNode, System.Collections.Hashtable) mov esi,[ebp-84] mov edi,[ebp-34] test edi,edi je short M08_L03 xor ecx,ecx mov [ebp-34],ecx mov ecx,4CF4D68 mov edx,31 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov ecx,ds:[6F91FFC] push 0 mov edx,edi cmp [ecx],ecx call dword ptr ds:[0B3720A4]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean) jmp short M08_L03 mov edi,[ebp-34] test edi,edi je short M08_L02 xor ecx,ecx mov [ebp-34],ecx mov ecx,4CF4D68 mov edx,31 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov ecx,ds:[6F91FFC] push 0 mov edx,edi cmp [ecx],ecx call dword ptr ds:[0B3720A4]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean) M08_L02: pop eax jmp eax M08_L03: mov eax,esi cmp dword ptr [ebp-88],58147CB6 je short M08_L04 call CORINFO_HELP_FAIL_FAST M08_L04: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C ; Total bytes of code 300 ``` ```assembly ; System.WeakReference`1[[System.__Canon, System.Private.CoreLib]].SetTarget(System.__Canon) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax mov edi,ecx mov esi,edx mov ebx,[edi+4] and ebx,0FFFFFFFE je short M09_L04 test esi,esi je short M09_L00 lea ecx,[esi+4] mov [ebp-10],ecx mov ecx,[ebp-10] mov ecx,[ecx-8] and ecx,0C000000 cmp ecx,8000000 sete cl movzx ecx,cl xor eax,eax mov [ebp-10],eax test ecx,ecx jne short M09_L01 M09_L00: xor eax,eax jmp short M09_L02 M09_L01: mov ecx,esi call dword ptr ds:[0B34D798] M09_L02: mov ecx,ebx and ecx,2 or ecx,eax je short M09_L03 lea ecx,[edi+4] push eax mov edx,esi call dword ptr ds:[0B34D8E8] pop ecx pop ebx pop esi pop edi pop ebp ret M09_L03: mov ecx,ebx mov edx,esi call System.Runtime.InteropServices.GCHandle.InternalSet(IntPtr, System.Object) pop ecx pop ebx pop esi pop edi pop ebp ret M09_L04: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax call dword ptr ds:[87FB660] mov edx,eax mov ecx,esi call dword ptr ds:[88911C8] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 157 ``` ### Compare Jit Disasm ```assembly ; BenchmarksGame.RegexRedux_1.RunBench() push ebp mov ebp,esp push edi push esi push ebx sub esp,44 mov esi,[ecx+4] mov ecx,offset MT_System.Text.RegularExpressions.Regex call CORINFO_HELP_NEWSFAST mov edi,eax push 8 mov ecx,edi mov edx,8AA7800 call dword ptr ds:[0B6957B0]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) test esi,esi je near ptr M00_L20 mov ebx,esi test byte ptr [edi+20],40 jne short M00_L00 xor esi,esi jmp short M00_L01 M00_L00: mov ebx,esi mov esi,[ebx+4] M00_L01: mov ecx,edi call dword ptr ds:[0B695A38]; System.Text.RegularExpressions.Regex.get_RegexReplacementWeakReference() mov ecx,eax push dword ptr [edi+0C] push dword ptr [edi+24] push dword ptr [edi+10] push dword ptr [edi+20] mov edx,8AA0004 call dword ptr ds:[0BBA78B8]; System.Text.RegularExpressions.RegexReplacement.GetOrCreate(System.WeakReference`1, System.String, System.Collections.Hashtable, Int32, System.Collections.Hashtable, System.Text.RegularExpressions.RegexOptions) mov ecx,eax push ebx push 0FFFFFFFF push esi mov edx,edi cmp [ecx],ecx call dword ptr ds:[0BBA7918]; System.Text.RegularExpressions.RegexReplacement.Replace(System.Text.RegularExpressions.Regex, System.String, Int32, Int32) mov esi,eax mov ecx,offset MT_System.String[] mov edx,9 call CORINFO_HELP_NEWARR_1_OBJ mov edi,eax mov dword ptr [edi+8],8AA781C mov dword ptr [edi+0C],8AA784C mov dword ptr [edi+10],8AA788C mov dword ptr [edi+14],8AA78CC mov dword ptr [edi+18],8AA790C mov dword ptr [edi+1C],8AA794C mov dword ptr [edi+20],8AA798C mov dword ptr [edi+24],8AA79CC mov dword ptr [edi+28],8AA7A0C xor ebx,ebx M00_L02: mov eax,[edi+ebx*4+8] mov [ebp-24],eax xor edx,edx mov [ebp-10],edx mov ecx,offset MT_System.Text.RegularExpressions.Regex call CORINFO_HELP_NEWSFAST mov [ebp-2C],eax push 8 mov ecx,eax mov edx,[ebp-24] call dword ptr ds:[0B6957B0]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) mov ecx,[ebp-2C] test esi,esi je near ptr M00_L20 mov edx,[esi+4] test byte ptr [ecx+20],40 jne short M00_L03 xor eax,eax jmp short M00_L04 M00_L03: mov eax,esi mov eax,[eax+4] M00_L04: push 0FFFFFFFF push esi push 0 push edx push eax mov edx,2 call dword ptr ds:[0B695A68]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) cmp dword ptr [eax+1C],0 je short M00_L06 M00_L05: mov edx,[ebp-10] inc edx mov [ebp-10],edx mov ecx,eax cmp [ecx],ecx call dword ptr ds:[0BBA76D8]; System.Text.RegularExpressions.Match.NextMatch() cmp dword ptr [eax+1C],0 jne short M00_L05 M00_L06: inc ebx cmp ebx,9 jl short M00_L02 mov ecx,offset MT_BenchmarksGame.RegexRedux_1+IUB[] mov edx,5 call CORINFO_HELP_NEWARR_1_VC mov edi,eax lea ecx,[edi+8] mov dword ptr [ecx],8AA7A4C mov dword ptr [ecx+4],8AA7A68 lea ecx,[edi+10] mov dword ptr [ecx],8AA7A7C mov dword ptr [ecx+4],8AA7AB0 lea ecx,[edi+18] mov dword ptr [ecx],8AA7AC4 mov dword ptr [ecx+4],8AA7AE4 lea ecx,[edi+20] mov dword ptr [ecx],8AA7AF8 mov dword ptr [ecx+4],8AA7B14 lea ecx,[edi+28] mov dword ptr [ecx],8AA7B24 mov dword ptr [ecx+4],8AA0658 mov [ebp-28],edi xor ebx,ebx M00_L07: mov [ebp-14],ebx lea ecx,[edi+ebx*8+8] mov eax,[ecx] mov [ebp-4C],eax mov edx,[ecx+4] mov [ebp-50],edx mov ecx,offset MT_System.Text.RegularExpressions.Regex call CORINFO_HELP_NEWSFAST mov ecx,eax mov [ebp-30],ecx push 8 mov edx,[ebp-4C] call dword ptr ds:[0B6957B0]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) mov ecx,[ebp-30] test esi,esi je near ptr M00_L20 mov eax,ecx mov edx,[ebp-50] test byte ptr [eax+20],40 jne short M00_L08 mov ecx,eax xor eax,eax jmp short M00_L09 M00_L08: mov ecx,eax mov eax,edx mov [ebp-38],esi mov edx,[esi+4] mov [ebp-18],edx mov edx,eax mov eax,[ebp-18] mov esi,[ebp-38] M00_L09: mov [ebp-3C],edx test edx,edx je near ptr M00_L21 mov edi,[ecx+18] test edi,edi mov [ebp-18],eax jne short M00_L12 mov [ebp-34],ecx lea edi,[ecx+18] mov ecx,offset MT_System.WeakReference`1[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions]] call CORINFO_HELP_NEWFAST mov [ebp-40],eax xor ecx,ecx xor edx,edx call System.Runtime.InteropServices.GCHandle.InternalAlloc(System.Object, System.Runtime.InteropServices.GCHandleType) mov edx,[ebp-40] mov [edx+4],eax push 0 mov ecx,edi call System.Threading.Interlocked.CompareExchange(System.Object ByRef, System.Object, System.Object) mov edi,eax test edi,edi jne short M00_L11 mov edi,[ebp-34] mov ecx,[edi+18] mov eax,ecx mov [ebp-38],esi mov ecx,edi mov edi,eax M00_L10: mov eax,[ecx+0C] mov [ebp-44],eax mov esi,[ecx+24] mov [ebp-20],esi mov esi,[ecx+10] mov [ebp-48],esi mov [ebp-34],ecx mov esi,[ecx+20] mov [ebp-1C],esi mov esi,[edi+4] and esi,0FFFFFFFE jne short M00_L13 xor esi,esi jmp short M00_L16 M00_L11: mov [ebp-38],esi mov ecx,[ebp-34] jmp short M00_L10 M00_L12: mov [ebp-38],esi jmp short M00_L10 M00_L13: test esi,2 je short M00_L15 and esi,0FFFFFFFC mov esi,[esi] mov eax,[esi+8] mov eax,[eax] test eax,eax jne short M00_L14 mov ecx,esi call dword ptr ds:[0BBA9D20] M00_L14: mov esi,eax jmp short M00_L16 M00_L15: mov esi,[esi] M00_L16: test esi,esi je near ptr M00_L19 mov eax,[esi+0C] cmp [eax],al mov edx,[ebp-3C] cmp eax,edx je short M00_L18 mov ebx,[eax+4] cmp ebx,[edx+4] jne short M00_L17 lea ebx,[eax+8] mov eax,[eax+4] add eax,eax push eax mov [ebp-3C],edx add edx,8 mov ecx,ebx call dword ptr ds:[566F120]; System.SpanHelpers.SequenceEqual(Byte ByRef, Byte ByRef, UIntPtr) test eax,eax mov edx,[ebp-3C] jne short M00_L18 M00_L17: push dword ptr [ebp-44] push dword ptr [ebp-20] push dword ptr [ebp-48] mov ecx,edx mov edx,[ebp-1C] call dword ptr ds:[0BBA94E0]; System.Text.RegularExpressions.RegexParser.ParseReplacement(System.String, System.Text.RegularExpressions.RegexOptions, System.Collections.Hashtable, Int32, System.Collections.Hashtable) mov esi,eax mov ecx,edi mov edx,esi call dword ptr ds:[908D7B0]; System.WeakReference`1[[System.__Canon, System.Private.CoreLib]].SetTarget(System.__Canon) M00_L18: push dword ptr [ebp-38] push 0FFFFFFFF push dword ptr [ebp-18] mov ecx,esi mov edx,[ebp-34] cmp [ecx],ecx call dword ptr ds:[0BBA7918]; System.Text.RegularExpressions.RegexReplacement.Replace(System.Text.RegularExpressions.Regex, System.String, Int32, Int32) mov esi,eax mov ebx,[ebp-14] inc ebx cmp ebx,5 mov edi,[ebp-28] jl near ptr M00_L07 mov eax,[esi+4] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L19: mov edx,[ebp-3C] jmp short M00_L17 M00_L20: mov ecx,7 call dword ptr ds:[0BBA7828] int 3 M00_L21: mov ecx,0D call dword ptr ds:[0BBA7828] int 3 ; Total bytes of code 854 ``` ```assembly ; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions) push ebp mov ebp,esp push dword ptr [ebp+8] mov eax,ds:[7815020] add eax,4 push dword ptr [eax+4] push dword ptr [eax] push 0 call dword ptr ds:[0B6957F8]; System.Text.RegularExpressions.Regex..ctor(System.String, System.Text.RegularExpressions.RegexOptions, System.TimeSpan, System.Globalization.CultureInfo) pop ebp ret 4 ; Total bytes of code 31 ``` ```assembly ; System.Text.RegularExpressions.Regex.get_RegexReplacementWeakReference() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov eax,[esi+18] test eax,eax jne short M02_L00 lea edi,[esi+18] mov ecx,offset MT_System.WeakReference`1[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions]] call CORINFO_HELP_NEWFAST mov ebx,eax xor ecx,ecx xor edx,edx call System.Runtime.InteropServices.GCHandle.InternalAlloc(System.Object, System.Runtime.InteropServices.GCHandleType) mov [ebx+4],eax push 0 mov ecx,edi mov edx,ebx call System.Threading.Interlocked.CompareExchange(System.Object ByRef, System.Object, System.Object) test eax,eax jne short M02_L00 mov eax,[esi+18] M02_L00: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 65 ``` ```assembly ; System.Text.RegularExpressions.RegexReplacement.GetOrCreate(System.WeakReference`1, System.String, System.Collections.Hashtable, Int32, System.Collections.Hashtable, System.Text.RegularExpressions.RegexOptions) push ebp mov ebp,esp push edi push esi push ebx mov edi,ecx mov esi,edx mov ecx,[edi+4] and ecx,0FFFFFFFE jne short M03_L00 xor ebx,ebx jmp short M03_L03 M03_L00: test cl,2 je short M03_L02 and ecx,0FFFFFFFC mov ecx,[ecx] mov eax,[ecx+8] mov ebx,[eax] test ebx,ebx jne short M03_L01 call dword ptr ds:[0BBA9D20] mov ebx,eax M03_L01: jmp short M03_L03 M03_L02: mov ebx,[ecx] M03_L03: test ebx,ebx je short M03_L04 mov edx,[ebx+0C] cmp [edx],dl cmp edx,esi je short M03_L05 test esi,esi je short M03_L04 mov ecx,[edx+4] cmp ecx,[esi+4] jne short M03_L04 lea ecx,[edx+8] mov edx,[edx+4] add edx,edx push edx lea edx,[esi+8] call dword ptr ds:[566F120]; System.SpanHelpers.SequenceEqual(Byte ByRef, Byte ByRef, UIntPtr) test eax,eax jne short M03_L05 M03_L04: push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,esi mov edx,[ebp+8] call dword ptr ds:[0BBA94E0]; System.Text.RegularExpressions.RegexParser.ParseReplacement(System.String, System.Text.RegularExpressions.RegexOptions, System.Collections.Hashtable, Int32, System.Collections.Hashtable) mov ebx,eax mov ecx,edi mov edx,ebx call dword ptr ds:[908D7B0]; System.WeakReference`1[[System.__Canon, System.Private.CoreLib]].SetTarget(System.__Canon) M03_L05: mov eax,ebx pop ebx pop esi pop edi pop ebp ret 10 ; Total bytes of code 141 ``` ```assembly ; System.Text.RegularExpressions.RegexReplacement.Replace(System.Text.RegularExpressions.Regex, System.String, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,5C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov edi,ecx mov ebx,edx mov esi,[ebp+10] mov edx,[ebp+0C] mov ecx,[ebp+8] cmp edx,0FFFFFFFF jl near ptr M04_L16 mov [ebp+8],ecx cmp [esi+4],ecx jb near ptr M04_L17 mov [ebp+0C],edx test edx,edx jne short M04_L00 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L00: mov eax,ds:[7814E54] mov [ebp-64],eax lea ecx,[ebp-38] mov edx,esi call dword ptr ds:[0B651318]; System.MemoryExtensions.AsMemory(System.String) mov [ebp-2C],edi mov ecx,[ebp-64] mov [ebp-20],ecx xor ecx,ecx mov [ebp-1C],ecx mov ecx,[ebp-38] mov [ebp-18],ecx mov ecx,[ebp-34] mov [ebp-14],ecx mov ecx,[ebp-30] mov [ebp-10],ecx xor ecx,ecx mov [ebp-28],ecx mov ecx,[ebp+0C] mov [ebp-24],ecx test byte ptr [ebx+20],40 jne near ptr M04_L06 mov eax,ds:[78150B0] mov edx,[ebp+8] mov [ebp-44],edx lea ecx,[ebp-2C] mov [ebp-5C],ecx test eax,eax jne short M04_L01 mov ecx,offset MT_System.Text.RegularExpressions.MatchCallback`1[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[78150AC] test ecx,ecx je near ptr M04_L18 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0BE88A80 mov edx,78150B0 call CORINFO_HELP_ASSIGN_REF_EAX M04_L01: mov edx,[ebp-44] mov ecx,[ebp-5C] cmp byte ptr [edi+10],0 jne short M04_L02 mov edi,1 mov [ebp-60],ebx mov [ebp-48],edi jmp short M04_L03 nop nop nop M04_L02: mov [ebp-60],ebx mov dword ptr [ebp-48],2 M04_L03: lea ebx,[esi+8] mov edi,[esi+4] push edi push ebx push edx push ecx push eax push dword ptr [ebp-48] push 1 push offset MD_System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) mov ecx,[ebp-60] mov edx,esi call dword ptr ds:[0BE89DE0]; System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.__Canon, System.Private.CoreLib],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) cmp dword ptr [ebp-1C],0 jne short M04_L04 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L04: mov edx,[ebp-28] cmp edx,[ebp-10] ja near ptr M04_L19 mov ecx,[ebp-18] mov eax,edx add eax,[ebp-14] mov esi,[ebp-10] sub esi,edx mov edx,[ebp-20] mov edi,[ebp-1C] mov ebx,[edx+4] cmp ebx,edi jbe short M04_L05 lea ebx,[edi+edi*2] lea ebx,[edx+ebx*4+8] mov edx,ebx call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov [ebx+4],eax mov [ebx+8],esi inc edi mov [ebp-1C],edi jmp near ptr M04_L15 M04_L05: push esi push eax push ecx lea ecx,[ebp-20] call dword ptr ds:[0BE89720]; System.Text.SegmentStringBuilder.GrowAndAdd(System.ReadOnlyMemory`1) jmp near ptr M04_L15 M04_L06: mov ecx,[esi+4] mov [ebp-28],ecx mov eax,ds:[78150B4] mov ecx,[ebp+8] mov [ebp-3C],ecx lea ecx,[ebp-2C] mov [ebp-54],ecx test eax,eax jne short M04_L07 mov ecx,offset MT_System.Text.RegularExpressions.MatchCallback`1[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[78150AC] test ecx,ecx je near ptr M04_L18 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0BE88A98 mov edx,78150B4 call CORINFO_HELP_ASSIGN_REF_EAX M04_L07: mov edx,[ebp-3C] mov ecx,[ebp-54] cmp byte ptr [edi+10],0 jne short M04_L08 mov edi,1 mov [ebp-58],ebx mov [ebp-40],edi jmp short M04_L09 M04_L08: mov [ebp-58],ebx mov dword ptr [ebp-40],2 M04_L09: lea ebx,[esi+8] mov edi,[esi+4] push edi push ebx push edx push ecx push eax push dword ptr [ebp-40] push 1 push offset MD_System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.Text.RegularExpressions.RegexReplacement, System.Text.RegularExpressions],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) mov ecx,[ebp-58] mov edx,esi call dword ptr ds:[0BE89DE0]; System.Text.RegularExpressions.Regex.RunAllMatchesWithCallback[[System.ValueTuple`5[[System.__Canon, System.Private.CoreLib],[System.Text.SegmentStringBuilder, System.Text.RegularExpressions],[System.ReadOnlyMemory`1[[System.Char, System.Private.CoreLib]], System.Private.CoreLib],[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib]](System.String, System.ReadOnlySpan`1, Int32, System.ValueTuple`5,Int32,Int32> ByRef, System.Text.RegularExpressions.MatchCallback`1,Int32,Int32>>, System.Text.RegularExpressions.RegexRunnerMode, Boolean) cmp dword ptr [ebp-1C],0 jne short M04_L10 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L10: mov ecx,[ebp-28] cmp ecx,[ebp-10] ja near ptr M04_L19 mov eax,[ebp-18] mov esi,[ebp-14] mov edx,[ebp-20] mov edi,[ebp-1C] mov ebx,[edx+4] cmp ebx,edi jbe short M04_L11 lea ebx,[edi+edi*2] lea ebx,[edx+ebx*4+8] mov edx,ebx call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX mov [ebx+4],esi mov [ebx+8],ecx inc edi mov [ebp-1C],edi jmp short M04_L12 M04_L11: push ecx push esi push eax lea ecx,[ebp-20] call dword ptr ds:[0BE89720]; System.Text.SegmentStringBuilder.GrowAndAdd(System.ReadOnlyMemory`1) M04_L12: mov eax,[ebp-20] mov ebx,[ebp-1C] test eax,eax je near ptr M04_L20 mov ecx,[eax+4] cmp [eax+4],ebx jb near ptr M04_L21 add eax,8 M04_L13: cmp ebx,1 jle short M04_L15 lea ecx,[ebx+ebx*2] lea ebx,[eax+ecx*4-0C] M04_L14: mov edx,[eax] mov [ebp-68],edx mov ecx,[eax+4] mov [ebp-4C],ecx mov esi,[eax+8] mov [ebp-50],esi mov edi,eax mov esi,ebx call CORINFO_HELP_ASSIGN_BYREF movsd movsd mov ecx,[ebp-68] mov edx,ebx call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov ecx,[ebp-4C] mov [ebx+4],ecx mov ecx,[ebp-50] mov [ebx+8],ecx add eax,0C add ebx,0FFFFFFF4 cmp eax,ebx jb short M04_L14 M04_L15: lea ecx,[ebp-20] call dword ptr ds:[0BE89768]; System.Text.SegmentStringBuilder.ToString() lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M04_L16: mov ecx,3 mov edx,1 call dword ptr ds:[0BBA7858] int 3 M04_L17: mov ecx,0E xor edx,edx call dword ptr ds:[0BBA7858] int 3 M04_L18: call dword ptr ds:[567B630] int 3 M04_L19: mov ecx,21 call dword ptr ds:[90A13F0] int 3 M04_L20: test ebx,ebx jne short M04_L21 xor eax,eax xor ebx,ebx jmp near ptr M04_L13 M04_L21: call dword ptr ds:[90A10A8] int 3 ; Total bytes of code 821 ``` ```assembly ; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-30],eax mov [ebp-34],eax mov [ebp-18],eax mov [ebp-2C],ecx mov esi,edx mov ebx,[ebp+14] mov edi,[ebp+10] mov [ebp+14],ebx mov edx,[ebx+4] mov [ebp-28],edx mov eax,[ebp+8] cmp edx,eax jb near ptr M05_L14 mov eax,[ebp+0C] cmp edx,eax jb near ptr M05_L15 cmp [ecx],cl lea eax,[ecx+1C] xor ebx,ebx xchg ebx,[eax] test ebx,ebx jne short M05_L00 mov eax,[ecx+8] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov ebx,eax mov ecx,[ebp-2C] M05_L00: mov [ebp-30],ebx lea eax,[ecx+2C] push dword ptr [eax+4] push dword ptr [eax] mov ecx,ebx cmp [ecx],ecx call dword ptr ds:[0BE0F8A0]; System.Text.RegularExpressions.RegexRunner.InitializeTimeout(System.TimeSpan) lea edx,[ebx+0C] mov eax,[ebp+14] call CORINFO_HELP_ASSIGN_REF_EAX mov ecx,[ebp-28] cmp ecx,edi jb near ptr M05_L08 sub ecx,edi mov edx,[ebp+0C] cmp ecx,edx jb near ptr M05_L08 mov [ebp+14],eax lea ecx,[eax+edi*2+8] mov [ebp-3C],ecx mov [ebp-24],edx push edx push ecx mov eax,[ebp+8] sub eax,edi push eax push esi mov ecx,ebx mov edx,[ebp-2C] call dword ptr ds:[0BE0F888]; System.Text.RegularExpressions.RegexRunner.InitializeForScan(System.Text.RegularExpressions.Regex, System.ReadOnlySpan`1, Int32, System.Text.RegularExpressions.RegexRunnerMode) cmp dword ptr [ebp+18],0 jne short M05_L03 mov ecx,[ebp-24] mov eax,ecx mov edx,1 mov ecx,[ebp-2C] test byte ptr [ecx+20],40 je short M05_L01 xor eax,eax mov edx,0FFFFFFFF M05_L01: cmp [ebx+2C],eax jne short M05_L02 mov edx,ds:[7815018] mov [ebp-34],edx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M05_L11 jmp near ptr M05_L12 M05_L02: add [ebx+30],edx M05_L03: push dword ptr [ebp-24] push dword ptr [ebp-3C] mov ecx,ebx mov eax,[ebx] mov eax,[eax+28] call dword ptr [eax+10] mov eax,[ebx+1C] mov [ebp-38],eax mov edx,[eax+2C] cmp dword ptr [edx+4],0 jbe short M05_L04 cmp dword ptr [edx+8],0 jle short M05_L09 test esi,esi je short M05_L05 lea edx,[eax+4] mov ecx,[ebp+14] call CORINFO_HELP_ASSIGN_REF_ECX xor edx,edx mov [ebx+1C],edx jmp short M05_L06 M05_L04: call CORINFO_HELP_RNGCHKFAIL M05_L05: xor edx,edx mov [eax+4],edx jmp short M05_L07 M05_L06: mov edx,[ebx+30] push edi push esi mov ecx,eax call dword ptr ds:[0BBA77E0]; System.Text.RegularExpressions.Match.Tidy(Int32, Int32, System.Text.RegularExpressions.RegexRunnerMode) mov esi,[ebp-38] mov edx,esi M05_L07: mov [ebp-34],edx jmp short M05_L10 M05_L08: mov ecx,21 call dword ptr ds:[90A13F0] int 3 M05_L09: xor edx,edx mov [eax+4],edx mov edx,ds:[7815018] jmp short M05_L07 M05_L10: xor edx,edx mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX jmp short M05_L13 M05_L11: mov dword ptr [ebp-18],0 jmp short M05_L13 M05_L12: xor edx,edx mov ebx,[ebp-30] mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX pop eax jmp eax M05_L13: mov eax,[ebp-34] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M05_L14: mov ecx,0E xor edx,edx call dword ptr ds:[0BBA7858] int 3 M05_L15: mov ecx,8 mov edx,2 call dword ptr ds:[0BBA7858] int 3 ; Total bytes of code 467 ``` ```assembly ; System.Text.RegularExpressions.Match.NextMatch() push ebp mov ebp,esp push esi mov edx,[ecx+24] test edx,edx jne short M06_L00 mov eax,ecx pop esi pop ebp ret M06_L00: push dword ptr [ecx+0C] push dword ptr [ecx+4] mov eax,[ecx+30] push eax mov esi,[ecx+38] sub esi,eax push esi push dword ptr [ecx+34] mov ecx,edx mov edx,2 call dword ptr ds:[0B695A68]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) pop esi pop ebp ret ; Total bytes of code 51 ``` ```assembly ; System.SpanHelpers.SequenceEqual(Byte ByRef, Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx vzeroupper mov esi,[ebp+8] cmp esi,4 jb short M07_L03 cmp ecx,edx je near ptr M07_L11 cmp esi,20 jae short M07_L00 cmp esi,10 jb short M07_L07 jmp near ptr M07_L12 M07_L00: xor eax,eax add esi,0FFFFFFE0 je short M07_L02 M07_L01: vmovdqu ymm0,ymmword ptr [ecx+eax] vpcmpeqb ymm0,ymm0,[edx+eax] vpmovmskb edi,ymm0 cmp edi,0FFFFFFFF jne short M07_L10 add eax,20 cmp esi,eax ja short M07_L01 M07_L02: vmovdqu ymm0,ymmword ptr [ecx+esi] vpcmpeqb ymm0,ymm0,[edx+esi] vpmovmskb ecx,ymm0 cmp ecx,0FFFFFFFF jne short M07_L10 jmp short M07_L11 M07_L03: xor eax,eax mov edi,esi and edi,2 je short M07_L04 movzx eax,word ptr [ecx] movzx ebx,word ptr [edx] sub eax,ebx M07_L04: test esi,1 jne near ptr M07_L15 M07_L05: test eax,eax sete al movzx eax,al M07_L06: vzeroupper pop ebx pop esi pop edi pop ebp ret 4 M07_L07: xor eax,eax add esi,0FFFFFFFC je short M07_L09 M07_L08: mov edi,[ecx+eax] cmp edi,[edx+eax] jne short M07_L10 add eax,4 cmp esi,eax ja short M07_L08 M07_L09: mov eax,[ecx+esi] cmp eax,[edx+esi] sete al movzx eax,al jmp short M07_L06 M07_L10: xor eax,eax vzeroupper pop ebx pop esi pop edi pop ebp ret 4 M07_L11: mov eax,1 vzeroupper pop ebx pop esi pop edi pop ebp ret 4 M07_L12: xor eax,eax add esi,0FFFFFFF0 je short M07_L14 M07_L13: vmovdqu xmm0,xmmword ptr [ecx+eax] vpcmpeqb xmm0,xmm0,[edx+eax] vpmovmskb edi,xmm0 cmp edi,0FFFF jne short M07_L10 add eax,10 cmp esi,eax ja short M07_L13 M07_L14: vmovdqu xmm0,xmmword ptr [ecx+esi] vpcmpeqb xmm0,xmm0,[edx+esi] vpmovmskb eax,xmm0 cmp eax,0FFFF jne short M07_L10 jmp short M07_L11 M07_L15: movzx ecx,byte ptr [ecx+edi] movzx edx,byte ptr [edx+edi] sub ecx,edx or ecx,eax mov eax,ecx jmp near ptr M07_L05 ; Total bytes of code 282 ``` ```assembly ; System.Text.RegularExpressions.RegexParser.ParseReplacement(System.String, System.Text.RegularExpressions.RegexOptions, System.Collections.Hashtable, Int32, System.Collections.Hashtable) push ebp mov ebp,esp push edi push esi push ebx sub esp,7C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-80],xmm4 vmovdqu xmmword ptr [ebp-70],xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 xor eax,eax mov [ebp-30],eax mov [ebp-2C],eax mov [ebp-28],eax mov [ebp-1C],eax mov [ebp-10],esp mov dword ptr [ebp-88],326ACBAD mov esi,ecx mov edi,edx mov ebx,[ebp+10] test edi,200 jne short M08_L00 call dword ptr ds:[90A7948]; System.Globalization.CultureInfo.get_CurrentCulture() jmp short M08_L01 M08_L00: mov eax,ds:[7811298] M08_L01: test [esp],esp sub esp,80 lea ecx,[esp] mov [ebp-10],esp push edi push eax push ebx push dword ptr [ebp+0C] push dword ptr [ebp+8] push 20 push ecx lea ecx,[ebp-80] mov edx,esi call dword ptr ds:[0BBA9498]; System.Text.RegularExpressions.RegexParser..ctor(System.String, System.Text.RegularExpressions.RegexOptions, System.Globalization.CultureInfo, System.Collections.Hashtable, Int32, System.Collections.Hashtable, System.Span`1) lea ecx,[ebp-80] call dword ptr ds:[0BBA95A0]; System.Text.RegularExpressions.RegexParser.ScanReplacement() mov edi,eax mov ecx,offset MT_System.Text.RegularExpressions.RegexReplacement call CORINFO_HELP_NEWSFAST mov [ebp-84],eax push edi push ebx mov ecx,eax mov edx,esi call dword ptr ds:[0BBA78A0]; System.Text.RegularExpressions.RegexReplacement..ctor(System.String, System.Text.RegularExpressions.RegexNode, System.Collections.Hashtable) mov esi,[ebp-84] mov edi,[ebp-34] test edi,edi je short M08_L03 xor ecx,ecx mov [ebp-34],ecx mov ecx,55A4DB8 mov edx,31 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov ecx,ds:[7811FF4] push 0 mov edx,edi cmp [ecx],ecx call dword ptr ds:[927EE2C]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean) jmp short M08_L03 mov edi,[ebp-34] test edi,edi je short M08_L02 xor ecx,ecx mov [ebp-34],ecx mov ecx,55A4DB8 mov edx,31 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov ecx,ds:[7811FF4] push 0 mov edx,edi cmp [ecx],ecx call dword ptr ds:[927EE2C]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean) M08_L02: pop eax jmp eax M08_L03: mov eax,esi cmp dword ptr [ebp-88],326ACBAD je short M08_L04 call CORINFO_HELP_FAIL_FAST M08_L04: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C ; Total bytes of code 300 ``` ```assembly ; System.WeakReference`1[[System.__Canon, System.Private.CoreLib]].SetTarget(System.__Canon) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax mov edi,ecx mov esi,edx mov ebx,[edi+4] and ebx,0FFFFFFFE je short M09_L04 test esi,esi je short M09_L00 lea ecx,[esi+4] mov [ebp-10],ecx mov ecx,[ebp-10] mov ecx,[ecx-8] and ecx,0C000000 cmp ecx,8000000 sete cl movzx ecx,cl xor eax,eax mov [ebp-10],eax test ecx,ecx jne short M09_L01 M09_L00: xor eax,eax jmp short M09_L02 M09_L01: mov ecx,esi call dword ptr ds:[0BBA9C30] M09_L02: mov ecx,ebx and ecx,2 or ecx,eax je short M09_L03 lea ecx,[edi+4] push eax mov edx,esi call dword ptr ds:[0BBA9D80] pop ecx pop ebx pop esi pop edi pop ebp ret M09_L03: mov ecx,ebx mov edx,esi call System.Runtime.InteropServices.GCHandle.InternalSet(IntPtr, System.Object) pop ecx pop ebx pop esi pop edi pop ebp ret M09_L04: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax call dword ptr ds:[907B660] mov edx,eax mov ecx,esi call dword ptr ds:[91211C8] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 157 ``` ### 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 ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in PerfLabTests.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ObjInt - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ObjInt.html>) 156.65 μs 227.61 μs 1.45 0.03 False Trace Trace
[FooObjIsNull - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.FooObjIsNull.html>) 155.92 μs 224.01 μs 1.44 0.03 False Trace Trace
[ObjObjrefValueType - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ObjObjrefValueType.html>) 155.92 μs 222.83 μs 1.43 0.03 False Trace Trace

graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf.ObjInt ```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 227.6099768518518 > 163.71895034034654. IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -184.22259223444584 (T) = (0 -228862.93886597524) / Math.Sqrt((91975.36043919547 / (14)) + (5084652.498685902 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.46638141134608363 = (156073.26790639522 - 228862.93886597524) / 156073.26790639522 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 ; PerfLabTests.CastingPerf.ObjInt() push ebp mov ebp,esp push esi xor eax,eax mov ecx,ds:[0A545130] test ecx,ecx jle short M00_L01 mov esi,ds:[6DA4130] nop nop nop nop nop nop nop nop nop nop M00_L00: mov edx,6DA4150 call CORINFO_HELP_ASSIGN_REF_ESI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 50 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjInt() push ebp mov ebp,esp push esi xor eax,eax mov ecx,ds:[0ACA4C98] test ecx,ecx jle short M00_L01 mov esi,ds:[6DB4130] nop nop nop nop nop nop nop nop nop nop M00_L00: mov edx,6DB4150 call CORINFO_HELP_ASSIGN_REF_ESI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 50 ``` #### PerfLabTests.CastingPerf.FooObjIsNull ```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 224.0094607843137 > 163.71855745430312. IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -142.73596996809988 (T) = (0 -227009.69179867234) / Math.Sqrt((111912.7414990004 / (14)) + (8095900.868622129 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.45333320900576585 = (156199.34258157568 - 227009.69179867234) / 156199.34258157568 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 ; PerfLabTests.CastingPerf.FooObjIsNull() push ebp mov ebp,esp push esi xor eax,eax mov ecx,ds:[0A745130] test ecx,ecx jle short M00_L01 mov esi,ds:[6CD4140] nop nop nop nop nop nop nop nop nop nop M00_L00: mov edx,6CD4150 call CORINFO_HELP_ASSIGN_REF_ESI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 50 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjIsNull() push ebp mov ebp,esp push esi xor eax,eax mov ecx,ds:[0AC64C98] test ecx,ecx jle short M00_L01 mov esi,ds:[6DB4140] nop nop nop nop nop nop nop nop nop nop M00_L00: mov edx,6DB4150 call CORINFO_HELP_ASSIGN_REF_ESI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 50 ``` #### PerfLabTests.CastingPerf.ObjObjrefValueType ```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 222.8265216297787 > 163.71407648276843. IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -137.78521414683112 (T) = (0 -228792.70611231262) / Math.Sqrt((64695.54002928656 / (14)) + (9328087.136966353 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.4664602415875977 = (156016.98540740553 - 228792.70611231262) / 156016.98540740553 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 ; PerfLabTests.CastingPerf.ObjObjrefValueType() push ebp mov ebp,esp push esi xor eax,eax mov ecx,ds:[0AC480E8] test ecx,ecx jle short M00_L01 mov esi,ds:[715414C] nop nop nop nop nop nop nop nop nop nop M00_L00: mov edx,7154150 call CORINFO_HELP_ASSIGN_REF_ESI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 50 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjObjrefValueType() push ebp mov ebp,esp push esi xor eax,eax mov ecx,ds:[0AE94C98] test ecx,ecx jle short M00_L01 mov esi,ds:[704414C] nop nop nop nop nop nop nop nop nop nop M00_L00: mov edx,7044150 call CORINFO_HELP_ASSIGN_REF_ESI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 50 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[StartsWith - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).StartsWith(Size%3a%20512).html>) 23.64 ns 26.38 ns 1.12 0.18 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Int32>.StartsWith(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 26.376515965188158 > 24.82474634290239. IsChangePoint: Marked as a change because one of 10/25/2022 10:16:52 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -13.552024720860837 (T) = (0 -26.53181819697748) / Math.Sqrt((0.18211662122281247 / (14)) + (1.2115399551609336 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.12695467583155695 = (23.542932795766777 - 26.53181819697748) / 23.542932795766777 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.IO.Tests.StringReaderReadLineTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ReadLine - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.StringReaderReadLineTests.ReadLine(LineLengthRange%3a%20%5b%20%20%200%2c%20%20%20%200%5d).html>) 96.20 μs 102.80 μs 1.07 0.06 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.IO.Tests.StringReaderReadLineTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.StringReaderReadLineTests.ReadLine(LineLengthRange: [ 0, 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 102.80476386278194 > 101.05427482745401. IsChangePoint: Marked as a change because one of 11/16/2022 11:33:39 PM, 11/17/2022 7:01:39 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -47.218303333981076 (T) = (0 -102445.79900308093) / Math.Sqrt((104434.88233557213 / (14)) + (314375.3725735895 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.06334715765536791 = (96342.75905619502 - 102445.79900308093) / 96342.75905619502 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.IO.Tests.StringReaderReadLineTests.ReadLine() push ebp mov ebp,esp push edi push esi sub esp,18 xor eax,eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov esi,ecx mov ecx,offset MT_System.IO.StringReader call CORINFO_HELP_NEWSFAST mov edi,eax mov ecx,[esi+4] test ecx,ecx je short M00_L02 lea edx,[edi+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-20],edi M00_L00: mov ecx,edi call dword ptr ds:[0B550214]; System.IO.StringReader.ReadLine() test eax,eax jne short M00_L00 xor ecx,ecx mov [edi+4],ecx mov [edi+8],ecx mov ecx,edi call System.GC._SuppressFinalize(System.Object) jmp short M00_L01 xor ecx,ecx mov edi,[ebp-20] mov [edi+4],ecx mov [edi+8],ecx mov ecx,edi call System.GC._SuppressFinalize(System.Object) pop eax jmp eax M00_L01: lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L02: mov ecx,11 call dword ptr ds:[8A55378] int 3 ; Total bytes of code 123 ``` ```assembly ; System.IO.StringReader.ReadLine() push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov esi,ecx mov edi,[esi+4] test edi,edi je near ptr M01_L03 mov ebx,[esi+8] mov edx,[edi+4] mov [ebp-18],edx cmp edx,ebx ja short M01_L00 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L00: lea eax,[edi+ebx*2+8] mov ecx,edx sub ecx,ebx mov [ebp-1C],eax mov [ebp-14],ecx push 0A push ecx mov ecx,eax mov edx,0D call dword ptr ds:[0AA1F930]; System.SpanHelpers.IndexOfAnyValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32) mov [ebp-10],eax test eax,eax jl short M01_L02 push eax mov ecx,edi mov edx,ebx call dword ptr ds:[8373708]; System.String.Substring(Int32, Int32) mov ecx,[ebp-10] cmp ecx,[ebp-14] jae short M01_L04 mov edx,[ebp-1C] movzx edx,word ptr [edx+ecx*2] lea ebx,[ebx+ecx+1] cmp edx,0D jne short M01_L01 cmp [ebp-18],ebx jbe short M01_L01 cmp word ptr [edi+ebx*2+8],0A jne short M01_L01 inc ebx M01_L01: mov [esi+8],ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L02: mov ecx,edi mov edx,ebx call dword ptr ds:[83736F0] mov edi,[ebp-18] mov [esi+8],edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L03: call dword ptr ds:[8BBDD80] int 3 M01_L04: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 179 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.StringReaderReadLineTests.ReadLine() push ebp mov ebp,esp push edi push esi sub esp,18 xor eax,eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov esi,ecx mov ecx,offset MT_System.IO.StringReader call CORINFO_HELP_NEWSFAST mov edi,eax mov ecx,[esi+4] test ecx,ecx je short M00_L02 lea edx,[edi+4] call CORINFO_HELP_ASSIGN_REF_ECX mov [ebp-20],edi M00_L00: mov ecx,edi call dword ptr ds:[4DECF8C]; System.IO.StringReader.ReadLine() test eax,eax jne short M00_L00 xor ecx,ecx mov [edi+4],ecx mov [edi+8],ecx mov ecx,edi call System.GC._SuppressFinalize(System.Object) jmp short M00_L01 xor ecx,ecx mov edi,[ebp-20] mov [edi+4],ecx mov [edi+8],ecx mov ecx,edi call System.GC._SuppressFinalize(System.Object) pop eax jmp eax M00_L01: lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L02: mov ecx,11 call dword ptr ds:[4C113C0] int 3 ; Total bytes of code 123 ``` ```assembly ; System.IO.StringReader.ReadLine() push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov esi,ecx mov edi,[esi+4] test edi,edi je near ptr M01_L03 mov ebx,[esi+8] mov ecx,[edi+4] mov [ebp-18],ecx cmp ecx,ebx ja short M01_L00 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L00: lea eax,[edi+ebx*2+8] mov edx,ecx sub edx,ebx mov [ebp-1C],eax mov [ebp-14],edx push 0A push edx mov edx,0D mov ecx,eax call dword ptr ds:[0A555930]; System.PackedSpanHelpers.IndexOfAny[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32) mov [ebp-10],eax test eax,eax jl short M01_L02 push eax mov ecx,edi mov edx,ebx call dword ptr ds:[2B23708]; System.String.Substring(Int32, Int32) mov ecx,[ebp-10] cmp ecx,[ebp-14] jae short M01_L04 mov edx,[ebp-1C] movzx edx,word ptr [edx+ecx*2] lea ebx,[ebx+ecx+1] cmp edx,0D jne short M01_L01 cmp [ebp-18],ebx jbe short M01_L01 cmp word ptr [edi+ebx*2+8],0A jne short M01_L01 inc ebx M01_L01: mov [esi+8],ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L02: mov ecx,edi mov edx,ebx call dword ptr ds:[2B236F0] mov edi,[ebp-18] mov [esi+8],edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L03: call dword ptr ds:[0AFF91B0] int 3 M01_L04: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 179 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Common

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[MatchesWord - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Common.MatchesWord(Options%3a%20IgnoreCase%2c%20Compiled).html>) 2.04 μs 2.22 μs 1.09 0.02 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Common*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Common.MatchesWord(Options: IgnoreCase, Compiled) ```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.2156104856981025 > 2.133651848419179. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -37.34928621029777 (T) = (0 -2180.5366385121515) / Math.Sqrt((64.20320641163686 / (14)) + (408.03289305661633 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.07499050910676523 = (2028.4240837847121 - 2180.5366385121515) / 2028.4240837847121 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.RegularExpressions.Tests.Perf_Regex_Common.MatchesWord() push ebp mov ebp,esp push esi mov edx,ecx mov ecx,[edx+14] mov edx,[edx+2C] cmp [ecx],ecx call dword ptr ds:[0B575690]; System.Text.RegularExpressions.Regex.Matches(System.String) mov esi,eax cmp byte ptr [esi+18],0 jne short M00_L00 mov ecx,esi mov edx,7FFFFFFF call dword ptr ds:[90A7C60]; System.Text.RegularExpressions.MatchCollection.GetMatch(Int32) M00_L00: mov eax,[esi+8] mov eax,[eax+8] pop esi pop ebp ret ; Total bytes of code 50 ``` ```assembly ; System.Text.RegularExpressions.Regex.Matches(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx test edx,edx je short M01_L02 mov ecx,esi mov edi,edx test byte ptr [ecx+20],40 jne short M01_L00 xor ebx,ebx jmp short M01_L01 M01_L00: mov edi,edx mov ebx,[edi+4] M01_L01: mov ecx,offset MT_System.Text.RegularExpressions.MatchCollection call CORINFO_HELP_NEWSFAST mov [ebp-10],eax push edi push ebx mov ecx,eax mov edx,esi call dword ptr ds:[90A7BD0]; System.Text.RegularExpressions.MatchCollection..ctor(System.Text.RegularExpressions.Regex, System.String, Int32) mov eax,[ebp-10] pop ecx pop ebx pop esi pop edi pop ebp ret M01_L02: mov ecx,7 call dword ptr ds:[0BA0FD38] int 3 ; Total bytes of code 78 ``` ```assembly ; System.Text.RegularExpressions.MatchCollection.GetMatch(Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx mov edi,edx mov eax,[esi+8] mov eax,[eax+8] cmp eax,edi jle short M02_L00 mov ecx,[esi+8] cmp edi,eax jae near ptr M02_L05 mov eax,[ecx+4] cmp edi,[eax+4] jae near ptr M02_L06 mov eax,[eax+edi*4+8] pop ecx pop ebx pop esi pop edi pop ebp ret M02_L00: cmp byte ptr [esi+18],0 je short M02_L01 xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,[esi+4] push dword ptr [esi+14] mov edx,[esi+0C] push edx push 0 push dword ptr [edx+4] push dword ptr [esi+10] mov edx,2 cmp [ecx],ecx call dword ptr ds:[0B5752E8]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) mov ebx,eax cmp dword ptr [ebx+1C],0 jne short M02_L02 mov byte ptr [esi+18],1 xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret M02_L02: mov ecx,[esi+8] inc dword ptr [ecx+0C] mov edx,[ecx+4] mov eax,[ecx+8] cmp [edx+4],eax jbe short M02_L03 mov [ebp-10],edi lea edi,[eax+1] mov [ecx+8],edi push ebx mov ecx,edx mov edx,eax call CORINFO_HELP_ARRADDR_ST jmp short M02_L04 M02_L03: mov edx,ebx call dword ptr ds:[8EAF198]; System.Collections.Generic.List`1[[System.__Canon, System.Private.CoreLib]].AddWithResize(System.__Canon) mov [ebp-10],edi M02_L04: mov eax,[ebx+0C] mov [esi+14],eax mov eax,[ebx+34] mov [esi+10],eax mov eax,[esi+8] mov edi,[ebp-10] cmp [eax+8],edi jle short M02_L01 mov eax,ebx pop ecx pop ebx pop esi pop edi pop ebp ret M02_L05: call dword ptr ds:[8F450F0] int 3 M02_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 212 ``` ### Compare Jit Disasm ```assembly ; System.Text.RegularExpressions.Tests.Perf_Regex_Common.MatchesWord() push ebp mov ebp,esp push esi mov edx,ecx mov ecx,[edx+14] mov edx,[edx+2C] cmp [ecx],ecx call dword ptr ds:[0AA570C0]; System.Text.RegularExpressions.Regex.Matches(System.String) mov esi,eax cmp byte ptr [esi+18],0 jne short M00_L00 mov ecx,esi mov edx,7FFFFFFF call dword ptr ds:[0B615C60]; System.Text.RegularExpressions.MatchCollection.GetMatch(Int32) M00_L00: mov eax,[esi+8] mov eax,[eax+8] pop esi pop ebp ret ; Total bytes of code 50 ``` ```assembly ; System.Text.RegularExpressions.Regex.Matches(System.String) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx test edx,edx je short M01_L02 mov ecx,esi mov edi,edx test byte ptr [ecx+20],40 jne short M01_L00 xor ebx,ebx jmp short M01_L01 M01_L00: mov edi,edx mov ebx,[edi+4] M01_L01: mov ecx,offset MT_System.Text.RegularExpressions.MatchCollection call CORINFO_HELP_NEWSFAST mov [ebp-10],eax push edi push ebx mov ecx,eax mov edx,esi call dword ptr ds:[0B615BD0]; System.Text.RegularExpressions.MatchCollection..ctor(System.Text.RegularExpressions.Regex, System.String, Int32) mov eax,[ebp-10] pop ecx pop ebx pop esi pop edi pop ebp ret M01_L02: mov ecx,7 call dword ptr ds:[0AE89D38] int 3 ; Total bytes of code 78 ``` ```assembly ; System.Text.RegularExpressions.MatchCollection.GetMatch(Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx mov edi,edx mov eax,[esi+8] mov eax,[eax+8] cmp eax,edi jle short M02_L00 mov ecx,[esi+8] cmp edi,eax jae near ptr M02_L05 mov eax,[ecx+4] cmp edi,[eax+4] jae near ptr M02_L06 mov eax,[eax+edi*4+8] pop ecx pop ebx pop esi pop edi pop ebp ret M02_L00: cmp byte ptr [esi+18],0 je short M02_L01 xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,[esi+4] push dword ptr [esi+14] mov edx,[esi+0C] push edx push 0 push dword ptr [edx+4] push dword ptr [esi+10] mov edx,2 cmp [ecx],ecx call dword ptr ds:[0AA55A68]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) mov ebx,eax cmp dword ptr [ebx+1C],0 jne short M02_L02 mov byte ptr [esi+18],1 xor eax,eax pop ecx pop ebx pop esi pop edi pop ebp ret M02_L02: mov ecx,[esi+8] inc dword ptr [ecx+0C] mov edx,[ecx+4] mov eax,[ecx+8] cmp [edx+4],eax jbe short M02_L03 mov [ebp-10],edi lea edi,[eax+1] mov [ecx+8],edi push ebx mov ecx,edx mov edx,eax call CORINFO_HELP_ARRADDR_ST jmp short M02_L04 M02_L03: mov edx,ebx call dword ptr ds:[837D990]; System.Collections.Generic.List`1[[System.__Canon, System.Private.CoreLib]].AddWithResize(System.__Canon) mov [ebp-10],edi M02_L04: mov eax,[ebx+0C] mov [esi+14],eax mov eax,[ebx+34] mov [esi+10],eax mov eax,[esi+8] mov edi,[ebp-10] cmp [eax+8],edi jle short M02_L01 mov eax,ebx pop ecx pop ebx pop esi pop edi pop ebp ret M02_L05: call dword ptr ds:[8391138] int 3 M02_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 212 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Collections.IterateForNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ArrayList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForNonGeneric(Int32).ArrayList(Size%3a%20512).html>) 1.56 μs 1.77 μs 1.13 0.05 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForNonGeneric&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForNonGeneric<Int32>.ArrayList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.7672433318221314 > 1.6435331946254839. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -24.737202622816227 (T) = (0 -1758.3392298423587) / Math.Sqrt((652.3483190482541 / (14)) + (241.94585380784687 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.11495928644060985 = (1577.0434411606827 - 1758.3392298423587) / 1577.0434411606827 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Replace_Char - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.Replace_Char(text%3a%20%22This%20is%20a%20very%20nice%20sentence%22%2c%20oldChar%3a%20%27i%27%2c%20newChar%3a%20%27I%27).html>) 21.63 ns 24.10 ns 1.11 0.11 False 233.48999492720452 244.200617905963 1.045871871221282 Trace Trace

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_String*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I') ```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 24.103822033959577 > 22.85068969851824. IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -22.436059539078073 (T) = (0 -23.66227619511816) / Math.Sqrt((0.033330645832087696 / (14)) + (0.16523386292317965 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.08776290375284192 = (21.753156054027954 - 23.66227619511816) / 21.753156054027954 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char) mov ecx,edx movzx edx,word ptr [esp+4] push edx movzx edx,word ptr [esp+0C] cmp [ecx],ecx call dword ptr ds:[8483468]; System.String.Replace(Char, Char) ret 8 ; Total bytes of code 24 ``` ```assembly ; System.String.Replace(Char, Char) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 mov esi,ecx mov edi,edx mov ebx,[ebp+8] movzx eax,di mov [ebp+8],ebx movzx ecx,bx cmp eax,ecx jne short M01_L00 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L00: lea eax,[esi+8] mov ecx,eax mov [ebp-24],ecx mov edx,ecx mov eax,[esi+4] mov [ebp-1C],eax push eax mov ecx,edx movsx edx,di call dword ptr ds:[8B6F690]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov edx,eax mov [ebp-10],edx test edx,edx jge short M01_L01 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L01: mov esi,[ebp-1C] mov eax,esi sub eax,edx mov [ebp-14],eax mov ecx,esi call System.String.FastAllocateString(Int32) mov [ebp-20],eax mov edx,[ebp-10] mov [ebp-18],edx test edx,edx jle short M01_L02 cmp [eax],al lea ecx,[eax+8] mov esi,[ebp-24] lea ebx,[edx+edx] push ebx mov edx,esi call dword ptr ds:[8AB1678]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov eax,[ebp-20] mov edx,[ebp-18] M01_L02: add edx,edx mov ecx,edx add ecx,[ebp-24] cmp [eax],al lea edx,[eax+edx+8] mov esi,[ebp-1C] cmp esi,8 jb short M01_L03 mov ebx,[ebp-14] sub esi,ebx and esi,7 lea eax,[esi+esi] sub ecx,eax sub edx,eax add ebx,esi mov [ebp-14],ebx M01_L03: movzx esi,di push esi movzx esi,word ptr [ebp+8] push esi push dword ptr [ebp-14] call dword ptr ds:[0AC05EA0]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr) mov eax,[ebp-20] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 218 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.Replace_Char(System.String, Char, Char) mov ecx,edx movzx edx,word ptr [esp+4] push edx movzx edx,word ptr [esp+0C] cmp [ecx],ecx call dword ptr ds:[83D3468]; System.String.Replace(Char, Char) ret 8 ; Total bytes of code 24 ``` ```assembly ; System.String.Replace(Char, Char) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 mov esi,ecx mov edi,edx mov ebx,[ebp+8] movzx eax,di mov [ebp+8],ebx movzx edx,bx cmp eax,edx jne short M01_L00 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L00: lea ecx,[esi+8] mov eax,[esi+4] mov [ebp-20],eax mov edx,eax movsx ebx,di mov [ebp-18],ebx movzx ebx,word ptr [ebp-18] mov [ebp-1C],ebx dec ebx cmp ebx,0FE jae short M01_L01 mov ebx,[ebp-1C] push edx movsx edx,bx call dword ptr ds:[8ADD240]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov ebx,eax jmp short M01_L02 M01_L01: push edx mov edx,[ebp-18] call dword ptr ds:[0B51F828]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov ebx,eax M01_L02: test ebx,ebx jge short M01_L03 mov eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L03: mov eax,[ebp-20] mov edx,eax sub edx,ebx mov [ebp-10],edx mov ecx,eax call System.String.FastAllocateString(Int32) mov [ebp-24],eax mov [ebp-14],ebx test ebx,ebx jle short M01_L04 cmp [eax],al lea ecx,[eax+8] lea edx,[esi+8] add ebx,ebx push ebx call dword ptr ds:[8A018D0]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov eax,[ebp-24] mov ebx,[ebp-14] M01_L04: add ebx,ebx lea ecx,[esi+ebx+8] cmp [eax],al lea edx,[eax+ebx+8] mov esi,[ebp-20] cmp esi,8 jb short M01_L05 mov ebx,[ebp-10] sub esi,ebx and esi,7 lea eax,[esi+esi] sub ecx,eax sub edx,eax add ebx,esi mov [ebp-10],ebx M01_L05: movzx esi,di push esi movzx esi,word ptr [ebp+8] push esi push dword ptr [ebp-10] call dword ptr ds:[0AAF9CA8]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr) mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 240 ``` ### 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 ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[WhereAny_LastElementMatches - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.WhereAny_LastElementMatches(input%3a%20IEnumerable).html>) 719.55 ns 775.66 ns 1.08 0.03 False Trace Trace
[WhereFirst_LastElementMatches - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(input%3a%20Array).html>) 323.49 ns 386.38 ns 1.19 0.04 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.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.WhereAny_LastElementMatches(input: IEnumerable) ```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 775.6644385248622 > 755.4008110320519. IsChangePoint: Marked as a change because one of 11/2/2022 4:14:20 AM, 11/11/2022 5:53:56 PM, 12/1/2022 7:29:59 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -84.71845399325213 (T) = (0 -775.7294526583212) / Math.Sqrt((3.0879645416663184 / (14)) + (7.9538607821648 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.07947887050320451 = (718.614762970498 - 775.7294526583212) / 718.614762970498 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.Linq.Tests.Perf_Enumerable.WhereAny_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[73848F0] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[73848CC] test ecx,ecx je short M00_L03 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B818CC0 mov edx,73848F0 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B819E88]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov esi,eax lea edx,[ebp-8] mov ecx,esi call dword ptr ds:[0B81B180]; System.Linq.Enumerable.TryGetNonEnumeratedCount[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32 ByRef) test eax,eax jne short M00_L01 mov ecx,esi call dword ptr ds:[0B81B1B0]; System.Linq.Enumerable.g__WithEnumerator|35_0[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) jmp short M00_L02 M00_L01: xor eax,eax cmp dword ptr [ebp-8],0 setne al M00_L02: pop ecx pop esi pop ebp ret M00_L03: call dword ptr ds:[864B630] int 3 ; Total bytes of code 120 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[864B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[864B7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0AC93098 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[7384E5C] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[864B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0AD3B798] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0AD3B798] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetNonEnumeratedCount[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32 ByRef) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L03 mov edx,esi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[864B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax call dword ptr ds:[3780320] mov [edi],eax mov eax,1 pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[864B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L01 mov ecx,eax mov edx,1 call dword ptr ds:[378031C] test eax,eax jl short M02_L01 mov [edi],eax mov eax,1 pop esi pop edi pop ebp ret M02_L01: mov edx,esi mov ecx,offset MT_System.Collections.ICollection call dword ptr ds:[864B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L02 mov ecx,eax call dword ptr ds:[3780318] mov [edi],eax mov eax,1 pop esi pop edi pop ebp ret M02_L02: xor eax,eax mov [edi],eax pop esi pop edi pop ebp ret M02_L03: mov ecx,10 call dword ptr ds:[0AD3B798] int 3 ; Total bytes of code 154 ``` ```assembly ; System.Linq.Enumerable.g__WithEnumerator|35_0[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push ebx sub esp,18 xor eax,eax mov [ebp-10],eax call dword ptr ds:[3780324] mov [ebp-1C],eax mov ecx,eax call dword ptr ds:[3780328] mov ebx,eax mov ecx,[ebp-1C] call dword ptr ds:[378032C] jmp short M03_L01 cmp dword ptr [ebp-1C],0 je short M03_L00 mov ecx,[ebp-1C] call dword ptr ds:[378032C] M03_L00: pop eax jmp eax M03_L01: mov eax,ebx lea esp,[ebp-4] pop ebx pop ebp ret ; Total bytes of code 68 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereAny_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[76D4900] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[76D48DC] test ecx,ecx je short M00_L03 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B9760F0 mov edx,76D4900 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B9772B8]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov esi,eax lea edx,[ebp-8] mov ecx,esi call dword ptr ds:[0B977540]; System.Linq.Enumerable.TryGetNonEnumeratedCount[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32 ByRef) test eax,eax jne short M00_L01 mov ecx,esi call dword ptr ds:[0B977570]; System.Linq.Enumerable.g__WithEnumerator|35_0[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) jmp short M00_L02 M00_L01: xor eax,eax cmp dword ptr [ebp-8],0 setne al M00_L02: pop ecx pop esi pop ebp ret M00_L03: call dword ptr ds:[550B630] int 3 ; Total bytes of code 120 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[550B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[550B7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0AD43A70 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[76D4E64] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[550B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0AF11798] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0AF11798] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetNonEnumeratedCount[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32 ByRef) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L03 mov edx,esi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[550B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax call dword ptr ds:[3240320] mov [edi],eax mov eax,1 pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[550B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L01 mov ecx,eax mov edx,1 call dword ptr ds:[324031C] test eax,eax jl short M02_L01 mov [edi],eax mov eax,1 pop esi pop edi pop ebp ret M02_L01: mov edx,esi mov ecx,offset MT_System.Collections.ICollection call dword ptr ds:[550B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L02 mov ecx,eax call dword ptr ds:[3240318] mov [edi],eax mov eax,1 pop esi pop edi pop ebp ret M02_L02: xor eax,eax mov [edi],eax pop esi pop edi pop ebp ret M02_L03: mov ecx,10 call dword ptr ds:[0AF11798] int 3 ; Total bytes of code 154 ``` ```assembly ; System.Linq.Enumerable.g__WithEnumerator|35_0[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push ebx sub esp,18 xor eax,eax mov [ebp-10],eax call dword ptr ds:[3240324] mov [ebp-1C],eax mov ecx,eax call dword ptr ds:[3240328] mov ebx,eax mov ecx,[ebp-1C] call dword ptr ds:[324032C] jmp short M03_L01 cmp dword ptr [ebp-1C],0 je short M03_L00 mov ecx,[ebp-1C] call dword ptr ds:[324032C] M03_L00: pop eax jmp eax M03_L01: mov eax,ebx lea esp,[ebp-4] pop ebx pop ebp ret ; Total bytes of code 68 ``` #### System.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(input: Array) ```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 386.37618478778694 > 339.72816075537776. IsChangePoint: Marked as a change because one of 10/19/2022 7:27:15 PM, 10/26/2022 7:11:30 AM, 11/2/2022 4:14:20 AM, 11/11/2022 5:53:56 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -227.88152872326523 (T) = (0 -386.4965872667094) / Math.Sqrt((0.4662756799997998 / (14)) + (1.443977825061114 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.1937495132384675 = (323.7669066923435 - 386.4965872667094) / 323.7669066923435 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.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[70F48E0] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[70F48CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B4E8C60 mov edx,70F48E0 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B4E9E88]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0B4EB180]; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[50AB630] int 3 M00_L02: call dword ptr ds:[0AA0B7F8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[50AB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[50AB7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0A963098 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[70F4E58] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[50AB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0AA0B798] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0AA0B798] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L08 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[50AB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax mov edx,edi call dword ptr ds:[2ED030C] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[50AB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[2ED0304] test eax,eax jle short M02_L06 mov byte ptr [edi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[2ED0308] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,esi call dword ptr ds:[2ED02F4] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[2ED02F8] test eax,eax je short M02_L02 mov byte ptr [edi],1 mov ecx,[ebp-28] call dword ptr ds:[2ED02FC] mov [ebp-24],eax mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L03 jmp short M02_L04 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[2ED0300] jmp short M02_L06 M02_L03: mov dword ptr [ebp-18],0 jmp short M02_L07 M02_L04: mov ecx,[ebp-28] test ecx,ecx je short M02_L05 call dword ptr ds:[2ED0300] mov ecx,[ebp-28] M02_L05: pop eax jmp eax M02_L06: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L07: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L08: mov ecx,10 call dword ptr ds:[0AA0B798] int 3 ; Total bytes of code 250 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereFirst_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[6A648F0] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[6A648DC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AD46090 mov edx,6A648F0 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0AD472B8]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0AD47540]; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[7BEB630] int 3 M00_L02: call dword ptr ds:[0A2E17F8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7BEB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[7BEB7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0A213A70 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6A64E60] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7BEB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0A2E1798] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A2E1798] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetFirst[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L08 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7BEB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax mov edx,edi call dword ptr ds:[78030C] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7BEB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[780304] test eax,eax jle short M02_L06 mov byte ptr [edi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[780308] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,esi call dword ptr ds:[7802F4] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[7802F8] test eax,eax je short M02_L02 mov byte ptr [edi],1 mov ecx,[ebp-28] call dword ptr ds:[7802FC] mov [ebp-24],eax mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L03 jmp short M02_L04 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[780300] jmp short M02_L06 M02_L03: mov dword ptr [ebp-18],0 jmp short M02_L07 M02_L04: mov ecx,[ebp-28] test ecx,ecx je short M02_L05 call dword ptr ds:[780300] mov ecx,[ebp-28] M02_L05: pop eax jmp eax M02_L06: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L07: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L08: mov ecx,10 call dword ptr ds:[0A2E1798] int 3 ; Total bytes of code 250 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in Microsoft.Extensions.Primitives.StringSegmentBenchmark

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IndexOfAny - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny.html>) 8.67 ns 11.38 ns 1.31 0.09 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.Primitives.StringSegmentBenchmark*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny ```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 11.384459404321564 > 9.126182295817419. IsChangePoint: Marked as a change because one of 11/4/2022 4:27:34 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -28.560945633361136 (T) = (0 -10.207768965374058) / Math.Sqrt((0.016948783367873185 / (14)) + (0.047806715087048424 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.1670330780120026 = (8.746769185636634 - 10.207768965374058) / 8.746769185636634 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 ; Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny() push ebp mov ebp,esp push esi lea esi,[ecx+24] mov edx,[ecx+8] mov eax,0FFFFFFFF cmp dword ptr [esi],0 je short M00_L00 mov ecx,[esi+8] test ecx,ecx je short M00_L01 dec ecx cmp ecx,7 jb short M00_L02 mov ecx,[esi] mov eax,[esi+4] inc eax push eax push 7 cmp [ecx],ecx call dword ptr ds:[2E13A08]; System.String.IndexOfAny(Char[], Int32, Int32) cmp eax,0FFFFFFFF je short M00_L00 sub eax,[esi+4] M00_L00: pop esi pop ebp ret M00_L01: mov ecx,4 call dword ptr ds:[87E7BE8] int 3 M00_L02: mov ecx,5 call dword ptr ds:[87E7BE8] int 3 ; Total bytes of code 85 ``` ```assembly ; System.String.IndexOfAny(Char[], Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,[ebp+0C] mov eax,[ebp+8] M01_L00: test edx,edx je near ptr M01_L04 cmp [ecx+4],esi jb near ptr M01_L05 mov edi,[ecx+4] sub edi,esi cmp edi,eax jb near ptr M01_L06 lea ecx,[ecx+esi*2+8] lea edi,[edx+8] mov edx,[edx+4] cmp edx,5 ja near ptr M01_L01 mov [ebp+0C],esi lea ebx,ds:[0B1327B8] mov ebx,[ebx+edx*4] lea esi,[M01_L00] add ebx,esi jmp ebx mov eax,0FFFFFFFF mov esi,[ebp+0C] jmp near ptr M01_L02 movsx edx,word ptr [edi] push eax call dword ptr ds:[868F690]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) mov esi,[ebp+0C] jmp near ptr M01_L02 movsx edx,word ptr [edi] movsx edi,word ptr [edi+2] push edi push eax call dword ptr ds:[0A64F930]; System.SpanHelpers.IndexOfAnyValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32) mov esi,[ebp+0C] jmp short M01_L02 movsx edx,word ptr [edi] movsx esi,word ptr [edi+2] movsx edi,word ptr [edi+4] push esi push edi push eax call dword ptr ds:[0AC11EB8]; System.SpanHelpers.IndexOfAnyValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int16, Int32) mov esi,[ebp+0C] jmp short M01_L02 movsx edx,word ptr [edi] movsx esi,word ptr [edi+2] movsx ebx,word ptr [edi+4] movsx edi,word ptr [edi+6] push esi push ebx push edi push eax call dword ptr ds:[0B183708] mov esi,[ebp+0C] jmp short M01_L02 movsx edx,word ptr [edi] mov [ebp-10],edx movsx esi,word ptr [edi+2] movsx ebx,word ptr [edi+4] movsx edx,word ptr [edi+6] movsx edi,word ptr [edi+8] push esi push ebx push edx push edi push eax mov edx,[ebp-10] call dword ptr ds:[0B183EE8] mov esi,[ebp+0C] jmp short M01_L02 M01_L01: push edi push edx mov edx,eax call dword ptr ds:[0B1857B0] M01_L02: test eax,eax jge short M01_L03 pop ecx pop ebx pop esi pop edi pop ebp ret 8 M01_L03: add eax,esi pop ecx pop ebx pop esi pop edi pop ebp ret 8 M01_L04: mov ecx,60 call dword ptr ds:[8685378] int 3 M01_L05: mov ecx,8 xor edx,edx call dword ptr ds:[86853C0] int 3 M01_L06: mov ecx,1B mov edx,4 call dword ptr ds:[86853C0] int 3 ; Total bytes of code 306 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny() push ebp mov ebp,esp push esi lea esi,[ecx+24] mov edx,[ecx+8] mov eax,0FFFFFFFF cmp dword ptr [esi],0 je short M00_L00 mov ecx,[esi+8] test ecx,ecx je short M00_L01 dec ecx cmp ecx,7 jb short M00_L02 mov ecx,[esi] mov eax,[esi+4] inc eax push eax push 7 cmp [ecx],ecx call dword ptr ds:[4A13A08]; System.String.IndexOfAny(Char[], Int32, Int32) cmp eax,0FFFFFFFF je short M00_L00 sub eax,[esi+4] M00_L00: pop esi pop ebp ret M00_L01: mov ecx,4 call dword ptr ds:[0B005018] int 3 M00_L02: mov ecx,5 call dword ptr ds:[0B005018] int 3 ; Total bytes of code 85 ``` ```assembly ; System.String.IndexOfAny(Char[], Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C mov esi,[ebp+0C] mov eax,[ebp+8] M01_L00: test edx,edx je near ptr M01_L10 cmp [ecx+4],esi jb near ptr M01_L11 mov edi,[ecx+4] sub edi,esi cmp edi,eax jb near ptr M01_L12 lea ecx,[ecx+esi*2+8] lea edi,[edx+8] mov edx,[edx+4] cmp edx,5 ja near ptr M01_L07 mov [ebp+0C],esi lea ebx,ds:[0B012DA0] mov ebx,[ebx+edx*4] lea esi,[M01_L00] add ebx,esi jmp ebx mov eax,0FFFFFFFF mov esi,[ebp+0C] jmp near ptr M01_L08 movsx edx,word ptr [edi] movsx edx,dx mov [ebp-14],edx movzx esi,word ptr [ebp-14] lea edx,[esi-1] cmp edx,0FE jae short M01_L01 push eax movsx edx,si call dword ptr ds:[84FD240]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) jmp short M01_L02 M01_L01: push eax mov edx,[ebp-14] call dword ptr ds:[0AFBF828]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32) M01_L02: mov esi,[ebp+0C] jmp near ptr M01_L08 movsx edx,word ptr [edi] movsx edi,word ptr [edi+2] movsx edx,dx mov [ebp-18],edx movsx edx,di mov [ebp-1C],edx movzx esi,word ptr [ebp-18] lea edx,[esi-1] cmp edx,0FE jae short M01_L03 movzx edi,word ptr [ebp-1C] lea edx,[edi-1] cmp edx,0FE jae short M01_L03 mov edx,esi movsx esi,di push esi push eax movsx edx,dx call dword ptr ds:[0A585930]; System.PackedSpanHelpers.IndexOfAny[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32) jmp short M01_L04 M01_L03: push dword ptr [ebp-1C] push eax mov edx,[ebp-18] call dword ptr ds:[0B041678] M01_L04: mov esi,[ebp+0C] jmp near ptr M01_L08 movsx edx,word ptr [edi] movsx esi,word ptr [edi+2] movsx edi,word ptr [edi+4] movsx edx,dx mov [ebp-20],edx movsx edx,si mov [ebp-24],edx movsx edx,di mov [ebp-28],edx movzx esi,word ptr [ebp-20] lea edx,[esi-1] cmp edx,0FE jae short M01_L05 movzx edi,word ptr [ebp-24] lea edx,[edi-1] cmp edx,0FE jae short M01_L05 movzx edx,word ptr [ebp-28] lea ebx,[edx-1] cmp ebx,0FE jae short M01_L05 movsx edi,di push edi movsx edx,dx push edx push eax movsx edx,si call dword ptr ds:[0AAE5EB8]; System.PackedSpanHelpers.IndexOfAny[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int16, Int32) jmp short M01_L06 M01_L05: push dword ptr [ebp-24] push dword ptr [ebp-28] push eax mov edx,[ebp-20] call dword ptr ds:[0B043678] M01_L06: mov esi,[ebp+0C] jmp short M01_L08 movsx edx,word ptr [edi] movsx esi,word ptr [edi+2] movsx ebx,word ptr [edi+4] movsx edi,word ptr [edi+6] push esi push ebx push edi push eax call dword ptr ds:[0B043DF8] mov esi,[ebp+0C] jmp short M01_L08 movsx edx,word ptr [edi] mov [ebp-10],edx movsx esi,word ptr [edi+2] movsx ebx,word ptr [edi+4] movsx edx,word ptr [edi+6] movsx edi,word ptr [edi+8] push esi push ebx push edx push edi push eax mov edx,[ebp-10] call dword ptr ds:[0B045678] mov esi,[ebp+0C] jmp short M01_L08 M01_L07: push edi push edx mov edx,eax call dword ptr ds:[0B045EE8] M01_L08: test eax,eax jge short M01_L09 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L09: add eax,esi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L10: mov ecx,60 call dword ptr ds:[84513C0] int 3 M01_L11: mov ecx,8 xor edx,edx call dword ptr ds:[8451408] int 3 M01_L12: mov ecx,1B mov edx,4 call dword ptr ds:[8451408] int 3 ; Total bytes of code 506 ``` ### 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 ee6de921299d1b86a02d9049b9c8dd164cab1401
Compare 7fa0d5b5942f138c362f2753398b4a8d4f71eb73
Diff Diff

Regressions in System.Text.Json.Tests.Utf8JsonReaderCommentsTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Utf8JsonReaderCommentParsing - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing(CommentHandling%3a%20Allow%2c%20SegmentSize%3a%20100%2c%20TestCase%3a%20LongMultiLine).html>) 15.13 μs 16.00 μs 1.06 0.00 False 154551.41604164106 159183.67346938775 1.0299722742527226

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Utf8JsonReaderCommentsTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing(CommentHandling: Allow, SegmentSize: 100, TestCase: LongMultiLine) ```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.996952575303446 > 15.878263057607809. IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 12/17/2022 10:44:50 PM, 1/3/2023 6:29:42 AM, 1/10/2023 12:53:48 PM falls between 1/1/2023 3:57:25 AM and 1/10/2023 12:53:48 PM. IsRegressionStdDev: Marked as regression because -27.391128566430833 (T) = (0 -15946.195687930312) / Math.Sqrt((4522.757061325908 / (14)) + (17853.554521776816 / (34))) is less than -2.0128955989180297 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (14) + (34) - 2, .025) and -0.052659826798768905 = (15148.47938713886 - 15946.195687930312) / 15148.47938713886 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing() push ebp mov ebp,esp push edi push esi sub esp,250 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-258],xmm4 mov eax,0FFFFFDC0 M00_L00: vmovdqu xmmword ptr [ebp+eax-8],xmm4 vmovdqu xmmword ptr [ebp+eax+8],xmm4 vmovdqu xmmword ptr [ebp+eax+18],xmm4 add eax,30 jne short M00_L00 movzx edx,byte ptr [ecx+10] cmp edx,2 jg near ptr M00_L11 mov [ebp-1C],dl vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-18],xmm0 cmp dword ptr [ecx+8],0 jne short M00_L03 mov ecx,[ecx+4] test ecx,ecx je short M00_L02 lea edx,[ecx+8] mov eax,[ecx+4] M00_L01: push eax push edx push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp-18] push dword ptr [ebp-1C] push dword ptr [ebp-20] push dword ptr [ebp-24] push dword ptr [ebp-28] push dword ptr [ebp-2C] push dword ptr [ebp-30] push dword ptr [ebp-34] push dword ptr [ebp-38] lea ecx,[ebp-258] mov edx,1 call dword ptr ds:[0AD6F3F0] lea edi,[ebp-1D0] lea esi,[ebp-258] mov ecx,22 rep movsd jmp short M00_L04 M00_L02: xor edx,edx xor eax,eax jmp short M00_L01 M00_L03: add ecx,14 push dword ptr [ecx+0C] push dword ptr [ecx+8] push dword ptr [ecx+4] push dword ptr [ecx] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp-18] push dword ptr [ebp-1C] push dword ptr [ebp-20] push dword ptr [ebp-24] push dword ptr [ebp-28] push dword ptr [ebp-2C] push dword ptr [ebp-30] push dword ptr [ebp-34] push dword ptr [ebp-38] lea ecx,[ebp-148] mov edx,1 call dword ptr ds:[0AD6F978]; System.Text.Json.Utf8JsonReader..ctor(System.Buffers.ReadOnlySequence`1, Boolean, System.Text.Json.JsonReaderState) lea edi,[ebp-1D0] lea esi,[ebp-148] mov ecx,22 rep movsd M00_L04: lea edi,[ebp-0C0] lea esi,[ebp-1D0] mov ecx,22 rep movsd M00_L05: cmp byte ptr [ebp-95],0 jne short M00_L06 lea ecx,[ebp-0C0] call dword ptr ds:[0AD6F600] jmp short M00_L07 M00_L06: lea ecx,[ebp-0C0] call dword ptr ds:[0AD6F9A8]; System.Text.Json.Utf8JsonReader.ReadMultiSegment() M00_L07: movzx ecx,al test ecx,ecx jne short M00_L08 cmp byte ptr [ebp-9C],0 je short M00_L09 cmp byte ptr [ebp-98],0 je short M00_L10 M00_L08: test ecx,ecx jne short M00_L05 M00_L09: lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L10: xor ecx,ecx push 0 push 0 push ecx lea ecx,[ebp-0C0] mov edx,20 call dword ptr ds:[0AD818A0] int 3 M00_L11: mov ecx,2C5E mov edx,0A2559B8 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0AD81588] int 3 ; Total bytes of code 405 ``` ```assembly ; System.Text.Json.Utf8JsonReader..ctor(System.Buffers.ReadOnlySequence`1, Boolean, System.Text.Json.JsonReaderState) push ebp mov ebp,esp push edi push esi push ebx sub esp,94 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-70],xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 xor eax,eax mov [ebp-20],eax mov [ebp-1C],eax mov [ebp-18],eax mov ebx,ecx mov esi,edx mov edx,[ebp+38] test edx,edx jne short M01_L00 xor edx,edx mov [ebp-20],edx mov [ebp-1C],edx mov [ebp-18],edx jmp near ptr M01_L04 M01_L00: mov edi,[ebp+40] mov eax,[ebp+44] mov [ebp-24],eax xor ecx,ecx cmp edx,[ebp+3C] setne cl mov [ebp-28],ecx or eax,edi jl short M01_L03 mov eax,edx mov ecx,offset MT_System.Buffers.ReadOnlySequenceSegment`1[[System.Byte, System.Private.CoreLib]] cmp [eax],ecx je short M01_L01 call dword ptr ds:[7B4B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) M01_L01: add eax,10 mov ecx,[eax] mov [ebp-94],ecx mov edx,[eax+4] mov eax,[eax+8] cmp dword ptr [ebp-28],0 je short M01_L02 cmp edi,eax ja near ptr M01_L38 add edx,edi sub eax,edi mov [ebp-20],ecx mov [ebp-1C],edx mov [ebp-18],eax jmp short M01_L04 M01_L02: mov ecx,[ebp-24] sub ecx,edi cmp edi,eax ja near ptr M01_L38 sub eax,edi cmp eax,ecx jb near ptr M01_L38 add edi,edx mov edx,[ebp-94] mov [ebp-20],edx mov [ebp-1C],edi mov [ebp-18],ecx jmp short M01_L04 M01_L03: push edx push dword ptr [ebp-28] lea ecx,[ebp+38] lea edx,[ebp-20] call dword ptr ds:[0A2B7CD8] M01_L04: mov ecx,[ebp-20] mov edi,[ebp-1C] mov edx,[ebp-18] mov [ebp-74],edx xor eax,eax xor edx,edx test ecx,ecx je short M01_L06 mov eax,[ecx] test dword ptr [eax],80000000 je near ptr M01_L36 lea eax,[ecx+8] mov edx,[ecx+4] M01_L05: and edi,7FFFFFFF mov ecx,[ebp-74] cmp edi,edx ja near ptr M01_L40 sub edx,edi cmp edx,ecx jb near ptr M01_L40 add eax,edi mov edx,ecx M01_L06: mov ecx,eax lea eax,[ebx+30] mov [eax],ecx mov [eax+4],edx mov [ebp-10],esi mov eax,esi mov [ebx+24],al mov byte ptr [ebx+25],1 mov ecx,ebx mov edx,[ebp+8] mov [ecx],edx mov edx,[ebp+0C] mov [ecx+4],edx lea ecx,[ebx+8] mov edx,[ebp+10] mov [ecx],edx mov edx,[ebp+14] mov [ecx+4],edx movzx ecx,byte ptr [ebp+18] mov [ebx+26],cl movzx ecx,byte ptr [ebp+19] mov [ebx+27],cl movzx ecx,byte ptr [ebp+1A] mov [ebx+2E],cl movzx ecx,byte ptr [ebp+1B] mov [ebx+2C],cl movzx ecx,byte ptr [ebp+1C] mov [ebx+28],cl movzx ecx,byte ptr [ebp+1D] mov [ebx+29],cl mov ecx,[ebp+20] mov [ebx+38],ecx mov ecx,[ebp+24] mov [ebx+3C],ecx cmp dword ptr [ebx+38],0 jne short M01_L07 mov dword ptr [ebx+38],40 M01_L07: lea edi,[ebx+40] lea esi,[ebp+28] movsd movsd call CORINFO_HELP_ASSIGN_BYREF movsd xor ecx,ecx mov [ebx+20],ecx lea ecx,[ebx+18] xor edx,edx mov [ecx],edx mov [ecx+4],edx lea ecx,[ebx+10] mov [ecx],edx mov [ecx+4],edx mov [ebx+70],edx mov [ebx+74],edx lea edi,[ebx+60] lea esi,[ebp+38] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd mov byte ptr [ebx+2D],0 mov ecx,0A2577F8 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov esi,ds:[68C1FF0] add esi,4 lea edi,[ebp-40] mov ecx,4 rep movsd lea edi,[ebx+78] lea esi,[ebp-40] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd mov edx,[ebp+38] cmp edx,[ebp+3C] jne short M01_L08 xor edx,edx mov [ebx+50],edx mov [ebx+54],edx mov ecx,[ebp+38] mov eax,[ebp+40] and eax,7FFFFFFF lea esi,[ebx+58] mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov [esi+4],eax mov eax,[ebp-10] mov [ebx+2A],al mov byte ptr [ebx+2B],0 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 40 M01_L08: mov ecx,[ebp+38] mov esi,[ebp+40] and esi,7FFFFFFF lea edi,[ebx+58] mov edx,edi call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov [edi+4],esi lea esi,[ebx+58] lea edi,[ebx+50] call CORINFO_HELP_ASSIGN_BYREF movsd xor edx,edx cmp dword ptr [ebx+34],0 sete dl mov [ebp-14],edx test edx,edx je near ptr M01_L23 M01_L09: lea ecx,[ebx+50] mov esi,[ecx] mov [ebp-8C],esi mov edi,[ecx+4] mov [ebp-78],edi lea ecx,[ebx+50] mov [ebp-80],ecx mov edx,[ecx] xor eax,eax mov [ebp-98],eax test edx,edx jne short M01_L10 xor edx,edx xor edi,edi xor esi,esi xor eax,eax mov [ebp-90],edx mov [ebp-44],eax jmp near ptr M01_L19 M01_L10: mov edi,[ebp+40] sar edi,1F mov esi,[ebp+44] sar esi,1F lea esi,[esi+edi*2] neg esi mov [ebp-48],esi mov edi,[ebp+3C] mov [ebp-84],edi mov edi,[ecx+4] mov esi,[ebp+44] and esi,7FFFFFFF mov [ebp-4C],esi cmp dword ptr [ebp-48],0 jne near ptr M01_L13 mov ecx,[ebp-80] mov esi,edx mov eax,offset MT_System.Buffers.ReadOnlySequenceSegment`1[[System.Byte, System.Private.CoreLib]] cmp [esi],eax je short M01_L11 mov ecx,eax call dword ptr ds:[7B4B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) mov esi,eax mov ecx,[ebp-80] M01_L11: cmp esi,[ebp-84] je short M01_L12 mov eax,[esi+0C] test eax,eax je near ptr M01_L39 mov [ebp-98],eax add esi,10 mov edx,[esi] mov [ebp-9C],edx mov edx,[esi+4] mov esi,[esi+8] cmp edi,esi ja near ptr M01_L38 add edx,edi sub esi,edi mov edi,[ebp-9C] jmp near ptr M01_L18 M01_L12: lea edx,[esi+10] mov esi,[edx] mov [ebp-9C],esi mov esi,[edx+4] mov [ebp-7C],esi mov edx,[edx+8] mov esi,[ebp-4C] sub esi,edi cmp edi,edx ja near ptr M01_L38 sub edx,edi cmp edx,esi jb near ptr M01_L38 add edi,[ebp-7C] mov edx,[ebp-9C] xchg edx,edi jmp near ptr M01_L18 M01_L13: mov ecx,[ebp-80] cmp edx,[ebp-84] jne near ptr M01_L39 cmp dword ptr [ebp-48],1 jne short M01_L16 mov esi,edx mov eax,offset MT_System.Byte[] cmp [esi],eax jne short M01_L15 M01_L14: mov eax,[ebp-4C] mov edx,eax sub edx,edi cmp [esi+4],edi jb near ptr M01_L40 mov eax,[esi+4] sub eax,edi cmp eax,edx jb near ptr M01_L40 mov eax,edx mov edx,edi mov edi,esi mov esi,eax jmp short M01_L18 M01_L15: mov ecx,eax call dword ptr ds:[7B4B858] mov esi,eax mov ecx,[ebp-80] jmp short M01_L14 M01_L16: mov esi,edx mov eax,offset MT_System.Buffers.MemoryManager`1[[System.Byte, System.Private.CoreLib]] cmp [esi],eax jne near ptr M01_L20 M01_L17: lea edx,[ebp-58] mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+10] mov esi,[ebp-4C] mov eax,esi sub eax,edi cmp edi,[ebp-50] ja near ptr M01_L40 mov edx,[ebp-50] sub edx,edi cmp edx,eax jb near ptr M01_L40 mov esi,[ebp-58] add edi,[ebp-54] mov [ebp-90],esi mov ecx,eax mov edx,edi mov esi,ecx mov ecx,[ebp-80] mov edi,[ebp-90] M01_L18: mov dword ptr [ebp-44],1 mov [ebp-90],edi mov edi,edx M01_L19: mov eax,[ebp-98] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX xor edx,edx mov [ecx+4],edx cmp dword ptr [ebp-44],0 je short M01_L23 lea ecx,[ebx+58] mov eax,[ebp-8C] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX mov edx,[ebp-78] mov [ecx+4],edx test esi,esi je near ptr M01_L09 mov ecx,[ebp-90] xor edx,edx xor eax,eax test ecx,ecx je short M01_L22 mov edx,[ecx] test dword ptr [edx],80000000 je near ptr M01_L37 lea edx,[ecx+8] mov eax,[ecx+4] jmp short M01_L21 M01_L20: mov ecx,eax call dword ptr ds:[7B4B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) mov esi,eax jmp near ptr M01_L17 M01_L21: and edi,7FFFFFFF cmp edi,eax ja near ptr M01_L40 sub eax,edi cmp eax,esi jb near ptr M01_L40 add edx,edi mov eax,esi M01_L22: mov ecx,edx mov edx,eax lea eax,[ebx+30] mov [eax],ecx mov [eax+4],edx M01_L23: lea esi,[ebx+50] mov edx,[esi] xor edi,edi mov [ebp-0A0],edi test edx,edx jne short M01_L24 xor eax,eax jmp near ptr M01_L33 M01_L24: mov ecx,[ebp+40] sar ecx,1F mov eax,[ebp+44] sar eax,1F lea ecx,[eax+ecx*2] mov eax,ecx neg eax mov ecx,[ebp+3C] mov [ebp-88],ecx mov edi,[esi+4] mov ecx,[ebp+44] and ecx,7FFFFFFF mov [ebp-64],ecx test eax,eax jne short M01_L27 mov eax,edx mov ecx,offset MT_System.Buffers.ReadOnlySequenceSegment`1[[System.Byte, System.Private.CoreLib]] cmp [eax],ecx je short M01_L25 call dword ptr ds:[7B4B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) M01_L25: cmp eax,[ebp-88] je short M01_L26 mov ecx,[eax+0C] test ecx,ecx je near ptr M01_L39 mov edx,ecx add eax,10 mov ecx,[eax+8] cmp edi,ecx ja near ptr M01_L38 jmp near ptr M01_L32 M01_L26: lea ecx,[eax+10] mov ecx,[ecx+8] mov eax,[ebp-64] sub eax,edi cmp edi,ecx ja near ptr M01_L38 sub ecx,edi cmp ecx,eax jb near ptr M01_L38 mov edx,[ebp-0A0] jmp near ptr M01_L32 M01_L27: cmp edx,[ebp-88] jne near ptr M01_L39 cmp eax,1 jne short M01_L30 mov eax,edx mov ecx,offset MT_System.Byte[] cmp [eax],ecx jne short M01_L29 M01_L28: mov edx,[ebp-64] mov ecx,edx sub ecx,edi cmp [eax+4],edi jb near ptr M01_L40 mov edx,[eax+4] sub edx,edi cmp edx,ecx jb near ptr M01_L40 mov edx,[ebp-0A0] jmp short M01_L32 M01_L29: call dword ptr ds:[7B4B858] jmp short M01_L28 M01_L30: mov eax,edx mov ecx,offset MT_System.Buffers.MemoryManager`1[[System.Byte, System.Private.CoreLib]] cmp [eax],ecx jne short M01_L35 M01_L31: lea edx,[ebp-70] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov edx,[ebp-64] sub edx,edi cmp edi,[ebp-68] ja near ptr M01_L40 mov ecx,[ebp-68] sub ecx,edi cmp ecx,edx mov edx,[ebp-0A0] jb near ptr M01_L40 M01_L32: mov eax,1 mov [ebp-0A0],edx M01_L33: cmp dword ptr [ebp-14],0 jne short M01_L34 mov edi,[ebp-0A0] mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_EDI xor edx,edx mov [esi+4],edx M01_L34: xor edx,edx test eax,eax sete dl movzx ecx,byte ptr [ebp-10] and edx,ecx mov [ebx+2A],dl mov byte ptr [ebx+2B],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 40 M01_L35: call dword ptr ds:[7B4B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) jmp short M01_L31 M01_L36: lea edx,[ebp-30] mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov eax,[ebp-30] mov edx,[ebp-2C] jmp near ptr M01_L05 M01_L37: lea edx,[ebp-60] mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov edx,[ebp-60] mov eax,[ebp-5C] jmp near ptr M01_L21 M01_L38: mov ecx,21 call dword ptr ds:[82153A8] int 3 M01_L39: call dword ptr ds:[0AD05090] int 3 M01_L40: call dword ptr ds:[8215060] int 3 ; Total bytes of code 1675 ``` ```assembly ; System.Text.Json.Utf8JsonReader.ReadMultiSegment() push ebp mov ebp,esp push edi push esi push ebx sub esp,70 vzeroupper mov esi,ecx xor ebx,ebx mov byte ptr [esi+2D],0 mov byte ptr [esi+2E],0 xor ecx,ecx mov [esi+70],ecx mov [esi+74],ecx vxorps xmm0,xmm0,xmm0 vmovq qword ptr [esi+78],xmm0 vmovq qword ptr [esi+80],xmm0 mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M02_L03 cmp byte ptr [esi+27],0 je short M02_L01 cmp byte ptr [esi+24],0 je short M02_L01 cmp byte ptr [esi+2B],0 je short M02_L00 movzx ecx,byte ptr [esi+2A] test ecx,ecx je short M02_L01 M02_L00: mov ecx,esi call dword ptr ds:[0AD6F9C0]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() test eax,eax je near ptr M02_L22 M02_L01: mov ecx,esi call dword ptr ds:[0AD6FA08]; System.Text.Json.Utf8JsonReader.GetNextSpan() test eax,eax jne short M02_L03 cmp byte ptr [esi+27],0 je near ptr M02_L22 cmp byte ptr [esi+24],0 je near ptr M02_L22 cmp byte ptr [esi+2B],0 je short M02_L02 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L22 M02_L02: mov ecx,esi call dword ptr ds:[0AD6F9C0]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() jmp near ptr M02_L22 M02_L03: mov ecx,[esi+20] lea eax,[esi+30] cmp ecx,[eax+4] jae near ptr M02_L25 mov eax,[eax] movzx edx,byte ptr [eax+ecx] cmp edx,20 jg near ptr M02_L08 mov ecx,esi call dword ptr ds:[0AD6FA38] mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M02_L07 cmp byte ptr [esi+27],0 je short M02_L05 cmp byte ptr [esi+24],0 je short M02_L05 cmp byte ptr [esi+2B],0 je short M02_L04 movzx ecx,byte ptr [esi+2A] test ecx,ecx je short M02_L05 M02_L04: mov ecx,esi call dword ptr ds:[0AD6F9C0]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() test eax,eax je near ptr M02_L22 M02_L05: mov ecx,esi call dword ptr ds:[0AD6FA08]; System.Text.Json.Utf8JsonReader.GetNextSpan() test eax,eax jne short M02_L07 cmp byte ptr [esi+27],0 je near ptr M02_L22 cmp byte ptr [esi+24],0 je near ptr M02_L22 cmp byte ptr [esi+2B],0 je short M02_L06 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L22 M02_L06: mov ecx,esi call dword ptr ds:[0AD6F9C0]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() jmp near ptr M02_L22 M02_L07: mov ecx,[esi+20] lea edx,[esi+30] cmp ecx,[edx+4] jae near ptr M02_L25 mov edx,[edx] movzx edx,byte ptr [edx+ecx] M02_L08: lea ecx,[esi+10] mov eax,[ecx] mov ecx,[ecx+4] mov ebx,[esi+20] mov edi,ebx sar edi,1F add eax,ebx adc ecx,edi lea edi,[esi+18] mov [edi],eax mov [edi+4],ecx movzx ebx,byte ptr [esi+28] test ebx,ebx je near ptr M02_L23 cmp edx,2F jne near ptr M02_L12 lea ecx,[esi+10] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-44],edi mov [ebp-48],eax mov ecx,[esi+20] mov [ebp-14],ecx lea edi,[esi+8] mov eax,[edi] mov edi,[edi+4] mov [ebp-4C],eax mov [ebp-50],edi mov edi,esi mov eax,[edi] mov edi,[edi+4] mov [ebp-54],eax mov [ebp-58],edi mov [ebp-18],ebx lea edi,[esi+58] mov ebx,edi mov eax,[ebx] mov [ebp-78],eax mov ebx,[ebx+4] mov [ebp-24],ebx movzx ebx,byte ptr [esi+2C] mov ecx,esi call dword ptr ds:[0AD6FC00]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenMultiSegment(Byte) test eax,eax jne short M02_L09 mov ecx,1 jmp short M02_L11 M02_L09: cmp eax,1 jne short M02_L10 mov edx,[ebp-14] mov [esi+20],edx mov edx,[ebp-18] mov [esi+28],dl lea edx,[esi+8] mov ecx,[ebp-4C] mov [edx],ecx mov ecx,[ebp-50] mov [edx+4],ecx mov edx,esi mov ecx,[ebp-54] mov [edx],ecx mov ecx,[ebp-58] mov [edx+4],ecx lea edx,[esi+10] mov ecx,[ebp-44] mov [edx],ecx mov ecx,[ebp-48] mov [edx+4],ecx mov ecx,[ebp-78] mov edx,edi call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov ecx,[ebp-24] mov [edi+4],ecx mov [esi+2C],bl M02_L10: xor ecx,ecx M02_L11: mov ebx,ecx jmp near ptr M02_L22 M02_L12: cmp ebx,1 jne near ptr M02_L15 cmp edx,7D jne short M02_L13 mov ecx,esi call dword ptr ds:[0AD6F5A0]; System.Text.Json.Utf8JsonReader.EndObject() jmp near ptr M02_L21 M02_L13: cmp edx,22 jne near ptr M02_L24 lea ecx,[esi+10] mov ebx,[ecx] mov edi,[ecx+4] mov [ebp-2C],ebx mov [ebp-30],edi mov eax,[esi+20] mov [ebp-10],eax lea ecx,[esi+8] mov edx,[ecx] mov ecx,[ecx+4] mov [ebp-34],edx mov [ebp-38],ecx mov edi,esi mov ebx,[edi] mov edi,[edi+4] mov [ebp-3C],ebx mov [ebp-40],edi lea edi,[esi+58] mov ebx,edi mov eax,[ebx] mov [ebp-74],eax mov ebx,[ebx+4] mov ecx,esi call dword ptr ds:[0AD6FAE0] test eax,eax jne short M02_L14 mov edx,[ebp-10] mov [esi+20],edx mov byte ptr [esi+28],1 lea edx,[esi+8] mov ecx,[ebp-34] mov [edx],ecx mov ecx,[ebp-38] mov [edx+4],ecx mov edx,esi mov ecx,[ebp-3C] mov [edx],ecx mov ecx,[ebp-40] mov [edx+4],ecx add esi,10 mov edx,[ebp-2C] mov [esi],edx mov edx,[ebp-30] mov [esi+4],edx mov ecx,edi mov edi,[ebp-74] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EDI mov [ecx+4],ebx mov ebx,eax jmp near ptr M02_L22 M02_L14: mov ebx,eax jmp near ptr M02_L22 M02_L15: cmp ebx,3 jne short M02_L17 cmp edx,5D jne short M02_L16 mov ecx,esi call dword ptr ds:[0AD6F5D0] jmp near ptr M02_L21 M02_L16: mov ecx,esi call dword ptr ds:[0AD6FA50] mov ebx,eax jmp near ptr M02_L22 M02_L17: cmp ebx,5 je short M02_L16 lea ecx,[esi+10] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-5C],edi mov [ebp-60],eax mov ecx,[esi+20] mov [ebp-1C],ecx lea edi,[esi+8] mov eax,[edi] mov edi,[edi+4] mov [ebp-64],eax mov [ebp-68],edi mov edi,esi mov eax,[edi] mov edi,[edi+4] mov [ebp-6C],eax mov [ebp-70],edi mov [ebp-20],ebx lea edi,[esi+58] mov ebx,edi mov eax,[ebx] mov [ebp-7C],eax mov ebx,[ebx+4] mov [ebp-28],ebx movzx ebx,byte ptr [esi+2C] mov ecx,esi call dword ptr ds:[0AD6FC00]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenMultiSegment(Byte) test eax,eax jne short M02_L18 mov ecx,1 jmp short M02_L20 M02_L18: cmp eax,1 jne short M02_L19 mov edx,[ebp-1C] mov [esi+20],edx mov edx,[ebp-20] mov [esi+28],dl lea edx,[esi+8] mov ecx,[ebp-64] mov [edx],ecx mov eax,[ebp-68] mov [edx+4],eax mov edx,esi mov eax,[ebp-6C] mov [edx],eax mov eax,[ebp-70] mov [edx+4],eax lea edx,[esi+10] mov eax,[ebp-5C] mov [edx],eax mov eax,[ebp-60] mov [edx+4],eax mov eax,edi mov edi,[ebp-7C] mov edx,eax call CORINFO_HELP_CHECKED_ASSIGN_REF_EDI mov edi,[ebp-28] mov [eax+4],edi mov [esi+2C],bl M02_L19: xor ecx,ecx M02_L20: mov ebx,ecx jmp short M02_L22 M02_L21: mov ebx,1 M02_L22: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L23: mov ecx,esi call dword ptr ds:[0AD6FA20]; System.Text.Json.Utf8JsonReader.ReadFirstTokenMultiSegment(Byte) mov ebx,eax jmp short M02_L22 M02_L24: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0AD818A0] int 3 M02_L25: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1032 ``` ### Compare Jit Disasm ```assembly ; System.Text.Json.Tests.Utf8JsonReaderCommentsTests.Utf8JsonReaderCommentParsing() push ebp mov ebp,esp push edi push esi sub esp,250 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-258],xmm4 mov eax,0FFFFFDC0 M00_L00: vmovdqu xmmword ptr [ebp+eax-8],xmm4 vmovdqu xmmword ptr [ebp+eax+8],xmm4 vmovdqu xmmword ptr [ebp+eax+18],xmm4 add eax,30 jne short M00_L00 movzx edx,byte ptr [ecx+10] cmp edx,2 jg near ptr M00_L11 mov [ebp-1C],dl vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-18],xmm0 cmp dword ptr [ecx+8],0 jne short M00_L03 mov ecx,[ecx+4] test ecx,ecx je short M00_L02 lea edx,[ecx+8] mov eax,[ecx+4] M00_L01: push eax push edx push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp-18] push dword ptr [ebp-1C] push dword ptr [ebp-20] push dword ptr [ebp-24] push dword ptr [ebp-28] push dword ptr [ebp-2C] push dword ptr [ebp-30] push dword ptr [ebp-34] push dword ptr [ebp-38] lea ecx,[ebp-258] mov edx,1 call dword ptr ds:[0B78B888] lea edi,[ebp-1D0] lea esi,[ebp-258] mov ecx,22 rep movsd jmp short M00_L04 M00_L02: xor edx,edx xor eax,eax jmp short M00_L01 M00_L03: add ecx,14 push dword ptr [ecx+0C] push dword ptr [ecx+8] push dword ptr [ecx+4] push dword ptr [ecx] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp-18] push dword ptr [ebp-1C] push dword ptr [ebp-20] push dword ptr [ebp-24] push dword ptr [ebp-28] push dword ptr [ebp-2C] push dword ptr [ebp-30] push dword ptr [ebp-34] push dword ptr [ebp-38] lea ecx,[ebp-148] mov edx,1 call dword ptr ds:[0B78D180]; System.Text.Json.Utf8JsonReader..ctor(System.Buffers.ReadOnlySequence`1, Boolean, System.Text.Json.JsonReaderState) lea edi,[ebp-1D0] lea esi,[ebp-148] mov ecx,22 rep movsd M00_L04: lea edi,[ebp-0C0] lea esi,[ebp-1D0] mov ecx,22 rep movsd M00_L05: cmp byte ptr [ebp-95],0 jne short M00_L06 lea ecx,[ebp-0C0] call dword ptr ds:[0B78BA98] jmp short M00_L07 M00_L06: lea ecx,[ebp-0C0] call dword ptr ds:[0B78D1B0]; System.Text.Json.Utf8JsonReader.ReadMultiSegment() M00_L07: movzx ecx,al test ecx,ecx jne short M00_L08 cmp byte ptr [ebp-9C],0 je short M00_L09 cmp byte ptr [ebp-98],0 je short M00_L10 M00_L08: test ecx,ecx jne short M00_L05 M00_L09: lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L10: xor ecx,ecx push 0 push 0 push ecx lea ecx,[ebp-0C0] mov edx,20 call dword ptr ds:[0B78F378] int 3 M00_L11: mov ecx,2C5E mov edx,0ADD6EF8 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B78F060] int 3 ; Total bytes of code 405 ``` ```assembly ; System.Text.Json.Utf8JsonReader..ctor(System.Buffers.ReadOnlySequence`1, Boolean, System.Text.Json.JsonReaderState) push ebp mov ebp,esp push edi push esi push ebx sub esp,94 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-70],xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 xor eax,eax mov [ebp-20],eax mov [ebp-1C],eax mov [ebp-18],eax mov ebx,ecx mov esi,edx mov edx,[ebp+38] test edx,edx jne short M01_L00 xor edx,edx mov [ebp-20],edx mov [ebp-1C],edx mov [ebp-18],edx jmp near ptr M01_L04 M01_L00: mov edi,[ebp+40] mov eax,[ebp+44] mov [ebp-24],eax xor ecx,ecx cmp edx,[ebp+3C] setne cl mov [ebp-28],ecx or eax,edi jl short M01_L03 mov eax,edx mov ecx,offset MT_System.Buffers.ReadOnlySequenceSegment`1[[System.Byte, System.Private.CoreLib]] cmp [eax],ecx je short M01_L01 call dword ptr ds:[856B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) M01_L01: add eax,10 mov ecx,[eax] mov [ebp-94],ecx mov edx,[eax+4] mov eax,[eax+8] cmp dword ptr [ebp-28],0 je short M01_L02 cmp edi,eax ja near ptr M01_L38 add edx,edi sub eax,edi mov [ebp-20],ecx mov [ebp-1C],edx mov [ebp-18],eax jmp short M01_L04 M01_L02: mov ecx,[ebp-24] sub ecx,edi cmp edi,eax ja near ptr M01_L38 sub eax,edi cmp eax,ecx jb near ptr M01_L38 add edi,edx mov edx,[ebp-94] mov [ebp-20],edx mov [ebp-1C],edi mov [ebp-18],ecx jmp short M01_L04 M01_L03: push edx push dword ptr [ebp-28] lea ecx,[ebp+38] lea edx,[ebp-20] call dword ptr ds:[0AC7BBD0] M01_L04: mov ecx,[ebp-20] mov edi,[ebp-1C] mov edx,[ebp-18] mov [ebp-74],edx xor eax,eax xor edx,edx test ecx,ecx je short M01_L06 mov eax,[ecx] test dword ptr [eax],80000000 je near ptr M01_L36 lea eax,[ecx+8] mov edx,[ecx+4] M01_L05: and edi,7FFFFFFF mov ecx,[ebp-74] cmp edi,edx ja near ptr M01_L40 sub edx,edi cmp edx,ecx jb near ptr M01_L40 add eax,edi mov edx,ecx M01_L06: mov ecx,eax lea eax,[ebx+30] mov [eax],ecx mov [eax+4],edx mov [ebp-10],esi mov eax,esi mov [ebx+24],al mov byte ptr [ebx+25],1 mov ecx,ebx mov edx,[ebp+8] mov [ecx],edx mov edx,[ebp+0C] mov [ecx+4],edx lea ecx,[ebx+8] mov edx,[ebp+10] mov [ecx],edx mov edx,[ebp+14] mov [ecx+4],edx movzx ecx,byte ptr [ebp+18] mov [ebx+26],cl movzx ecx,byte ptr [ebp+19] mov [ebx+27],cl movzx ecx,byte ptr [ebp+1A] mov [ebx+2E],cl movzx ecx,byte ptr [ebp+1B] mov [ebx+2C],cl movzx ecx,byte ptr [ebp+1C] mov [ebx+28],cl movzx ecx,byte ptr [ebp+1D] mov [ebx+29],cl mov ecx,[ebp+20] mov [ebx+38],ecx mov ecx,[ebp+24] mov [ebx+3C],ecx cmp dword ptr [ebx+38],0 jne short M01_L07 mov dword ptr [ebx+38],40 M01_L07: lea edi,[ebx+40] lea esi,[ebp+28] movsd movsd call CORINFO_HELP_ASSIGN_BYREF movsd xor ecx,ecx mov [ebx+20],ecx lea ecx,[ebx+18] xor edx,edx mov [ecx],edx mov [ecx+4],edx lea ecx,[ebx+10] mov [ecx],edx mov [ecx+4],edx mov [ebx+70],edx mov [ebx+74],edx lea edi,[ebx+60] lea esi,[ebp+38] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd mov byte ptr [ebx+2D],0 mov ecx,0ADD8D20 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov esi,ds:[7351FE8] add esi,4 lea edi,[ebp-40] mov ecx,4 rep movsd lea edi,[ebx+78] lea esi,[ebp-40] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd mov edx,[ebp+38] cmp edx,[ebp+3C] jne short M01_L08 xor edx,edx mov [ebx+50],edx mov [ebx+54],edx mov ecx,[ebp+38] mov eax,[ebp+40] and eax,7FFFFFFF lea esi,[ebx+58] mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov [esi+4],eax mov eax,[ebp-10] mov [ebx+2A],al mov byte ptr [ebx+2B],0 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 40 M01_L08: mov ecx,[ebp+38] mov esi,[ebp+40] and esi,7FFFFFFF lea edi,[ebx+58] mov edx,edi call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov [edi+4],esi lea esi,[ebx+58] lea edi,[ebx+50] call CORINFO_HELP_ASSIGN_BYREF movsd xor edx,edx cmp dword ptr [ebx+34],0 sete dl mov [ebp-14],edx test edx,edx je near ptr M01_L23 M01_L09: lea ecx,[ebx+50] mov esi,[ecx] mov [ebp-8C],esi mov edi,[ecx+4] mov [ebp-78],edi lea ecx,[ebx+50] mov [ebp-80],ecx mov edx,[ecx] xor eax,eax mov [ebp-98],eax test edx,edx jne short M01_L10 xor edx,edx xor edi,edi xor esi,esi xor eax,eax mov [ebp-90],edx mov [ebp-44],eax jmp near ptr M01_L19 M01_L10: mov edi,[ebp+40] sar edi,1F mov esi,[ebp+44] sar esi,1F lea esi,[esi+edi*2] neg esi mov [ebp-48],esi mov edi,[ebp+3C] mov [ebp-84],edi mov edi,[ecx+4] mov esi,[ebp+44] and esi,7FFFFFFF mov [ebp-4C],esi cmp dword ptr [ebp-48],0 jne near ptr M01_L13 mov ecx,[ebp-80] mov esi,edx mov eax,offset MT_System.Buffers.ReadOnlySequenceSegment`1[[System.Byte, System.Private.CoreLib]] cmp [esi],eax je short M01_L11 mov ecx,eax call dword ptr ds:[856B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) mov esi,eax mov ecx,[ebp-80] M01_L11: cmp esi,[ebp-84] je short M01_L12 mov eax,[esi+0C] test eax,eax je near ptr M01_L39 mov [ebp-98],eax add esi,10 mov edx,[esi] mov [ebp-9C],edx mov edx,[esi+4] mov esi,[esi+8] cmp edi,esi ja near ptr M01_L38 add edx,edi sub esi,edi mov edi,[ebp-9C] jmp near ptr M01_L18 M01_L12: lea edx,[esi+10] mov esi,[edx] mov [ebp-9C],esi mov esi,[edx+4] mov [ebp-7C],esi mov edx,[edx+8] mov esi,[ebp-4C] sub esi,edi cmp edi,edx ja near ptr M01_L38 sub edx,edi cmp edx,esi jb near ptr M01_L38 add edi,[ebp-7C] mov edx,[ebp-9C] xchg edx,edi jmp near ptr M01_L18 M01_L13: mov ecx,[ebp-80] cmp edx,[ebp-84] jne near ptr M01_L39 cmp dword ptr [ebp-48],1 jne short M01_L16 mov esi,edx mov eax,offset MT_System.Byte[] cmp [esi],eax jne short M01_L15 M01_L14: mov eax,[ebp-4C] mov edx,eax sub edx,edi cmp [esi+4],edi jb near ptr M01_L40 mov eax,[esi+4] sub eax,edi cmp eax,edx jb near ptr M01_L40 mov eax,edx mov edx,edi mov edi,esi mov esi,eax jmp short M01_L18 M01_L15: mov ecx,eax call dword ptr ds:[856B858] mov esi,eax mov ecx,[ebp-80] jmp short M01_L14 M01_L16: mov esi,edx mov eax,offset MT_System.Buffers.MemoryManager`1[[System.Byte, System.Private.CoreLib]] cmp [esi],eax jne near ptr M01_L20 M01_L17: lea edx,[ebp-58] mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+10] mov esi,[ebp-4C] mov eax,esi sub eax,edi cmp edi,[ebp-50] ja near ptr M01_L40 mov edx,[ebp-50] sub edx,edi cmp edx,eax jb near ptr M01_L40 mov esi,[ebp-58] add edi,[ebp-54] mov [ebp-90],esi mov ecx,eax mov edx,edi mov esi,ecx mov ecx,[ebp-80] mov edi,[ebp-90] M01_L18: mov dword ptr [ebp-44],1 mov [ebp-90],edi mov edi,edx M01_L19: mov eax,[ebp-98] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX xor edx,edx mov [ecx+4],edx cmp dword ptr [ebp-44],0 je short M01_L23 lea ecx,[ebx+58] mov eax,[ebp-8C] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX mov edx,[ebp-78] mov [ecx+4],edx test esi,esi je near ptr M01_L09 mov ecx,[ebp-90] xor edx,edx xor eax,eax test ecx,ecx je short M01_L22 mov edx,[ecx] test dword ptr [edx],80000000 je near ptr M01_L37 lea edx,[ecx+8] mov eax,[ecx+4] jmp short M01_L21 M01_L20: mov ecx,eax call dword ptr ds:[856B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) mov esi,eax jmp near ptr M01_L17 M01_L21: and edi,7FFFFFFF cmp edi,eax ja near ptr M01_L40 sub eax,edi cmp eax,esi jb near ptr M01_L40 add edx,edi mov eax,esi M01_L22: mov ecx,edx mov edx,eax lea eax,[ebx+30] mov [eax],ecx mov [eax+4],edx M01_L23: lea esi,[ebx+50] mov edx,[esi] xor edi,edi mov [ebp-0A0],edi test edx,edx jne short M01_L24 xor eax,eax jmp near ptr M01_L33 M01_L24: mov ecx,[ebp+40] sar ecx,1F mov eax,[ebp+44] sar eax,1F lea ecx,[eax+ecx*2] mov eax,ecx neg eax mov ecx,[ebp+3C] mov [ebp-88],ecx mov edi,[esi+4] mov ecx,[ebp+44] and ecx,7FFFFFFF mov [ebp-64],ecx test eax,eax jne short M01_L27 mov eax,edx mov ecx,offset MT_System.Buffers.ReadOnlySequenceSegment`1[[System.Byte, System.Private.CoreLib]] cmp [eax],ecx je short M01_L25 call dword ptr ds:[856B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) M01_L25: cmp eax,[ebp-88] je short M01_L26 mov ecx,[eax+0C] test ecx,ecx je near ptr M01_L39 mov edx,ecx add eax,10 mov ecx,[eax+8] cmp edi,ecx ja near ptr M01_L38 jmp near ptr M01_L32 M01_L26: lea ecx,[eax+10] mov ecx,[ecx+8] mov eax,[ebp-64] sub eax,edi cmp edi,ecx ja near ptr M01_L38 sub ecx,edi cmp ecx,eax jb near ptr M01_L38 mov edx,[ebp-0A0] jmp near ptr M01_L32 M01_L27: cmp edx,[ebp-88] jne near ptr M01_L39 cmp eax,1 jne short M01_L30 mov eax,edx mov ecx,offset MT_System.Byte[] cmp [eax],ecx jne short M01_L29 M01_L28: mov edx,[ebp-64] mov ecx,edx sub ecx,edi cmp [eax+4],edi jb near ptr M01_L40 mov edx,[eax+4] sub edx,edi cmp edx,ecx jb near ptr M01_L40 mov edx,[ebp-0A0] jmp short M01_L32 M01_L29: call dword ptr ds:[856B858] jmp short M01_L28 M01_L30: mov eax,edx mov ecx,offset MT_System.Buffers.MemoryManager`1[[System.Byte, System.Private.CoreLib]] cmp [eax],ecx jne short M01_L35 M01_L31: lea edx,[ebp-70] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov edx,[ebp-64] sub edx,edi cmp edi,[ebp-68] ja near ptr M01_L40 mov ecx,[ebp-68] sub ecx,edi cmp ecx,edx mov edx,[ebp-0A0] jb near ptr M01_L40 M01_L32: mov eax,1 mov [ebp-0A0],edx M01_L33: cmp dword ptr [ebp-14],0 jne short M01_L34 mov edi,[ebp-0A0] mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_EDI xor edx,edx mov [esi+4],edx M01_L34: xor edx,edx test eax,eax sete dl movzx ecx,byte ptr [ebp-10] and edx,ecx mov [ebx+2A],dl mov byte ptr [ebx+2B],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 40 M01_L35: call dword ptr ds:[856B8B8]; System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(Void*, System.Object) jmp short M01_L31 M01_L36: lea edx,[ebp-30] mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov eax,[ebp-30] mov edx,[ebp-2C] jmp near ptr M01_L05 M01_L37: lea edx,[ebp-60] mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov edx,[ebp-60] mov eax,[ebp-5C] jmp near ptr M01_L21 M01_L38: mov ecx,21 call dword ptr ds:[8C013F0] int 3 M01_L39: call dword ptr ds:[0B73F090] int 3 M01_L40: call dword ptr ds:[8C010A8] int 3 ; Total bytes of code 1675 ``` ```assembly ; System.Text.Json.Utf8JsonReader.ReadMultiSegment() push ebp mov ebp,esp push edi push esi push ebx sub esp,70 vzeroupper mov esi,ecx xor ebx,ebx mov byte ptr [esi+2D],0 mov byte ptr [esi+2E],0 xor ecx,ecx mov [esi+70],ecx mov [esi+74],ecx vxorps xmm0,xmm0,xmm0 vmovq qword ptr [esi+78],xmm0 vmovq qword ptr [esi+80],xmm0 mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M02_L03 cmp byte ptr [esi+27],0 je short M02_L01 cmp byte ptr [esi+24],0 je short M02_L01 cmp byte ptr [esi+2B],0 je short M02_L00 movzx ecx,byte ptr [esi+2A] test ecx,ecx je short M02_L01 M02_L00: mov ecx,esi call dword ptr ds:[0B78D1C8]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() test eax,eax je near ptr M02_L22 M02_L01: mov ecx,esi call dword ptr ds:[0B78D210]; System.Text.Json.Utf8JsonReader.GetNextSpan() test eax,eax jne short M02_L03 cmp byte ptr [esi+27],0 je near ptr M02_L22 cmp byte ptr [esi+24],0 je near ptr M02_L22 cmp byte ptr [esi+2B],0 je short M02_L02 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L22 M02_L02: mov ecx,esi call dword ptr ds:[0B78D1C8]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() jmp near ptr M02_L22 M02_L03: mov ecx,[esi+20] lea eax,[esi+30] cmp ecx,[eax+4] jae near ptr M02_L25 mov eax,[eax] movzx edx,byte ptr [eax+ecx] cmp edx,20 jg near ptr M02_L08 mov ecx,esi call dword ptr ds:[0B78D240] mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M02_L07 cmp byte ptr [esi+27],0 je short M02_L05 cmp byte ptr [esi+24],0 je short M02_L05 cmp byte ptr [esi+2B],0 je short M02_L04 movzx ecx,byte ptr [esi+2A] test ecx,ecx je short M02_L05 M02_L04: mov ecx,esi call dword ptr ds:[0B78D1C8]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() test eax,eax je near ptr M02_L22 M02_L05: mov ecx,esi call dword ptr ds:[0B78D210]; System.Text.Json.Utf8JsonReader.GetNextSpan() test eax,eax jne short M02_L07 cmp byte ptr [esi+27],0 je near ptr M02_L22 cmp byte ptr [esi+24],0 je near ptr M02_L22 cmp byte ptr [esi+2B],0 je short M02_L06 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L22 M02_L06: mov ecx,esi call dword ptr ds:[0B78D1C8]; System.Text.Json.Utf8JsonReader.ValidateStateAtEndOfData() jmp near ptr M02_L22 M02_L07: mov ecx,[esi+20] lea edx,[esi+30] cmp ecx,[edx+4] jae near ptr M02_L25 mov edx,[edx] movzx edx,byte ptr [edx+ecx] M02_L08: lea ecx,[esi+10] mov eax,[ecx] mov ecx,[ecx+4] mov ebx,[esi+20] mov edi,ebx sar edi,1F add eax,ebx adc ecx,edi lea edi,[esi+18] mov [edi],eax mov [edi+4],ecx movzx ebx,byte ptr [esi+28] test ebx,ebx je near ptr M02_L23 cmp edx,2F jne near ptr M02_L12 lea ecx,[esi+10] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-44],edi mov [ebp-48],eax mov ecx,[esi+20] mov [ebp-14],ecx lea edi,[esi+8] mov eax,[edi] mov edi,[edi+4] mov [ebp-4C],eax mov [ebp-50],edi mov edi,esi mov eax,[edi] mov edi,[edi+4] mov [ebp-54],eax mov [ebp-58],edi mov [ebp-18],ebx lea edi,[esi+58] mov ebx,edi mov eax,[ebx] mov [ebp-78],eax mov ebx,[ebx+4] mov [ebp-24],ebx movzx ebx,byte ptr [esi+2C] mov ecx,esi call dword ptr ds:[0B78D408]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenMultiSegment(Byte) test eax,eax jne short M02_L09 mov ecx,1 jmp short M02_L11 M02_L09: cmp eax,1 jne short M02_L10 mov edx,[ebp-14] mov [esi+20],edx mov edx,[ebp-18] mov [esi+28],dl lea edx,[esi+8] mov ecx,[ebp-4C] mov [edx],ecx mov ecx,[ebp-50] mov [edx+4],ecx mov edx,esi mov ecx,[ebp-54] mov [edx],ecx mov ecx,[ebp-58] mov [edx+4],ecx lea edx,[esi+10] mov ecx,[ebp-44] mov [edx],ecx mov ecx,[ebp-48] mov [edx+4],ecx mov ecx,[ebp-78] mov edx,edi call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov ecx,[ebp-24] mov [edi+4],ecx mov [esi+2C],bl M02_L10: xor ecx,ecx M02_L11: mov ebx,ecx jmp near ptr M02_L22 M02_L12: cmp ebx,1 jne near ptr M02_L15 cmp edx,7D jne short M02_L13 mov ecx,esi call dword ptr ds:[0B78BA38]; System.Text.Json.Utf8JsonReader.EndObject() jmp near ptr M02_L21 M02_L13: cmp edx,22 jne near ptr M02_L24 lea ecx,[esi+10] mov ebx,[ecx] mov edi,[ecx+4] mov [ebp-2C],ebx mov [ebp-30],edi mov eax,[esi+20] mov [ebp-10],eax lea ecx,[esi+8] mov edx,[ecx] mov ecx,[ecx+4] mov [ebp-34],edx mov [ebp-38],ecx mov edi,esi mov ebx,[edi] mov edi,[edi+4] mov [ebp-3C],ebx mov [ebp-40],edi lea edi,[esi+58] mov ebx,edi mov eax,[ebx] mov [ebp-74],eax mov ebx,[ebx+4] mov ecx,esi call dword ptr ds:[0B78D2E8] test eax,eax jne short M02_L14 mov edx,[ebp-10] mov [esi+20],edx mov byte ptr [esi+28],1 lea edx,[esi+8] mov ecx,[ebp-34] mov [edx],ecx mov ecx,[ebp-38] mov [edx+4],ecx mov edx,esi mov ecx,[ebp-3C] mov [edx],ecx mov ecx,[ebp-40] mov [edx+4],ecx add esi,10 mov edx,[ebp-2C] mov [esi],edx mov edx,[ebp-30] mov [esi+4],edx mov ecx,edi mov edi,[ebp-74] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EDI mov [ecx+4],ebx mov ebx,eax jmp near ptr M02_L22 M02_L14: mov ebx,eax jmp near ptr M02_L22 M02_L15: cmp ebx,3 jne short M02_L17 cmp edx,5D jne short M02_L16 mov ecx,esi call dword ptr ds:[0B78BA68] jmp near ptr M02_L21 M02_L16: mov ecx,esi call dword ptr ds:[0B78D258] mov ebx,eax jmp near ptr M02_L22 M02_L17: cmp ebx,5 je short M02_L16 lea ecx,[esi+10] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-5C],edi mov [ebp-60],eax mov ecx,[esi+20] mov [ebp-1C],ecx lea edi,[esi+8] mov eax,[edi] mov edi,[edi+4] mov [ebp-64],eax mov [ebp-68],edi mov edi,esi mov eax,[edi] mov edi,[edi+4] mov [ebp-6C],eax mov [ebp-70],edi mov [ebp-20],ebx lea edi,[esi+58] mov ebx,edi mov eax,[ebx] mov [ebp-7C],eax mov ebx,[ebx+4] mov [ebp-28],ebx movzx ebx,byte ptr [esi+2C] mov ecx,esi call dword ptr ds:[0B78D408]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenMultiSegment(Byte) test eax,eax jne short M02_L18 mov ecx,1 jmp short M02_L20 M02_L18: cmp eax,1 jne short M02_L19 mov edx,[ebp-1C] mov [esi+20],edx mov edx,[ebp-20] mov [esi+28],dl lea edx,[esi+8] mov ecx,[ebp-64] mov [edx],ecx mov eax,[ebp-68] mov [edx+4],eax mov edx,esi mov eax,[ebp-6C] mov [edx],eax mov eax,[ebp-70] mov [edx+4],eax lea edx,[esi+10] mov eax,[ebp-5C] mov [edx],eax mov eax,[ebp-60] mov [edx+4],eax mov eax,edi mov edi,[ebp-7C] mov edx,eax call CORINFO_HELP_CHECKED_ASSIGN_REF_EDI mov edi,[ebp-28] mov [eax+4],edi mov [esi+2C],bl M02_L19: xor ecx,ecx M02_L20: mov ebx,ecx jmp short M02_L22 M02_L21: mov ebx,1 M02_L22: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L23: mov ecx,esi call dword ptr ds:[0B78D228]; System.Text.Json.Utf8JsonReader.ReadFirstTokenMultiSegment(Byte) mov ebx,eax jmp short M02_L22 M02_L24: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0B78F378] int 3 M02_L25: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1032 ``` ### 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)