Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Perf] Windows/x64: 10 Regressions on 12/14/2022 8:02:51 PM #10854

Closed
performanceautofiler bot opened this issue Dec 20, 2022 · 2 comments
Closed

[Perf] Windows/x64: 10 Regressions on 12/14/2022 8:02:51 PM #10854

performanceautofiler bot opened this issue Dec 20, 2022 · 2 comments

Comments

@performanceautofiler
Copy link

performanceautofiler bot commented Dec 20, 2022

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8e15d9f523209caf08db57897777b7beb0516c99
Compare a78811401f3b2fa8be2d8e40b9bb1e706a9e8501
Diff Diff

Regressions in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
BinarySearch - Duration of single invocation 6.00 ns 7.81 ns 1.30 0.04 False
BinarySearch - Duration of single invocation 10.43 ns 15.28 ns 1.47 0.01 False
BinarySearch - Duration of single invocation 16.14 ns 24.63 ns 1.53 0.02 False
Reverse - Duration of single invocation 28.66 ns 35.08 ns 1.22 0.21 False

graph
graph
graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Memory.Span<Int32>.BinarySearch(Size: 4)


Description of detection logic

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.81282192488133 > 6.177972116620214.
IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -74.47470701073772 (T) = (0 -7.802822562265287) / Math.Sqrt((0.0027751855420452285 / (33)) + (0.013346146892685571 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.31838481442736805 = (5.918471205733959 - 7.802822562265287) / 5.918471205733959 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Memory.Span&lt;Int32&gt;.BinarySearch(Size: 33)

```log

Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 15.276525756564094 > 10.82115353834516.
IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -92.02711979211446 (T) = (0 -14.964753891580115) / Math.Sqrt((0.007534404503160452 / (33)) + (0.05500010862244107 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.44656295885969177 = (10.345041534435978 - 14.964753891580115) / 10.345041534435978 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Memory.Span&lt;Int32&gt;.BinarySearch(Size: 512)

```log

Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 24.62925930286987 > 18.035972463382862.
IsChangePoint: Marked as a change because one of 11/2/2022 9:35:40 AM, 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -50.467211981075316 (T) = (0 -23.910476715331512) / Math.Sqrt((0.1691709539411993 / (33)) + (0.3686229736057124 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.43286372357762404 = (16.687195245358716 - 23.910476715331512) / 16.687195245358716 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Memory.Span&lt;Int32&gt;.Reverse(Size: 512)

```log

Description of detection logic

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 35.08335472118732 > 30.482046659281487.
IsChangePoint: Marked as a change because one of 11/22/2022 2:20:42 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -14.834634591797416 (T) = (0 -36.74689453703301) / Math.Sqrt((2.8775836940036714 / (29)) + (3.1218766123536392 / (28))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (28) - 2, .025) and -0.2274690645880634 = (29.937124769303416 - 36.74689453703301) / 29.937124769303416 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
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x64
OS Windows 10.0.18362
Baseline 8e15d9f523209caf08db57897777b7beb0516c99
Compare a78811401f3b2fa8be2d8e40b9bb1e706a9e8501
Diff Diff

Regressions in System.Text.Json.Tests.Perf_Get

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetBoolean - Duration of single invocation 110.25 ns 149.49 ns 1.36 0.03 False Trace Trace

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Get*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Tests.Perf_Get.GetBoolean


Description of detection logic

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 149.48815873572053 > 138.65029463933243.
IsChangePoint: Marked as a change because one of 11/14/2022 1:59:26 PM, 12/6/2022 2:12:43 AM, 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -9.473070425807844 (T) = (0 -144.14880460281043) / Math.Sqrt((101.69284185929985 / (33)) + (13.575106577295838 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.14351723299876504 = (126.05739593866366 - 144.14880460281043) / 126.05739593866366 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Tests.Perf_Get.GetBoolean()
       push      rsi
       sub       rsp,160
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       rax,0FFFFFFFFFFFFFEE0
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+160],xmm4
       vmovdqa   xmmword ptr [rsp+rax+170],xmm4
       vmovdqa   xmmword ptr [rsp+rax+180],xmm4
       add       rax,30
       jne       short M00_L00
       xor       esi,esi
       mov       rdx,1E63AC06B90
       mov       rdx,[rdx]
       add       rdx,10
       mov       r9d,5
       xor       ecx,ecx
       mov       [rsp+80],rcx
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+88],xmm0
       mov       [rsp+98],rcx
       mov       [rsp+58],rdx
       mov       [rsp+60],r9d
       vmovdqu   ymm0,ymmword ptr [rsp+68]
       vmovdqu   ymmword ptr [rsp+20],ymm0
       vmovdqu   xmm0,xmmword ptr [rsp+88]
       vmovdqu   xmmword ptr [rsp+40],xmm0
       mov       rdx,[rsp+98]
       mov       [rsp+50],rdx
       lea       rdx,[rsp+58]
       lea       r9,[rsp+20]
       lea       rcx,[rsp+0A0]
       mov       r8d,1
       call      qword ptr [7FFF1DC7B1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       cmp       byte ptr [rsp+0CB],0
       jne       short M00_L01
       lea       rcx,[rsp+0A0]
       call      qword ptr [7FFF1DC7B408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       jmp       short M00_L02
       nop
M00_L01:
       lea       rcx,[rsp+0A0]
       call      qword ptr [7FFF1DC7B7B0]
M00_L02:
       movzx     eax,al
       test      eax,eax
       jne       short M00_L03
       cmp       byte ptr [rsp+0C4],0
       je        short M00_L03
       cmp       byte ptr [rsp+0C8],0
       je        short M00_L08
M00_L03:
       xor       eax,eax
M00_L04:
       movzx     r9d,byte ptr [rsp+0C8]
       cmp       r9d,9
       jne       short M00_L05
       mov       ecx,1
       jmp       short M00_L06
M00_L05:
       cmp       r9d,0A
       jne       short M00_L07
       xor       ecx,ecx
M00_L06:
       xor       ecx,esi
       movzx     esi,cl
       inc       eax
       cmp       eax,64
       jl        short M00_L04
       mov       eax,esi
       add       rsp,160
       pop       rsi
       ret
M00_L07:
       movzx     ecx,byte ptr [rsp+0C8]
       call      qword ptr [7FFF1DC7D858]
       int       3
M00_L08:
       xor       r9d,r9d
       mov       [rsp+58],r9
       xor       r9d,r9d
       mov       [rsp+60],r9d
       lea       r9,[rsp+58]
       lea       rcx,[rsp+0A0]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFF1DC7D960]
       int       3
; Total bytes of code 401
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,1E63AC02008
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFF1DC7B468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFF1DC7B5E8]
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFF1DC7B3A8]
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFF1DC7B4F8]
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFF1DC7B3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFF1DC7B480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFF1DC7B450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF1DC7D960]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF1DC7D960]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF1DC7D960]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF1DC7D960]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFF1DC7D960]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

Compare Jit Disasm

; System.Text.Json.Tests.Perf_Get.GetBoolean()
       push      rsi
       sub       rsp,160
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       rax,0FFFFFFFFFFFFFEE0
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+160],xmm4
       vmovdqa   xmmword ptr [rsp+rax+170],xmm4
       vmovdqa   xmmword ptr [rsp+rax+180],xmm4
       add       rax,30
       jne       short M00_L00
       xor       esi,esi
       mov       rdx,2198A806B80
       mov       rdx,[rdx]
       add       rdx,10
       mov       r9d,5
       xor       ecx,ecx
       mov       [rsp+80],rcx
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+88],xmm0
       mov       [rsp+98],rcx
       mov       [rsp+58],rdx
       mov       [rsp+60],r9d
       vmovdqu   ymm0,ymmword ptr [rsp+68]
       vmovdqu   ymmword ptr [rsp+20],ymm0
       vmovdqu   xmm0,xmmword ptr [rsp+88]
       vmovdqu   xmmword ptr [rsp+40],xmm0
       mov       rdx,[rsp+98]
       mov       [rsp+50],rdx
       lea       rdx,[rsp+58]
       lea       r9,[rsp+20]
       lea       rcx,[rsp+0A0]
       mov       r8d,1
       call      qword ptr [7FF86D2691F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       cmp       byte ptr [rsp+0CB],0
       jne       short M00_L01
       lea       rcx,[rsp+0A0]
       call      qword ptr [7FF86D269408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       jmp       short M00_L02
M00_L01:
       lea       rcx,[rsp+0A0]
       call      qword ptr [7FF86D2697B0]
M00_L02:
       movzx     eax,al
       test      eax,eax
       jne       short M00_L03
       cmp       byte ptr [rsp+0C4],0
       je        short M00_L03
       cmp       byte ptr [rsp+0C8],0
       je        short M00_L08
M00_L03:
       xor       eax,eax
M00_L04:
       movzx     r9d,byte ptr [rsp+0C8]
       cmp       r9d,9
       jne       short M00_L05
       mov       ecx,1
       jmp       short M00_L06
M00_L05:
       cmp       r9d,0A
       jne       short M00_L07
       xor       ecx,ecx
M00_L06:
       xor       ecx,esi
       movzx     esi,cl
       inc       eax
       cmp       eax,64
       jl        short M00_L04
       mov       eax,esi
       add       rsp,160
       pop       rsi
       ret
M00_L07:
       movzx     ecx,byte ptr [rsp+0C8]
       call      qword ptr [7FF86D26B858]
       int       3
M00_L08:
       xor       r9d,r9d
       mov       [rsp+58],r9
       xor       r9d,r9d
       mov       [rsp+60],r9d
       lea       r9,[rsp+58]
       lea       rcx,[rsp+0A0]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FF86D26B960]
       int       3
; Total bytes of code 388
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,2198A802000
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FF86D269468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FF86D2695E8]
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FF86D2693A8]
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FF86D2694F8]
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FF86D2693D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FF86D269480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FF86D269450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FF86D26B960]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FF86D26B960]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FF86D26B960]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FF86D26B960]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FF86D26B960]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8e15d9f523209caf08db57897777b7beb0516c99
Compare a78811401f3b2fa8be2d8e40b9bb1e706a9e8501
Diff Diff

Regressions 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 44.66 ns 54.94 ns 1.23 0.01 False
DivideBenchmark - Duration of single invocation 44.53 ns 54.63 ns 1.23 0.01 False

graph
graph
Test Report

Repro

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


Description of detection logic

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 54.940112583145826 > 46.56056818840926.
IsChangePoint: Marked as a change because one of 12/1/2022 8:17:56 AM, 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -242.8390932020178 (T) = (0 -54.95881270652317) / Math.Sqrt((0.05655346328008436 / (33)) + (0.004183215798348869 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.23761418336386855 = (44.407064370532375 - 54.95881270652317) / 44.407064370532375 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Numerics.Tests.Perf_VectorOf&lt;Int16&gt;.DivideBenchmark

```log

Description of detection logic

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 54.62860770823051 > 46.90859947027962.
IsChangePoint: Marked as a change because one of 12/1/2022 8:17:56 AM, 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -197.55221430685745 (T) = (0 -54.907275016195975) / Math.Sqrt((0.041610806066497696 / (33)) + (0.036622827614894424 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.23447317652154026 = (44.478305450841766 - 54.907275016195975) / 44.478305450841766 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
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8e15d9f523209caf08db57897777b7beb0516c99
Compare a78811401f3b2fa8be2d8e40b9bb1e706a9e8501
Diff Diff

Regressions in System.Collections.ContainsFalse<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableSortedSet - Duration of single invocation 38.20 μs 42.69 μs 1.12 0.00 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.ContainsFalse&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsFalse<Int32>.ImmutableSortedSet(Size: 512)


Description of detection logic

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 42.687558388478 > 40.43525969827587.
IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -24.770341640582394 (T) = (0 -41688.20256861321) / Math.Sqrt((107213.81204178682 / (33)) + (287290.30164881505 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.07910036156495583 = (38632.368270320345 - 41688.20256861321) / 38632.368270320345 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
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Dec 20, 2022

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8e15d9f523209caf08db57897777b7beb0516c99
Compare a78811401f3b2fa8be2d8e40b9bb1e706a9e8501
Diff Diff

Regressions in System.Net.Primitives.Tests.CredentialCacheTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ForEach - Duration of single invocation 366.89 ns 396.63 ns 1.08 0.02 False Trace Trace

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Net.Primitives.Tests.CredentialCacheTests*'

Payloads

Baseline
Compare

Histogram

System.Net.Primitives.Tests.CredentialCacheTests.ForEach(uriCount: 10, hostPortCount: 10)


Description of detection logic

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 396.62580148693036 > 382.33439096357455.
IsChangePoint: Marked as a change because one of 11/5/2022 3:01:26 AM, 11/23/2022 1:02:40 AM, 12/6/2022 2:12:43 AM, 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -16.15252874654583 (T) = (0 -391.25997999537026) / Math.Sqrt((44.305554478125366 / (33)) + (29.60360666805713 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.07096246524155121 = (365.3349138684549 - 391.25997999537026) / 365.3349138684549 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.Net.Primitives.Tests.CredentialCacheTests.ForEach(Int32, Int32)
       push      rbp
       push      rsi
       sub       rsp,38
       lea       rbp,[rsp+40]
       mov       [rbp-20],rsp
       mov       rsi,rcx
       mov       rcx,[rsi+10]
       cmp       [rcx],cl
       mov       [rbp-10],edx
       mov       [rbp-0C],r8d
       mov       rdx,[rbp-10]
       call      qword ptr [7FF866C858D0]; System.Collections.Generic.Dictionary`2[[System.ValueTuple`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib],[System.__Canon, System.Private.CoreLib]].FindValue(System.ValueTuple`2<Int32,Int32>)
       test      rax,rax
       je        near ptr M00_L03
       mov       rcx,[rax]
       mov       rsi,[rsi+8]
       cmp       [rcx],cl
       call      qword ptr [7FF866E59AB0]; System.Net.CredentialCache+CredentialEnumerator.Create(System.Net.CredentialCache)
       mov       rdx,rax
       mov       [rbp-18],rdx
       mov       rcx,rdx
       mov       r11,7FF8663005C0
       call      qword ptr [r11]
       test      eax,eax
       je        short M00_L01
M00_L00:
       mov       rcx,[rbp-18]
       mov       r11,7FF8663005C8
       call      qword ptr [r11]
       lea       rcx,[rsi+10]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,[rbp-18]
       mov       r11,7FF8663005C0
       call      qword ptr [r11]
       test      eax,eax
       jne       short M00_L00
M00_L01:
       mov       rdx,[rbp-18]
       mov       rcx,offset MT_System.IDisposable
       call      qword ptr [7FF8664AD810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rax,rax
       je        short M00_L02
       mov       rcx,rax
       mov       r11,7FF8663005D0
       call      qword ptr [r11]
M00_L02:
       nop
       add       rsp,38
       pop       rsi
       pop       rbp
       ret
M00_L03:
       mov       rcx,[rbp-10]
       call      qword ptr [7FF866E599F0]
       int       3
       push      rbp
       push      rsi
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+40]
       mov       rdx,[rbp-18]
       mov       rcx,offset MT_System.IDisposable
       call      qword ptr [7FF8664AD810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rax,rax
       je        short M00_L04
       mov       rcx,rax
       mov       r11,7FF8663005D0
       call      qword ptr [r11]
M00_L04:
       nop
       add       rsp,28
       pop       rsi
       pop       rbp
       ret
; Total bytes of code 270
; System.Collections.Generic.Dictionary`2[[System.ValueTuple`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib],[System.__Canon, System.Private.CoreLib]].FindValue(System.ValueTuple`2<Int32,Int32>)
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       [rsp+68],rdx
       mov       rsi,rcx
       cmp       qword ptr [rsi+8],0
       jne       short M01_L01
M01_L00:
       xor       r14d,r14d
       jmp       near ptr M01_L09
M01_L01:
       mov       rdi,[rsi+18]
       test      rdi,rdi
       jne       near ptr M01_L04
       lea       rcx,[rsp+68]
       call      qword ptr [7FF866C853A8]; System.ValueTuple`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]].GetHashCode()
       mov       edi,eax
       mov       rcx,[rsi+8]
       mov       edx,[rcx+8]
       mov       r8d,edi
       imul      r8,[rsi+30]
       shr       r8,20
       inc       r8
       mov       edx,edx
       imul      rdx,r8
       shr       rdx,20
       cmp       edx,[rcx+8]
       jae       near ptr M01_L10
       mov       edx,edx
       lea       rcx,[rcx+rdx*4+10]
       mov       ebx,[rcx]
       mov       rsi,[rsi+10]
       xor       ebp,ebp
       dec       ebx
M01_L02:
       cmp       [rsi+8],ebx
       jbe       short M01_L00
       mov       ecx,ebx
       lea       rcx,[rcx+rcx*2]
       lea       r14,[rsi+rcx*8+10]
       cmp       [r14+8],edi
       jne       short M01_L03
       lea       rcx,[r14+10]
       mov       edx,[rcx]
       mov       ebx,[rcx+4]
       mov       r8d,[rsp+68]
       mov       r15d,[rsp+6C]
       mov       rcx,25570C01FA0
       mov       rcx,[rcx]
       call      qword ptr [7FF866A63170]; System.Collections.Generic.GenericEqualityComparer`1[[System.Int32, System.Private.CoreLib]].Equals(Int32, Int32)
       test      eax,eax
       je        short M01_L03
       mov       rcx,25570C01FA0
       mov       rcx,[rcx]
       mov       edx,ebx
       mov       r8d,r15d
       call      qword ptr [7FF866A63170]; System.Collections.Generic.GenericEqualityComparer`1[[System.Int32, System.Private.CoreLib]].Equals(Int32, Int32)
       test      eax,eax
       jne       near ptr M01_L08
M01_L03:
       mov       ebx,[r14+0C]
       inc       ebp
       cmp       [rsi+8],ebp
       jae       short M01_L02
       jmp       near ptr M01_L07
M01_L04:
       mov       rcx,rdi
       mov       rdx,[rsp+68]
       mov       r11,7FF8663005D8
       call      qword ptr [r11]
       mov       ebx,eax
       mov       rdx,[rsi+8]
       mov       ecx,[rdx+8]
       mov       r8d,ebx
       imul      r8,[rsi+30]
       shr       r8,20
       inc       r8
       mov       ecx,ecx
       imul      rcx,r8
       shr       rcx,20
       cmp       ecx,[rdx+8]
       jae       short M01_L10
       mov       ecx,ecx
       lea       rdx,[rdx+rcx*4+10]
       mov       ebp,[rdx]
       mov       rsi,[rsi+10]
       xor       r15d,r15d
       dec       ebp
M01_L05:
       cmp       [rsi+8],ebp
       jbe       near ptr M01_L00
       mov       edx,ebp
       lea       rdx,[rdx+rdx*2]
       lea       r14,[rsi+rdx*8+10]
       cmp       [r14+8],ebx
       jne       short M01_L06
       mov       rdx,[r14+10]
       mov       rcx,rdi
       mov       r8,[rsp+68]
       mov       r11,7FF8663005E0
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L08
M01_L06:
       mov       ebp,[r14+0C]
       inc       r15d
       cmp       [rsi+8],r15d
       jae       short M01_L05
M01_L07:
       call      qword ptr [7FF866BEFB10]
       int       3
M01_L08:
       cmp       [r14],r14b
M01_L09:
       mov       rax,r14
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M01_L10:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 409
; System.Net.CredentialCache+CredentialEnumerator.Create(System.Net.CredentialCache)
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rsi,rcx
       mov       rdi,[rsi+8]
       test      rdi,rdi
       je        near ptr M02_L04
       cmp       qword ptr [rsi+10],0
       jne       near ptr M02_L01
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator+SingleTableCredentialEnumerator`1[[System.Net.CredentialKey, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       lea       rcx,[rbx+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       ecx,[rsi+18]
       mov       [rbx+18],ecx
       mov       rax,[rdi+28]
       test      rax,rax
       jne       short M02_L00
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       lea       rcx,[rsi+8]
       mov       rdx,rdi
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rdi+28]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rsi
M02_L00:
       mov       rdx,[rax+8]
       mov       esi,[rdx+44]
       lea       rdi,[rbx+20]
       mov       rcx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       mov       [rdi+8],rax
       mov       [rdi+10],eax
       mov       [rdi+14],esi
       mov       rax,rbx
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M02_L01:
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator+DoubleTableCredentialEnumerator
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       lea       rcx,[rbx+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       ecx,[rsi+18]
       mov       [rbx+18],ecx
       mov       rax,[rdi+28]
       test      rax,rax
       jne       short M02_L02
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rbp,rax
       lea       rcx,[rbp+8]
       mov       rdx,rdi
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rdi+28]
       mov       rdx,rbp
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rbp
M02_L02:
       mov       rdx,[rax+8]
       mov       edi,[rdx+44]
       lea       rbp,[rbx+20]
       mov       rcx,rbp
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       ecx,ecx
       mov       [rbp+8],rcx
       mov       [rbp+10],ecx
       mov       [rbp+14],edi
       mov       rsi,[rsi+10]
       mov       rax,[rsi+28]
       test      rax,rax
       jne       short M02_L03
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialHostKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       lea       rcx,[rdi+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rsi+28]
       mov       rdx,rdi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rdi
M02_L03:
       mov       rdx,[rax+8]
       mov       esi,[rdx+44]
       lea       rdi,[rbx+40]
       mov       rcx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       mov       [rdi+8],rax
       mov       [rdi+10],eax
       mov       [rdi+14],esi
       mov       rax,rbx
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M02_L04:
       cmp       qword ptr [rsi+10],0
       jne       short M02_L05
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       lea       rcx,[rdi+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       eax,[rsi+18]
       mov       [rdi+18],eax
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M02_L05:
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator+SingleTableCredentialEnumerator`1[[System.Net.CredentialHostKey, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       mov       rbx,[rsi+10]
       lea       rcx,[rdi+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       ecx,[rsi+18]
       mov       [rdi+18],ecx
       mov       rax,[rbx+28]
       test      rax,rax
       jne       short M02_L06
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialHostKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       lea       rcx,[rsi+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rbx+28]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rsi
M02_L06:
       mov       rdx,[rax+8]
       mov       esi,[rdx+44]
       lea       rbx,[rdi+20]
       mov       rcx,rbx
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       mov       [rbx+8],rax
       mov       [rbx+10],eax
       mov       [rbx+14],esi
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 582
; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M03_L03
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M03_L02
       mov       r9,[rax+38]
       cmp       r8,4
       jl        short M03_L01
M03_L00:
       cmp       [r9],rcx
       je        short M03_L03
       cmp       [r9+8],rcx
       je        short M03_L03
       cmp       [r9+10],rcx
       je        short M03_L03
       cmp       [r9+18],rcx
       je        short M03_L03
       add       r9,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M03_L00
       test      r8,r8
       je        short M03_L02
M03_L01:
       cmp       [r9],rcx
       je        short M03_L03
       add       r9,8
       dec       r8
       test      r8,r8
       jg        short M03_L01
M03_L02:
       test      dword ptr [rax],406C0000
       jne       short M03_L04
       xor       edx,edx
M03_L03:
       mov       rax,rdx
       ret
M03_L04:
       jmp       qword ptr [7FF8664AD840]
; Total bytes of code 107

Compare Jit Disasm

; System.Net.Primitives.Tests.CredentialCacheTests.ForEach(Int32, Int32)
       push      rbp
       push      rsi
       sub       rsp,38
       lea       rbp,[rsp+40]
       mov       [rbp-20],rsp
       mov       rsi,rcx
       mov       rcx,[rsi+10]
       cmp       [rcx],cl
       mov       [rbp-10],edx
       mov       [rbp-0C],r8d
       mov       rdx,[rbp-10]
       call      qword ptr [7FFE941E58D0]; System.Collections.Generic.Dictionary`2[[System.ValueTuple`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib],[System.__Canon, System.Private.CoreLib]].FindValue(System.ValueTuple`2<Int32,Int32>)
       test      rax,rax
       je        near ptr M00_L03
       mov       rcx,[rax]
       mov       rsi,[rsi+8]
       cmp       [rcx],cl
       call      qword ptr [7FFE943C90A8]; System.Net.CredentialCache+CredentialEnumerator.Create(System.Net.CredentialCache)
       mov       rdx,rax
       mov       [rbp-18],rdx
       mov       rcx,rdx
       mov       r11,7FFE938705B8
       call      qword ptr [r11]
       test      eax,eax
       je        short M00_L01
M00_L00:
       mov       rcx,[rbp-18]
       mov       r11,7FFE938705C0
       call      qword ptr [r11]
       lea       rcx,[rsi+10]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,[rbp-18]
       mov       r11,7FFE938705B8
       call      qword ptr [r11]
       test      eax,eax
       jne       short M00_L00
M00_L01:
       mov       rdx,[rbp-18]
       mov       rcx,offset MT_System.IDisposable
       call      qword ptr [7FFE93A1D810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rax,rax
       je        short M00_L02
       mov       rcx,rax
       mov       r11,7FFE938705C8
       call      qword ptr [r11]
M00_L02:
       nop
       add       rsp,38
       pop       rsi
       pop       rbp
       ret
M00_L03:
       mov       rcx,[rbp-10]
       call      qword ptr [7FFE943C7FC0]
       int       3
       push      rbp
       push      rsi
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+40]
       mov       rdx,[rbp-18]
       mov       rcx,offset MT_System.IDisposable
       call      qword ptr [7FFE93A1D810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rax,rax
       je        short M00_L04
       mov       rcx,rax
       mov       r11,7FFE938705C8
       call      qword ptr [r11]
M00_L04:
       nop
       add       rsp,28
       pop       rsi
       pop       rbp
       ret
; Total bytes of code 270
; System.Collections.Generic.Dictionary`2[[System.ValueTuple`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]], System.Private.CoreLib],[System.__Canon, System.Private.CoreLib]].FindValue(System.ValueTuple`2<Int32,Int32>)
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       [rsp+68],rdx
       mov       rsi,rcx
       cmp       qword ptr [rsi+8],0
       jne       short M01_L01
M01_L00:
       xor       r14d,r14d
       jmp       near ptr M01_L09
M01_L01:
       mov       rdi,[rsi+18]
       test      rdi,rdi
       jne       near ptr M01_L04
       lea       rcx,[rsp+68]
       call      qword ptr [7FFE941E53A8]; System.ValueTuple`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]].GetHashCode()
       mov       edi,eax
       mov       rcx,[rsi+8]
       mov       edx,[rcx+8]
       mov       r8d,edi
       imul      r8,[rsi+30]
       shr       r8,20
       inc       r8
       mov       edx,edx
       imul      rdx,r8
       shr       rdx,20
       cmp       edx,[rcx+8]
       jae       near ptr M01_L10
       mov       edx,edx
       lea       rcx,[rcx+rdx*4+10]
       mov       ebx,[rcx]
       mov       rsi,[rsi+10]
       xor       ebp,ebp
       dec       ebx
M01_L02:
       cmp       [rsi+8],ebx
       jbe       short M01_L00
       mov       ecx,ebx
       lea       rcx,[rcx+rcx*2]
       lea       r14,[rsi+rcx*8+10]
       cmp       [r14+8],edi
       jne       short M01_L03
       lea       rcx,[r14+10]
       mov       edx,[rcx]
       mov       ebx,[rcx+4]
       mov       r8d,[rsp+68]
       mov       r15d,[rsp+6C]
       mov       rcx,193D8C01FA0
       mov       rcx,[rcx]
       call      qword ptr [7FFE93FD3190]; System.Collections.Generic.GenericEqualityComparer`1[[System.Int32, System.Private.CoreLib]].Equals(Int32, Int32)
       test      eax,eax
       je        short M01_L03
       mov       rcx,193D8C01FA0
       mov       rcx,[rcx]
       mov       edx,ebx
       mov       r8d,r15d
       call      qword ptr [7FFE93FD3190]; System.Collections.Generic.GenericEqualityComparer`1[[System.Int32, System.Private.CoreLib]].Equals(Int32, Int32)
       test      eax,eax
       jne       near ptr M01_L08
M01_L03:
       mov       ebx,[r14+0C]
       inc       ebp
       cmp       [rsi+8],ebp
       jae       short M01_L02
       jmp       near ptr M01_L07
M01_L04:
       mov       rcx,rdi
       mov       rdx,[rsp+68]
       mov       r11,7FFE938705D0
       call      qword ptr [r11]
       mov       ebx,eax
       mov       rdx,[rsi+8]
       mov       ecx,[rdx+8]
       mov       r8d,ebx
       imul      r8,[rsi+30]
       shr       r8,20
       inc       r8
       mov       ecx,ecx
       imul      rcx,r8
       shr       rcx,20
       cmp       ecx,[rdx+8]
       jae       short M01_L10
       mov       ecx,ecx
       lea       rdx,[rdx+rcx*4+10]
       mov       ebp,[rdx]
       mov       rsi,[rsi+10]
       xor       r15d,r15d
       dec       ebp
M01_L05:
       cmp       [rsi+8],ebp
       jbe       near ptr M01_L00
       mov       edx,ebp
       lea       rdx,[rdx+rdx*2]
       lea       r14,[rsi+rdx*8+10]
       cmp       [r14+8],ebx
       jne       short M01_L06
       mov       rdx,[r14+10]
       mov       rcx,rdi
       mov       r8,[rsp+68]
       mov       r11,7FFE938705D8
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L08
M01_L06:
       mov       ebp,[r14+0C]
       inc       r15d
       cmp       [rsi+8],r15d
       jae       short M01_L05
M01_L07:
       call      qword ptr [7FFE9415FB10]
       int       3
M01_L08:
       cmp       [r14],r14b
M01_L09:
       mov       rax,r14
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M01_L10:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 409
; System.Net.CredentialCache+CredentialEnumerator.Create(System.Net.CredentialCache)
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rsi,rcx
       mov       rdi,[rsi+8]
       test      rdi,rdi
       je        near ptr M02_L04
       cmp       qword ptr [rsi+10],0
       jne       near ptr M02_L01
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator+SingleTableCredentialEnumerator`1[[System.Net.CredentialKey, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       lea       rcx,[rbx+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       ecx,[rsi+18]
       mov       [rbx+18],ecx
       mov       rax,[rdi+28]
       test      rax,rax
       jne       short M02_L00
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       lea       rcx,[rsi+8]
       mov       rdx,rdi
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rdi+28]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rsi
M02_L00:
       mov       rdx,[rax+8]
       mov       esi,[rdx+44]
       lea       rdi,[rbx+20]
       mov       rcx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       mov       [rdi+8],rax
       mov       [rdi+10],eax
       mov       [rdi+14],esi
       mov       rax,rbx
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M02_L01:
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator+DoubleTableCredentialEnumerator
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       lea       rcx,[rbx+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       ecx,[rsi+18]
       mov       [rbx+18],ecx
       mov       rax,[rdi+28]
       test      rax,rax
       jne       short M02_L02
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rbp,rax
       lea       rcx,[rbp+8]
       mov       rdx,rdi
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rdi+28]
       mov       rdx,rbp
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rbp
M02_L02:
       mov       rdx,[rax+8]
       mov       edi,[rdx+44]
       lea       rbp,[rbx+20]
       mov       rcx,rbp
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       ecx,ecx
       mov       [rbp+8],rcx
       mov       [rbp+10],ecx
       mov       [rbp+14],edi
       mov       rsi,[rsi+10]
       mov       rax,[rsi+28]
       test      rax,rax
       jne       short M02_L03
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialHostKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       lea       rcx,[rdi+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rsi+28]
       mov       rdx,rdi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rdi
M02_L03:
       mov       rdx,[rax+8]
       mov       esi,[rdx+44]
       lea       rdi,[rbx+40]
       mov       rcx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       mov       [rdi+8],rax
       mov       [rdi+10],eax
       mov       [rdi+14],esi
       mov       rax,rbx
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M02_L04:
       cmp       qword ptr [rsi+10],0
       jne       short M02_L05
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       lea       rcx,[rdi+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       eax,[rsi+18]
       mov       [rdi+18],eax
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
M02_L05:
       mov       rcx,offset MT_System.Net.CredentialCache+CredentialEnumerator+SingleTableCredentialEnumerator`1[[System.Net.CredentialHostKey, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       mov       rbx,[rsi+10]
       lea       rcx,[rdi+8]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       ecx,[rsi+18]
       mov       [rdi+18],ecx
       mov       rax,[rbx+28]
       test      rax,rax
       jne       short M02_L06
       mov       rcx,offset MT_System.Collections.Generic.Dictionary`2+ValueCollection[[System.Net.CredentialHostKey, System.Net.Primitives],[System.Net.NetworkCredential, System.Net.Primitives]]
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       lea       rcx,[rsi+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[rbx+28]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rax,rsi
M02_L06:
       mov       rdx,[rax+8]
       mov       esi,[rdx+44]
       lea       rbx,[rdi+20]
       mov       rcx,rbx
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       xor       eax,eax
       mov       [rbx+8],rax
       mov       [rbx+10],eax
       mov       [rbx+14],esi
       mov       rax,rdi
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 582
; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M03_L03
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M03_L02
       mov       r9,[rax+38]
       cmp       r8,4
       jl        short M03_L01
M03_L00:
       cmp       [r9],rcx
       je        short M03_L03
       cmp       [r9+8],rcx
       je        short M03_L03
       cmp       [r9+10],rcx
       je        short M03_L03
       cmp       [r9+18],rcx
       je        short M03_L03
       add       r9,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M03_L00
       test      r8,r8
       je        short M03_L02
M03_L01:
       cmp       [r9],rcx
       je        short M03_L03
       add       r9,8
       dec       r8
       test      r8,r8
       jg        short M03_L01
M03_L02:
       test      dword ptr [rax],406C0000
       jne       short M03_L04
       xor       edx,edx
M03_L03:
       mov       rax,rdx
       ret
M03_L04:
       jmp       qword ptr [7FFE93A1D840]
; Total bytes of code 107

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x64
OS Windows 10.0.18362
Baseline 8e15d9f523209caf08db57897777b7beb0516c99
Compare a78811401f3b2fa8be2d8e40b9bb1e706a9e8501
Diff Diff

Regressions in System.Numerics.Tests.Perf_VectorOf<SByte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DivideBenchmark - Duration of single invocation 90.21 ns 100.25 ns 1.11 0.01 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_VectorOf&lt;SByte&gt;*'

Payloads

Baseline
Compare

Histogram

System.Numerics.Tests.Perf_VectorOf<SByte>.DivideBenchmark


Description of detection logic

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 100.2543846328221 > 94.13587749587735.
IsChangePoint: Marked as a change because one of 12/1/2022 8:17:56 AM, 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM.
IsRegressionStdDev: Marked as regression because -117.49386817088953 (T) = (0 -100.04270290489245) / Math.Sqrt((0.13963487734764332 / (33)) + (0.07869711829999565 / (24))) is less than -2.0040447832881556 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (24) - 2, .025) and -0.11331272407218222 = (89.86037861757711 - 100.04270290489245) / 89.86037861757711 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
Benchmarking workflow for dotnet/runtime repository

@kunalspathak
Copy link
Member

Dup of dotnet/runtime#79973

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant