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/x64: 21 Improvements on 1/18/2023 6:24:13 PM #12023

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in PerfLabTests.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[FooObjIsFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/PerfLabTests.CastingPerf.FooObjIsFoo.html>) 438.56 μs 380.09 μs 0.87 0.05 False Trace Trace
[ScalarValueTypeObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/PerfLabTests.CastingPerf.ScalarValueTypeObj.html>) 436.32 μs 382.74 μs 0.88 0.05 False Trace Trace
[ObjrefValueTypeObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/PerfLabTests.CastingPerf.ObjrefValueTypeObj.html>) 436.53 μs 386.47 μs 0.89 0.06 False Trace Trace
[IntObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/PerfLabTests.CastingPerf.IntObj.html>) 436.30 μs 385.05 μs 0.88 0.05 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 'PerfLabTests.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf.FooObjIsFoo ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 380.0909119897959 < 414.6669926264263. IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.571832482227393 (T) = (0 -383554.98450304486) / Math.Sqrt((627602492.1445087 / (299)) + (5249490.688759957 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.05744323912488272 = (406930.3838497037 - 383554.98450304486) / 406930.3838497037 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjIsFoo() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FFED9D92948] test edi,edi jle short M00_L02 mov rcx,2805A406298 mov rbx,[rcx] mov rbp,2805A4062A8 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_PerfLabTests.Foo[] cmp [rax],rcx je short M00_L01 call qword ptr [7FFED99CD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,2805A400BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.FooObjIsFoo() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FFF76EA2948] test edi,edi jle short M00_L02 mov rcx,15B23C06298 mov rbx,[rcx] mov rbp,15B23C062A8 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_PerfLabTests.Foo[] cmp [rax],rcx je short M00_L01 call qword ptr [7FFF76ADD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,15B23C00BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` #### PerfLabTests.CastingPerf.ScalarValueTypeObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 382.74482796167246 < 414.6821673470345. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/18/2022 8:48:12 PM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 16.3069234717097 (T) = (0 -383090.14153460984) / Math.Sqrt((622969731.5442802 / (299)) + (3180783.8734339136 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.0590952077088174 = (407150.8027945665 - 383090.14153460984) / 407150.8027945665 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ScalarValueTypeObj() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FFC4CBF4CB0] test edi,edi jle short M00_L02 mov rcx,21FE7C06298 mov rbx,[rcx] mov rbp,21FE7C06288 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_PerfLabTests.FooSVT[] cmp [rax],rcx je short M00_L01 call qword ptr [7FFC4C81D858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,21FE7C00BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ScalarValueTypeObj() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FF925A92948] test edi,edi jle short M00_L02 mov rcx,2594E006298 mov rbx,[rcx] mov rbp,2594E006288 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_PerfLabTests.FooSVT[] cmp [rax],rcx je short M00_L01 call qword ptr [7FF9256CD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,2594E000BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` #### PerfLabTests.CastingPerf.ObjrefValueTypeObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 386.4680698874296 < 414.70107172127484. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/18/2022 8:48:12 PM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 14.917045973200226 (T) = (0 -383869.03570582933) / Math.Sqrt((635887834.6583266 / (299)) + (7815887.129341476 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.05629604972319227 = (406768.49513370445 - 383869.03570582933) / 406768.49513370445 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjrefValueTypeObj() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FFD40922948] test edi,edi jle short M00_L02 mov rcx,23969806298 mov rbx,[rcx] mov rbp,23969806290 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_PerfLabTests.FooORVT[] cmp [rax],rcx je short M00_L01 call qword ptr [7FFD4055D858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,23969800BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.ObjrefValueTypeObj() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FFC5A792948] test edi,edi jle short M00_L02 mov rcx,202D8806298 mov rbx,[rcx] mov rbp,202D8806290 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_PerfLabTests.FooORVT[] cmp [rax],rcx je short M00_L01 call qword ptr [7FFC5A3CD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,202D8800BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` #### PerfLabTests.CastingPerf.IntObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 385.05173256802715 < 414.687753844246. IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.706660942745405 (T) = (0 -383266.6594002427) / Math.Sqrt((634454378.1829886 / (299)) + (5054996.568044914 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.05816070955148337 = (406934.2437580045 - 383266.6594002427) / 406934.2437580045 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf.IntObj() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FF7ED972948] test edi,edi jle short M00_L02 mov rcx,2148F006298 mov rbx,[rcx] mov rbp,2148F006260 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_System.Int32[] cmp [rax],rcx je short M00_L01 call qword ptr [7FF7ED5AD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,2148F000BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf.IntObj() push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov edi,[7FFC5A792948] test edi,edi jle short M00_L02 mov rcx,1F889006298 mov rbx,[rcx] mov rbp,1F889006260 M00_L00: mov rdx,rbx mov rax,rdx test rax,rax je short M00_L01 mov rcx,offset MT_System.Int32[] cmp [rax],rcx je short M00_L01 call qword ptr [7FFC5A3CD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) M00_L01: mov rcx,rbp mov rdx,rax call CORINFO_HELP_ASSIGN_REF inc esi cmp esi,edi jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 101 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) push rdi push rsi sub rsp,28 test rdx,rdx je near ptr M01_L03 mov rax,[rdx] cmp rax,rcx je near ptr M01_L03 mov r8,1F889000BA0 mov r8,[r8] cmp [r8],r8b add r8,10 rorx r9,rax,20 xor r9,rcx mov r10,9E3779B97F4A7C15 imul r9,r10 mov r10d,[r8] shrx r9,r9,r10 xor r10d,r10d M01_L00: lea r11d,[r9+1] movsxd r11,r11d lea r11,[r11+r11*2] lea r11,[r8+r11*8] mov esi,[r11] mov rdi,[r11+8] and esi,0FFFFFFFE cmp rdi,rax jne short M01_L01 mov rdi,rcx xor rdi,[r11+10] cmp rdi,1 jbe short M01_L02 M01_L01: test esi,esi je short M01_L04 inc r10d add r9d,r10d and r9d,[r8+4] cmp r10d,8 jl short M01_L00 jmp short M01_L04 M01_L02: cmp esi,[r11] jne short M01_L04 cmp edi,1 jne short M01_L04 M01_L03: mov rax,rdx add rsp,28 pop rsi pop rdi ret M01_L04: call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object) nop add rsp,28 pop rsi pop rdi ret ; Total bytes of code 179 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Collections.ContainsFalse<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ICollection - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.ContainsFalse(String).ICollection(Size%3a%20512).html>) 916.67 μs 851.91 μs 0.93 0.01 False
[LinkedList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.ContainsFalse(String).LinkedList(Size%3a%20512).html>) 1.42 ms 1.29 ms 0.91 0.02 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.Collections.ContainsFalse&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsFalse<String>.ICollection(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 851.909495614035 < 870.4234714781744. IsChangePoint: Marked as a change because one of 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/14/2022 5:20:21 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 33.11757816133612 (T) = (0 -848367.6486252396) / Math.Sqrt((4246749559.197423 / (299)) + (6813864.3571754685 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.12903575723304678 = (974055.6580486854 - 848367.6486252396) / 974055.6580486854 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.ContainsFalse<String>.LinkedList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 1.2921114236111113 < 1.3530384423532196. IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 12/14/2022 12:26:48 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 19.30969177417937 (T) = (0 -1287403.5414902598) / Math.Sqrt((1625334768.1073632 / (299)) + (708872231.183218 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.07140699343737598 = (1386402.3661516104 - 1287403.5414902598) / 1386402.3661516104 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Collections.TryGetValueFalse<Int32, Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Dictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.TryGetValueFalse(Int32%2c%20Int32).Dictionary(Size%3a%20512).html>) 4.72 μs 4.02 μs 0.85 0.09 False
[ImmutableSortedDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.TryGetValueFalse(Int32%2c%20Int32).ImmutableSortedDictionary(Size%3a%20512).html>) 39.91 μs 37.56 μs 0.94 0.02 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.Collections.TryGetValueFalse&lt;Int32, Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.TryGetValueFalse<Int32, Int32>.Dictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 4.023382956661589 < 4.025042892208674. IsChangePoint: Marked as a change because one of 11/10/2022 12:18:51 PM, 12/2/2022 11:19:21 PM, 12/10/2022 9:07:41 PM, 12/12/2022 5:25:39 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 17.38355383137544 (T) = (0 -3993.7847900856423) / Math.Sqrt((30857.046153770483 / (299)) + (7754.771904451087 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.07340771988990216 = (4310.185694198855 - 3993.7847900856423) / 4310.185694198855 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.TryGetValueFalse<Int32, Int32>.ImmutableSortedDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 37.55563349320544 < 38.10077895951921. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/18/2023 11:30:09 AM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 37.5992617254312 (T) = (0 -37608.10424141721) / Math.Sqrt((2027892.5240556858 / (299)) + (15518.409658225239 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.07839230737524658 = (40807.06415797022 - 37608.10424141721) / 40807.06415797022 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Xml.Linq.Perf_XDocument

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetRootElement - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Xml.Linq.Perf_XDocument.GetRootElement.html>) 9.85 ns 8.68 ns 0.88 0.05 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.Xml.Linq.Perf_XDocument*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Xml.Linq.Perf_XDocument.GetRootElement ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 8.684467656256903 < 9.324211707884514. IsChangePoint: Marked as a change because one of 12/10/2022 11:25:25 PM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 26.901168219606372 (T) = (0 -8.69087147266088) / Math.Sqrt((0.1765331351205014 / (299)) + (0.00019381013084748144 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.07026378444860829 = (9.34767445571285 - 8.69087147266088) / 9.34767445571285 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Xml.Linq.Perf_XDocument.GetRootElement() mov rcx,[rcx+8] cmp [rcx],cl mov rdx,offset MD_System.Xml.Linq.XDocument.GetFirstNode[[System.Xml.Linq.XElement, System.Private.Xml.Linq]]() jmp qword ptr [7FFC013A1888]; System.Xml.Linq.XDocument.GetFirstNode[[System.__Canon, System.Private.CoreLib]]() ; Total bytes of code 22 ``` ```assembly ; System.Xml.Linq.XDocument.GetFirstNode[[System.__Canon, System.Private.CoreLib]]() push rdi push rsi push rbx sub rsp,30 mov [rsp+28],rdx mov rsi,rdx mov rdi,[rcx+20] mov rdx,rdi mov rcx,offset MT_System.Xml.Linq.XNode call qword ptr [7FFC00DBD828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov rbx,rax test rbx,rbx je short M01_L01 mov rcx,[rsi+10] mov rsi,[rcx] M01_L00: mov rbx,[rbx+18] mov rcx,rsi mov rdx,rbx call qword ptr [7FFC00DBD7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov rdx,rax mov rcx,rsi call qword ptr [7FFC00DBD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) test rax,rax jne short M01_L02 cmp rbx,rdi jne short M01_L00 M01_L01: xor eax,eax add rsp,30 pop rbx pop rsi pop rdi ret M01_L02: add rsp,30 pop rbx pop rsi pop rdi ret ; Total bytes of code 109 ``` ### Compare Jit Disasm ```assembly ; System.Xml.Linq.Perf_XDocument.GetRootElement() mov rcx,[rcx+8] cmp [rcx],cl mov rdx,offset MD_System.Xml.Linq.XDocument.GetFirstNode[[System.Xml.Linq.XElement, System.Private.Xml.Linq]]() jmp qword ptr [7FFD44A91888]; System.Xml.Linq.XDocument.GetFirstNode[[System.__Canon, System.Private.CoreLib]]() ; Total bytes of code 22 ``` ```assembly ; System.Xml.Linq.XDocument.GetFirstNode[[System.__Canon, System.Private.CoreLib]]() push rdi push rsi push rbx sub rsp,30 mov [rsp+28],rdx mov rsi,rdx mov rdi,[rcx+20] mov rdx,rdi mov rcx,offset MT_System.Xml.Linq.XNode call qword ptr [7FFD444AD828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov rbx,rax test rbx,rbx je short M01_L01 mov rcx,[rsi+10] mov rsi,[rcx] M01_L00: mov rbx,[rbx+18] mov rcx,rsi mov rdx,rbx call qword ptr [7FFD444AD7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov rdx,rax mov rcx,rsi call qword ptr [7FFD444AD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object) test rax,rax jne short M01_L02 cmp rbx,rdi jne short M01_L00 M01_L01: xor eax,eax add rsp,30 pop rbx pop rsi pop rdi ret M01_L02: add rsp,30 pop rbx pop rsi pop rdi ret ; Total bytes of code 109 ``` ### 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 x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Join_List - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Tests.Perf_String.Join_List.html>) 69.95 ns 63.78 ns 0.91 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.Tests.Perf_String*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_String.Join_List ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 63.78079696883812 < 66.5458580290502. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 28.786571435038763 (T) = (0 -64.45067478173917) / Math.Sqrt((4.2605746822158235 / (299)) + (0.35957835907637475 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.06574669298382192 = (68.98629557714062 - 64.45067478173917) / 68.98629557714062 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.Join_List() mov rdx,286C9C069D8 mov rdx,[rdx] mov rcx,2C75E4676F0 jmp qword ptr [7FF8CFCC3E70]; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) ; Total bytes of code 29 ``` ```assembly ; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) push rbp push r15 push r14 push rdi push rsi push rbx sub rsp,78 lea rbp,[rsp+20] xor eax,eax mov [rbp+18],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4 vmovdqa xmmword ptr [rbp+40],xmm4 mov [rbp+50],rax mov [rbp],rsp mov rax,0F8DC6E8BB4BC mov [rbp+8],rax mov rsi,rcx mov rdi,rdx mov rdx,rdi mov rcx,offset MT_System.Collections.Generic.List`1[[System.String, System.Private.CoreLib]] call qword ptr [7FF8CFCBD828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test rax,rax je near ptr M01_L04 test rsi,rsi je short M01_L03 lea r8,[rsi+0C] mov ebx,[rsi+8] mov r9d,ebx M01_L00: mov rcx,[rax+8] mov ebx,[rax+10] test rcx,rcx je near ptr M01_L34 mov rdx,offset MT_System.String[] cmp [rcx],rdx jne near ptr M01_L35 cmp [rcx+8],ebx jb near ptr M01_L36 add rcx,10 M01_L01: mov [rbp+28],r8 mov [rbp+30],r9d mov [rbp+18],rcx mov [rbp+20],ebx lea rcx,[rbp+28] lea rdx,[rbp+18] call qword ptr [7FF8CFCC3F18]; System.String.JoinCore(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov rcx,0F8DC6E8BB4BC cmp [rbp+8],rcx je short M01_L02 call CORINFO_HELP_FAIL_FAST M01_L02: nop lea rsp,[rbp+58] pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret M01_L03: xor r8d,r8d xor r9d,r9d jmp short M01_L00 M01_L04: mov rcx,rdi test rcx,rcx je short M01_L09 mov rdx,offset MT_System.String[] cmp [rcx],rdx jne short M01_L10 test rsi,rsi je short M01_L08 lea rax,[rsi+0C] mov ebx,[rsi+8] mov r8d,ebx M01_L05: test rcx,rcx je near ptr M01_L37 lea r14,[rcx+10] mov r15d,[rcx+8] M01_L06: mov [rbp+28],rax mov [rbp+30],r8d mov [rbp+18],r14 mov [rbp+20],r15d lea rcx,[rbp+28] lea rdx,[rbp+18] call qword ptr [7FF8CFCC3F18]; System.String.JoinCore(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov rcx,0F8DC6E8BB4BC cmp [rbp+8],rcx je short M01_L07 call CORINFO_HELP_FAIL_FAST M01_L07: nop lea rsp,[rbp+58] pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret M01_L08: xor eax,eax xor r8d,r8d jmp short M01_L05 M01_L09: mov ecx,6 call qword ptr [7FF8D000B7F8] int 3 M01_L10: mov rcx,rdi mov r11,7FF8CFB10578 call qword ptr [r11] mov rbx,rax mov [rbp+10],rbx mov rcx,rbx mov r11,7FF8CFB10580 call qword ptr [r11] test eax,eax jne short M01_L11 mov r14,2C75E460008 jmp near ptr M01_L32 M01_L11: mov rcx,rbx mov r11,7FF8CFB10588 call qword ptr [r11] mov r14,rax mov rcx,rbx mov r11,7FF8CFB10590 call qword ptr [r11] test eax,eax jne short M01_L13 test r14,r14 jne short M01_L12 mov r14,2C75E460008 M01_L12: jmp near ptr M01_L32 M01_L13: test [rsp],esp sub rsp,200 lea rdx,[rsp+20] xor ecx,ecx mov [rbp+38],rcx mov [rbp+48],rdx mov dword ptr [rbp+50],100 mov [rbp+40],ecx test r14,r14 je short M01_L16 mov edx,[rbp+40] cmp dword ptr [r14+8],1 je near ptr M01_L28 M01_L14: mov r15d,[rbp+40] mov edx,[rbp+50] sub edx,[r14+8] cmp r15d,edx jg near ptr M01_L29 M01_L15: cmp r15d,[rbp+50] ja near ptr M01_L31 mov r8,[rbp+48] mov ecx,r15d lea rcx,[r8+rcx*2] mov r8d,[rbp+50] sub r8d,r15d cmp [r14+8],r8d ja near ptr M01_L30 lea rdx,[r14+0C] mov r8d,[r14+8] add r8,r8 call qword ptr [7FF8CFDB1A20]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov edx,[rbp+40] add edx,[r14+8] mov [rbp+40],edx M01_L16: test rsi,rsi je short M01_L19 mov edi,[rbp+40] mov edx,edi mov ecx,[rsi+8] mov r14d,ecx cmp r14d,1 je near ptr M01_L27 M01_L17: mov edx,[rbp+50] sub edx,r14d cmp edx,edi jl near ptr M01_L26 M01_L18: mov r8d,[rbp+50] cmp edi,r8d ja near ptr M01_L31 mov rcx,[rbp+48] mov edx,edi lea rcx,[rcx+rdx*2] sub r8d,edi cmp r14d,r8d ja near ptr M01_L30 lea rdx,[rsi+0C] mov r8d,r14d add r8,r8 call qword ptr [7FF8CFDB1A20]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov ecx,r14d add ecx,[rbp+40] mov [rbp+40],ecx M01_L19: mov rcx,rbx mov r11,7FF8CFB10598 call qword ptr [r11] mov rdi,rax test rdi,rdi je short M01_L22 mov r14d,[rbp+40] mov edx,r14d mov r15d,[rdi+8] cmp r15d,1 je near ptr M01_L24 M01_L20: mov edx,[rbp+50] sub edx,r15d cmp edx,r14d jl short M01_L23 M01_L21: mov r8d,[rbp+50] cmp r14d,r8d ja near ptr M01_L31 mov rcx,[rbp+48] mov edx,r14d lea rcx,[rcx+rdx*2] sub r8d,r14d cmp r15d,r8d ja near ptr M01_L30 lea rdx,[rdi+0C] mov r8d,r15d add r8,r8 call qword ptr [7FF8CFDB1A20]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) add r15d,[rbp+40] mov [rbp+40],r15d M01_L22: mov rcx,rbx mov r11,7FF8CFB105A0 call qword ptr [r11] test eax,eax jne near ptr M01_L16 lea rcx,[rbp+38] call qword ptr [7FF8D0131828]; System.Text.ValueStringBuilder.ToString() mov r14,rax jmp near ptr M01_L32 M01_L23: mov edx,r15d lea rcx,[rbp+38] call qword ptr [7FF8D01319A8] jmp short M01_L21 M01_L24: cmp edx,[rbp+50] jae near ptr M01_L20 lea rcx,[rbp+48] cmp edx,[rcx+8] jae short M01_L25 mov rcx,[rcx] mov eax,edx movzx r8d,word ptr [rdi+0C] mov [rcx+rax*2],r8w inc edx mov [rbp+40],edx jmp short M01_L22 M01_L25: call CORINFO_HELP_RNGCHKFAIL M01_L26: mov edx,r14d lea rcx,[rbp+38] call qword ptr [7FF8D01319A8] jmp near ptr M01_L18 M01_L27: cmp edx,[rbp+50] jae near ptr M01_L17 lea rcx,[rbp+48] cmp edx,[rcx+8] jae short M01_L25 mov rcx,[rcx] mov eax,edx movzx r8d,word ptr [rsi+0C] mov [rcx+rax*2],r8w inc edx mov [rbp+40],edx jmp near ptr M01_L19 M01_L28: cmp edx,[rbp+50] jae near ptr M01_L14 lea rcx,[rbp+48] cmp edx,[rcx+8] jae short M01_L25 mov rcx,[rcx] mov eax,edx movzx r8d,word ptr [r14+0C] mov [rcx+rax*2],r8w inc edx mov [rbp+40],edx jmp near ptr M01_L16 M01_L29: mov edx,[r14+8] lea rcx,[rbp+38] call qword ptr [7FF8D01319A8] jmp near ptr M01_L15 M01_L30: call qword ptr [7FF8D000B4F8] int 3 M01_L31: call qword ptr [7FF8D000B4E0] int 3 M01_L32: mov rcx,rbx mov r11,7FF8CFB105A8 call qword ptr [r11] mov rax,r14 mov rcx,0F8DC6E8BB4BC cmp [rbp+8],rcx je short M01_L33 call CORINFO_HELP_FAIL_FAST M01_L33: nop lea rsp,[rbp+58] pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret M01_L34: test ebx,ebx jne short M01_L36 xor ecx,ecx xor ebx,ebx jmp near ptr M01_L01 M01_L35: call qword ptr [7FF8D000B498] int 3 M01_L36: call qword ptr [7FF8D000B4E0] int 3 M01_L37: xor r14d,r14d xor r15d,r15d jmp near ptr M01_L06 push rbp push r15 push r14 push rdi push rsi push rbx sub rsp,28 mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+20] cmp qword ptr [rbp+10],0 je short M01_L38 mov rcx,[rbp+10] mov r11,7FF8CFB105A8 call qword ptr [r11] M01_L38: nop add rsp,28 pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret ; Total bytes of code 1238 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.Join_List() mov rdx,2CBC58069D8 mov rdx,[rdx] mov rcx,30C5A2B76F0 jmp qword ptr [7FFDB87E3F00]; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) ; Total bytes of code 29 ``` ```assembly ; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) push rbp push r15 push r14 push rdi push rsi push rbx sub rsp,78 lea rbp,[rsp+20] xor eax,eax mov [rbp+18],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+20],xmm4 vmovdqa xmmword ptr [rbp+30],xmm4 vmovdqa xmmword ptr [rbp+40],xmm4 mov [rbp+50],rax mov [rbp],rsp mov rax,0DC9E2F362EF7 mov [rbp+8],rax mov rsi,rcx mov rdi,rdx mov rdx,rdi mov rcx,offset MT_System.Collections.Generic.List`1[[System.String, System.Private.CoreLib]] call qword ptr [7FFDB87DD828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test rax,rax je near ptr M01_L04 test rsi,rsi je short M01_L03 lea r8,[rsi+0C] mov ebx,[rsi+8] mov r9d,ebx M01_L00: mov rcx,[rax+8] mov ebx,[rax+10] test rcx,rcx je near ptr M01_L34 mov rdx,offset MT_System.String[] cmp [rcx],rdx jne near ptr M01_L35 cmp [rcx+8],ebx jb near ptr M01_L36 add rcx,10 M01_L01: mov [rbp+28],r8 mov [rbp+30],r9d mov [rbp+18],rcx mov [rbp+20],ebx lea rcx,[rbp+28] lea rdx,[rbp+18] call qword ptr [7FFDB87E5060]; System.String.JoinCore(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov rcx,0DC9E2F362EF7 cmp [rbp+8],rcx je short M01_L02 call CORINFO_HELP_FAIL_FAST M01_L02: nop lea rsp,[rbp+58] pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret M01_L03: xor r8d,r8d xor r9d,r9d jmp short M01_L00 M01_L04: mov rcx,rdi test rcx,rcx je short M01_L09 mov rdx,offset MT_System.String[] cmp [rcx],rdx jne short M01_L10 test rsi,rsi je short M01_L08 lea rax,[rsi+0C] mov ebx,[rsi+8] mov r8d,ebx M01_L05: test rcx,rcx je near ptr M01_L37 lea r14,[rcx+10] mov r15d,[rcx+8] M01_L06: mov [rbp+28],rax mov [rbp+30],r8d mov [rbp+18],r14 mov [rbp+20],r15d lea rcx,[rbp+28] lea rdx,[rbp+18] call qword ptr [7FFDB87E5060]; System.String.JoinCore(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov rcx,0DC9E2F362EF7 cmp [rbp+8],rcx je short M01_L07 call CORINFO_HELP_FAIL_FAST M01_L07: nop lea rsp,[rbp+58] pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret M01_L08: xor eax,eax xor r8d,r8d jmp short M01_L05 M01_L09: mov ecx,6 call qword ptr [7FFDB8B2B7F8] int 3 M01_L10: mov rcx,rdi mov r11,7FFDB8630578 call qword ptr [r11] mov rbx,rax mov [rbp+10],rbx mov rcx,rbx mov r11,7FFDB8630580 call qword ptr [r11] test eax,eax jne short M01_L11 mov r14,30C5A2B0008 jmp near ptr M01_L32 M01_L11: mov rcx,rbx mov r11,7FFDB8630588 call qword ptr [r11] mov r14,rax mov rcx,rbx mov r11,7FFDB8630590 call qword ptr [r11] test eax,eax jne short M01_L13 test r14,r14 jne short M01_L12 mov r14,30C5A2B0008 M01_L12: jmp near ptr M01_L32 M01_L13: test [rsp],esp sub rsp,200 lea rdx,[rsp+20] xor ecx,ecx mov [rbp+38],rcx mov [rbp+48],rdx mov dword ptr [rbp+50],100 mov [rbp+40],ecx test r14,r14 je short M01_L16 mov edx,[rbp+40] cmp dword ptr [r14+8],1 je near ptr M01_L28 M01_L14: mov r15d,[rbp+40] mov edx,[rbp+50] sub edx,[r14+8] cmp r15d,edx jg near ptr M01_L29 M01_L15: cmp r15d,[rbp+50] ja near ptr M01_L31 mov r8,[rbp+48] mov ecx,r15d lea rcx,[r8+rcx*2] mov r8d,[rbp+50] sub r8d,r15d cmp [r14+8],r8d ja near ptr M01_L30 lea rdx,[r14+0C] mov r8d,[r14+8] add r8,r8 call qword ptr [7FFDB88D1C18]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov edx,[rbp+40] add edx,[r14+8] mov [rbp+40],edx M01_L16: test rsi,rsi je short M01_L19 mov edi,[rbp+40] mov edx,edi mov ecx,[rsi+8] mov r14d,ecx cmp r14d,1 je near ptr M01_L27 M01_L17: mov edx,[rbp+50] sub edx,r14d cmp edx,edi jl near ptr M01_L26 M01_L18: mov r8d,[rbp+50] cmp edi,r8d ja near ptr M01_L31 mov rcx,[rbp+48] mov edx,edi lea rcx,[rcx+rdx*2] sub r8d,edi cmp r14d,r8d ja near ptr M01_L30 lea rdx,[rsi+0C] mov r8d,r14d add r8,r8 call qword ptr [7FFDB88D1C18]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov ecx,r14d add ecx,[rbp+40] mov [rbp+40],ecx M01_L19: mov rcx,rbx mov r11,7FFDB8630598 call qword ptr [r11] mov rdi,rax test rdi,rdi je short M01_L22 mov r14d,[rbp+40] mov edx,r14d mov r15d,[rdi+8] cmp r15d,1 je near ptr M01_L24 M01_L20: mov edx,[rbp+50] sub edx,r15d cmp edx,r14d jl short M01_L23 M01_L21: mov r8d,[rbp+50] cmp r14d,r8d ja near ptr M01_L31 mov rcx,[rbp+48] mov edx,r14d lea rcx,[rcx+rdx*2] sub r8d,r14d cmp r15d,r8d ja near ptr M01_L30 lea rdx,[rdi+0C] mov r8d,r15d add r8,r8 call qword ptr [7FFDB88D1C18]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) add r15d,[rbp+40] mov [rbp+40],r15d M01_L22: mov rcx,rbx mov r11,7FFDB86305A0 call qword ptr [r11] test eax,eax jne near ptr M01_L16 lea rcx,[rbp+38] call qword ptr [7FFDB8C51A08]; System.Text.ValueStringBuilder.ToString() mov r14,rax jmp near ptr M01_L32 M01_L23: mov edx,r15d lea rcx,[rbp+38] call qword ptr [7FFDB8C51B88] jmp short M01_L21 M01_L24: cmp edx,[rbp+50] jae near ptr M01_L20 lea rcx,[rbp+48] cmp edx,[rcx+8] jae short M01_L25 mov rcx,[rcx] mov eax,edx movzx r8d,word ptr [rdi+0C] mov [rcx+rax*2],r8w inc edx mov [rbp+40],edx jmp short M01_L22 M01_L25: call CORINFO_HELP_RNGCHKFAIL M01_L26: mov edx,r14d lea rcx,[rbp+38] call qword ptr [7FFDB8C51B88] jmp near ptr M01_L18 M01_L27: cmp edx,[rbp+50] jae near ptr M01_L17 lea rcx,[rbp+48] cmp edx,[rcx+8] jae short M01_L25 mov rcx,[rcx] mov eax,edx movzx r8d,word ptr [rsi+0C] mov [rcx+rax*2],r8w inc edx mov [rbp+40],edx jmp near ptr M01_L19 M01_L28: cmp edx,[rbp+50] jae near ptr M01_L14 lea rcx,[rbp+48] cmp edx,[rcx+8] jae short M01_L25 mov rcx,[rcx] mov eax,edx movzx r8d,word ptr [r14+0C] mov [rcx+rax*2],r8w inc edx mov [rbp+40],edx jmp near ptr M01_L16 M01_L29: mov edx,[r14+8] lea rcx,[rbp+38] call qword ptr [7FFDB8C51B88] jmp near ptr M01_L15 M01_L30: call qword ptr [7FFDB8B2B4F8] int 3 M01_L31: call qword ptr [7FFDB8B2B4E0] int 3 M01_L32: mov rcx,rbx mov r11,7FFDB86305A8 call qword ptr [r11] mov rax,r14 mov rcx,0DC9E2F362EF7 cmp [rbp+8],rcx je short M01_L33 call CORINFO_HELP_FAIL_FAST M01_L33: nop lea rsp,[rbp+58] pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret M01_L34: test ebx,ebx jne short M01_L36 xor ecx,ecx xor ebx,ebx jmp near ptr M01_L01 M01_L35: call qword ptr [7FFDB8B2B498] int 3 M01_L36: call qword ptr [7FFDB8B2B4E0] int 3 M01_L37: xor r14d,r14d xor r15d,r15d jmp near ptr M01_L06 push rbp push r15 push r14 push rdi push rsi push rbx sub rsp,28 mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+20] cmp qword ptr [rbp+10],0 je short M01_L38 mov rcx,[rbp+10] mov r11,7FFDB86305A8 call qword ptr [r11] M01_L38: nop add rsp,28 pop rbx pop rsi pop rdi pop r14 pop r15 pop rbp ret ; Total bytes of code 1238 ``` ### 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 x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Collections.IterateFor<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ImmutableSortedSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.IterateFor(String).ImmutableSortedSet(Size%3a%20512).html>) 16.28 μs 15.25 μs 0.94 0.02 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.IterateFor&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateFor<String>.ImmutableSortedSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 15.251445743989605 < 15.459016221788195. IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 7:31:41 AM, 12/14/2022 5:20:21 PM, 12/21/2022 9:23:17 AM, 12/28/2022 5:13:50 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 39.949422181755914 (T) = (0 -15263.156934906052) / Math.Sqrt((159776.69364158605 / (299)) + (1595.3587906407524 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.059359106998374565 = (16226.337860137744 - 15263.156934906052) / 16226.337860137744 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ToArray - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.ToArray(input%3a%20IEnumerable).html>) 841.35 ns 757.49 ns 0.90 0.04 False Trace Trace
[CastToSameType - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.CastToSameType(input%3a%20IEnumerable).html>) 558.96 ns 518.74 ns 0.93 0.04 False Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.ToArray(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 757.4879068300122 < 803.9094839988944. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/11/2022 5:53:56 PM, 12/10/2022 11:25:25 PM, 12/17/2022 10:44:50 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 24.415748264347965 (T) = (0 -757.7551428297917) / Math.Sqrt((1010.5133738290991 / (299)) + (10.300965128713846 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.05823217772670418 = (804.6092942533083 - 757.7551428297917) / 804.6092942533083 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.ToArray(System.Linq.Tests.LinqTestData) mov rcx,[rdx+8] jmp qword ptr [7FFC28BFF7C8]; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push rsi sub rsp,20 mov rsi,rcx test rsi,rsi je short M01_L01 mov rdx,rsi mov rcx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call qword ptr [7FFC2887D810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test rax,rax jne short M01_L00 mov rcx,rsi add rsp,20 pop rsi jmp qword ptr [7FFC28C911C8]; System.Collections.Generic.EnumerableHelpers.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) M01_L00: mov rcx,rax mov r11,7FFC286D05D0 add rsp,20 pop rsi jmp qword ptr [r11] M01_L01: mov ecx,10 call qword ptr [7FFC28BCF798] int 3 ; Total bytes of code 84 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.ToArray(System.Linq.Tests.LinqTestData) mov rcx,[rdx+8] jmp qword ptr [7FFC2AE4FC18]; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push rsi sub rsp,20 mov rsi,rcx test rsi,rsi je short M01_L01 mov rdx,rsi mov rcx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call qword ptr [7FFC2AACD810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test rax,rax jne short M01_L00 mov rcx,rsi add rsp,20 pop rsi jmp qword ptr [7FFC2AED15A0]; System.Collections.Generic.EnumerableHelpers.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) M01_L00: mov rcx,rax mov r11,7FFC2A9205D0 add rsp,20 pop rsi jmp qword ptr [r11] M01_L01: mov ecx,10 call qword ptr [7FFC2AE1F798] int 3 ; Total bytes of code 84 ``` #### System.Linq.Tests.Perf_Enumerable.CastToSameType(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 518.7444909014749 < 531.2349190724417. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 12/3/2022 7:24:45 AM, 12/10/2022 11:25:25 PM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 22.293357021233437 (T) = (0 -519.9389506088548) / Math.Sqrt((469.55504880616934 / (299)) + (1.6815533535027032 / (33))) is greater than 1.9671786747533526 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (33) - 2, .975) and 0.05177003369983106 = (548.325795521489 - 519.9389506088548) / 548.325795521489 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.CastToSameType(System.Linq.Tests.LinqTestData) push rsi sub rsp,20 mov rsi,rcx mov rcx,[rdx+8] call qword ptr [7FFDC9D87678]; System.Linq.Enumerable.Cast[[System.Int32, System.Private.CoreLib]](System.Collections.IEnumerable) mov rcx,rax mov rdx,[rsi+8] add rsp,20 pop rsi jmp qword ptr [7FFDC9D876F0]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) ; Total bytes of code 36 ``` ```assembly ; System.Linq.Enumerable.Cast[[System.Int32, System.Private.CoreLib]](System.Collections.IEnumerable) push rdi push rsi sub rsp,28 mov rsi,rcx mov rdx,rsi mov rcx,offset MT_System.Collections.Generic.IEnumerable`1[[System.Int32, System.Private.CoreLib]] call qword ptr [7FFDC980D7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) test rax,rax je short M01_L00 add rsp,28 pop rsi pop rdi ret M01_L00: test rsi,rsi je short M01_L01 mov rcx,offset MT_System.Linq.Enumerable+d__67`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov rdi,rax mov dword ptr [rdi+20],0FFFFFFFE call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [rdi+28],eax lea rcx,[rdi+10] mov rdx,rsi call CORINFO_HELP_ASSIGN_REF mov rax,rdi add rsp,28 pop rsi pop rdi ret M01_L01: mov ecx,10 call qword ptr [7FFDC9B5F798] int 3 ; Total bytes of code 112 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push rbp push rsi sub rsp,38 lea rbp,[rsp+40] mov [rbp-20],rsp mov rsi,rdx mov r11,7FFDC96605C0 call qword ptr [r11] mov rcx,rax mov [rbp-10],rcx mov r11,7FFDC96605C8 call qword ptr [r11] test eax,eax je short M02_L01 M02_L00: mov rcx,[rbp-10] mov r11,7FFDC96605D0 call qword ptr [r11] mov [rsi+40],eax mov rcx,[rbp-10] mov r11,7FFDC96605C8 call qword ptr [r11] test eax,eax jne short M02_L00 M02_L01: mov rcx,[rbp-10] mov r11,7FFDC96605D8 call qword ptr [r11] nop add rsp,38 pop rsi pop rbp ret push rbp push rsi sub rsp,28 mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+40] cmp qword ptr [rbp-10],0 je short M02_L02 mov rcx,[rbp-10] mov r11,7FFDC96605D8 call qword ptr [r11] M02_L02: nop add rsp,28 pop rsi pop rbp ret ; Total bytes of code 172 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.CastToSameType(System.Linq.Tests.LinqTestData) push rsi sub rsp,20 mov rsi,rcx mov rcx,[rdx+8] call qword ptr [7FF7EDB37510]; System.Linq.Enumerable.Cast[[System.Int32, System.Private.CoreLib]](System.Collections.IEnumerable) mov rcx,rax mov rdx,[rsi+8] add rsp,20 pop rsi jmp qword ptr [7FF7EDB37588]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) ; Total bytes of code 36 ``` ```assembly ; System.Linq.Enumerable.Cast[[System.Int32, System.Private.CoreLib]](System.Collections.IEnumerable) push rdi push rsi sub rsp,28 mov rsi,rcx mov rdx,rsi mov rcx,offset MT_System.Collections.Generic.IEnumerable`1[[System.Int32, System.Private.CoreLib]] call qword ptr [7FF7ED5BD7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) test rax,rax je short M01_L00 add rsp,28 pop rsi pop rdi ret M01_L00: test rsi,rsi je short M01_L01 mov rcx,offset MT_System.Linq.Enumerable+d__67`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov rdi,rax mov dword ptr [rdi+20],0FFFFFFFE call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [rdi+28],eax lea rcx,[rdi+10] mov rdx,rsi call CORINFO_HELP_ASSIGN_REF mov rax,rdi add rsp,28 pop rsi pop rdi ret M01_L01: mov ecx,10 call qword ptr [7FF7ED90F798] int 3 ; Total bytes of code 112 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push rbp push rsi sub rsp,38 lea rbp,[rsp+40] mov [rbp-20],rsp mov rsi,rdx mov r11,7FF7ED4105C0 call qword ptr [r11] mov rcx,rax mov [rbp-10],rcx mov r11,7FF7ED4105C8 call qword ptr [r11] test eax,eax je short M02_L01 M02_L00: mov rcx,[rbp-10] mov r11,7FF7ED4105D0 call qword ptr [r11] mov [rsi+40],eax mov rcx,[rbp-10] mov r11,7FF7ED4105C8 call qword ptr [r11] test eax,eax jne short M02_L00 M02_L01: mov rcx,[rbp-10] mov r11,7FF7ED4105D8 call qword ptr [r11] nop add rsp,38 pop rsi pop rbp ret push rbp push rsi sub rsp,28 mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+40] cmp qword ptr [rbp-10],0 je short M02_L02 mov rcx,[rbp-10] mov r11,7FF7ED4105D8 call qword ptr [r11] M02_L02: nop add rsp,28 pop rsi pop rbp ret ; Total bytes of code 172 ``` ### 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 x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Collections.CtorFromCollectionNonGeneric<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Stack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.CtorFromCollectionNonGeneric(String).Stack(Size%3a%20512).html>) 6.51 μs 6.01 μs 0.92 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.Collections.CtorFromCollectionNonGeneric&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CtorFromCollectionNonGeneric<String>.Stack(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 6.009195433840076 < 6.18824721714016. IsChangePoint: Marked as a change because one of 12/14/2022 12:01:27 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 28.708282624496615 (T) = (0 -6006.177965002678) / Math.Sqrt((66379.63524951621 / (299)) + (1529.9879884433842 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.07244500960081289 = (6475.279662306415 - 6006.177965002678) / 6475.279662306415 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Collections.IterateFor<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.IterateFor(Int32).IList(Size%3a%20512).html>) 2.25 μs 2.09 μs 0.93 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.Collections.IterateFor&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateFor<Int32>.IList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 2.0858413557962296 < 2.134565862516713. IsChangePoint: Marked as a change because one of 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 271.54055481372217 (T) = (0 -2086.6590284950307) / Math.Sqrt((14.175631595746449 / (299)) + (10.430468550083315 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.0718794747111343 = (2248.2629913238743 - 2086.6590284950307) / 2248.2629913238743 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.MathBenchmarks.Single

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ILogB - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.MathBenchmarks.Single.ILogB.html>) 12.48 μs 10.93 μs 0.88 0.04 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.MathBenchmarks.Single*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.MathBenchmarks.Single.ILogB ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 10.9267007992008 < 11.859840202105204. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 12/10/2022 11:25:25 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 21.43409169229732 (T) = (0 -10932.046869395062) / Math.Sqrt((585355.3303130507 / (299)) + (249.40766054994427 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.07996403935757626 = (11882.195193502717 - 10932.046869395062) / 11882.195193502717 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.MathBenchmarks.Single.ILogB() jmp qword ptr [7FF804829780]; System.MathBenchmarks.Single.ILogBTest() ; Total bytes of code 6 ``` ```assembly ; System.MathBenchmarks.Single.ILogBTest() push rdi push rsi sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 xor eax,eax mov [rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4 vmovdqa xmmword ptr [rsp+40],xmm4 xor esi,esi vmovss xmm6,dword ptr [7FF8044F51F8] xor edi,edi vmovss xmm7,dword ptr [7FF8044F51FC] M01_L00: vmovaps xmm0,xmm6 call qword ptr [7FF804A25978]; System.MathF.ILogB(Single) add esi,eax vaddss xmm6,xmm6,xmm7 inc edi cmp edi,1388 jl short M01_L00 cmp esi,9C3 jne short M01_L01 vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] add rsp,78 pop rsi pop rdi ret M01_L01: lea rcx,[rsp+28] mov edx,20 mov r8d,2 call qword ptr [7FF8046E3030] mov ecx,5E71 mov rdx,7FF80483C298 call CORINFO_HELP_STRCNS mov rdx,rax lea rcx,[rsp+28] call qword ptr [7FF8046E3120] mov ecx,5F11 mov rdx,7FF80483C298 call CORINFO_HELP_STRCNS mov r9,rax lea rcx,[rsp+28] mov edx,9C3 mov r8d,0A call qword ptr [7FF804A25AF8] mov ecx,5E9B mov rdx,7FF80483C298 call CORINFO_HELP_STRCNS mov rdx,rax lea rcx,[rsp+28] call qword ptr [7FF8046E3120] mov ecx,5F11 mov rdx,7FF80483C298 call CORINFO_HELP_STRCNS mov r9,rax lea rcx,[rsp+28] mov edx,esi mov r8d,0A call qword ptr [7FF804A25AF8] mov rcx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov rsi,rax lea rcx,[rsp+28] call qword ptr [7FF8046E30C0] mov rdx,rax mov rcx,rsi call qword ptr [7FF8044B7C18] mov rcx,rsi call CORINFO_HELP_THROW int 3 ; Total bytes of code 344 ``` ### Compare Jit Disasm ```assembly ; System.MathBenchmarks.Single.ILogB() jmp qword ptr [7FFEAC659828]; System.MathBenchmarks.Single.ILogBTest() ; Total bytes of code 6 ``` ```assembly ; System.MathBenchmarks.Single.ILogBTest() push rdi push rsi sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 xor eax,eax mov [rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4 vmovdqa xmmword ptr [rsp+40],xmm4 xor esi,esi vmovss xmm6,dword ptr [7FFEAC325238] xor edi,edi vmovss xmm7,dword ptr [7FFEAC32523C] M01_L00: vmovaps xmm0,xmm6 call qword ptr [7FFEAC855810]; System.MathF.ILogB(Single) add esi,eax vaddss xmm6,xmm6,xmm7 inc edi cmp edi,1388 jl short M01_L00 cmp esi,9C3 jne short M01_L01 vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] add rsp,78 pop rsi pop rdi ret M01_L01: lea rcx,[rsp+28] mov edx,20 mov r8d,2 call qword ptr [7FFEAC513510] mov ecx,5E71 mov rdx,7FFEAC66CB00 call CORINFO_HELP_STRCNS mov rdx,rax lea rcx,[rsp+28] call qword ptr [7FFEAC513600] mov ecx,5F11 mov rdx,7FFEAC66CB00 call CORINFO_HELP_STRCNS mov r9,rax lea rcx,[rsp+28] mov edx,9C3 mov r8d,0A call qword ptr [7FFEAC855990] mov ecx,5E9B mov rdx,7FFEAC66CB00 call CORINFO_HELP_STRCNS mov rdx,rax lea rcx,[rsp+28] call qword ptr [7FFEAC513600] mov ecx,5F11 mov rdx,7FFEAC66CB00 call CORINFO_HELP_STRCNS mov r9,rax lea rcx,[rsp+28] mov edx,esi mov r8d,0A call qword ptr [7FFEAC855990] mov rcx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov rsi,rax lea rcx,[rsp+28] call qword ptr [7FFEAC5135A0] mov rdx,rax mov rcx,rsi call qword ptr [7FFEAC2E7C18] mov rcx,rsi call CORINFO_HELP_THROW int 3 ; Total bytes of code 344 ``` ### 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 x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in PerfLabTests.CastingPerf2.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ScalarValueTypeObj - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.ScalarValueTypeObj.html>) 280.65 μs 187.12 μs 0.67 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 'PerfLabTests.CastingPerf2.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf2.CastingPerf.ScalarValueTypeObj ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 187.11605798192767 < 266.620562320492. IsChangePoint: Marked as a change because one of 12/10/2022 11:25:25 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 22.292428825349255 (T) = (0 -187305.52403605482) / Math.Sqrt((2061446465.8098493 / (299)) + (115652.92537967754 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.23814299567065222 = (245853.9108673514 - 187305.52403605482) / 245853.9108673514 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.ScalarValueTypeObj() push r15 push r14 push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov rdi,7FFF542E29C0 cmp dword ptr [rdi],0 jle short M00_L02 mov rbx,194798064E0 mov rbp,offset MT_PerfLabTests.CastingPerf2.FooSVT mov rdx,194798064B0 mov r14,[rdx] add r14,8 M00_L00: mov r15,[rbx] cmp [r15],rbp je short M00_L01 mov rdx,r15 mov rcx,rbp call qword ptr [7FFF53F1D8D0]; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object) M00_L01: mov rax,[r15+8] mov [r14],rax inc esi cmp esi,[rdi] jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi pop r14 pop r15 ret ; Total bytes of code 112 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object) cmp [rdx],rcx jne short M01_L00 lea rax,[rdx+8] ret M01_L00: jmp near ptr System.Runtime.CompilerServices.CastHelpers.Unbox_Helper(Void*, System.Object) ; Total bytes of code 15 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.ScalarValueTypeObj() push r15 push r14 push rdi push rsi push rbp push rbx sub rsp,28 xor esi,esi mov rdi,7FF7FAF029C0 cmp dword ptr [rdi],0 jle short M00_L02 mov rbx,1BB0E8064E0 mov rbp,offset MT_PerfLabTests.CastingPerf2.FooSVT mov rdx,1BB0E8064B0 mov r14,[rdx] add r14,8 M00_L00: mov r15,[rbx] cmp [r15],rbp je short M00_L01 mov rdx,r15 mov rcx,rbp call qword ptr [7FF7FAB3D8D0]; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object) M00_L01: mov rax,[r15+8] mov [r14],rax inc esi cmp esi,[rdi] jl short M00_L00 M00_L02: add rsp,28 pop rbx pop rbp pop rsi pop rdi pop r14 pop r15 ret ; Total bytes of code 112 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object) cmp [rdx],rcx jne short M01_L00 lea rax,[rdx+8] ret M01_L00: jmp near ptr System.Runtime.CompilerServices.CastHelpers.Unbox_Helper(Void*, System.Object) ; Total bytes of code 15 ``` ### 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 x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in Benchstone.BenchI.Fib

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Test - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/Benchstone.BenchI.Fib.Test.html>) 159.86 μs 143.21 μs 0.90 0.05 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 'Benchstone.BenchI.Fib*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Benchstone.BenchI.Fib.Test ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 143.20501136363634 < 151.7680457057823. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/17/2022 10:44:50 PM, 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 26.7371978213748 (T) = (0 -143377.82866433694) / Math.Sqrt((42331594.29923941 / (299)) + (78855.50795026158 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.06606560306645168 = (153520.2356130145 - 143377.82866433694) / 153520.2356130145 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; Benchstone.BenchI.Fib.Test() push rsi sub rsp,20 mov ecx,17 call qword ptr [7FFC4CDBDE40]; Benchstone.BenchI.Fib.Fibonacci(Int32) mov esi,eax mov ecx,16 call qword ptr [7FFC4CDBDE40]; Benchstone.BenchI.Fib.Fibonacci(Int32) add eax,esi cmp eax,0B520 sete al movzx eax,al add rsp,20 pop rsi ret ; Total bytes of code 48 ``` ```assembly ; Benchstone.BenchI.Fib.Fibonacci(Int32) M01_L00: push rdi push rsi sub rsp,28 mov esi,ecx cmp esi,2 jle short M01_L01 lea ecx,[rsi-1] call qword ptr [7FFC4CDBDE40] mov edi,eax lea ecx,[rsi-2] call qword ptr [7FFC4CDBDE40] add eax,edi add rsp,28 pop rsi pop rdi ret M01_L01: mov eax,1 add rsp,28 pop rsi pop rdi ret ; Total bytes of code 54 ``` ### Compare Jit Disasm ```assembly ; Benchstone.BenchI.Fib.Test() push rsi sub rsp,20 mov ecx,17 call qword ptr [7FFF9FD39510]; Benchstone.BenchI.Fib.Fibonacci(Int32) mov esi,eax mov ecx,16 call qword ptr [7FFF9FD39510]; Benchstone.BenchI.Fib.Fibonacci(Int32) add eax,esi cmp eax,0B520 sete al movzx eax,al add rsp,20 pop rsi ret ; Total bytes of code 48 ``` ```assembly ; Benchstone.BenchI.Fib.Fibonacci(Int32) M01_L00: push rdi push rsi sub rsp,28 mov esi,ecx cmp esi,2 jle short M01_L01 lea ecx,[rsi-1] call qword ptr [7FFF9FD39510] mov edi,eax lea ecx,[rsi-2] call qword ptr [7FFF9FD39510] add eax,edi add rsp,28 pop rsi pop rdi ret M01_L01: mov eax,1 add rsp,28 pop rsi pop rdi ret ; Total bytes of code 54 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in PerfLabTests.LowLevelPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[InterfaceInterfaceMethodLongHierarchy - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy.html>) 404.01 μs 375.77 μs 0.93 0.05 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.LowLevelPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 375.7653502747253 < 383.81046928418806. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/10/2022 11:25:25 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 10.157146686353625 (T) = (0 -374699.41265288164) / Math.Sqrt((1194073423.1107252 / (299)) + (544327.6071664188 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.051485100565290494 = (395037.9829312042 - 374699.41265288164) / 395037.9829312042 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy() push rdi push rsi push rbp push rbx sub rsp,28 mov rsi,rcx mov rcx,14F34406300 mov rdi,[rcx] xor ebx,ebx mov rbp,7FFD40A02958 cmp dword ptr [rbp],0 jle short M00_L01 M00_L00: mov rcx,rsi mov rdx,rdi call qword ptr [7FFD409B9528]; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) inc ebx cmp ebx,[rbp] jl short M00_L00 M00_L01: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 70 ``` ```assembly ; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) sub rsp,28 mov rcx,rdx mov r11,7FFD40490570 call qword ptr [r11] nop add rsp,28 ret ; Total bytes of code 26 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy() push rdi push rsi push rbp push rbx sub rsp,28 mov rsi,rcx mov rcx,2214E406300 mov rdi,[rcx] xor ebx,ebx mov rbp,7FF9B59B2958 cmp dword ptr [rbp],0 jle short M00_L01 M00_L00: mov rcx,rsi mov rdx,rdi call qword ptr [7FF9B59695D0]; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) inc ebx cmp ebx,[rbp] jl short M00_L00 M00_L01: add rsp,28 pop rbx pop rbp pop rsi pop rdi ret ; Total bytes of code 70 ``` ```assembly ; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) sub rsp,28 mov rcx,rdx mov r11,7FF9B5440570 call qword ptr [r11] nop add rsp,28 ret ; Total bytes of code 26 ``` ### 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 x64
OS Windows 10.0.18362
Baseline 6e773f2b73db1f1b04e5292725a99cf48be84428
Compare e6bb67612ab8ad43415c851a1a1dfa6a9057af98
Diff Diff

Improvements in System.Collections.ContainsKeyFalse<Int32, Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ImmutableDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.ContainsKeyFalse(Int32%2c%20Int32).ImmutableDictionary(Size%3a%20512).html>) 26.43 μs 24.19 μs 0.92 0.05 False
[IDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.ContainsKeyFalse(Int32%2c%20Int32).IDictionary(Size%3a%20512).html>) 5.87 μs 5.18 μs 0.88 0.21 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.Collections.ContainsKeyFalse&lt;Int32, Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsKeyFalse<Int32, Int32>.ImmutableDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 24.193168214654282 < 25.127181635265895. IsChangePoint: Marked as a change because one of 11/11/2022 5:53:56 PM, 11/18/2022 8:48:12 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 33.92998991521752 (T) = (0 -24077.93093623183) / Math.Sqrt((628727.4493398074 / (299)) + (6443.334247112623 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.06320380895282485 = (25702.421899598987 - 24077.93093623183) / 25702.421899598987 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.ContainsKeyFalse<Int32, Int32>.IDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 5.180066231548799 < 5.509351869553297. IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 12/1/2022 7:29:59 PM, 12/20/2022 11:23:14 PM, 12/28/2022 5:13:50 PM, 1/5/2023 9:29:47 PM, 1/18/2023 3:20:52 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 20.102719390028575 (T) = (0 -5161.039340896139) / Math.Sqrt((125756.35349654936 / (299)) + (565.7302183335574 / (34))) is greater than 1.9671567996108528 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (34) - 2, .975) and 0.07531250177155925 = (5581.387604767987 - 5161.039340896139) / 5581.387604767987 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)