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: 9 Regressions on 12/20/2022 6:23:25 PM #11112

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline af8a9fa1083a5d65dc5e8efd5f226c1fa0dc2686
Compare 82e9d38aba058aa143a31b6cb3333654aa39aa72
Diff Diff

Regressions in System.Collections.IterateForEachNonGeneric<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.IterateForEachNonGeneric(Int32).ArrayList(Size%3a%20512).html>) 2.80 μs 3.72 μs 1.33 0.04 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEachNonGeneric&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEachNonGeneric<Int32>.ArrayList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 3.7212671898969973 > 2.942064606015076. IsChangePoint: Marked as a change because one of 10/10/2022 3:36:43 PM, 10/25/2022 12:27:43 PM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 1:34:12 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -36.787913628159146 (T) = (0 -3682.743201598794) / Math.Sqrt((57.05360433224269 / (27)) + (13018.647726685098 / (23))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (23) - 2, .025) and -0.31251055558339785 = (2805.8770163275763 - 3682.743201598794) / 2805.8770163275763 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline af8a9fa1083a5d65dc5e8efd5f226c1fa0dc2686
Compare 82e9d38aba058aa143a31b6cb3333654aa39aa72
Diff Diff

Regressions in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[WhereLast_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.WhereLast_LastElementMatches(input%3a%20List).html>) 335.39 ns 369.66 ns 1.10 0.06 False Trace Trace
[ElementAt - 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.ElementAt(input%3a%20IEnumerable).html>) 143.11 ns 188.88 ns 1.32 0.04 False Trace Trace
[WhereSingleOrDefault_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.WhereSingleOrDefault_LastElementMatches(input%3a%20Array).html>) 324.06 ns 384.77 ns 1.19 0.05 False Trace Trace
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Count(input%3a%20IEnumerable).html>) 314.04 ns 376.97 ns 1.20 0.03 False Trace Trace

graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.WhereLast_LastElementMatches(input: List) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 369.6628863409771 > 352.0419566761134. IsChangePoint: Marked as a change because one of 10/19/2022 7:27:15 PM, 10/26/2022 7:11:30 AM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/20/2022 1:34:12 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -28.256228507000472 (T) = (0 -374.0377551639322) / Math.Sqrt((35.66443976929554 / (27)) + (8.223185894705102 / (23))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (23) - 2, .025) and -0.10848808544286193 = (337.430559765103 - 374.0377551639322) / 337.430559765103 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereLast_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[6A248E4] 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:[6A248CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AD42468 mov edx,6A248E4 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0AD43678]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0AD43900]; System.Linq.Enumerable.TryGetLast[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[7C0B630] int 3 M00_L02: call dword ptr ds:[0A333E70] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7C0B828]; 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:[7C0B7F8]; 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,9DFF9F0 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6A24E54] 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:[7C0B828]; 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:[0A333E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A333E10] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetLast[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L09 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7C0B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax mov edx,edi call dword ptr ds:[2D602C8] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7C0B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[2D602C0] mov edx,eax test edx,edx jle near ptr M02_L07 mov byte ptr [edi],1 dec edx mov ecx,ebx call dword ptr ds:[2D602C4] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,esi call dword ptr ds:[2D602AC] mov esi,eax mov [ebp-28],esi mov ecx,esi call dword ptr ds:[2D602B0] test eax,eax je short M02_L03 M02_L02: mov ecx,esi call dword ptr ds:[2D602B4] mov ebx,eax mov ecx,esi call dword ptr ds:[2D602B8] test eax,eax jne short M02_L02 mov byte ptr [edi],1 mov [ebp-24],ebx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L05 M02_L03: mov ecx,esi call dword ptr ds:[2D602BC] jmp short M02_L07 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov esi,[ebp-28] test esi,esi je short M02_L06 mov ecx,esi call dword ptr ds:[2D602BC] M02_L06: pop eax jmp eax M02_L07: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0A333E10] int 3 ; Total bytes of code 268 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereLast_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[6E848E4] 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:[6E848CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B2D8C78 mov edx,6E848E4 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B2D9E88]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0B2DB180]; System.Linq.Enumerable.TryGetLast[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[810B630] int 3 M00_L02: call dword ptr ds:[0A7FB7F8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[810B828]; 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:[810B7F8]; 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,0A753098 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6E84E54] 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:[810B828]; 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:[0A7FB798] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A7FB798] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetLast[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov esi,ecx mov edi,edx test esi,esi je near ptr M02_L09 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[810B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M02_L00 mov ecx,eax mov edx,edi call dword ptr ds:[2CD02C8] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[810B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[2CD02C0] mov edx,eax test edx,edx jle near ptr M02_L07 mov byte ptr [edi],1 dec edx mov ecx,ebx call dword ptr ds:[2CD02C4] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,esi call dword ptr ds:[2CD02AC] mov esi,eax mov [ebp-28],esi mov ecx,esi call dword ptr ds:[2CD02B0] test eax,eax je short M02_L03 M02_L02: mov ecx,esi call dword ptr ds:[2CD02B4] mov ebx,eax mov ecx,esi call dword ptr ds:[2CD02B8] test eax,eax jne short M02_L02 mov byte ptr [edi],1 mov [ebp-24],ebx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L05 M02_L03: mov ecx,esi call dword ptr ds:[2CD02BC] jmp short M02_L07 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov esi,[ebp-28] test esi,esi je short M02_L06 mov ecx,esi call dword ptr ds:[2CD02BC] M02_L06: pop eax jmp eax M02_L07: mov byte ptr [edi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0A7FB798] int 3 ; Total bytes of code 268 ``` #### System.Linq.Tests.Perf_Enumerable.ElementAt(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 188.8790553250177 > 150.10238065335318. IsChangePoint: Marked as a change because one of 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -35.16967885926097 (T) = (0 -187.17992722283455) / Math.Sqrt((0.04554254356786816 / (32)) + (28.232624011996435 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.30790954593410824 = (143.11381685738118 - 187.17992722283455) / 143.11381685738118 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.ElementAt(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,32 call dword ptr ds:[0B2833C0]; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) ret ; Total bytes of code 15 ``` ```assembly ; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) push ebp mov ebp,esp push edi push esi sub esp,8 mov esi,ecx mov edi,edx test esi,esi je short M01_L03 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[4CEB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 lea ecx,[ebp-0C] push ecx mov ecx,eax mov edx,edi call dword ptr ds:[4B502FC] cmp byte ptr [ebp-0C],0 je short M01_L02 lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[4CEB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax mov edx,edi call dword ptr ds:[4B502F8] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: lea ecx,[ebp-10] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B2833D8]; System.Linq.Enumerable.TryGetElement[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32, Int32 ByRef) test eax,eax je short M01_L02 mov eax,[ebp-10] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: mov ecx,6 call dword ptr ds:[0A873E28] int 3 M01_L03: mov ecx,10 call dword ptr ds:[0A873E10] int 3 ; Total bytes of code 146 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.ElementAt(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,32 call dword ptr ds:[0AE59BD0]; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) ret ; Total bytes of code 15 ``` ```assembly ; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) push ebp mov ebp,esp push edi push esi sub esp,8 mov esi,ecx mov edi,edx test esi,esi je short M01_L03 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7CDB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 lea ecx,[ebp-0C] push ecx mov ecx,eax mov edx,edi call dword ptr ds:[0DE031C] cmp byte ptr [ebp-0C],0 je short M01_L02 lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7CDB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax mov edx,edi call dword ptr ds:[0DE0318] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: lea ecx,[ebp-10] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0AE59BE8]; System.Linq.Enumerable.TryGetElement[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32, Int32 ByRef) test eax,eax je short M01_L02 mov eax,[ebp-10] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: mov ecx,6 call dword ptr ds:[0A38BE28] int 3 M01_L03: mov ecx,10 call dword ptr ds:[0A38BE10] int 3 ; Total bytes of code 146 ``` #### System.Linq.Tests.Perf_Enumerable.WhereSingleOrDefault_LastElementMatches(input: Array) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 384.77217610809015 > 340.5660073101537. IsChangePoint: Marked as a change because one of 10/19/2022 7:27:15 PM, 10/26/2022 7:11:30 AM, 11/2/2022 4:14:20 AM, 11/11/2022 5:53:56 PM, 11/18/2022 7:31:41 AM, 11/23/2022 8:02:34 PM, 12/20/2022 1:34:12 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -267.5229057507131 (T) = (0 -385.19486469720584) / Math.Sqrt((0.5281662038697148 / (27)) + (0.7333866212417844 / (23))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (23) - 2, .025) and -0.1869868183965768 = (324.5148629515031 - 385.19486469720584) / 324.5148629515031 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereSingleOrDefault_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[6AF4900] 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:[6AF48CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AD92510 mov edx,6AF4900 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0AD93678]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0AD93900]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[494B630] int 3 ; Total bytes of code 95 ``` ```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:[494B828]; 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:[494B7F8]; 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,9E4F9F0 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[6AF4E54] 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:[494B828]; 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:[0A383E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0A383E10] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov edi,ecx mov esi,edx test edi,edi je near ptr M02_L09 mov edx,edi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[494B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[7E0308] test eax,eax je short M02_L00 cmp eax,1 jne near ptr M02_L10 mov byte ptr [esi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[7E030C] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov byte ptr [esi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,edi call dword ptr ds:[7E02F4] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[7E02F8] test eax,eax jne short M02_L02 mov byte ptr [esi],0 xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L06 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[7E02FC] mov edi,eax mov ecx,[ebp-28] call dword ptr ds:[7E0300] test eax,eax jne short M02_L03 mov byte ptr [esi],1 mov [ebp-24],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L05 jmp short M02_L06 M02_L03: mov ecx,[ebp-28] call dword ptr ds:[7E0304] jmp short M02_L10 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L06: mov ecx,[ebp-28] test ecx,ecx je short M02_L07 call dword ptr ds:[7E0304] mov ecx,[ebp-28] M02_L07: pop eax jmp eax M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0A383E10] int 3 M02_L10: mov byte ptr [esi],0 call dword ptr ds:[0A383E40] int 3 ; Total bytes of code 287 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereSingleOrDefault_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[7194900] 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:[71948CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],8B9AD20 mov edx,7194900 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[8B9BE88]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[8B9D180]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[837B630] int 3 ; Total bytes of code 95 ``` ```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:[837B828]; 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:[837B7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0A963098 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[7194E5C] 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:[837B828]; 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:[0AA2BE10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0AA2BE10] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov edi,ecx mov esi,edx test edi,edi je near ptr M02_L09 mov edx,edi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[837B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[2F40340] test eax,eax je short M02_L00 cmp eax,1 jne near ptr M02_L10 mov byte ptr [esi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[2F40344] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov byte ptr [esi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,edi call dword ptr ds:[2F4032C] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[2F40330] test eax,eax jne short M02_L02 mov byte ptr [esi],0 xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L06 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[2F40334] mov edi,eax mov ecx,[ebp-28] call dword ptr ds:[2F40338] test eax,eax jne short M02_L03 mov byte ptr [esi],1 mov [ebp-24],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L05 jmp short M02_L06 M02_L03: mov ecx,[ebp-28] call dword ptr ds:[2F4033C] jmp short M02_L10 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L06: mov ecx,[ebp-28] test ecx,ecx je short M02_L07 call dword ptr ds:[2F4033C] mov ecx,[ebp-28] M02_L07: pop eax jmp eax M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0AA2BE10] int 3 M02_L10: mov byte ptr [esi],0 call dword ptr ds:[0AA2BE40] int 3 ; Total bytes of code 287 ``` #### System.Linq.Tests.Perf_Enumerable.Count(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 376.9685613600686 > 329.6147143885728. IsChangePoint: Marked as a change because one of 10/17/2022 3:19:47 PM, 12/14/2022 12:26:48 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -456.6182117186996 (T) = (0 -377.0523912471381) / Math.Sqrt((0.21838895916766296 / (32)) + (0.21758395005781161 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.19982269939940145 = (314.25675763250706 - 377.0523912471381) / 314.25675763250706 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Count(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0BA733C0]; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,18 xor eax,eax mov [ebp-14],eax mov esi,ecx test esi,esi je near ptr M01_L09 mov edx,esi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[88CB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax call dword ptr ds:[3A002C0] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[88CB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax xor edx,edx call dword ptr ds:[3A002BC] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: mov edx,esi mov ecx,offset MT_System.Collections.ICollection call dword ptr ds:[88CB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L02 mov ecx,eax call dword ptr ds:[3A002B8] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: xor edi,edi mov ecx,esi call dword ptr ds:[3A002AC] mov ecx,eax mov [ebp-20],ecx M01_L03: call dword ptr ds:[3A002B0] test eax,eax jne short M01_L05 jmp short M01_L06 M01_L04: call CORINFO_HELP_OVERFLOW M01_L05: add edi,1 jo short M01_L04 mov ecx,[ebp-20] jmp short M01_L03 M01_L06: mov ecx,[ebp-20] call dword ptr ds:[3A002B4] jmp short M01_L08 cmp dword ptr [ebp-20],0 je short M01_L07 mov ecx,[ebp-20] call dword ptr ds:[3A002B4] M01_L07: pop eax jmp eax M01_L08: mov eax,edi lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L09: mov ecx,10 call dword ptr ds:[0B063E10] int 3 ; Total bytes of code 213 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Count(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0B859BD0]; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,18 xor eax,eax mov [ebp-14],eax mov esi,ecx test esi,esi je near ptr M01_L09 mov edx,esi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[86FB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax call dword ptr ds:[38502C0] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[86FB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax xor edx,edx call dword ptr ds:[38502BC] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: mov edx,esi mov ecx,offset MT_System.Collections.ICollection call dword ptr ds:[86FB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L02 mov ecx,eax call dword ptr ds:[38502B8] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: xor edi,edi mov ecx,esi call dword ptr ds:[38502AC] mov ecx,eax mov [ebp-20],ecx M01_L03: call dword ptr ds:[38502B0] test eax,eax jne short M01_L05 jmp short M01_L06 M01_L04: call CORINFO_HELP_OVERFLOW M01_L05: add edi,1 jo short M01_L04 mov ecx,[ebp-20] jmp short M01_L03 M01_L06: mov ecx,[ebp-20] call dword ptr ds:[38502B4] jmp short M01_L08 cmp dword ptr [ebp-20],0 je short M01_L07 mov ecx,[ebp-20] call dword ptr ds:[38502B4] M01_L07: pop eax jmp eax M01_L08: mov eax,edi lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L09: mov ecx,10 call dword ptr ds:[0AD7B798] int 3 ; Total bytes of code 213 ``` ### 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 af8a9fa1083a5d65dc5e8efd5f226c1fa0dc2686
Compare 82e9d38aba058aa143a31b6cb3333654aa39aa72
Diff Diff

Regressions 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>) 6.71 μs 7.32 μs 1.09 0.07 False Trace Trace
[Max - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.MathBenchmarks.Single.Max.html>) 6.25 μs 7.36 μs 1.18 0.04 False Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.MathBenchmarks.Single*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.MathBenchmarks.Single.Min ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.324701857100239 > 6.8838282656619. IsChangePoint: Marked as a change because one of 10/25/2022 2:34:53 PM, 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/20/2022 1:34:12 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -19.75508754393333 (T) = (0 -7426.023717011295) / Math.Sqrt((32426.177503672247 / (27)) + (4164.910718690677 / (23))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (23) - 2, .025) and -0.10975155351782272 = (6691.6092106124115 - 7426.023717011295) / 6691.6092106124115 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.MathBenchmarks.Single.Min() call dword ptr ds:[0A55F930]; 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:[8640470] xor ecx,ecx vmovss xmm2,dword ptr ds:[8640474] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[8640478] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[8640478] 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:[864047C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[8640480] vucomiss xmm1,dword ptr ds:[8640490] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[8640478] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0A019000] mov ecx,5E71 mov edx,0A52CD64 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A0190F0] vmovss xmm0,dword ptr ds:[864047C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0A52CD64 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0AF613C0] mov ecx,5E9B mov edx,0A52CD64 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A0190F0] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0A52CD64 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0AF613C0] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0A019090] mov edx,eax mov ecx,esi call dword ptr ds:[4B05C18] 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:[0A887930]; 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:[0B2A0770] xor ecx,ecx vmovss xmm2,dword ptr ds:[0B2A0774] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[0B2A0778] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[0B2A0778] 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:[0B2A077C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[0B2A0780] vucomiss xmm1,dword ptr ds:[0B2A0790] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[0B2A0778] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0A32F6A8] mov ecx,5E71 mov edx,0A9902D0 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A32F798] vmovss xmm0,dword ptr ds:[0B2A077C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0A9902D0 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B287BD0] mov ecx,5E9B mov edx,0A9902D0 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A32F798] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0A9902D0 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B287BD0] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0A32F738] mov edx,eax mov ecx,esi call dword ptr ds:[80A5C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 329 ``` #### System.MathBenchmarks.Single.Max ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.359393852833638 > 6.582774008761532. IsChangePoint: Marked as a change because one of 10/5/2022 12:22:07 PM, 10/10/2022 3:36:43 PM, 10/18/2022 1:35:00 AM, 10/19/2022 7:27:15 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/20/2022 1:34:12 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -33.0833243750638 (T) = (0 -7205.615141772659) / Math.Sqrt((389.93625896068176 / (27)) + (18543.57382577853 / (23))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (23) - 2, .025) and -0.1514507961145033 = (6257.857622824652 - 7205.615141772659) / 6257.857622824652 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.MathBenchmarks.Single.Max() call dword ptr ds:[0AAFF900]; System.MathBenchmarks.Single.MaxTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MaxTest() 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:[8BE0480] xor ecx,ecx vmovss xmm2,dword ptr ds:[8BE0484] M01_L00: vaddss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[8BE0488] jp short M01_L03 jne short M01_L03 vmovss xmm3,dword ptr ds:[8BE0488] vmovd edx,xmm3 test edx,edx jl short M01_L04 M01_L01: vmovaps xmm3,xmm1 M01_L02: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[8BE048C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[8BE0490] vucomiss xmm1,dword ptr ds:[8BE04A0] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L03: vmovss xmm3,dword ptr ds:[8BE0488] vucomiss xmm3,xmm1 jbe short M01_L01 M01_L04: vmovss xmm3,dword ptr ds:[8BE0488] jmp short M01_L02 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0A5B9000] mov ecx,5E71 mov edx,0AACCD64 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A5B90F0] vmovss xmm0,dword ptr ds:[8BE048C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0AACCD64 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B5013C0] mov ecx,5E9B mov edx,0AACCD64 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A5B90F0] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0AACCD64 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B5013C0] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0A5B9090] mov edx,eax mov ecx,esi call dword ptr ds:[50A5C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 349 ``` ### Compare Jit Disasm ```assembly ; System.MathBenchmarks.Single.Max() call dword ptr ds:[0AB07900]; System.MathBenchmarks.Single.MaxTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MaxTest() 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:[0B520780] xor ecx,ecx vmovss xmm2,dword ptr ds:[0B520784] M01_L00: vaddss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[0B520788] jp short M01_L03 jne short M01_L03 vmovss xmm3,dword ptr ds:[0B520788] vmovd edx,xmm3 test edx,edx jl short M01_L04 M01_L01: vmovaps xmm3,xmm1 M01_L02: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[0B52078C] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[0B520790] vucomiss xmm1,dword ptr ds:[0B5207A0] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L03: vmovss xmm3,dword ptr ds:[0B520788] vucomiss xmm3,xmm1 jbe short M01_L01 M01_L04: vmovss xmm3,dword ptr ds:[0B520788] jmp short M01_L02 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0A5AF6A8] mov ecx,5E71 mov edx,0AC102D0 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A5AF798] vmovss xmm0,dword ptr ds:[0B52078C] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0AC102D0 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B507BD0] mov ecx,5E9B mov edx,0AC102D0 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0A5AF798] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0AC102D0 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0B507BD0] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0A5AF738] mov edx,eax mov ecx,esi call dword ptr ds:[3605C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 349 ``` ### 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 af8a9fa1083a5d65dc5e8efd5f226c1fa0dc2686
Compare 82e9d38aba058aa143a31b6cb3333654aa39aa72
Diff Diff

Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Float

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SubtractionOperatorBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Runtime.Intrinsics.Tests.Perf_Vector128Float.SubtractionOperatorBenchmark.html>) 0.00 ns 1.06 ns 2118.50 0.23 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Float*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.Intrinsics.Tests.Perf_Vector128Float.SubtractionOperatorBenchmark ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.06286084141728 > 0.0003843782000918984. IsChangePoint: Marked as a change because one of 11/18/2022 7:31:41 AM, 12/20/2022 1:34:12 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -11.930692117355822 (T) = (0 -0.3819228101917448) / Math.Sqrt((0.0009163465711018161 / (27)) + (0.02203443559298432 / (23))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (23) - 2, .025) and -60.986699779785134 = (0.006161367060168866 - 0.3819228101917448) / 0.006161367060168866 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline af8a9fa1083a5d65dc5e8efd5f226c1fa0dc2686
Compare 82e9d38aba058aa143a31b6cb3333654aa39aa72
Diff Diff

Regressions in PerfLabTests.DelegatePerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[DelegateInvoke - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.DelegatePerf.DelegateInvoke.html>) 436.58 μs 498.93 μs 1.14 0.02 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.DelegatePerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.DelegatePerf.DelegateInvoke ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 498.9277083333333 > 458.39966232638886. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 5:20:21 PM, 12/20/2022 1:34:12 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -287.29833387539344 (T) = (0 -499201.41402952804) / Math.Sqrt((660227.1557204493 / (27)) + (518542.4127292862 / (23))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (27) + (23) - 2, .025) and -0.14255218013051807 = (436917.82547078276 - 499201.41402952804) / 436917.82547078276 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.DelegatePerf.DelegateInvoke() push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov esi,[ecx+4] mov edi,[ecx+8] xor ebx,ebx xor eax,eax mov [ebp-1C],eax xor edx,edx mov [ebp-18],edx mov ecx,0A382350 mov edx,7D call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE cmp dword ptr ds:[0A38291C],0 mov edx,[ebp-1C] jle short M00_L01 M00_L00: push 0 push 64 push 0 push 64 mov ecx,[esi+4] mov edx,edi call dword ptr [esi+0C] mov ebx,eax mov eax,[ebp-18] inc eax cmp eax,ds:[0A38291C] mov [ebp-18],eax jl short M00_L00 M00_L01: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 97 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.DelegatePerf.DelegateInvoke() push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov esi,[ecx+4] mov edi,[ecx+8] xor ebx,ebx xor eax,eax mov [ebp-1C],eax xor edx,edx mov [ebp-18],edx mov ecx,0A9A4B78 mov edx,7D call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE cmp dword ptr ds:[0A9A5144],0 mov edx,[ebp-1C] jle short M00_L01 M00_L00: push 0 push 64 push 0 push 64 mov ecx,[esi+4] mov edx,edi call dword ptr [esi+0C] mov ebx,eax mov eax,[ebp-18] inc eax cmp eax,ds:[0A9A5144] mov [ebp-18],eax jl short M00_L00 M00_L01: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 97 ``` ### 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)