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: 29 Improvements on 3/6/2023 11:36:59 AM #14037

Closed performanceautofiler[bot] closed 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in PerfLabTests.CastingPerf2.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IFooFooIsIFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo.html>) 439.97 μs 313.09 μs 0.71 0.14 False Trace Trace
[IntObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.IntObj.html>) 221.91 μs 187.14 μs 0.84 0.09 False Trace Trace
[ObjFooIsObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.ObjFooIsObj.html>) 440.06 μs 311.83 μs 0.71 0.20 False Trace Trace

graph graph graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 313.0862333333333 < 417.8890017361111. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 20.229146295768768 (T) = (0 -312267.4606106402) / Math.Sqrt((4305703690.030242 / (299)) + (416446.68694441585 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.19738674803017062 = (389063.42481170304 - 312267.4606106402) / 389063.42481170304 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0B375CF8 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0B376330] test eax,eax jle short M00_L01 mov ecx,ds:[7804264] M00_L00: mov edx,78042C4 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0A7361F8 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0A736830] test eax,eax jle short M00_L01 mov ecx,ds:[6B84264] M00_L00: mov edx,6B842C4 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` #### PerfLabTests.CastingPerf2.CastingPerf.IntObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 187.13899872448977 < 211.88905267491916. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 16.99847472783784 (T) = (0 -187451.2756984406) / Math.Sqrt((329536735.5739115 / (299)) + (502183.8844574991 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.08742536152259715 = (205409.2539884695 - 187451.2756984406) / 205409.2539884695 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IntObj() push ebp mov ebp,esp push edi push esi push ebx push eax xor esi,esi mov edi,ds:[0B136330] test edi,edi jle short M00_L02 mov ebx,ds:[7574274] M00_L00: mov eax,ebx mov [ebp-10],eax cmp dword ptr [eax],offset MT_System.Int32 je short M00_L01 mov edx,eax mov ecx,offset MT_System.Int32 call dword ptr ds:[884B8D0] mov eax,[ebp-10] M00_L01: mov eax,[eax+4] mov ds:[0B13633C],eax inc esi cmp esi,edi jl short M00_L00 M00_L02: pop ecx pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 73 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IntObj() push ebp mov ebp,esp push edi push esi push ebx push eax xor esi,esi mov edi,ds:[0AD86830] test edi,edi jle short M00_L02 mov ebx,ds:[7344274] M00_L00: mov eax,ebx mov [ebp-10],eax cmp dword ptr [eax],offset MT_System.Int32 je short M00_L01 mov edx,eax mov ecx,offset MT_System.Int32 call dword ptr ds:[850B8D0] mov eax,[ebp-10] M00_L01: mov eax,[eax+4] mov ds:[0AD8683C],eax inc esi cmp esi,edi jl short M00_L00 M00_L02: pop ecx pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 73 ``` #### PerfLabTests.CastingPerf2.CastingPerf.ObjFooIsObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 311.82596288515407 < 418.2521748925265. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 20.17262027725573 (T) = (0 -312162.6273910401) / Math.Sqrt((4499041934.01383 / (299)) + (298204.21681442106 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.20047395425911632 = (390434.5944124603 - 312162.6273910401) / 390434.5944124603 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.ObjFooIsObj() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0AAE5CF8 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0AAE6330] test eax,eax jle short M00_L01 mov ecx,ds:[7074264] M00_L00: mov edx,7074274 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.ObjFooIsObj() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0B1D61F8 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0B1D6830] test eax,eax jle short M00_L01 mov ecx,ds:[7674264] M00_L00: mov edx,7674274 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Memory.Span<Byte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[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(Byte).BinarySearch(Size%3a%20512).html>) 18.12 ns 15.79 ns 0.87 0.04 False

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Byte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Byte>.BinarySearch(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 15.79325807758166 < 17.179689060288887. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/31/2023 6:07:33 PM, 2/9/2023 4:27:10 AM, 2/13/2023 6:54:14 PM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 8.955484626423132 (T) = (0 -15.792125971076523) / Math.Sqrt((2.988054422450072 / (299)) + (0.0033285592703340998 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.05388300495340618 = (16.691514954024054 - 15.792125971076523) / 16.691514954024054 is greater than 0.05. 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in PerfLabTests.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[FooObjCastIfIsa - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.FooObjCastIfIsa.html>) 280.65 μs 218.28 μs 0.78 0.02 False Trace Trace
[ObjrefValueTypeObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ObjrefValueTypeObj.html>) 280.66 μs 229.30 μs 0.82 0.09 False Trace Trace
[ObjFooIsObj2 - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.ObjFooIsObj2.html>) 226.38 μs 155.92 μs 0.69 0.04 False Trace Trace
[IFooFooIsIFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.IFooFooIsIFoo.html>) 219.64 μs 155.96 μs 0.71 0.03 False Trace Trace
[FooObjIsFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf.FooObjIsFoo.html>) 280.65 μs 219.77 μs 0.78 0.08 False Trace Trace

graph graph graph graph graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf.FooObjCastIfIsa ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 218.2836681547619 < 266.62140178571434. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 10.977352764594658 (T) = (0 -218476.18089295604) / Math.Sqrt((801951627.2167065 / (299)) + (141409.87521890664 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.07608221247761644 = (236467.12277163845 - 218476.18089295604) / 236467.12277163845 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjCastIfIsa() push ebp mov ebp,esp push edi push esi push ebx sub esp,8 xor esi,esi mov edi,ds:[0AFB62C0] test edi,edi jle short M00_L03 mov ebx,ds:[7584150] mov [ebp-14],ebx mov edx,ebx mov ecx,offset MT_PerfLabTests.Foo[] call dword ptr ds:[53BB7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov [ebp-10],eax M00_L00: test eax,eax je short M00_L02 mov edx,ebx mov ecx,edx test ecx,ecx je short M00_L01 mov ebx,offset MT_PerfLabTests.Foo[] cmp [ecx],ebx je short M00_L01 mov ecx,ebx call dword ptr ds:[53BB858] mov ecx,eax M00_L01: mov edx,7584158 call CORINFO_HELP_ASSIGN_REF_ECX mov ebx,[ebp-14] M00_L02: inc esi cmp esi,edi mov eax,[ebp-10] jl short M00_L00 M00_L03: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 106 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov eax,ecx test edx,edx je near ptr M01_L05 mov esi,[edx] mov [ebp-10],esi cmp esi,eax je short M01_L05 mov ebx,ds:[75815C0] cmp [ebx],bl add ebx,8 mov [ebp-1C],ebx mov ecx,esi rol ecx,10 xor ecx,eax imul edi,ecx,9E3779B9 mov ecx,[ebx] shr edi,cl xor ecx,ecx M01_L00: mov [ebp-14],edi lea ebx,[edi+1] lea ebx,[ebx+ebx*2] mov edi,[ebp-1C] lea ebx,[edi+ebx*4] mov edi,[ebx] mov esi,[ebx+4] and edi,0FFFFFFFE mov [ebp-18],edi mov edi,[ebp-10] cmp esi,edi jne short M01_L01 mov esi,eax xor esi,[ebx+8] cmp esi,1 jbe short M01_L03 M01_L01: cmp dword ptr [ebp-18],0 je short M01_L07 inc ecx mov esi,ecx add esi,[ebp-14] mov ebx,[ebp-1C] and esi,[ebx+4] cmp ecx,8 jl short M01_L02 jmp short M01_L07 M01_L02: mov edi,esi jmp short M01_L00 M01_L03: mov edi,[ebp-18] cmp edi,[ebx] jne short M01_L07 M01_L04: cmp esi,1 je short M01_L05 test esi,esi jne short M01_L06 xor edx,edx M01_L05: mov eax,edx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L06: mov ecx,eax call System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny_NoCacheLookup(Void*, System.Object) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L07: mov esi,2 jmp short M01_L04 ; Total bytes of code 183 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjCastIfIsa() push ebp mov ebp,esp push edi push esi push ebx sub esp,8 xor esi,esi mov edi,ds:[0AB367C0] test edi,edi jle short M00_L03 mov ebx,ds:[70D4150] mov [ebp-14],ebx mov edx,ebx mov ecx,offset MT_PerfLabTests.Foo[] call dword ptr ds:[82BB7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov [ebp-10],eax M00_L00: test eax,eax je short M00_L02 mov edx,ebx mov ecx,edx test ecx,ecx je short M00_L01 mov ebx,offset MT_PerfLabTests.Foo[] cmp [ecx],ebx je short M00_L01 mov ecx,ebx call dword ptr ds:[82BB858] mov ecx,eax M00_L01: mov edx,70D4158 call CORINFO_HELP_ASSIGN_REF_ECX mov ebx,[ebp-14] M00_L02: inc esi cmp esi,edi mov eax,[ebp-10] jl short M00_L00 M00_L03: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 106 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov eax,ecx test edx,edx je near ptr M01_L05 mov esi,[edx] mov [ebp-10],esi cmp esi,eax je short M01_L05 mov ebx,ds:[70D15B8] cmp [ebx],bl add ebx,8 mov [ebp-1C],ebx mov ecx,esi rol ecx,10 xor ecx,eax imul edi,ecx,9E3779B9 mov ecx,[ebx] shr edi,cl xor ecx,ecx M01_L00: mov [ebp-14],edi lea ebx,[edi+1] lea ebx,[ebx+ebx*2] mov edi,[ebp-1C] lea ebx,[edi+ebx*4] mov edi,[ebx] mov esi,[ebx+4] and edi,0FFFFFFFE mov [ebp-18],edi mov edi,[ebp-10] cmp esi,edi jne short M01_L01 mov esi,eax xor esi,[ebx+8] cmp esi,1 jbe short M01_L03 M01_L01: cmp dword ptr [ebp-18],0 je short M01_L07 inc ecx mov esi,ecx add esi,[ebp-14] mov ebx,[ebp-1C] and esi,[ebx+4] cmp ecx,8 jl short M01_L02 jmp short M01_L07 M01_L02: mov edi,esi jmp short M01_L00 M01_L03: mov edi,[ebp-18] cmp edi,[ebx] jne short M01_L07 M01_L04: cmp esi,1 je short M01_L05 test esi,esi jne short M01_L06 xor edx,edx M01_L05: mov eax,edx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L06: mov ecx,eax call System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny_NoCacheLookup(Void*, System.Object) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L07: mov esi,2 jmp short M01_L04 ; Total bytes of code 183 ``` #### PerfLabTests.CastingPerf.ObjrefValueTypeObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 229.30399509803922 < 266.6181768043155. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 9.859908041548197 (T) = (0 -221914.81356454082) / Math.Sqrt((725087900.129275 / (299)) + (18026321.323087197 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.07063097090013432 = (238780.08263248773 - 221914.81356454082) / 238780.08263248773 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjrefValueTypeObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0AF662C0] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[75E4150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.FooORVT[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[3ABB858] M00_L01: mov edx,75E414C call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjrefValueTypeObj() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0A4D67C0] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[6964150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.FooORVT[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[7BEB858] M00_L01: mov edx,696414C call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` #### PerfLabTests.CastingPerf.ObjFooIsObj2 ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 155.92254855293223 < 208.78403443287038. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/15/2023 2:31:53 AM, 1/18/2023 8:37:25 PM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 12.394473630524107 (T) = (0 -156008.1724617379) / Math.Sqrt((1569088794.3245792 / (299)) + (50332.881699679165 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.15399291809459062 = (184405.27957563943 - 156008.1724617379) / 184405.27957563943 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjFooIsObj2() push ebp mov ebp,esp push edi push esi xor eax,eax mov ecx,ds:[0AE062C0] test ecx,ecx jle short M00_L01 mov esi,ds:[7404138] nop nop nop nop nop nop nop nop nop M00_L00: mov edi,esi mov edx,7404154 call CORINFO_HELP_ASSIGN_REF_EDI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 53 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjFooIsObj2() push ebp mov ebp,esp push edi push esi xor eax,eax mov ecx,ds:[0B0967C0] test ecx,ecx jle short M00_L01 mov esi,ds:[7524138] nop nop nop nop nop nop nop nop nop M00_L00: mov edi,esi mov edx,7524154 call CORINFO_HELP_ASSIGN_REF_EDI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 53 ``` #### PerfLabTests.CastingPerf.IFooFooIsIFoo ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 155.95565594059403 < 208.6339148526531. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/15/2023 2:31:53 AM, 1/18/2023 8:37:25 PM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 12.477261172402295 (T) = (0 -156093.89059205714) / Math.Sqrt((1511827171.3913531 / (299)) + (98968.78369038716 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.15239192566228466 = (184158.09773169307 - 156093.89059205714) / 184158.09773169307 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push edi push esi xor eax,eax mov ecx,ds:[0B0862C0] test ecx,ecx jle short M00_L01 mov esi,ds:[74C4138] nop nop nop nop nop nop nop nop nop M00_L00: mov edi,esi mov edx,74C415C call CORINFO_HELP_ASSIGN_REF_EDI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 53 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push edi push esi xor eax,eax mov ecx,ds:[0A5F67C0] test ecx,ecx jle short M00_L01 mov esi,ds:[6AA4138] nop nop nop nop nop nop nop nop nop M00_L00: mov edi,esi mov edx,6AA415C call CORINFO_HELP_ASSIGN_REF_EDI inc eax cmp eax,ecx jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 53 ``` #### PerfLabTests.CastingPerf.FooObjIsFoo ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 219.76880341880334 < 266.6177814758716. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 10.390861690021032 (T) = (0 -221854.24607604468) / Math.Sqrt((713329592.6103015 / (299)) + (15621668.73829181 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.07291255966171602 = (239302.3963253051 - 221854.24607604468) / 239302.3963253051 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjIsFoo() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0ACA62C0] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[7094150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.Foo[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[83BB858] M00_L01: mov edx,7094158 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjIsFoo() push ebp mov ebp,esp push edi push esi xor esi,esi mov edi,ds:[0B0467C0] test edi,edi jle short M00_L02 M00_L00: mov edx,ds:[74D4150] mov eax,edx test eax,eax je short M00_L01 mov ecx,offset MT_PerfLabTests.Foo[] cmp [eax],ecx je short M00_L01 call dword ptr ds:[87CB858] M00_L01: mov edx,74D4158 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 63 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Numerics.Tests.Perf_VectorOf<Int16>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[DivisionOperatorBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Numerics.Tests.Perf_VectorOf(Int16).DivisionOperatorBenchmark.html>) 45.73 ns 40.57 ns 0.89 0.04 False

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_VectorOf&lt;Int16&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_VectorOf<Int16>.DivisionOperatorBenchmark ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 40.573589978319816 < 43.467081695627336. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/22/2023 2:59:30 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 23.709221373836296 (T) = (0 -40.662666673962995) / Math.Sqrt((7.44590888482747 / (299)) + (0.021129622003671415 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.08516229122083736 = (44.44795648861777 - 40.662666673962995) / 44.44795648861777 is greater than 0.05. 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Text.Json.Tests.Perf_Reader

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ReadReturnBytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact%3a%20True%2c%20TestCase%3a%20BroadTree).html>) 10.90 μs 10.05 μs 0.92 0.07 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Reader*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: True, TestCase: BroadTree) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 10.052542250120714 < 10.36234438348052. IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/24/2023 12:59:32 PM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 19.939143898112224 (T) = (0 -10104.180294276146) / Math.Sqrt((367924.62565349165 / (299)) + (1677.284199671737 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.06587551906869832 = (10816.738561655615 - 10104.180294276146) / 10816.738561655615 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_Reader.ReadReturnBytes() push ebp mov ebp,esp push edi push esi push ebx sub esp,0C4 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-0C4],xmm4 vmovdqu xmmword ptr [ebp-0B4],xmm4 mov eax,0FFFFFF70 M00_L00: vmovdqu xmmword ptr [ebp+eax-14],xmm4 vmovdqu xmmword ptr [ebp+eax-4],xmm4 vmovdqu xmmword ptr [ebp+eax+0C],xmm4 add eax,30 jne short M00_L00 mov [ebp-14],eax mov [ebp-10],eax mov esi,ecx M00_L01: mov ecx,[esi+0C] test ecx,ecx je near ptr M00_L14 lea edi,[ecx+8] mov ebx,[ecx+4] M00_L02: mov ecx,[esi+8] test ecx,ecx je near ptr M00_L04 lea edx,[ecx+8] mov eax,[ecx+4] M00_L03: xor ecx,ecx mov [ebp-0AC],ecx mov [ebp-0A8],ecx vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-0A4],xmm0 push eax push edx push dword ptr [ebp-98] push dword ptr [ebp-9C] push dword ptr [ebp-0A0] push dword ptr [ebp-0A4] push dword ptr [ebp-0A8] push dword ptr [ebp-0AC] push dword ptr [ebp-0B0] push dword ptr [ebp-0B4] push dword ptr [ebp-0B8] push dword ptr [ebp-0BC] push dword ptr [ebp-0C0] push dword ptr [ebp-0C4] lea ecx,[ebp-94] mov edx,1 call dword ptr ds:[0B0411F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) jmp near ptr M00_L06 M00_L04: xor edx,edx xor eax,eax jmp short M00_L03 M00_L05: movzx ecx,byte ptr [ebp-6C] mov edx,[ebp-24] mov eax,[ebp-20] add ecx,0FFFFFFFB cmp ecx,6 mov [ebp-0D0],edx ja near ptr M00_L06 mov [ebp-0CC],esi lea esi,ds:[0AF0E7A8] mov esi,[esi+ecx*4] lea edx,[M00_L01] add esi,edx jmp esi mov esi,[ebp-0CC] jmp near ptr M00_L06 mov ecx,edi cmp eax,ebx ja near ptr M00_L11 mov [ebp-0C8],eax push eax mov edx,[ebp-0D0] call dword ptr ds:[8141E10]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov esi,[ebp-0C8] cmp esi,ebx jae near ptr M00_L15 mov byte ptr [edi+esi],2C lea ecx,[esi+1] cmp ecx,ebx jae near ptr M00_L15 mov byte ptr [edi+ecx],20 add esi,2 cmp esi,ebx ja near ptr M00_L12 add edi,esi sub ebx,esi mov esi,[ebp-0CC] jmp near ptr M00_L06 mov ecx,edi cmp eax,ebx ja near ptr M00_L11 mov [ebp-0C8],eax push eax mov edx,[ebp-0D0] call dword ptr ds:[8141E10]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov esi,[ebp-0C8] cmp esi,ebx jae near ptr M00_L15 mov byte ptr [edi+esi],2C lea eax,[esi+1] cmp eax,ebx jae near ptr M00_L15 mov byte ptr [edi+eax],20 lea eax,[esi+2] cmp eax,ebx ja near ptr M00_L12 add edi,eax sub ebx,eax mov esi,[ebp-0CC] jmp near ptr M00_L06 test ebx,ebx je near ptr M00_L15 mov byte ptr [edi],54 cmp ebx,1 jbe near ptr M00_L15 mov byte ptr [edi+1],72 cmp ebx,2 jbe near ptr M00_L15 mov byte ptr [edi+2],75 cmp ebx,3 jbe near ptr M00_L15 mov byte ptr [edi+3],65 cmp eax,ebx jae near ptr M00_L15 mov byte ptr [edi+eax],2C lea edx,[eax+1] cmp edx,ebx jae near ptr M00_L15 mov byte ptr [edi+edx],20 add eax,2 cmp eax,ebx ja near ptr M00_L12 add edi,eax sub ebx,eax mov esi,[ebp-0CC] jmp short M00_L06 test ebx,ebx je near ptr M00_L15 mov byte ptr [edi],46 cmp ebx,1 jbe near ptr M00_L15 mov byte ptr [edi+1],61 cmp ebx,2 jbe near ptr M00_L15 mov byte ptr [edi+2],6C cmp ebx,3 jbe near ptr M00_L15 mov byte ptr [edi+3],73 cmp ebx,4 jbe near ptr M00_L15 mov byte ptr [edi+4],65 cmp eax,ebx jae near ptr M00_L15 mov byte ptr [edi+eax],2C lea edx,[eax+1] cmp edx,ebx jae near ptr M00_L15 mov byte ptr [edi+edx],20 add eax,2 cmp eax,ebx ja short M00_L12 add edi,eax sub ebx,eax mov esi,[ebp-0CC] M00_L06: cmp byte ptr [ebp-69],0 jne short M00_L07 lea ecx,[ebp-94] call dword ptr ds:[0B041408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment() jmp short M00_L08 M00_L07: lea ecx,[ebp-94] call dword ptr ds:[0B0417B0] M00_L08: movzx eax,al test eax,eax jne short M00_L09 cmp byte ptr [ebp-70],0 je short M00_L10 cmp byte ptr [ebp-6C],0 je short M00_L13 M00_L09: test eax,eax jne near ptr M00_L05 M00_L10: mov eax,[esi+0C] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L11: call dword ptr ds:[8217288] int 3 M00_L12: call dword ptr ds:[8217270] int 3 M00_L13: xor ecx,ecx push 0 push 0 push ecx lea ecx,[ebp-94] mov edx,20 call dword ptr ds:[0B043C00] int 3 M00_L14: xor edi,edi xor ebx,ebx jmp near ptr M00_L02 M00_L15: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 804 ``` ```assembly ; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) push ebp mov ebp,esp push edi push esi sub esp,10 vzeroupper xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov eax,ecx lea edi,[eax+30] lea esi,[ebp+38] call CORINFO_HELP_ASSIGN_BYREF movsd mov [eax+24],dl mov byte ptr [eax+25],0 mov ecx,eax mov edx,[ebp+8] mov [ecx],edx mov edx,[ebp+0C] mov [ecx+4],edx lea ecx,[eax+8] mov edx,[ebp+10] mov [ecx],edx mov edx,[ebp+14] mov [ecx+4],edx movzx ecx,byte ptr [ebp+18] mov [eax+26],cl movzx ecx,byte ptr [ebp+19] mov [eax+27],cl movzx ecx,byte ptr [ebp+1A] mov [eax+2E],cl movzx ecx,byte ptr [ebp+1B] mov [eax+2C],cl movzx ecx,byte ptr [ebp+1C] mov [eax+28],cl movzx ecx,byte ptr [ebp+1D] mov [eax+29],cl mov ecx,[ebp+20] mov [eax+38],ecx mov ecx,[ebp+24] mov [eax+3C],ecx cmp dword ptr [eax+38],0 jne short M01_L00 mov dword ptr [eax+38],40 M01_L00: lea edi,[eax+40] lea esi,[ebp+28] movsd movsd call CORINFO_HELP_ASSIGN_BYREF movsd xor ecx,ecx mov [eax+20],ecx lea ecx,[eax+18] xor edx,edx mov [ecx],edx mov [ecx+4],edx lea ecx,[eax+10] mov [ecx],edx mov [ecx+4],edx movzx ecx,byte ptr [eax+24] mov [eax+2A],cl mov byte ptr [eax+2B],0 mov [eax+70],edx mov [eax+74],edx mov [eax+58],edx mov [eax+5C],edx mov [eax+50],edx mov [eax+54],edx vxorps xmm0,xmm0,xmm0 vmovq qword ptr [eax+60],xmm0 vmovq qword ptr [eax+68],xmm0 mov byte ptr [eax+2D],0 mov esi,ds:[6894E98] add esi,4 lea edi,[ebp-18] mov ecx,4 rep movsd lea edi,[eax+78] lea esi,[ebp-18] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea esp,[ebp-8] pop esi pop edi pop ebp ret 38 ; Total bytes of code 264 ``` ```assembly ; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx vzeroupper mov eax,[ebp+8] mov esi,ecx sub esi,edx cmp esi,eax jb near ptr M02_L10 mov esi,edx sub esi,ecx cmp esi,eax jb near ptr M02_L10 lea esi,[edx+eax] lea edi,[ecx+eax] cmp eax,10 jbe short M02_L05 cmp eax,40 ja short M02_L03 M02_L00: vmovups xmm0,[edx] vmovups [ecx],xmm0 cmp eax,20 jbe short M02_L01 vmovups xmm0,[edx+10] vmovups [ecx+10],xmm0 cmp eax,30 ja near ptr M02_L09 M02_L01: vmovups xmm0,[esi-10] vmovups [edi-10],xmm0 M02_L02: pop ebx pop esi pop edi pop ebp ret 4 M02_L03: cmp eax,800 ja near ptr M02_L11 mov ebx,eax shr ebx,6 M02_L04: vmovdqu ymm0,ymmword ptr [edx] vmovdqu ymmword ptr [ecx],ymm0 vmovdqu ymm0,ymmword ptr [edx+20] vmovdqu ymmword ptr [ecx+20],ymm0 add ecx,40 add edx,40 dec ebx jne short M02_L04 and eax,3F cmp eax,10 ja short M02_L00 jmp short M02_L01 M02_L05: test al,18 jne short M02_L06 test al,4 jne short M02_L08 test eax,eax je short M02_L02 movzx edx,byte ptr [edx] mov [ecx],dl test al,2 je short M02_L02 movsx eax,word ptr [esi-2] mov [edi-2],ax jmp short M02_L02 M02_L06: mov eax,[edx] mov [ecx],eax mov edx,[edx+4] mov [ecx+4],edx mov ecx,[esi-8] mov [edi-8],ecx M02_L07: mov eax,[esi-4] mov [edi-4],eax jmp short M02_L02 M02_L08: mov eax,[edx] mov [ecx],eax jmp short M02_L07 M02_L09: vmovups xmm0,[edx+20] vmovups [ecx+20],xmm0 jmp near ptr M02_L01 M02_L10: cmp ecx,edx je near ptr M02_L02 M02_L11: push eax call dword ptr ds:[8141E28] jmp near ptr M02_L02 ; Total bytes of code 250 ``` ```assembly ; System.Text.Json.Utf8JsonReader.ReadSingleSegment() push ebp mov ebp,esp push edi push esi push ebx sub esp,0C mov esi,ecx xor ebx,ebx xor ecx,ecx mov [esi+70],ecx mov [esi+74],ecx mov byte ptr [esi+2E],0 mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M03_L02 cmp byte ptr [esi+27],0 je near ptr M03_L15 cmp byte ptr [esi+24],0 je near ptr M03_L15 cmp byte ptr [esi+2B],0 je short M03_L00 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M03_L15 M03_L00: cmp dword ptr [esi+4C],0 jne near ptr M03_L17 cmp byte ptr [esi+3C],2 jne short M03_L01 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M03_L15 M03_L01: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M03_L15 cmp ecx,2 jne near ptr M03_L18 jmp near ptr M03_L15 M03_L02: mov ecx,[esi+20] lea eax,[esi+30] cmp ecx,[eax+4] jae near ptr M03_L22 mov eax,[eax] movzx edx,byte ptr [eax+ecx] cmp edx,20 jg near ptr M03_L06 mov ecx,esi call dword ptr ds:[0B041468] mov ecx,[esi+20] mov edx,ecx mov eax,edx sar eax,1F cmp edx,[esi+34] sbb eax,0 jl short M03_L05 cmp byte ptr [esi+27],0 je near ptr M03_L15 cmp byte ptr [esi+24],0 je near ptr M03_L15 cmp byte ptr [esi+2B],0 je short M03_L03 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M03_L15 M03_L03: cmp dword ptr [esi+4C],0 jne near ptr M03_L19 cmp byte ptr [esi+3C],2 jne short M03_L04 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M03_L15 M03_L04: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M03_L15 cmp ecx,2 jne near ptr M03_L20 jmp near ptr M03_L15 M03_L05: lea edx,[esi+30] cmp ecx,[edx+4] jae near ptr M03_L22 mov edx,[edx] movzx edx,byte ptr [edx+ecx] M03_L06: mov ecx,[esi+20] mov eax,ecx sar eax,1F lea ebx,[esi+18] mov [ebx],ecx mov [ebx+4],eax movzx ebx,byte ptr [esi+28] test ebx,ebx je near ptr M03_L16 cmp edx,2F jne short M03_L08 M03_L07: mov ecx,esi call dword ptr ds:[0B0415E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte) mov ebx,eax jmp near ptr M03_L15 M03_L08: cmp ebx,1 jne short M03_L11 cmp edx,7D jne short M03_L09 mov ecx,esi call dword ptr ds:[0B0413A8]; System.Text.Json.Utf8JsonReader.EndObject() jmp near ptr M03_L14 M03_L09: cmp edx,22 jne near ptr M03_L21 mov ebx,[esi+20] lea ecx,[esi+8] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-10],eax mov ecx,esi mov edx,[ecx] mov ecx,[ecx+4] mov [ebp-14],edx mov [ebp-18],ecx mov ecx,esi call dword ptr ds:[0B0414F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName() test eax,eax jne short M03_L10 mov [esi+20],ebx mov byte ptr [esi+28],1 lea ecx,[esi+8] mov [ecx],edi mov edi,[ebp-10] mov [ecx+4],edi mov edi,[ebp-14] mov [esi],edi mov edi,[ebp-18] mov [esi+4],edi mov ebx,eax jmp short M03_L15 M03_L10: mov ebx,eax jmp short M03_L15 M03_L11: cmp ebx,3 jne short M03_L13 cmp edx,5D jne short M03_L12 mov ecx,esi call dword ptr ds:[0B0413D8]; System.Text.Json.Utf8JsonReader.EndArray() jmp short M03_L14 M03_L12: mov ecx,esi call dword ptr ds:[0B041480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte) mov ebx,eax jmp short M03_L15 M03_L13: cmp ebx,5 jne near ptr M03_L07 jmp short M03_L12 M03_L14: mov ebx,1 M03_L15: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M03_L16: mov ecx,esi call dword ptr ds:[0B041450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte) mov ebx,eax jmp short M03_L15 M03_L17: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0B043C00] int 3 M03_L18: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0B043C00] int 3 M03_L19: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0B043C00] int 3 M03_L20: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0B043C00] int 3 M03_L21: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0B043C00] int 3 M03_L22: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 639 ``` ### Compare Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_Reader.ReadReturnBytes() push ebp mov ebp,esp push edi push esi push ebx sub esp,0C4 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-0C4],xmm4 vmovdqu xmmword ptr [ebp-0B4],xmm4 mov eax,0FFFFFF70 M00_L00: vmovdqu xmmword ptr [ebp+eax-14],xmm4 vmovdqu xmmword ptr [ebp+eax-4],xmm4 vmovdqu xmmword ptr [ebp+eax+0C],xmm4 add eax,30 jne short M00_L00 mov [ebp-14],eax mov [ebp-10],eax mov esi,ecx M00_L01: mov ecx,[esi+0C] test ecx,ecx je near ptr M00_L14 lea edi,[ecx+8] mov ebx,[ecx+4] M00_L02: mov ecx,[esi+8] test ecx,ecx je near ptr M00_L04 lea edx,[ecx+8] mov eax,[ecx+4] M00_L03: xor ecx,ecx mov [ebp-0AC],ecx mov [ebp-0A8],ecx vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-0A4],xmm0 push eax push edx push dword ptr [ebp-98] push dword ptr [ebp-9C] push dword ptr [ebp-0A0] push dword ptr [ebp-0A4] push dword ptr [ebp-0A8] push dword ptr [ebp-0AC] push dword ptr [ebp-0B0] push dword ptr [ebp-0B4] push dword ptr [ebp-0B8] push dword ptr [ebp-0BC] push dword ptr [ebp-0C0] push dword ptr [ebp-0C4] lea ecx,[ebp-94] mov edx,1 call dword ptr ds:[0BCB11F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) jmp near ptr M00_L06 M00_L04: xor edx,edx xor eax,eax jmp short M00_L03 M00_L05: movzx ecx,byte ptr [ebp-6C] mov edx,[ebp-24] mov eax,[ebp-20] add ecx,0FFFFFFFB cmp ecx,6 mov [ebp-0D0],edx ja near ptr M00_L06 mov [ebp-0CC],esi lea esi,ds:[0BB7E528] mov esi,[esi+ecx*4] lea edx,[M00_L01] add esi,edx jmp esi mov esi,[ebp-0CC] jmp near ptr M00_L06 mov ecx,edi cmp eax,ebx ja near ptr M00_L11 mov [ebp-0C8],eax push eax mov edx,[ebp-0D0] call dword ptr ds:[8D41D68]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov esi,[ebp-0C8] cmp esi,ebx jae near ptr M00_L15 mov byte ptr [edi+esi],2C lea ecx,[esi+1] cmp ecx,ebx jae near ptr M00_L15 mov byte ptr [edi+ecx],20 add esi,2 cmp esi,ebx ja near ptr M00_L12 add edi,esi sub ebx,esi mov esi,[ebp-0CC] jmp near ptr M00_L06 mov ecx,edi cmp eax,ebx ja near ptr M00_L11 mov [ebp-0C8],eax push eax mov edx,[ebp-0D0] call dword ptr ds:[8D41D68]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov esi,[ebp-0C8] cmp esi,ebx jae near ptr M00_L15 mov byte ptr [edi+esi],2C lea eax,[esi+1] cmp eax,ebx jae near ptr M00_L15 mov byte ptr [edi+eax],20 lea eax,[esi+2] cmp eax,ebx ja near ptr M00_L12 add edi,eax sub ebx,eax mov esi,[ebp-0CC] jmp near ptr M00_L06 test ebx,ebx je near ptr M00_L15 mov byte ptr [edi],54 cmp ebx,1 jbe near ptr M00_L15 mov byte ptr [edi+1],72 cmp ebx,2 jbe near ptr M00_L15 mov byte ptr [edi+2],75 cmp ebx,3 jbe near ptr M00_L15 mov byte ptr [edi+3],65 cmp eax,ebx jae near ptr M00_L15 mov byte ptr [edi+eax],2C lea edx,[eax+1] cmp edx,ebx jae near ptr M00_L15 mov byte ptr [edi+edx],20 add eax,2 cmp eax,ebx ja near ptr M00_L12 add edi,eax sub ebx,eax mov esi,[ebp-0CC] jmp short M00_L06 test ebx,ebx je near ptr M00_L15 mov byte ptr [edi],46 cmp ebx,1 jbe near ptr M00_L15 mov byte ptr [edi+1],61 cmp ebx,2 jbe near ptr M00_L15 mov byte ptr [edi+2],6C cmp ebx,3 jbe near ptr M00_L15 mov byte ptr [edi+3],73 cmp ebx,4 jbe near ptr M00_L15 mov byte ptr [edi+4],65 cmp eax,ebx jae near ptr M00_L15 mov byte ptr [edi+eax],2C lea edx,[eax+1] cmp edx,ebx jae near ptr M00_L15 mov byte ptr [edi+edx],20 add eax,2 cmp eax,ebx ja short M00_L12 add edi,eax sub ebx,eax mov esi,[ebp-0CC] M00_L06: cmp byte ptr [ebp-69],0 jne short M00_L07 lea ecx,[ebp-94] call dword ptr ds:[0BCB1408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment() jmp short M00_L08 M00_L07: lea ecx,[ebp-94] call dword ptr ds:[0BCB17B0] M00_L08: movzx eax,al test eax,eax jne short M00_L09 cmp byte ptr [ebp-70],0 je short M00_L10 cmp byte ptr [ebp-6C],0 je short M00_L13 M00_L09: test eax,eax jne near ptr M00_L05 M00_L10: mov eax,[esi+0C] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L11: call dword ptr ds:[8E17288] int 3 M00_L12: call dword ptr ds:[8E17270] int 3 M00_L13: xor ecx,ecx push 0 push 0 push ecx lea ecx,[ebp-94] mov edx,20 call dword ptr ds:[0BCB3C00] int 3 M00_L14: xor edi,edi xor ebx,ebx jmp near ptr M00_L02 M00_L15: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 804 ``` ```assembly ; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) push ebp mov ebp,esp push edi push esi sub esp,10 vzeroupper xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov eax,ecx lea edi,[eax+30] lea esi,[ebp+38] call CORINFO_HELP_ASSIGN_BYREF movsd mov [eax+24],dl mov byte ptr [eax+25],0 mov ecx,eax mov edx,[ebp+8] mov [ecx],edx mov edx,[ebp+0C] mov [ecx+4],edx lea ecx,[eax+8] mov edx,[ebp+10] mov [ecx],edx mov edx,[ebp+14] mov [ecx+4],edx movzx ecx,byte ptr [ebp+18] mov [eax+26],cl movzx ecx,byte ptr [ebp+19] mov [eax+27],cl movzx ecx,byte ptr [ebp+1A] mov [eax+2E],cl movzx ecx,byte ptr [ebp+1B] mov [eax+2C],cl movzx ecx,byte ptr [ebp+1C] mov [eax+28],cl movzx ecx,byte ptr [ebp+1D] mov [eax+29],cl mov ecx,[ebp+20] mov [eax+38],ecx mov ecx,[ebp+24] mov [eax+3C],ecx cmp dword ptr [eax+38],0 jne short M01_L00 mov dword ptr [eax+38],40 M01_L00: lea edi,[eax+40] lea esi,[ebp+28] movsd movsd call CORINFO_HELP_ASSIGN_BYREF movsd xor ecx,ecx mov [eax+20],ecx lea ecx,[eax+18] xor edx,edx mov [ecx],edx mov [ecx+4],edx lea ecx,[eax+10] mov [ecx],edx mov [ecx+4],edx movzx ecx,byte ptr [eax+24] mov [eax+2A],cl mov byte ptr [eax+2B],0 mov [eax+70],edx mov [eax+74],edx mov [eax+58],edx mov [eax+5C],edx mov [eax+50],edx mov [eax+54],edx vxorps xmm0,xmm0,xmm0 vmovq qword ptr [eax+60],xmm0 vmovq qword ptr [eax+68],xmm0 mov byte ptr [eax+2D],0 mov esi,ds:[7464E90] add esi,4 lea edi,[ebp-18] mov ecx,4 rep movsd lea edi,[eax+78] lea esi,[ebp-18] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea esp,[ebp-8] pop esi pop edi pop ebp ret 38 ; Total bytes of code 264 ``` ```assembly ; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx vzeroupper mov eax,[ebp+8] mov esi,ecx sub esi,edx cmp esi,eax jb near ptr M02_L10 mov esi,edx sub esi,ecx cmp esi,eax jb near ptr M02_L10 lea esi,[edx+eax] lea edi,[ecx+eax] cmp eax,10 jbe short M02_L05 cmp eax,40 ja short M02_L03 M02_L00: vmovups xmm0,[edx] vmovups [ecx],xmm0 cmp eax,20 jbe short M02_L01 vmovups xmm0,[edx+10] vmovups [ecx+10],xmm0 cmp eax,30 ja near ptr M02_L09 M02_L01: vmovups xmm0,[esi-10] vmovups [edi-10],xmm0 M02_L02: pop ebx pop esi pop edi pop ebp ret 4 M02_L03: cmp eax,800 ja near ptr M02_L11 mov ebx,eax shr ebx,6 M02_L04: vmovdqu ymm0,ymmword ptr [edx] vmovdqu ymmword ptr [ecx],ymm0 vmovdqu ymm0,ymmword ptr [edx+20] vmovdqu ymmword ptr [ecx+20],ymm0 add ecx,40 add edx,40 dec ebx jne short M02_L04 and eax,3F cmp eax,10 ja short M02_L00 jmp short M02_L01 M02_L05: test al,18 jne short M02_L06 test al,4 jne short M02_L08 test eax,eax je short M02_L02 movzx edx,byte ptr [edx] mov [ecx],dl test al,2 je short M02_L02 movsx eax,word ptr [esi-2] mov [edi-2],ax jmp short M02_L02 M02_L06: mov eax,[edx] mov [ecx],eax mov edx,[edx+4] mov [ecx+4],edx mov ecx,[esi-8] mov [edi-8],ecx M02_L07: mov eax,[esi-4] mov [edi-4],eax jmp short M02_L02 M02_L08: mov eax,[edx] mov [ecx],eax jmp short M02_L07 M02_L09: vmovups xmm0,[edx+20] vmovups [ecx+20],xmm0 jmp near ptr M02_L01 M02_L10: cmp ecx,edx je near ptr M02_L02 M02_L11: push eax call dword ptr ds:[8D41D80] jmp near ptr M02_L02 ; Total bytes of code 250 ``` ```assembly ; System.Text.Json.Utf8JsonReader.ReadSingleSegment() push ebp mov ebp,esp push edi push esi push ebx sub esp,0C mov esi,ecx xor ebx,ebx xor ecx,ecx mov [esi+70],ecx mov [esi+74],ecx mov byte ptr [esi+2E],0 mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M03_L02 cmp byte ptr [esi+27],0 je near ptr M03_L15 cmp byte ptr [esi+24],0 je near ptr M03_L15 cmp byte ptr [esi+2B],0 je short M03_L00 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M03_L15 M03_L00: cmp dword ptr [esi+4C],0 jne near ptr M03_L17 cmp byte ptr [esi+3C],2 jne short M03_L01 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M03_L15 M03_L01: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M03_L15 cmp ecx,2 jne near ptr M03_L18 jmp near ptr M03_L15 M03_L02: mov ecx,[esi+20] lea eax,[esi+30] cmp ecx,[eax+4] jae near ptr M03_L22 mov eax,[eax] movzx edx,byte ptr [eax+ecx] cmp edx,20 jg near ptr M03_L06 mov ecx,esi call dword ptr ds:[0BCB1468] mov ecx,[esi+20] mov edx,ecx mov eax,edx sar eax,1F cmp edx,[esi+34] sbb eax,0 jl short M03_L05 cmp byte ptr [esi+27],0 je near ptr M03_L15 cmp byte ptr [esi+24],0 je near ptr M03_L15 cmp byte ptr [esi+2B],0 je short M03_L03 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M03_L15 M03_L03: cmp dword ptr [esi+4C],0 jne near ptr M03_L19 cmp byte ptr [esi+3C],2 jne short M03_L04 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M03_L15 M03_L04: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M03_L15 cmp ecx,2 jne near ptr M03_L20 jmp near ptr M03_L15 M03_L05: lea edx,[esi+30] cmp ecx,[edx+4] jae near ptr M03_L22 mov edx,[edx] movzx edx,byte ptr [edx+ecx] M03_L06: mov ecx,[esi+20] mov eax,ecx sar eax,1F lea ebx,[esi+18] mov [ebx],ecx mov [ebx+4],eax movzx ebx,byte ptr [esi+28] test ebx,ebx je near ptr M03_L16 cmp edx,2F jne short M03_L08 M03_L07: mov ecx,esi call dword ptr ds:[0BCB15E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte) mov ebx,eax jmp near ptr M03_L15 M03_L08: cmp ebx,1 jne short M03_L11 cmp edx,7D jne short M03_L09 mov ecx,esi call dword ptr ds:[0BCB13A8]; System.Text.Json.Utf8JsonReader.EndObject() jmp near ptr M03_L14 M03_L09: cmp edx,22 jne near ptr M03_L21 mov ebx,[esi+20] lea ecx,[esi+8] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-10],eax mov ecx,esi mov edx,[ecx] mov ecx,[ecx+4] mov [ebp-14],edx mov [ebp-18],ecx mov ecx,esi call dword ptr ds:[0BCB14F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName() test eax,eax jne short M03_L10 mov [esi+20],ebx mov byte ptr [esi+28],1 lea ecx,[esi+8] mov [ecx],edi mov edi,[ebp-10] mov [ecx+4],edi mov edi,[ebp-14] mov [esi],edi mov edi,[ebp-18] mov [esi+4],edi mov ebx,eax jmp short M03_L15 M03_L10: mov ebx,eax jmp short M03_L15 M03_L11: cmp ebx,3 jne short M03_L13 cmp edx,5D jne short M03_L12 mov ecx,esi call dword ptr ds:[0BCB13D8]; System.Text.Json.Utf8JsonReader.EndArray() jmp short M03_L14 M03_L12: mov ecx,esi call dword ptr ds:[0BCB1480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte) mov ebx,eax jmp short M03_L15 M03_L13: cmp ebx,5 jne near ptr M03_L07 jmp short M03_L12 M03_L14: mov ebx,1 M03_L15: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M03_L16: mov ecx,esi call dword ptr ds:[0BCB1450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte) mov ebx,eax jmp short M03_L15 M03_L17: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0BCB3C00] int 3 M03_L18: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0BCB3C00] int 3 M03_L19: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0BCB3C00] int 3 M03_L20: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0BCB3C00] int 3 M03_L21: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0BCB3C00] int 3 M03_L22: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 639 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Tests.Perf_Char

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Char_ToLowerInvariant - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Char.Char_ToLowerInvariant(input%3a%20%22Hello%20World!%22).html>) 15.42 ns 13.45 ns 0.87 0.03 False 176.53220895502412 181.5922145090201 1.02866335601842) Trace Trace
[Char_ToUpperInvariant - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Char.Char_ToUpperInvariant(input%3a%20%22Hello%20World!%22).html>) 20.07 ns 14.77 ns 0.74 0.03 False 177.15208878435 184.4818076073381 1.0413752887323315) Trace Trace

graph graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Char*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Char.Char_ToLowerInvariant(input: "Hello World!") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 13.447682824647696 < 14.662409771856094. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/15/2023 2:31:53 AM, 1/18/2023 8:37:25 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 22.70344721650576 (T) = (0 -13.13658115299593) / Math.Sqrt((0.973386160341024 / (299)) + (0.019069224907799505 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.09610986212101447 = (14.53338254560609 - 13.13658115299593) / 14.53338254560609 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Char.Char_ToLowerInvariant(System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov esi,edx xor edi,edi xor ebx,ebx mov eax,[esi+4] mov [ebp-18],eax test eax,eax jle short M00_L05 M00_L00: movzx edx,word ptr [esi+ebx*2+8] cmp edx,7F ja short M00_L03 lea ecx,[edx-41] cmp ecx,19 jbe short M00_L02 M00_L01: mov ecx,edx jmp short M00_L04 M00_L02: or edx,20 movzx edx,dl jmp short M00_L01 M00_L03: mov ecx,ds:[6B912F0] mov [ebp-14],dx cmp [ecx],cl xor edx,edx mov [ebp-10],edx push 1 lea edx,[ebp-10] push edx push 1 push 0 lea edx,[ebp-14] call dword ptr ds:[866B420] movzx ecx,word ptr [ebp-10] M00_L04: add edi,ecx inc ebx mov eax,[ebp-18] cmp eax,ebx jg short M00_L00 M00_L05: mov eax,edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 120 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Char.Char_ToLowerInvariant(System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov esi,edx xor edi,edi xor ebx,ebx mov eax,[esi+4] mov [ebp-18],eax test eax,eax jle short M00_L05 M00_L00: movzx edx,word ptr [esi+ebx*2+8] cmp edx,7F ja short M00_L03 lea ecx,[edx-41] cmp ecx,19 jbe short M00_L02 M00_L01: mov ecx,edx jmp short M00_L04 M00_L02: or edx,20 movzx edx,dl jmp short M00_L01 M00_L03: mov ecx,ds:[71012E8] mov [ebp-14],dx cmp [ecx],cl xor edx,edx mov [ebp-10],edx push 1 lea edx,[ebp-10] push edx push 1 push 0 lea edx,[ebp-14] call dword ptr ds:[8ABB420] movzx ecx,word ptr [ebp-10] M00_L04: add edi,ecx inc ebx mov eax,[ebp-18] cmp eax,ebx jg short M00_L00 M00_L05: mov eax,edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 120 ``` #### System.Tests.Perf_Char.Char_ToUpperInvariant(input: "Hello World!") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 14.766993240667302 < 19.073223165274964. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/15/2023 2:31:53 AM, 1/18/2023 8:37:25 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 23.277740808846954 (T) = (0 -15.016095456340771) / Math.Sqrt((6.561904886229808 / (299)) + (0.01816447348796333 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.18849165139198448 = (18.503932192562107 - 15.016095456340771) / 18.503932192562107 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Char.Char_ToUpperInvariant(System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov esi,edx xor edi,edi xor ebx,ebx mov eax,[esi+4] mov [ebp-18],eax test eax,eax jle short M00_L04 M00_L00: movzx edx,word ptr [esi+ebx*2+8] cmp edx,7F ja short M00_L02 lea ecx,[edx-61] cmp ecx,19 ja short M00_L01 and edx,5F M00_L01: mov ecx,edx jmp short M00_L03 M00_L02: mov ecx,ds:[77912F0] mov [ebp-14],dx cmp [ecx],cl xor edx,edx mov [ebp-10],edx push 1 lea edx,[ebp-10] push edx push 1 push 1 lea edx,[ebp-14] call dword ptr ds:[91BB420] movzx ecx,word ptr [ebp-10] M00_L03: add edi,ecx inc ebx mov eax,[ebp-18] cmp eax,ebx jg short M00_L00 M00_L04: mov eax,edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 115 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Char.Char_ToUpperInvariant(System.String) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov esi,edx xor edi,edi xor ebx,ebx mov eax,[esi+4] mov [ebp-18],eax test eax,eax jle short M00_L04 M00_L00: movzx edx,word ptr [esi+ebx*2+8] cmp edx,7F ja short M00_L02 lea ecx,[edx-61] cmp ecx,19 ja short M00_L01 and edx,5F M00_L01: mov ecx,edx jmp short M00_L03 M00_L02: mov ecx,ds:[6B812E8] mov [ebp-14],dx cmp [ecx],cl xor edx,edx mov [ebp-10],edx push 1 lea edx,[ebp-10] push edx push 1 push 1 lea edx,[ebp-14] call dword ptr ds:[86DB420] movzx ecx,word ptr [ebp-10] M00_L03: add edi,ecx inc ebx mov eax,[ebp-18] cmp eax,ebx jg short M00_L00 M00_L04: mov eax,edi lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 115 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Collections.IndexerSet<Int32>

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

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IndexerSet&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSet<Int32>.IList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 1.7811928919623627 < 1.83086286208675. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/16/2023 6:27:39 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 16.81106794056998 (T) = (0 -1798.9623233250154) / Math.Sqrt((8938.718318035071 / (299)) + (5591.562368472954 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.11282893908857532 = (2027.7513577560485 - 1798.9623233250154) / 2027.7513577560485 is greater than 0.05. 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements 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
[Reverse - 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.Reverse(input%3a%20IEnumerable).html>) 1.34 μs 1.21 μs 0.91 0.01 False Trace Trace
[Where - 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.Where(input%3a%20List).html>) 890.97 ns 736.53 ns 0.83 0.03 False Trace Trace
[AnyWithPredicate_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.AnyWithPredicate_LastElementMatches(input%3a%20Array).html>) 764.79 ns 697.54 ns 0.91 0.02 False Trace Trace

graph graph graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.Reverse(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 1.2121406270242263 < 1.2715352736179286. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/9/2023 4:27:10 AM, 2/13/2023 6:54:14 PM, 2/16/2023 6:27:39 AM, 2/23/2023 8:54:44 PM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 41.392994866526756 (T) = (0 -1209.7210593001823) / Math.Sqrt((1010.6451238554464 / (299)) + (18.08648312728538 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.06316270869630607 = (1291.2819232641198 - 1209.7210593001823) / 1291.2819232641198 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Reverse(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,ecx mov ecx,[edx+4] call dword ptr ds:[0AD4DA08]; System.Linq.Enumerable.Reverse[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0AD4DA80]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop ebp ret ; Total bytes of code 29 ``` ```assembly ; System.Linq.Enumerable.Reverse[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi mov esi,ecx test esi,esi je short M01_L00 mov ecx,offset MT_System.Linq.Enumerable+ReverseIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov edi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [edi+4],eax lea edx,[edi+10] call CORINFO_HELP_ASSIGN_REF_ESI mov eax,edi pop esi pop edi pop ebp ret M01_L00: mov ecx,10 call dword ptr ds:[0A307E10] int 3 ; Total bytes of code 57 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[27402AC] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[27402B0] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[27402B4] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[27402B0] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[27402B8] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[27402B8] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Reverse(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,ecx mov ecx,[edx+4] call dword ptr ds:[0B92DA08]; System.Linq.Enumerable.Reverse[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0B92DA80]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop ebp ret ; Total bytes of code 29 ``` ```assembly ; System.Linq.Enumerable.Reverse[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi mov esi,ecx test esi,esi je short M01_L00 mov ecx,offset MT_System.Linq.Enumerable+ReverseIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov edi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [edi+4],eax lea edx,[edi+10] call CORINFO_HELP_ASSIGN_REF_ESI mov eax,edi pop esi pop edi pop ebp ret M01_L00: mov ecx,10 call dword ptr ds:[0AF15E10] int 3 ; Total bytes of code 57 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[33802A8] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[33802AC] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[33802B0] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[33802AC] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[33802B4] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[33802B4] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` #### System.Linq.Tests.Perf_Enumerable.Where(input: List) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 736.5330948967785 < 840.5211637260686. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/20/2023 8:02:54 AM, 1/27/2023 7:12:54 PM, 2/16/2023 6:27:39 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 17.700229485647473 (T) = (0 -737.6906626408932) / Math.Sqrt((5583.273506604804 / (299)) + (5.787254634580092 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.09430935371148781 = (814.5062176184805 - 737.6906626408932) / 814.5062176184805 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Where(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,[edx+4] mov edx,ds:[6C048E4] 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:[6C048DC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AF8CA50 mov edx,6C048E4 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,edi call dword ptr ds:[0AF8DCC0]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0AF8DD38]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop edi pop ebp ret M00_L01: call dword ptr ds:[7E2B630] int 3 ; Total bytes of code 97 ``` ```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:[7E2B828]; 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:[7E2B7F8]; 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,0A4557D8 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6C01F70] 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:[7E2B828]; 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:[0A547E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A547E10] int 3 ; Total bytes of code 273 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[48902AC] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[48902B0] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[48902B4] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[48902B0] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[48902B8] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[48902B8] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Where(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push edi push esi mov esi,ecx mov edi,[edx+4] mov edx,ds:[69648E4] 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:[69648DC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AD7CA50 mov edx,69648E4 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,edi call dword ptr ds:[0AD7DCC0]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0AD7DD38]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop edi pop ebp ret M00_L01: call dword ptr ds:[7BAB630] int 3 ; Total bytes of code 97 ``` ```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:[7BAB828]; 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:[7BAB7F8]; 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,0A2457D8 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6961F68] 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:[7BAB828]; 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:[0A365E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A365E10] int 3 ; Total bytes of code 273 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[46102A8] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[46102AC] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[46102B0] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[46102AC] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[46102B4] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[46102B4] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` #### System.Linq.Tests.Perf_Enumerable.AnyWithPredicate_LastElementMatches(input: Array) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 697.537999152632 < 728.0852602347667. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/15/2023 4:08:29 PM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 19.884486978695648 (T) = (0 -694.757266771017) / Math.Sqrt((586.9619544973087 / (299)) + (69.90854223859107 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.05353008413086375 = (734.051083000379 - 694.757266771017) / 734.051083000379 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.AnyWithPredicate_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,[edx+4] mov edx,ds:[6F44904] 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:[6F448DC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B2ACB10 mov edx,6F44904 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B2ADCC0]; System.Linq.Enumerable.Any[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) pop esi pop ebp ret M00_L01: call dword ptr ds:[80DB630] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Linq.Enumerable.Any[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi sub esp,1C xor eax,eax mov [ebp-24],eax mov [ebp-14],eax mov esi,edx test ecx,ecx je near ptr M01_L08 test esi,esi je near ptr M01_L09 call dword ptr ds:[32102AC] mov edi,eax mov [ebp-24],edi mov ecx,edi call dword ptr ds:[32102B0] test eax,eax je short M01_L02 M01_L00: mov ecx,edi call dword ptr ds:[32102B4] mov edx,eax mov ecx,[esi+4] call dword ptr [esi+0C] test eax,eax jne short M01_L01 mov ecx,edi call dword ptr ds:[32102B0] test eax,eax jne short M01_L00 jmp short M01_L02 M01_L01: mov dword ptr [ebp-20],1 mov dword ptr [ebp-18],0 mov dword ptr [ebp-14],0FC push offset M01_L03 jmp short M01_L04 M01_L02: mov ecx,edi call dword ptr ds:[32102B8] jmp short M01_L06 M01_L03: mov dword ptr [ebp-14],0 jmp short M01_L07 M01_L04: mov edi,[ebp-24] test edi,edi je short M01_L05 mov ecx,edi call dword ptr ds:[32102B8] M01_L05: pop eax jmp eax M01_L06: xor eax,eax lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L07: mov eax,[ebp-20] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L08: mov ecx,10 call dword ptr ds:[0A867E10] int 3 M01_L09: mov ecx,0C call dword ptr ds:[0A867E10] int 3 ; Total bytes of code 199 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.AnyWithPredicate_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,[edx+4] mov edx,ds:[68E4904] 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:[68E48DC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AC7CB10 mov edx,68E4904 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0AC7DCC0]; System.Linq.Enumerable.Any[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) pop esi pop ebp ret M00_L01: call dword ptr ds:[7B1B630] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Linq.Enumerable.Any[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi sub esp,1C xor eax,eax mov [ebp-24],eax mov [ebp-14],eax mov esi,edx test ecx,ecx je near ptr M01_L08 test esi,esi je near ptr M01_L09 call dword ptr ds:[21D02A8] mov edi,eax mov [ebp-24],edi mov ecx,edi call dword ptr ds:[21D02AC] test eax,eax je short M01_L02 M01_L00: mov ecx,edi call dword ptr ds:[21D02B0] mov edx,eax mov ecx,[esi+4] call dword ptr [esi+0C] test eax,eax jne short M01_L01 mov ecx,edi call dword ptr ds:[21D02AC] test eax,eax jne short M01_L00 jmp short M01_L02 M01_L01: mov dword ptr [ebp-20],1 mov dword ptr [ebp-18],0 mov dword ptr [ebp-14],0FC push offset M01_L03 jmp short M01_L04 M01_L02: mov ecx,edi call dword ptr ds:[21D02B4] jmp short M01_L06 M01_L03: mov dword ptr [ebp-14],0 jmp short M01_L07 M01_L04: mov edi,[ebp-24] test edi,edi je short M01_L05 mov ecx,edi call dword ptr ds:[21D02B4] M01_L05: pop eax jmp eax M01_L06: xor eax,eax lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L07: mov eax,[ebp-20] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L08: mov ecx,10 call dword ptr ds:[0A265E10] int 3 M01_L09: mov ecx,0C call dword ptr ds:[0A265E10] int 3 ; Total bytes of code 199 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[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(Int32).IndexOfAnyFiveValues(Size%3a%2033).html>) 53.20 ns 39.11 ns 0.74 0.04 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(Int32).IndexOfAnyFiveValues(Size%3a%20512).html>) 805.15 ns 591.05 ns 0.73 0.03 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(Int32).IndexOfAnyFiveValues(Size%3a%204).html>) 10.13 ns 8.61 ns 0.85 0.07 False

graph graph graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 33) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 39.107250164955104 < 50.78478622527863. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/22/2023 11:22:03 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:10:34 PM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 21.117601609128858 (T) = (0 -39.83452361343112) / Math.Sqrt((39.04702200770675 / (299)) + (0.5160447695096911 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.16792698475198561 = (47.87383184342028 - 39.83452361343112) / 47.87383184342028 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 591.053957855676 < 764.9225873699252. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/22/2023 11:22:03 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:10:34 PM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 20.48665744089568 (T) = (0 -592.5518012717056) / Math.Sqrt((9520.517589527202 / (299)) + (1.5912980173137756 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.1633391074991743 = (708.234132350247 - 592.5518012717056) / 708.234132350247 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 4) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 8.608340461981673 < 9.655923976845893. IsChangePoint: Marked as a change because one of 2/9/2023 4:10:34 PM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 14.547314277963757 (T) = (0 -8.733157685606818) / Math.Sqrt((0.414590398963644 / (299)) + (0.041948094382148624 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.07761543948169183 = (9.46802240564333 - 8.733157685606818) / 9.46802240564333 is greater than 0.05. 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in PerfLabTests.LowLevelPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GenericClassGenericInstanceMethod - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.GenericClassGenericInstanceMethod.html>) 187.10 μs 158.37 μs 0.85 0.08 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.LowLevelPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.LowLevelPerf.GenericClassGenericInstanceMethod ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 158.37245000000001 < 177.7527572381116. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/20/2023 8:02:54 AM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 17.45345366880973 (T) = (0 -159189.71604431045) / Math.Sqrt((188171701.06174943 / (299)) + (4879282.36209154 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.08749736890206443 = (174453.98031649643 - 159189.71604431045) / 174453.98031649643 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.GenericClassGenericInstanceMethod() push ebp mov ebp,esp push edi push esi mov esi,ds:[70F41A4] xor eax,eax xor edi,edi cmp dword ptr ds:[0AB762D0],0 jle short M00_L01 M00_L00: mov ecx,esi cmp [ecx],ecx call dword ptr ds:[0B3BFB10]; PerfLabTests.GenericClass`1[[System.Int32, System.Private.CoreLib]].ClassGenericInstanceMethod() inc edi cmp edi,ds:[0AB762D0] jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 47 ``` ```assembly ; PerfLabTests.GenericClass`1[[System.Int32, System.Private.CoreLib]].ClassGenericInstanceMethod() push ebp mov ebp,esp inc dword ptr [ecx+4] mov eax,[ecx+8] pop ebp ret ; Total bytes of code 11 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.GenericClassGenericInstanceMethod() push ebp mov ebp,esp push edi push esi mov esi,ds:[78841A4] xor eax,eax xor edi,edi cmp dword ptr ds:[0B3867D0],0 jle short M00_L01 M00_L00: mov ecx,esi cmp [ecx],ecx call dword ptr ds:[0BBDFDB0]; PerfLabTests.GenericClass`1[[System.Int32, System.Private.CoreLib]].ClassGenericInstanceMethod() inc edi cmp edi,ds:[0B3867D0] jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 47 ``` ```assembly ; PerfLabTests.GenericClass`1[[System.Int32, System.Private.CoreLib]].ClassGenericInstanceMethod() push ebp mov ebp,esp inc dword ptr [ecx+4] mov eax,[ecx+8] pop ebp ret ; Total bytes of code 11 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Collections.Tests.Perf_BitArray

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[BitArrayNot - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Tests.Perf_BitArray.BitArrayNot(Size%3a%20512).html>) 12.77 ns 10.29 ns 0.81 0.21 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Tests.Perf_BitArray*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Tests.Perf_BitArray.BitArrayNot(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 10.285638619506827 < 12.132975798291461. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/18/2023 8:37:25 PM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 10.396400303436202 (T) = (0 -10.766898911384574) / Math.Sqrt((1.4595086259841807 / (299)) + (0.6307967968148197 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.126276785747802 = (12.323008861106826 - 10.766898911384574) / 12.323008861106826 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Collections.Tests.Perf_BitArray.BitArrayNot() mov ecx,[ecx+4] cmp [ecx],ecx call dword ptr ds:[0AB8B150]; System.Collections.BitArray.Not() ret ; Total bytes of code 12 ``` ```assembly ; System.Collections.BitArray.Not() push ebp mov ebp,esp push edi push esi push ebx vzeroupper M01_L00: mov eax,[ecx+4] mov edx,[ecx+8] add edx,1F shr edx,5 cmp edx,7 ja near ptr M01_L01 lea esi,ds:[0B3CF460] mov esi,[esi+edx*4] lea edi,[M01_L00] add esi,edi jmp esi mov edi,[eax+4] cmp edi,6 jbe near ptr M01_L07 mov edx,[eax+20] not edx mov [eax+20],edx mov edi,[eax+4] cmp edi,5 jbe near ptr M01_L07 mov edx,[eax+1C] not edx mov [eax+1C],edx mov edi,[eax+4] cmp edi,4 jbe near ptr M01_L07 mov edx,[eax+18] not edx mov [eax+18],edx mov edi,[eax+4] cmp edi,3 jbe near ptr M01_L07 mov edx,[eax+14] not edx mov [eax+14],edx mov edi,[eax+4] cmp edi,2 jbe near ptr M01_L07 mov edx,[eax+10] not edx mov [eax+10],edx mov edi,[eax+4] cmp edi,1 jbe near ptr M01_L07 mov edx,[eax+0C] not edx mov [eax+0C],edx mov edi,[eax+4] test edi,edi je near ptr M01_L07 mov edx,[eax+8] not edx mov [eax+8],edx jmp short M01_L06 nop nop nop nop M01_L01: xor esi,esi cmp [eax],al lea edi,[eax+8] lea ebx,[edx-7] test ebx,ebx jbe short M01_L03 M01_L02: vpcmpeqd ymm0,ymm0,ymm0 vpxor ymm0,ymm0,[edi+esi*4] vmovups [edi+esi*4],ymm0 add esi,8 cmp esi,ebx jb short M01_L02 M01_L03: cmp esi,edx jae short M01_L06 mov edi,esi or edi,edx jl short M01_L05 mov edi,[eax+4] cmp edi,edx jl short M01_L05 nop nop nop nop nop nop nop nop nop nop M01_L04: mov edi,[eax+esi*4+8] not edi mov [eax+esi*4+8],edi inc esi cmp esi,edx jb short M01_L04 jmp short M01_L06 M01_L05: mov edi,[eax+4] cmp esi,edi jae short M01_L07 mov edi,[eax+esi*4+8] not edi mov [eax+esi*4+8],edi inc esi cmp esi,edx jb short M01_L05 M01_L06: inc dword ptr [ecx+0C] mov eax,ecx vzeroupper pop ebx pop esi pop edi pop ebp ret M01_L07: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 314 ``` ### Compare Jit Disasm ```assembly ; System.Collections.Tests.Perf_BitArray.BitArrayNot() mov ecx,[ecx+4] cmp [ecx],ecx call dword ptr ds:[0ACF9150]; System.Collections.BitArray.Not() ret ; Total bytes of code 12 ``` ```assembly ; System.Collections.BitArray.Not() push ebp mov ebp,esp push edi push esi push ebx vzeroupper M01_L00: mov eax,[ecx+4] mov edx,[ecx+8] add edx,1F shr edx,5 cmp edx,7 ja near ptr M01_L01 lea esi,ds:[0B20F360] mov esi,[esi+edx*4] lea edi,[M01_L00] add esi,edi jmp esi mov edi,[eax+4] cmp edi,6 jbe near ptr M01_L07 mov edx,[eax+20] not edx mov [eax+20],edx mov edi,[eax+4] cmp edi,5 jbe near ptr M01_L07 mov edx,[eax+1C] not edx mov [eax+1C],edx mov edi,[eax+4] cmp edi,4 jbe near ptr M01_L07 mov edx,[eax+18] not edx mov [eax+18],edx mov edi,[eax+4] cmp edi,3 jbe near ptr M01_L07 mov edx,[eax+14] not edx mov [eax+14],edx mov edi,[eax+4] cmp edi,2 jbe near ptr M01_L07 mov edx,[eax+10] not edx mov [eax+10],edx mov edi,[eax+4] cmp edi,1 jbe near ptr M01_L07 mov edx,[eax+0C] not edx mov [eax+0C],edx mov edi,[eax+4] test edi,edi je near ptr M01_L07 mov edx,[eax+8] not edx mov [eax+8],edx jmp short M01_L06 nop nop nop nop M01_L01: xor esi,esi cmp [eax],al lea edi,[eax+8] lea ebx,[edx-7] test ebx,ebx jbe short M01_L03 M01_L02: vpcmpeqd ymm0,ymm0,ymm0 vpxor ymm0,ymm0,[edi+esi*4] vmovups [edi+esi*4],ymm0 add esi,8 cmp esi,ebx jb short M01_L02 M01_L03: cmp esi,edx jae short M01_L06 mov edi,esi or edi,edx jl short M01_L05 mov edi,[eax+4] cmp edi,edx jl short M01_L05 nop nop nop nop nop nop nop nop nop nop M01_L04: mov edi,[eax+esi*4+8] not edi mov [eax+esi*4+8],edi inc esi cmp esi,edx jb short M01_L04 jmp short M01_L06 M01_L05: mov edi,[eax+4] cmp esi,edi jae short M01_L07 mov edi,[eax+esi*4+8] not edi mov [eax+esi*4+8],edi inc esi cmp esi,edx jb short M01_L05 M01_L06: inc dword ptr [ecx+0C] mov eax,ecx vzeroupper pop ebx pop esi pop edi pop ebp ret M01_L07: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 314 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements 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.64 μs 1.53 μs 0.93 0.07 False

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 1.5300514719180558 < 1.5609262508383. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/30/2023 9:42:46 PM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 12.150186851625248 (T) = (0 -1547.3423292079078) / Math.Sqrt((6469.341318611358 / (299)) + (3589.259946127117 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.07960994874691761 = (1681.1810678540576 - 1547.3423292079078) / 1681.1810678540576 is greater than 0.05. 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Tests.Perf_UInt64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_UInt64.ToString(value%3a%200).html>) 3.68 ns 2.63 ns 0.71 0.06 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_UInt64*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_UInt64.ToString(value: 0) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 2.626574598045801 < 3.5043637545324633. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/18/2023 6:24:13 PM, 2/16/2023 6:27:39 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 12.164585550655374 (T) = (0 -2.780139954286292) / Math.Sqrt((0.19033831479323626 / (299)) + (0.00917986692780096 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.11555329023709121 = (3.1433662691012287 - 2.780139954286292) / 3.1433662691012287 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_UInt64.ToString(UInt64) push dword ptr [esp+8] push dword ptr [esp+8] call dword ptr ds:[8E3D9D8]; System.Number.UInt64ToDecStr(UInt64) ret 8 ; Total bytes of code 17 ``` ```assembly ; System.Number.UInt64ToDecStr(UInt64) push ebp mov ebp,esp push esi push ebx push eax xor eax,eax mov [ebp-0C],eax cmp dword ptr [ebp+8],12C mov ecx,[ebp+0C] sbb ecx,0 jae short M01_L00 mov ecx,[ebp+8] call dword ptr ds:[8E3D840]; System.Number.UInt32ToDecStrForKnownSmallNumber(UInt32) pop ecx pop ebx pop esi pop ebp ret 8 M01_L00: mov ecx,5DBC3064 mov eax,[ebp+8] mov edx,[ebp+0C] or eax,1 or edx,0 jne short M01_L01 or eax,1 lzcnt eax,eax xor eax,1F jmp short M01_L02 M01_L01: or edx,1 xor eax,eax lzcnt eax,edx xor eax,1F add eax,20 M01_L02: movzx ebx,byte ptr [ecx+eax] lea ecx,[ebx*8+5DBC9A18] mov eax,[ecx] mov ecx,[ecx+4] cmp [ebp+8],eax mov eax,[ebp+0C] sbb eax,ecx setb cl movzx ecx,cl sub ebx,ecx mov ecx,ebx call System.String.FastAllocateString(Int32) mov esi,eax test esi,esi jne short M01_L03 xor ecx,ecx jmp short M01_L04 M01_L03: lea ecx,[esi+8] mov [ebp-0C],ecx mov ecx,[ebp-0C] M01_L04: push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ecx+ebx*2] call dword ptr ds:[8E3D9A8]; System.Number.UInt64ToDecChars(Char*, UInt64) xor eax,eax mov [ebp-0C],eax mov eax,esi pop ecx pop ebx pop esi pop ebp ret 8 ; Total bytes of code 175 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_UInt64.ToString(UInt64) push dword ptr [esp+8] push dword ptr [esp+8] call dword ptr ds:[8F5D9D8]; System.Number.UInt64ToDecStr(UInt64) ret 8 ; Total bytes of code 17 ``` ```assembly ; System.Number.UInt64ToDecStr(UInt64) push ebp mov ebp,esp push esi push ebx push eax xor eax,eax mov [ebp-0C],eax cmp dword ptr [ebp+8],12C mov ecx,[ebp+0C] sbb ecx,0 jae short M01_L00 mov ecx,[ebp+8] call dword ptr ds:[8F5D840]; System.Number.UInt32ToDecStrForKnownSmallNumber(UInt32) pop ecx pop ebx pop esi pop ebp ret 8 M01_L00: mov ecx,6BE92E9C mov eax,[ebp+8] mov edx,[ebp+0C] or eax,1 or edx,0 jne short M01_L01 or eax,1 lzcnt eax,eax xor eax,1F jmp short M01_L02 M01_L01: or edx,1 xor eax,eax lzcnt eax,edx xor eax,1F add eax,20 M01_L02: movzx ebx,byte ptr [ecx+eax] lea ecx,[ebx*8+6BE99850] mov eax,[ecx] mov ecx,[ecx+4] cmp [ebp+8],eax mov eax,[ebp+0C] sbb eax,ecx setb cl movzx ecx,cl sub ebx,ecx mov ecx,ebx call System.String.FastAllocateString(Int32) mov esi,eax test esi,esi jne short M01_L03 xor ecx,ecx jmp short M01_L04 M01_L03: lea ecx,[esi+8] mov [ebp-0C],ecx mov ecx,[ebp-0C] M01_L04: push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ecx+ebx*2] call dword ptr ds:[8F5D9A8]; System.Number.UInt64ToDecChars(Char*, UInt64) xor eax,eax mov [ebp-0C],eax mov eax,esi pop ecx pop ebx pop esi pop ebp ret 8 ; Total bytes of code 175 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Collections.IterateForEach<Int32>

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

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<Int32>.IEnumerable(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 2.098782904217504 < 2.1381394532927236. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 42.381860512001076 (T) = (0 -2101.8843188777346) / Math.Sqrt((10404.112943112113 / (299)) + (11.344813397449306 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.1067282716043996 = (2353.017846711566 - 2101.8843188777346) / 2353.017846711566 is greater than 0.05. 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.Collections.IterateForEach<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ImmutableQueue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).ImmutableQueue(Size%3a%20512).html>) 5.72 μs 5.16 μs 0.90 0.07 False
[HashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).HashSet(Size%3a%20512).html>) 2.58 μs 2.23 μs 0.87 0.05 False

graph graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<String>.ImmutableQueue(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 5.155822896066799 < 5.441856708165842. IsChangePoint: Marked as a change because one of 2/8/2023 7:09:09 PM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 19.17113244253647 (T) = (0 -5148.355607053902) / Math.Sqrt((104896.84975379243 / (299)) + (8522.171025467138 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.08278886166481075 = (5613.0539544020085 - 5148.355607053902) / 5613.0539544020085 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.HashSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 2.2291903914590745 < 2.4466167654468856. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/16/2023 6:27:39 AM, 2/20/2023 10:31:48 AM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 15.5984551683649 (T) = (0 -2254.8807641463045) / Math.Sqrt((18240.709967248666 / (299)) + (7567.156396711737 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.10227083329596129 = (2511.7606153144943 - 2254.8807641463045) / 2511.7606153144943 is greater than 0.05. 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Transient - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Transient.html>) 99.12 ns 90.21 ns 0.91 0.21 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Transient ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 90.20547286335328 < 95.18644447062415. IsChangePoint: Marked as a change because one of 2/9/2023 4:10:34 PM, 2/24/2023 12:59:32 PM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 8.508792675120015 (T) = (0 -86.13689946914846) / Math.Sqrt((42.96929815837594 / (299)) + (8.895067152087496 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.05816076493718153 = (91.45605349877289 - 86.13689946914846) / 91.45605349877289 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Transient() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[[System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.DependencyInjection.ServiceProviderEngineBenchmark+A, MicroBenchmarks]], System.Private.CoreLib]](System.IServiceProvider) call dword ptr ds:[0B4978E8]; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[[System.__Canon, System.Private.CoreLib]](System.IServiceProvider) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[[System.__Canon, System.Private.CoreLib]](System.IServiceProvider) push ebp mov ebp,esp push edi push esi push eax mov [ebp-0C],edx mov esi,ecx test esi,esi je short M01_L00 mov edi,[edx+0C] mov ecx,[edi] call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE mov edx,eax mov ecx,esi call dword ptr ds:[2E40328] mov edx,eax mov ecx,[edi] call dword ptr ds:[512B858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) pop ecx pop esi pop edi pop ebp ret M01_L00: mov ecx,2F1 mov edx,0B3D5DE0 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B391390] int 3 ; Total bytes of code 74 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Transient() mov ecx,[ecx+4] mov edx,offset MD_Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[[System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.DependencyInjection.ServiceProviderEngineBenchmark+A, MicroBenchmarks]], System.Private.CoreLib]](System.IServiceProvider) call dword ptr ds:[0AE67D80]; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[[System.__Canon, System.Private.CoreLib]](System.IServiceProvider) ret ; Total bytes of code 15 ``` ```assembly ; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[[System.__Canon, System.Private.CoreLib]](System.IServiceProvider) push ebp mov ebp,esp push edi push esi push eax mov [ebp-0C],edx mov esi,ecx test esi,esi je short M01_L00 mov edi,[edx+0C] mov ecx,[edi] call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE mov edx,eax mov ecx,esi call dword ptr ds:[27B0324] mov edx,eax mov ecx,[edi] call dword ptr ds:[7C0B858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) pop ecx pop esi pop edi pop ebp ret M01_L00: mov ecx,2F1 mov edx,0AD97270 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0ADB1870] int 3 ; Total bytes of code 74 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Improvements in System.MathBenchmarks.Single

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Min - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.MathBenchmarks.Single.Min.html>) 7.31 μs 6.54 μs 0.89 0.05 False Trace Trace

graph Test Report

Repro

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

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.MathBenchmarks.Single*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.MathBenchmarks.Single.Min ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 6.535738089139342 < 6.934621559414853. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 10:43:28 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 10:43:28 AM. IsImprovementStdDev: Marked as improvement because 18.256930049203117 (T) = (0 -6429.954735000585) / Math.Sqrt((206725.40431214668 / (299)) + (13353.823226163438 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.08470524390494114 = (7025.009913126603 - 6429.954735000585) / 7025.009913126603 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.MathBenchmarks.Single.Min() call dword ptr ds:[0B0D1828]; System.MathBenchmarks.Single.MinTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MinTest() push ebp mov ebp,esp push esi sub esp,1C vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax vxorps xmm0,xmm0,xmm0 vmovss xmm1,dword ptr ds:[0B91F170] xor ecx,ecx vmovss xmm2,dword ptr ds:[0B91F174] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[0B91F178] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[0B91F178] ja short M01_L04 M01_L02: vmovaps xmm3,xmm1 M01_L03: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[0B91F17C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[0B91F180] vucomiss xmm1,dword ptr ds:[0B91F190] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[0B91F178] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0AA9D4E0] mov ecx,5E71 mov edx,0B0C1434 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0AA9D5D0] vmovss xmm0,dword ptr ds:[0B91F17C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0B0C1434 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B9ABA08] mov ecx,5E9B mov edx,0B0C1434 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0AA9D5D0] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0B0C1434 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B9ABA08] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0AA9D570] mov edx,eax mov ecx,esi call dword ptr ds:[5555C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 329 ``` ### Compare Jit Disasm ```assembly ; System.MathBenchmarks.Single.Min() call dword ptr ds:[0A41F828]; System.MathBenchmarks.Single.MinTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MinTest() push ebp mov ebp,esp push esi sub esp,1C vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax vxorps xmm0,xmm0,xmm0 vmovss xmm1,dword ptr ds:[0AD9F070] xor ecx,ecx vmovss xmm2,dword ptr ds:[0AD9F074] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[0AD9F078] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[0AD9F078] ja short M01_L04 M01_L02: vmovaps xmm3,xmm1 M01_L03: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[0AD9F07C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[0AD9F080] vucomiss xmm1,dword ptr ds:[0AD9F090] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[0AD9F078] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[9F19BA0] mov ecx,5E71 mov edx,0A541934 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[9F19C90] vmovss xmm0,dword ptr ds:[0AD9F07C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0A541934 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0AE2BA08] mov ecx,5E9B mov edx,0A541934 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[9F19C90] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0A541934 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0AE2BA08] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[9F19C30] mov edx,eax mov ecx,esi call dword ptr ds:[7C75C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 329 ``` ### 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)