dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
14.58k stars 4.55k forks source link

Regressions in System.Runtime.InteropServices.Tests.SafeHandleTests #79301

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 3f51e1449f78041bd4f213602f2bbfa4af321dde
Compare 02c144afac6efe0f716e64ea0a701e2eec995866
Diff Diff

Regressions in System.Runtime.InteropServices.Tests.SafeHandleTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[AddRef_GetHandle_Release - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release.html>) 21.27 ns 23.17 ns 1.09 0.06 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.InteropServices.Tests.SafeHandleTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release ```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 23.167984483109716 > 22.256801193923078. IsChangePoint: Marked as a change because one of 10/12/2022 1:44:25 PM, 10/13/2022 5:08:18 AM, 12/2/2022 5:47:06 PM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM. IsRegressionStdDev: Marked as regression because -12.769119078791553 (T) = (0 -22.590857695737032) / Math.Sqrt((0.04019926985012115 / (40)) + (0.10434569843611044 / (11))) is less than -2.0095752371279447 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (40) + (11) - 2, .025) and -0.06145200798759169 = (21.282976079688304 - 22.590857695737032) / 21.282976079688304 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.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release() push ebp mov ebp,esp push esi sub esp,1C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 xor eax,eax mov [ebp-0C],eax mov [ebp-20],ecx mov ecx,[ecx+4] lea edx,[ebp-1C] cmp [ecx],ecx call dword ptr ds:[4F09450]; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) mov ecx,[ebp-20] mov edx,[ecx+4] mov esi,[edx+4] cmp byte ptr [ebp-1C],0 je short M00_L01 cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4F09480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) jmp short M00_L01 cmp byte ptr [ebp-1C],0 je short M00_L00 mov ecx,[ebp-20] mov edx,[ecx+4] cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4F09480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) M00_L00: pop eax jmp eax M00_L01: mov eax,esi lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 102 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) push ebp mov ebp,esp push edi push esi push eax M01_L00: mov eax,[ecx+8] mov [ebp-0C],eax test al,1 jne short M01_L01 lea esi,[ecx+8] lea edi,[eax+4] lock cmpxchg [esi],edi cmp eax,[ebp-0C] jne short M01_L00 mov byte ptr [edx],1 pop ecx pop esi pop edi pop ebp ret M01_L01: mov ecx,offset MT_System.ObjectDisposedException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,189C0 mov edx,2C94000 call CORINFO_HELP_STRCNS mov edi,eax call dword ptr ds:[880D990] push eax mov edx,edi mov ecx,esi call dword ptr ds:[886F960] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 93 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx mov ebx,edx M02_L00: mov edi,[esi+8] test bl,bl jne short M02_L07 M02_L01: test edi,0FFFFFFFC je near ptr M02_L12 mov ecx,edi and ecx,0FFFFFFFD cmp ecx,4 je short M02_L11 M02_L02: xor eax,eax M02_L03: movzx edx,al mov [ebp-10],edx lea ecx,[edi-4] mov eax,edi and eax,0FFFFFFFC cmp eax,4 je short M02_L10 M02_L04: test bl,bl jne short M02_L09 M02_L05: lea edx,[esi+8] mov eax,edi lock cmpxchg [edx],ecx cmp eax,edi jne short M02_L00 cmp dword ptr [ebp-10],0 jne short M02_L08 M02_L06: pop ecx pop ebx pop esi pop edi pop ebp ret M02_L07: test edi,2 je short M02_L01 pop ecx pop ebx pop esi pop edi pop ebp ret M02_L08: call System.Runtime.InteropServices.Marshal.GetLastPInvokeError() mov edi,eax mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+1C] mov ecx,edi call System.Runtime.InteropServices.Marshal.SetLastPInvokeError(Int32) jmp short M02_L06 M02_L09: or ecx,2 jmp short M02_L05 M02_L10: or ecx,1 jmp short M02_L04 M02_L11: cmp byte ptr [esi+0C],0 je short M02_L02 mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+10] test eax,eax sete al movzx eax,al jmp short M02_L03 M02_L12: mov ecx,offset MT_System.ObjectDisposedException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,189C0 mov edx,2C94000 call CORINFO_HELP_STRCNS mov edi,eax call dword ptr ds:[880D990] push eax mov edx,edi mov ecx,esi call dword ptr ds:[886F960] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 220 ``` ### Compare Jit Disasm ```assembly ; System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release() push ebp mov ebp,esp push esi sub esp,1C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 xor eax,eax mov [ebp-0C],eax mov [ebp-20],ecx mov ecx,[ecx+4] lea edx,[ebp-1C] cmp [ecx],ecx call dword ptr ds:[4DB9450]; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) mov ecx,[ebp-20] mov edx,[ecx+4] mov esi,[edx+4] cmp byte ptr [ebp-1C],0 je short M00_L01 cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4DB9480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) jmp short M00_L01 cmp byte ptr [ebp-1C],0 je short M00_L00 mov ecx,[ebp-20] mov edx,[ecx+4] cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4DB9480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) M00_L00: pop eax jmp eax M00_L01: mov eax,esi lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 102 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) push ebp mov ebp,esp push edi push esi push eax M01_L00: mov eax,[ecx+8] mov [ebp-0C],eax test al,1 jne short M01_L01 lea esi,[ecx+8] lea edi,[eax+4] lock cmpxchg [esi],edi cmp eax,[ebp-0C] jne short M01_L00 mov byte ptr [edx],1 pop ecx pop esi pop edi pop ebp ret M01_L01: call dword ptr ds:[87B9EB8] int 3 ; Total bytes of code 46 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 xor eax,eax mov [ebp-20],eax mov esi,ecx mov edi,edx M02_L00: mov ebx,[esi+8] mov [ebp-10],edi mov eax,edi movzx eax,al mov [ebp-1C],eax test eax,eax je short M02_L01 test bl,2 je short M02_L01 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov edx,ebx and edx,0FFFFFFFC mov [ebp-18],edx test edx,edx je near ptr M02_L07 mov ecx,ebx and ecx,0FFFFFFFD cmp ecx,4 jne short M02_L02 cmp byte ptr [esi+0C],0 je short M02_L02 mov ecx,esi mov [ebp-20],ecx mov ecx,[esi] mov ecx,[ecx+28] mov [ebp-24],ecx mov ecx,[ebp-20] mov edi,[ebp-24] call dword ptr [edi+10] test eax,eax sete al movzx eax,al jmp short M02_L03 M02_L02: xor ecx,ecx mov eax,ecx M02_L03: movzx ecx,al mov [ebp-14],ecx lea eax,[ebx-4] cmp dword ptr [ebp-18],4 jne short M02_L04 or eax,1 M02_L04: cmp dword ptr [ebp-1C],0 je short M02_L05 or eax,2 M02_L05: lea edx,[esi+8] mov ecx,eax mov eax,ebx lock cmpxchg [edx],ecx cmp eax,ebx movzx edi,byte ptr [ebp-10] jne near ptr M02_L00 cmp dword ptr [ebp-14],0 je short M02_L06 call System.Runtime.InteropServices.Marshal.GetLastPInvokeError() mov edi,eax mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+1C] mov ecx,edi call System.Runtime.InteropServices.Marshal.SetLastPInvokeError(Int32) M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L07: mov ecx,esi call dword ptr ds:[87B9EB8] int 3 ; Total bytes of code 214 ``` ### 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)
LoopedBard3 commented 1 year ago

Likely caused by https://github.com/dotnet/runtime/pull/79096. @stephentoub is this an expected/acceptable regression?

ghost commented 1 year ago

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch See info in area-owners.md if you want to be subscribed.

Issue Details
### Run Information Architecture | x86 -- | -- OS | Windows 10.0.18362 Baseline | [3f51e1449f78041bd4f213602f2bbfa4af321dde](https://github.com/dotnet/runtime/commit/3f51e1449f78041bd4f213602f2bbfa4af321dde) Compare | [02c144afac6efe0f716e64ea0a701e2eec995866](https://github.com/dotnet/runtime/commit/02c144afac6efe0f716e64ea0a701e2eec995866) Diff | [Diff](https://github.com/dotnet/runtime/compare/3f51e1449f78041bd4f213602f2bbfa4af321dde...02c144afac6efe0f716e64ea0a701e2eec995866) ### Regressions in System.Runtime.InteropServices.Tests.SafeHandleTests Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- [AddRef_GetHandle_Release - Duration of single invocation]() | 21.27 ns | 23.17 ns | 1.09 | 0.06 | False | | | | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-74104d3a02574639a3/Collect%20System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release/1/artifacts/BenchmarkDotNet.Artifacts/System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release-20221206-020045.etl?sv=2021-08-06&se=2023-03-06T09%3A51%3A04Z&sr=c&sp=rl&sig=vKC9RzFnwqd16EHvARQANWo75R5MkazYy4privL%2FvHw%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-7d76363e86fc458f9e/Collect%20System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release/1/artifacts/BenchmarkDotNet.Artifacts/System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release-20221206-020130.etl?sv=2021-08-06&se=2023-03-06T09%3A51%3A04Z&sr=c&sp=rl&sig=KAeSC8wzF%2FZ0mASP5XJc1LW716JPGGWCHgjs27QadV0%3D) ![graph]() [Test Report]() ### Repro ```cmd git clone https://github.com/dotnet/performance.git py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.InteropServices.Tests.SafeHandleTests*' ```
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release ```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 23.167984483109716 > 22.256801193923078. IsChangePoint: Marked as a change because one of 10/12/2022 1:44:25 PM, 10/13/2022 5:08:18 AM, 12/2/2022 5:47:06 PM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM. IsRegressionStdDev: Marked as regression because -12.769119078791553 (T) = (0 -22.590857695737032) / Math.Sqrt((0.04019926985012115 / (40)) + (0.10434569843611044 / (11))) is less than -2.0095752371279447 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (40) + (11) - 2, .025) and -0.06145200798759169 = (21.282976079688304 - 22.590857695737032) / 21.282976079688304 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.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release() push ebp mov ebp,esp push esi sub esp,1C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 xor eax,eax mov [ebp-0C],eax mov [ebp-20],ecx mov ecx,[ecx+4] lea edx,[ebp-1C] cmp [ecx],ecx call dword ptr ds:[4F09450]; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) mov ecx,[ebp-20] mov edx,[ecx+4] mov esi,[edx+4] cmp byte ptr [ebp-1C],0 je short M00_L01 cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4F09480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) jmp short M00_L01 cmp byte ptr [ebp-1C],0 je short M00_L00 mov ecx,[ebp-20] mov edx,[ecx+4] cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4F09480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) M00_L00: pop eax jmp eax M00_L01: mov eax,esi lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 102 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) push ebp mov ebp,esp push edi push esi push eax M01_L00: mov eax,[ecx+8] mov [ebp-0C],eax test al,1 jne short M01_L01 lea esi,[ecx+8] lea edi,[eax+4] lock cmpxchg [esi],edi cmp eax,[ebp-0C] jne short M01_L00 mov byte ptr [edx],1 pop ecx pop esi pop edi pop ebp ret M01_L01: mov ecx,offset MT_System.ObjectDisposedException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,189C0 mov edx,2C94000 call CORINFO_HELP_STRCNS mov edi,eax call dword ptr ds:[880D990] push eax mov edx,edi mov ecx,esi call dword ptr ds:[886F960] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 93 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx mov ebx,edx M02_L00: mov edi,[esi+8] test bl,bl jne short M02_L07 M02_L01: test edi,0FFFFFFFC je near ptr M02_L12 mov ecx,edi and ecx,0FFFFFFFD cmp ecx,4 je short M02_L11 M02_L02: xor eax,eax M02_L03: movzx edx,al mov [ebp-10],edx lea ecx,[edi-4] mov eax,edi and eax,0FFFFFFFC cmp eax,4 je short M02_L10 M02_L04: test bl,bl jne short M02_L09 M02_L05: lea edx,[esi+8] mov eax,edi lock cmpxchg [edx],ecx cmp eax,edi jne short M02_L00 cmp dword ptr [ebp-10],0 jne short M02_L08 M02_L06: pop ecx pop ebx pop esi pop edi pop ebp ret M02_L07: test edi,2 je short M02_L01 pop ecx pop ebx pop esi pop edi pop ebp ret M02_L08: call System.Runtime.InteropServices.Marshal.GetLastPInvokeError() mov edi,eax mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+1C] mov ecx,edi call System.Runtime.InteropServices.Marshal.SetLastPInvokeError(Int32) jmp short M02_L06 M02_L09: or ecx,2 jmp short M02_L05 M02_L10: or ecx,1 jmp short M02_L04 M02_L11: cmp byte ptr [esi+0C],0 je short M02_L02 mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+10] test eax,eax sete al movzx eax,al jmp short M02_L03 M02_L12: mov ecx,offset MT_System.ObjectDisposedException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,189C0 mov edx,2C94000 call CORINFO_HELP_STRCNS mov edi,eax call dword ptr ds:[880D990] push eax mov edx,edi mov ecx,esi call dword ptr ds:[886F960] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 220 ``` ### Compare Jit Disasm ```assembly ; System.Runtime.InteropServices.Tests.SafeHandleTests.AddRef_GetHandle_Release() push ebp mov ebp,esp push esi sub esp,1C vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-1C],xmm4 xor eax,eax mov [ebp-0C],eax mov [ebp-20],ecx mov ecx,[ecx+4] lea edx,[ebp-1C] cmp [ecx],ecx call dword ptr ds:[4DB9450]; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) mov ecx,[ebp-20] mov edx,[ecx+4] mov esi,[edx+4] cmp byte ptr [ebp-1C],0 je short M00_L01 cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4DB9480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) jmp short M00_L01 cmp byte ptr [ebp-1C],0 je short M00_L00 mov ecx,[ebp-20] mov edx,[ecx+4] cmp [edx],dl mov ecx,edx xor edx,edx call dword ptr ds:[4DB9480]; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) M00_L00: pop eax jmp eax M00_L01: mov eax,esi lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 102 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef) push ebp mov ebp,esp push edi push esi push eax M01_L00: mov eax,[ecx+8] mov [ebp-0C],eax test al,1 jne short M01_L01 lea esi,[ecx+8] lea edi,[eax+4] lock cmpxchg [esi],edi cmp eax,[ebp-0C] jne short M01_L00 mov byte ptr [edx],1 pop ecx pop esi pop edi pop ebp ret M01_L01: call dword ptr ds:[87B9EB8] int 3 ; Total bytes of code 46 ``` ```assembly ; System.Runtime.InteropServices.SafeHandle.InternalRelease(Boolean) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 xor eax,eax mov [ebp-20],eax mov esi,ecx mov edi,edx M02_L00: mov ebx,[esi+8] mov [ebp-10],edi mov eax,edi movzx eax,al mov [ebp-1C],eax test eax,eax je short M02_L01 test bl,2 je short M02_L01 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov edx,ebx and edx,0FFFFFFFC mov [ebp-18],edx test edx,edx je near ptr M02_L07 mov ecx,ebx and ecx,0FFFFFFFD cmp ecx,4 jne short M02_L02 cmp byte ptr [esi+0C],0 je short M02_L02 mov ecx,esi mov [ebp-20],ecx mov ecx,[esi] mov ecx,[ecx+28] mov [ebp-24],ecx mov ecx,[ebp-20] mov edi,[ebp-24] call dword ptr [edi+10] test eax,eax sete al movzx eax,al jmp short M02_L03 M02_L02: xor ecx,ecx mov eax,ecx M02_L03: movzx ecx,al mov [ebp-14],ecx lea eax,[ebx-4] cmp dword ptr [ebp-18],4 jne short M02_L04 or eax,1 M02_L04: cmp dword ptr [ebp-1C],0 je short M02_L05 or eax,2 M02_L05: lea edx,[esi+8] mov ecx,eax mov eax,ebx lock cmpxchg [edx],ecx cmp eax,ebx movzx edi,byte ptr [ebp-10] jne near ptr M02_L00 cmp dword ptr [ebp-14],0 je short M02_L06 call System.Runtime.InteropServices.Marshal.GetLastPInvokeError() mov edi,eax mov ecx,esi mov eax,[esi] mov eax,[eax+28] call dword ptr [eax+1C] mov ecx,edi call System.Runtime.InteropServices.Marshal.SetLastPInvokeError(Int32) M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L07: mov ecx,esi call dword ptr ds:[87B9EB8] int 3 ; Total bytes of code 214 ``` ### 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)
Author: performanceautofiler[bot]
Assignees: EgorBo
Labels: `area-CodeGen-coreclr`, `untriaged`
Milestone: -
stephentoub commented 1 year ago

Likely caused by https://github.com/dotnet/runtime/pull/79096. @stephentoub is this an expected/acceptable regression?

It's acceptable but I'm surprised by it. I'll take a look.