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] Improvement on 8/1/2022 6:03:22 PM #7175

Open performanceautofiler[bot] opened 2 years ago

performanceautofiler[bot] commented 2 years ago

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline f1de614c74589fe8f682dda39889d189f2522504
Compare 68bd58e0e68b22a3cbcc67a3f1218a6c8f623bcf
Diff Diff

Improvements in MicroBenchmarks.Serializers.Xml_ToStream<ClassImplementingIXmlSerialiable>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[XmlSerializer_ - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/MicroBenchmarks.Serializers.XmlToStream(ClassImplementingIXmlSerialiable).XmlSerializer.html>) 1.47 μs 1.05 μs 0.71 0.06 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'MicroBenchmarks.Serializers.Xml_ToStream&lt;ClassImplementingIXmlSerialiable&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### MicroBenchmarks.Serializers.Xml_ToStream<ClassImplementingIXmlSerialiable>.XmlSerializer_ ```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.045738690997029 < 1.4034846625464419. IsChangePoint: Marked as a change because one of 7/2/2022 7:35:06 PM, 7/6/2022 3:55:24 AM, 8/1/2022 4:16:36 PM, 8/5/2022 10:47:59 PM falls between 7/28/2022 9:13:34 AM and 8/5/2022 10:47:59 PM. IsImprovementStdDev: Marked as improvement because 38.767231360906784 (T) = (0 -1048.4859462357383) / Math.Sqrt((24319.66213740442 / (299)) + (2109.1449240669126 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.3163757670846626 = (1533.716763907617 - 1048.4859462357383) / 1533.716763907617 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 f1de614c74589fe8f682dda39889d189f2522504
Compare 68bd58e0e68b22a3cbcc67a3f1218a6c8f623bcf
Diff Diff

Improvements in System.Formats.Cbor.Tests.Perf_CborReader

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SkipValue - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding%3a%20(Array%2c%20Strict)).html>) 280.12 ns 242.62 ns 0.87 0.02 False 2502.8406400909007 2410.1540604813913 0.9629674466185177 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Formats.Cbor.Tests.Perf_CborReader*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Array, Strict)) ```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 242.62192426216305 < 269.91617734535095. IsChangePoint: Marked as a change because one of 7/2/2022 7:35:06 PM, 7/6/2022 3:55:24 AM, 8/1/2022 4:16:36 PM, 8/5/2022 10:47:59 PM falls between 7/28/2022 9:13:34 AM and 8/5/2022 10:47:59 PM. IsImprovementStdDev: Marked as improvement because 23.34991908671738 (T) = (0 -241.53574563548273) / Math.Sqrt((1758.8716799529261 / (299)) + (2.864724051047805 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.19126516006388597 = (298.6587614483912 - 241.53574563548273) / 298.6587614483912 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(CborEncoding) push r14 push rdi push rsi push rbp push rbx sub rsp,20 mov rsi,rdx mov rdi,[rsi+10] test rdi,rdi je short 0000000000004B63 mov rbx,rdi mov ebp,[rbx+8] mov rcx,offset MT_System.Formats.Cbor.CborReader call 000000000000A6A0 mov rdi,rax mov esi,[rsi+18] mov byte ptr [rdi+45],1 mov ecx,esi call qword ptr [0FBA0] lea r14,[rdi+48] mov rcx,r14 mov rdx,rbx call 000000000000A3C0 xor ecx,ecx mov [r14+8],ecx mov [r14+0C],ebp mov [rdi+40],esi mov byte ptr [rdi+46],0 lea rcx,[rdi+5C] mov byte ptr [rcx],1 mov dword ptr [rcx+4],1 mov rcx,rdi xor edx,edx xor r8d,r8d add rsp,20 pop rbx pop rbp pop rsi pop rdi pop r14 jmp qword ptr [0F438] xor ebx,ebx xor ebp,ebp jmp short 0000000000004AFC ; Total bytes of code 137 ``` ```assembly ; System.Formats.Cbor.CborConformanceModeHelpers.Validate(System.Formats.Cbor.CborConformanceMode) push rsi sub rsp,20 test ecx,ecx jl short 0000000000004CA4 cmp ecx,3 jg short 0000000000004CA4 add rsp,20 pop rsi ret mov rcx,offset MT_System.ArgumentOutOfRangeException call 000000000000A6A0 mov rsi,rax mov ecx,0DFA mov rdx,7FFA6D531878 call 0000000000001EF0 mov rdx,rax mov rcx,rsi call qword ptr [0F618] mov rcx,rsi call 000000000000C1B0 int 3 ; Total bytes of code 79 ``` ```assembly ; System.Formats.Cbor.CborReader.SkipToAncestor(Int32, Boolean) push rbp push rsi sub rsp,78 vzeroupper lea rbp,[rsp+80] vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+0FFD0],xmm4 vmovdqa xmmword ptr [rbp+0FFE0],xmm4 xor eax,eax mov [rbp+0FFF0],rax mov [rbp+0FFA0],rsp mov [rbp+10],rcx mov [rbp+18],edx mov rdx,[rcx+8] test rdx,rdx je short 0000000000004D5E mov edx,[rdx+10] jmp short 0000000000004D60 xor edx,edx xor eax,eax vxorps ymm0,ymm0,ymm0 vmovdqu ymmword ptr [rbp+0FFA8],ymm0 mov [rbp+0FFC8],rax mov eax,[rcx+30] mov r9d,[rcx+38] mov r10d,[rcx+34] lea r11,[rcx+64] movzx esi,byte ptr [r11] mov r11d,[r11+4] vmovupd xmm0,[rcx+70] mov [rbp+0FFA8],edx mov [rbp+0FFAC],eax mov [rbp+0FFB0],r9d mov [rbp+0FFB4],r10d mov [rbp+0FFB8],sil mov [rbp+0FFBC],r11d vmovupd [rbp+0FFC0],xmm0 vmovdqu ymm0,ymmword ptr [rbp+0FFA8] vmovdqu ymmword ptr [rbp+0FFD0],ymm0 mov rdx,[rbp+0FFC8] mov [rbp+0FFF0],rdx test r8b,r8b sete dl mov [rcx+45],dl lea rdx,[rbp+18] call qword ptr [0F450] cmp dword ptr [rbp+18],0 mov rcx,[rbp+10] jg short 0000000000004DC1 mov byte ptr [rcx+45],1 add rsp,78 pop rsi pop rbp ret push rbp push rsi sub rsp,28 vzeroupper mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+80] lea rdx,[rbp+0FFD0] mov rcx,[rbp+10] call qword ptr [0F798] call 000000000000CA40 int 3 push rbp push rsi sub rsp,28 vzeroupper mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+80] mov rcx,[rbp+10] mov byte ptr [rcx+45],1 add rsp,28 pop rsi pop rbp ret ; Total bytes of code 277 ``` ### Compare Jit Disasm ```assembly ; System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(CborEncoding) push r14 push rdi push rsi push rbp push rbx sub rsp,20 mov rsi,rdx mov rdi,[rsi+10] test rdi,rdi je short 0000000000005363 mov rbx,rdi mov ebp,[rbx+8] mov rcx,offset MT_System.Formats.Cbor.CborReader call 000000000000C390 mov rdi,rax mov esi,[rsi+18] mov byte ptr [rdi+45],1 mov ecx,esi call qword ptr [3BA0] lea r14,[rdi+48] mov rcx,r14 mov rdx,rbx call 000000000000C0B0 xor ecx,ecx mov [r14+8],ecx mov [r14+0C],ebp mov [rdi+40],esi mov byte ptr [rdi+46],0 lea rcx,[rdi+5C] mov byte ptr [rcx],1 mov dword ptr [rcx+4],1 mov rcx,rdi xor edx,edx xor r8d,r8d add rsp,20 pop rbx pop rbp pop rsi pop rdi pop r14 jmp qword ptr [3438] xor ebx,ebx xor ebp,ebp jmp short 00000000000052FC ; Total bytes of code 137 ``` ```assembly ; System.Formats.Cbor.CborConformanceModeHelpers.Validate(System.Formats.Cbor.CborConformanceMode) push rsi sub rsp,20 test ecx,ecx jl short 0000000000004044 cmp ecx,3 jg short 0000000000004044 add rsp,20 pop rsi ret mov rcx,offset MT_System.ArgumentOutOfRangeException call 000000000000C390 mov rsi,rax mov ecx,0DFA mov rdx,7FFE5AF425A0 call 00000000000014A0 mov rdx,rax mov rcx,rsi call qword ptr [1810] mov rcx,rsi call 0000000000004690 int 3 ; Total bytes of code 79 ``` ```assembly ; System.Formats.Cbor.CborReader.SkipToAncestor(Int32, Boolean) push rbp push rsi sub rsp,78 vzeroupper lea rbp,[rsp+80] vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+0FFD0],xmm4 vmovdqa xmmword ptr [rbp+0FFE0],xmm4 xor eax,eax mov [rbp+0FFF0],rax mov [rbp+0FFA0],rsp mov [rbp+10],rcx mov [rbp+18],edx mov rdx,[rcx+8] test rdx,rdx je short 00000000000040FE mov edx,[rdx+10] jmp short 0000000000004100 xor edx,edx xor eax,eax vxorps ymm0,ymm0,ymm0 vmovdqu ymmword ptr [rbp+0FFA8],ymm0 mov [rbp+0FFC8],rax mov eax,[rcx+30] mov r9d,[rcx+38] mov r10d,[rcx+34] lea r11,[rcx+64] movzx esi,byte ptr [r11] mov r11d,[r11+4] vmovupd xmm0,[rcx+70] mov [rbp+0FFA8],edx mov [rbp+0FFAC],eax mov [rbp+0FFB0],r9d mov [rbp+0FFB4],r10d mov [rbp+0FFB8],sil mov [rbp+0FFBC],r11d vmovupd [rbp+0FFC0],xmm0 vmovdqu ymm0,ymmword ptr [rbp+0FFA8] vmovdqu ymmword ptr [rbp+0FFD0],ymm0 mov rdx,[rbp+0FFC8] mov [rbp+0FFF0],rdx test r8b,r8b sete dl mov [rcx+45],dl lea rdx,[rbp+18] call qword ptr [3450] cmp dword ptr [rbp+18],0 mov rcx,[rbp+10] jg short 0000000000004161 mov byte ptr [rcx+45],1 add rsp,78 pop rsi pop rbp ret push rbp push rsi sub rsp,28 vzeroupper mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+80] lea rdx,[rbp+0FFD0] mov rcx,[rbp+10] call qword ptr [3798] call 0000000000005470 int 3 push rbp push rsi sub rsp,28 vzeroupper mov rbp,[rcx+20] mov [rsp+20],rbp lea rbp,[rbp+80] mov rcx,[rbp+10] mov byte ptr [rcx+45],1 add rsp,28 pop rsi pop rbp ret ; Total bytes of code 277 ``` ### 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 f1de614c74589fe8f682dda39889d189f2522504
Compare 68bd58e0e68b22a3cbcc67a3f1218a6c8f623bcf
Diff Diff

Improvements in System.Diagnostics.Perf_EventSource

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Log - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Diagnostics.Perf_EventSource.Log.html>) 195.73 ns 155.45 ns 0.79 0.04 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Diagnostics.Perf_EventSource*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Diagnostics.Perf_EventSource.Log ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 155.4468882106843 < 178.48909585855856. IsChangePoint: Marked as a change because one of 6/26/2022 6:11:06 PM, 8/1/2022 4:16:36 PM, 8/5/2022 10:47:59 PM falls between 7/28/2022 9:13:34 AM and 8/5/2022 10:47:59 PM. IsImprovementStdDev: Marked as improvement because 58.518862165171754 (T) = (0 -158.02475570883902) / Math.Sqrt((16.96437635363799 / (299)) + (4.163869018757869 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.14372534779094714 = (184.54914588579751 - 158.02475570883902) / 184.54914588579751 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Diagnostics.Perf_EventSource.Log() push rsi sub rsp,30 mov rcx,263C8C08B48 mov rsi,[rcx] mov rcx,rsi xor edx,edx mov [rsp+20],rdx mov edx,1 xor r8d,r8d xor r9d,r9d call qword ptr [0FA20] mov rcx,rsi xor r8d,r8d mov [rsp+20],r8d mov r8,263C8C058A8 mov r8,[r8] mov edx,2 mov r9d,6 call qword ptr [0F978] nop add rsp,30 pop rsi ret ; Total bytes of code 93 ``` ```assembly ; System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(Int32, System.Guid*, Int32, EventData*) push rbp push r15 push r14 push r12 push rdi push rsi push rbx sub rsp,0E0 vzeroupper lea rbp,[rsp+110] mov [rbp+0FF30],rsp mov [rbp+10],rcx mov [rbp+18],edx mov rsi,r8 mov edi,r9d cmp byte ptr [rcx+9D],0 jne short 000000000000F49B add rsp,0E0 pop rbx pop rsi pop rdi pop r12 pop r14 pop r15 pop rbp ret mov r9,[rcx+10] cmp edx,[r9+8] jae near ptr 000000000000F54C mov r8d,edx imul r8,60 lea rbx,[r9+r8+10] movzx r14d,byte ptr [rbx+55] xor r15d,r15d mov r9,263C8C00298 mov r9,[r9] vmovupd xmm0,[r9+8] vmovupd [rbp+0FFC0],xmm0 mov r9,263C8C00298 mov r9,[r9] vmovupd xmm0,[r9+8] vmovupd [rbp+0FFB0],xmm0 test r14d,r14d je near ptr 000000000000F606 test rsi,rsi jne near ptr 000000000000F606 test byte ptr [rbx+40],2 jne near ptr 000000000000F606 cmp r14d,1 jne short 000000000000F551 lea r9,[rbp+0FFC0] mov [rsp+20],r9 lea r9,[rbp+0FFB0] mov [rsp+28],r9 mov r9d,[rbx+40] mov [rsp+30],r9d mov dword ptr [rsp+38],1 movzx r9d,word ptr [rbx+56] mov rdx,[rcx+8] mov r8,[rbx] mov rcx,[rcx+68] cmp [rcx],ecx call qword ptr [3270] jmp short 000000000000F580 call 0000000000007D40 cmp r14d,2 jne short 000000000000F580 lea r9,[rbp+0FFC0] mov [rsp+20],r9 mov dword ptr [rsp+28],1 movzx r9d,word ptr [rbx+56] mov rdx,[rcx+8] mov r8,[rbx] mov rcx,[rcx+68] cmp [rcx],ecx call qword ptr [3288] vmovupd xmm0,[rbp+0FFC0] vmovupd [rbp+0FF70],xmm0 mov rcx,263C8C00298 mov rcx,[rcx] vmovupd xmm0,[rcx+8] vmovupd [rbp+0FF60],xmm0 lea rcx,[rbp+0FF70] lea rdx,[rbp+0FF60] call qword ptr [0F360] test eax,eax jne short 000000000000F5C3 lea r15,[rbp+0FFC0] vmovupd xmm0,[rbp+0FFB0] vmovupd [rbp+0FF50],xmm0 mov rcx,263C8C00298 mov rcx,[rcx] vmovupd xmm0,[rcx+8] vmovupd [rbp+0FF40],xmm0 lea rcx,[rbp+0FF50] lea rdx,[rbp+0FF40] call qword ptr [0F360] test eax,eax jne short 000000000000F606 lea rsi,[rbp+0FFB0] mov rcx,[rbp+10] test byte ptr [rcx+94],8 jne near ptr 000000000000F6C1 cmp byte ptr [rbx+45],0 je short 000000000000F662 mov [rsp+20],rsi mov [rsp+28],edi mov r14,[rbp+30] mov [rsp+30],r14 lea rdx,[rbx+50] mov rcx,[rcx+30] mov r8,[rbx+30] mov r9,r15 cmp [rcx],ecx call qword ptr [1EA0] test eax,eax jne short 000000000000F6B7 mov rdx,[rbx] mov rcx,[rbp+10] xor r8d,r8d call qword ptr [0FC60] mov [rbp+30],r14 mov rcx,[rbp+10] cmp byte ptr [rbx+46],0 je short 000000000000F6AE mov [rsp+20],rsi mov [rsp+28],edi mov r14,[rbp+30] mov [rsp+30],r14 lea rdx,[rbx+50] mov rcx,[rcx+40] mov r8,[rbx+30] mov r9,r15 cmp [rcx],ecx call qword ptr [1EA0] test eax,eax jne near ptr 000000000000F74F mov rdx,[rbx] mov rcx,[rbp+10] xor r8d,r8d call qword ptr [0FC60] jmp near ptr 000000000000F74F mov r14,[rbp+30] jmp near ptr 000000000000F74F mov [rbp+30],r14 mov rcx,[rbp+10] jmp short 000000000000F662 cmp byte ptr [rbx+45],0 jne short 000000000000F6D1 cmp byte ptr [rbx+46],0 je near ptr 000000000000F7B2 xor eax,eax vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [rbp+0FF80],xmm0 mov [rbp+0FF90],rax mov rdx,[rbx+58] lea rcx,[rbp+0FF80] call qword ptr [10F0] movzx edx,byte ptr [rbx+54] lea rcx,[rbp+0FF80] call qword ptr [1078] movzx edx,byte ptr [rbx+55] lea rcx,[rbp+0FF80] call qword ptr [10A8] vmovdqu xmm0,xmmword ptr [rbp+0FF80] vmovdqu xmmword ptr [rbp+0FF98],xmm0 mov rcx,[rbp+0FF90] mov [rbp+0FFA8],rcx mov r12,[rbx] mov rcx,rbx call qword ptr [7AC8] mov r9,rax mov [rsp+20],r15 mov [rsp+28],rsi mov r14,[rbp+30] mov [rsp+30],r14 mov rdx,r12 lea r8,[rbp+0FF98] mov rcx,[rbp+10] call qword ptr [11F8] mov rcx,[rbp+10] cmp qword ptr [rcx+28],0 je near ptr 000000000000F489 mov rcx,[rbp+10] mov edx,[rbp+18] cmp byte ptr [rbx+44],0 je near ptr 000000000000F489 mov rcx,offset MT_System.Diagnostics.Tracing.EventWrittenEventArgs call 000000000000A6A0 mov rbx,rax mov [rsp+20],rsi mov rcx,rbx mov rdx,[rbp+10] mov r8d,[rbp+18] mov r9,r15 call qword ptr [5F60] mov rcx,[rbp+10] mov rdx,rbx mov r8d,edi mov r9,r14 call qword ptr [0FBD0] jmp near ptr 000000000000F489 mov r14,[rbp+30] jmp short 000000000000F74F push rbp push r15 push r14 push r12 push rdi push rsi push rbx sub rsp,50 vzeroupper mov rbp,[rcx+40] mov [rsp+40],rbp lea rbp,[rbp+110] mov rsi,rdx mov rdx,rsi mov rcx,offset MT_System.Diagnostics.Tracing.EventSourceException call qword ptr [0B828] test rax,rax je short 000000000000F7F9 call 000000000000CA40 mov rcx,[rbp+10] mov rdx,rcx mov rdx,[rdx+10] mov r8d,[rbp+18] cmp r8d,[rdx+8] jae short 000000000000F839 mov r8d,r8d imul r8,60 mov rdx,[rdx+r8+10] mov r8,rsi call qword ptr [0FC60] lea rax,[0F489] add rsp,50 pop rbx pop rsi pop rdi pop r12 pop r14 pop r15 pop rbp ret call 0000000000007D40 int 3 ; Total bytes of code 1007 ``` ```assembly ; System.Diagnostics.Tracing.EventSource.WriteEvent(Int32, System.String, Int32, Int32) push rbp sub rsp,40 lea rbp,[rsp+30] xor eax,eax mov [rbp+8],rax mov rax,4C1B4138E6ED mov [rbp],rax mov [rbp+38],r9d cmp byte ptr [rcx+9D],0 je near ptr 000000000000FDD0 test r8,r8 jne short 000000000000FD51 mov r8,263C8C02028 mov r8,[r8] test r8,r8 jne short 000000000000FD5B xor r9d,r9d jmp short 000000000000FD67 lea r9,[r8+0C] mov [rbp+8],r9 mov r9,[rbp+8] test [rsp],esp sub rsp,30 lea rax,[rsp+30] mov [rax],r9 mov r8d,[r8+8] lea r8d,[r8*2+2] mov [rax+8],r8d xor r8d,r8d mov [rax+0C],r8d lea r8,[rbp+38] mov [rax+10],r8 mov dword ptr [rax+18],4 xor r8d,r8d mov [rax+1C],r8d lea r8,[rbp+40] mov [rax+20],r8 mov dword ptr [rax+28],4 xor r8d,r8d mov [rax+2C],r8d mov [rsp+20],rax mov r9d,3 call qword ptr [0FA20] xor eax,eax mov [rbp+8],rax mov rcx,4C1B4138E6ED cmp [rbp],rcx je short 000000000000FDE5 call 0000000000009600 nop lea rsp,[rbp+10] pop rbp ret ; Total bytes of code 220 ``` ### Compare Jit Disasm ```assembly ; System.Diagnostics.Perf_EventSource.Log() push rsi sub rsp,30 mov rcx,1C7FB008B48 mov rsi,[rcx] mov rcx,rsi xor edx,edx mov [rsp+20],rdx mov edx,1 xor r8d,r8d xor r9d,r9d call qword ptr [1450] mov rcx,rsi xor r8d,r8d mov [rsp+20],r8d mov r8,1C7FB0058A8 mov r8,[r8] mov edx,2 mov r9d,6 call qword ptr [13A8] nop add rsp,30 pop rsi ret ; Total bytes of code 93 ``` ```assembly ; System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(Int32, System.Guid*, Int32, EventData*) push rbp push r15 push r14 push r12 push rdi push rsi push rbx sub rsp,0E0 vzeroupper lea rbp,[rsp+110] mov [rbp+0FF30],rsp mov [rbp+10],rcx mov [rbp+18],edx mov rsi,r8 mov edi,r9d cmp byte ptr [rcx+9D],0 jne short 000000000000F49B add rsp,0E0 pop rbx pop rsi pop rdi pop r12 pop r14 pop r15 pop rbp ret mov r9,[rcx+10] cmp edx,[r9+8] jae near ptr 000000000000F54C mov r8d,edx imul r8,60 lea rbx,[r9+r8+10] movzx r14d,byte ptr [rbx+55] xor r15d,r15d mov r9,1C7FB000298 mov r9,[r9] vmovupd xmm0,[r9+8] vmovupd [rbp+0FFC0],xmm0 mov r9,1C7FB000298 mov r9,[r9] vmovupd xmm0,[r9+8] vmovupd [rbp+0FFB0],xmm0 test r14d,r14d je near ptr 000000000000F606 test rsi,rsi jne near ptr 000000000000F606 test byte ptr [rbx+40],2 jne near ptr 000000000000F606 cmp r14d,1 jne short 000000000000F551 lea r9,[rbp+0FFC0] mov [rsp+20],r9 lea r9,[rbp+0FFB0] mov [rsp+28],r9 mov r9d,[rbx+40] mov [rsp+30],r9d mov dword ptr [rsp+38],1 movzx r9d,word ptr [rbx+56] mov rdx,[rcx+8] mov r8,[rbx] mov rcx,[rcx+68] cmp [rcx],ecx call qword ptr [3BB8] jmp short 000000000000F580 call 0000000000006930 cmp r14d,2 jne short 000000000000F580 lea r9,[rbp+0FFC0] mov [rsp+20],r9 mov dword ptr [rsp+28],1 movzx r9d,word ptr [rbx+56] mov rdx,[rcx+8] mov r8,[rbx] mov rcx,[rcx+68] cmp [rcx],ecx call qword ptr [3BD0] vmovupd xmm0,[rbp+0FFC0] vmovupd [rbp+0FF70],xmm0 mov rcx,1C7FB000298 mov rcx,[rcx] vmovupd xmm0,[rcx+8] vmovupd [rbp+0FF60],xmm0 lea rcx,[rbp+0FF70] lea rdx,[rbp+0FF60] call qword ptr [0F840] test eax,eax jne short 000000000000F5C3 lea r15,[rbp+0FFC0] vmovupd xmm0,[rbp+0FFB0] vmovupd [rbp+0FF50],xmm0 mov rcx,1C7FB000298 mov rcx,[rcx] vmovupd xmm0,[rcx+8] vmovupd [rbp+0FF40],xmm0 lea rcx,[rbp+0FF50] lea rdx,[rbp+0FF40] call qword ptr [0F840] test eax,eax jne short 000000000000F606 lea rsi,[rbp+0FFB0] mov rcx,[rbp+10] test byte ptr [rcx+94],8 jne near ptr 000000000000F6C1 cmp byte ptr [rbx+45],0 je short 000000000000F662 mov [rsp+20],rsi mov [rsp+28],edi mov r14,[rbp+30] mov [rsp+30],r14 lea rdx,[rbx+50] mov rcx,[rcx+30] mov r8,[rbx+30] mov r9,r15 cmp [rcx],ecx call qword ptr [38A0] test eax,eax jne short 000000000000F6B7 mov rdx,[rbx] mov rcx,[rbp+10] xor r8d,r8d call qword ptr [1690] mov [rbp+30],r14 mov rcx,[rbp+10] cmp byte ptr [rbx+46],0 je short 000000000000F6AE mov [rsp+20],rsi mov [rsp+28],edi mov r14,[rbp+30] mov [rsp+30],r14 lea rdx,[rbx+50] mov rcx,[rcx+40] mov r8,[rbx+30] mov r9,r15 cmp [rcx],ecx call qword ptr [38A0] test eax,eax jne near ptr 000000000000F74F mov rdx,[rbx] mov rcx,[rbp+10] xor r8d,r8d call qword ptr [1690] jmp near ptr 000000000000F74F mov r14,[rbp+30] jmp near ptr 000000000000F74F mov [rbp+30],r14 mov rcx,[rbp+10] jmp short 000000000000F662 cmp byte ptr [rbx+45],0 jne short 000000000000F6D1 cmp byte ptr [rbx+46],0 je near ptr 000000000000F7B2 xor eax,eax vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [rbp+0FF80],xmm0 mov [rbp+0FF90],rax mov rdx,[rbx+58] lea rcx,[rbp+0FF80] call qword ptr [50F0] movzx edx,byte ptr [rbx+54] lea rcx,[rbp+0FF80] call qword ptr [5078] movzx edx,byte ptr [rbx+55] lea rcx,[rbp+0FF80] call qword ptr [50A8] vmovdqu xmm0,xmmword ptr [rbp+0FF80] vmovdqu xmmword ptr [rbp+0FF98],xmm0 mov rcx,[rbp+0FF90] mov [rbp+0FFA8],rcx mov r12,[rbx] mov rcx,rbx call qword ptr [9AC8] mov r9,rax mov [rsp+20],r15 mov [rsp+28],rsi mov r14,[rbp+30] mov [rsp+30],r14 mov rdx,r12 lea r8,[rbp+0FF98] mov rcx,[rbp+10] call qword ptr [1A08] mov rcx,[rbp+10] cmp qword ptr [rcx+28],0 je near ptr 000000000000F489 mov rcx,[rbp+10] mov edx,[rbp+18] cmp byte ptr [rbx+44],0 je near ptr 000000000000F489 mov rcx,offset MT_System.Diagnostics.Tracing.EventWrittenEventArgs call 000000000000C390 mov rbx,rax mov [rsp+20],rsi mov rcx,rbx mov rdx,[rbp+10] mov r8d,[rbp+18] mov r9,r15 call qword ptr [9F60] mov rcx,[rbp+10] mov rdx,rbx mov r8d,edi mov r9,r14 call qword ptr [1600] jmp near ptr 000000000000F489 mov r14,[rbp+30] jmp short 000000000000F74F push rbp push r15 push r14 push r12 push rdi push rsi push rbx sub rsp,50 vzeroupper mov rbp,[rcx+40] mov [rsp+40],rbp lea rbp,[rbp+110] mov rsi,rdx mov rdx,rsi mov rcx,offset MT_System.Diagnostics.Tracing.EventSourceException call qword ptr [0B828] test rax,rax je short 000000000000F7F9 call 0000000000005470 mov rcx,[rbp+10] mov rdx,rcx mov rdx,[rdx+10] mov r8d,[rbp+18] cmp r8d,[rdx+8] jae short 000000000000F839 mov r8d,r8d imul r8,60 mov rdx,[rdx+r8+10] mov r8,rsi call qword ptr [1690] lea rax,[0F489] add rsp,50 pop rbx pop rsi pop rdi pop r12 pop r14 pop r15 pop rbp ret call 0000000000006930 int 3 ; Total bytes of code 1007 ``` ```assembly ; System.Diagnostics.Tracing.EventSource.WriteEvent(Int32, System.String, Int32, Int32) push rbp sub rsp,40 lea rbp,[rsp+30] xor eax,eax mov [rbp+8],rax mov rax,0BBDD3CFECBE7 mov [rbp],rax mov [rbp+38],r9d cmp byte ptr [rcx+9D],0 je near ptr 000000000000FDD0 test r8,r8 jne short 000000000000FD51 mov r8,1C7FB002028 mov r8,[r8] test r8,r8 jne short 000000000000FD5B xor r9d,r9d jmp short 000000000000FD67 lea r9,[r8+0C] mov [rbp+8],r9 mov r9,[rbp+8] test [rsp],esp sub rsp,30 lea rax,[rsp+30] mov [rax],r9 mov r8d,[r8+8] lea r8d,[r8*2+2] mov [rax+8],r8d xor r8d,r8d mov [rax+0C],r8d lea r8,[rbp+38] mov [rax+10],r8 mov dword ptr [rax+18],4 xor r8d,r8d mov [rax+1C],r8d lea r8,[rbp+40] mov [rax+20],r8 mov dword ptr [rax+28],4 xor r8d,r8d mov [rax+2C],r8d mov [rsp+20],rax mov r9d,3 call qword ptr [1450] xor eax,eax mov [rbp+8],rax mov rcx,0BBDD3CFECBE7 cmp [rbp],rcx je short 000000000000FDE5 call 00000000000081F0 nop lea rsp,[rbp+10] pop rbp ret ; Total bytes of code 220 ``` ### 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 f1de614c74589fe8f682dda39889d189f2522504
Compare 68bd58e0e68b22a3cbcc67a3f1218a6c8f623bcf
Diff Diff

Improvements in MicroBenchmarks.Serializers.Xml_ToStream<XmlElement>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[XmlSerializer_ - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/MicroBenchmarks.Serializers.XmlToStream(XmlElement).XmlSerializer.html>) 1.34 μs 904.84 ns 0.67 0.13 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'MicroBenchmarks.Serializers.Xml_ToStream&lt;XmlElement&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### MicroBenchmarks.Serializers.Xml_ToStream<XmlElement>.XmlSerializer_ ```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 904.8444983062726 < 1.2778708559532854. IsChangePoint: Marked as a change because one of 7/2/2022 7:35:06 PM, 7/6/2022 3:55:24 AM, 8/1/2022 4:16:36 PM, 8/5/2022 10:47:59 PM falls between 7/28/2022 9:13:34 AM and 8/5/2022 10:47:59 PM. IsImprovementStdDev: Marked as improvement because 49.856087202720644 (T) = (0 -922.6559565199542) / Math.Sqrt((5752.3540508370115 / (299)) + (1908.7703450329136 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.3356329507508776 = (1388.7744095116605 - 922.6559565199542) / 1388.7744095116605 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 2 years ago

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline f1de614c74589fe8f682dda39889d189f2522504
Compare 68bd58e0e68b22a3cbcc67a3f1218a6c8f623bcf
Diff Diff

Improvements in System.Tests.Perf_Enum

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[EnumToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Tests.Perf_Enum.EnumToString(value%3a%20Yellow).html>) 23.79 ns 19.42 ns 0.82 0.24 False 233.98947923526995 221.63303054451995 0.947192289451929 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_Enum*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Enum.EnumToString(value: Yellow) ```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 19.42067663864334 < 23.140452772235296. IsChangePoint: Marked as a change because one of 7/2/2022 7:35:06 PM, 7/6/2022 3:55:24 AM, 8/1/2022 4:16:36 PM, 8/5/2022 10:47:59 PM falls between 7/28/2022 9:13:34 AM and 8/5/2022 10:47:59 PM. IsImprovementStdDev: Marked as improvement because 33.00638943875057 (T) = (0 -18.960780180350184) / Math.Sqrt((3.8002626440521183 / (299)) + (0.2911724172990971 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.20925205997152624 = (23.978285899382087 - 18.960780180350184) / 23.978285899382087 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Enum.EnumToString(Colors) push rsi sub rsp,20 mov esi,edx mov rcx,offset MT_System.Tests.Perf_Enum+Colors call 000000000000A6A0 mov [rax+8],esi mov rcx,rax call qword ptr [9BB8] nop add rsp,20 pop rsi ret ; Total bytes of code 41 ``` ```assembly ; System.Enum.ToString() push rbp push r15 push r14 push r13 push r12 push rdi push rsi push rbx sub rsp,0A8 vzeroupper lea rbp,[rsp+0E0] vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+0FFB0],xmm4 xor edx,edx mov [rbp+0FFC0],rdx mov rsi,rcx lea rcx,[rbp+0FF48] mov rdx,r10 call 0000000000002120 mov rdi,rax mov rcx,rsp mov [rbp+0FF68],rcx mov rcx,rbp mov [rbp+0FF78],rcx mov rcx,rsi call 000000000000F660 mov rbx,rax mov [rbp+0FF88],rbx mov [rbp+10],rsi mov rcx,rsi call qword ptr [18B8] mov r14,rax mov rcx,[rbx+10] test rcx,rcx je near ptr 000000000000F864 mov rsi,[rbp+10] mov rcx,[rcx] test rcx,rcx je near ptr 000000000000F85C mov r15,[rcx+78] test r15,r15 je short 000000000000F7CD mov rcx,offset MT_System.Enum+EnumInfo cmp [r15],rcx je short 000000000000F7CD xor r15d,r15d test r15,r15 je short 000000000000F848 cmp qword ptr [r15+10],0 je short 000000000000F842 xor ecx,ecx mov [rbp+0FFC0],rcx mov [rbp+0FFB8],rcx cmp byte ptr [r15+18],0 jne near ptr 000000000000F97D mov rcx,[r15+8] mov r8d,[rcx+8] add rcx,10 cmp r8d,20 jg short 000000000000F84E mov rdx,r14 call qword ptr [0D600] test eax,eax jl near ptr 000000000000F999 mov rcx,[r15+10] cmp eax,[rcx+8] jae near ptr 000000000000F9AE mov edx,eax mov rax,[rcx+rdx*8+10] test rax,rax je near ptr 000000000000F9A0 add rsp,0A8 pop rbx pop rsi pop rdi pop r12 pop r13 pop r14 pop r15 pop rbp ret mov [rbp+10],rsi jmp short 000000000000F86F mov [rbp+10],rsi jmp short 000000000000F86F mov edx,r8d mov r8,r14 call qword ptr [0F9D8] jmp short 000000000000F809 xor r15d,r15d jmp near ptr 000000000000F7B6 mov rsi,[rbp+10] xor ecx,ecx jmp near ptr 000000000000F7A9 xor ecx,ecx mov [rbp+0FFC0],rcx mov [rbp+0FFB8],rcx mov [rbp+0FFB0],rbx vxorps xmm0,xmm0,xmm0 vmovupd [rbp+0FFA0],xmm0 lea rcx,[rbp+0FFA0] lea rdx,[rbp+0FFB0] call qword ptr [1318] lea rdx,[rbp+0FFC0] lea r8,[rbp+0FFB8] mov rcx,[rbp+0FFA0] mov r9,[rbp+0FFA8] mov [rbp+0FF90],rcx mov [rbp+0FF98],r9 lea rcx,[rbp+0FF90] mov r9d,1 mov rax,offset MD_System.Enum.GetEnumValuesAndNames(System.Runtime.CompilerServices.QCallTypeHandle, System.Runtime.CompilerServices.ObjectHandleOnStack, System.Runtime.CompilerServices.ObjectHandleOnStack, BOOL) mov [rbp+0FF58],rax lea rax,[0F8EA] mov [rbp+0FF70],rax lea rax,[rbp+0FF48] mov [rdi+10],rax mov byte ptr [rdi+0C],0 call qword ptr [98C0] mov byte ptr [rdi+0C],1 cmp dword ptr [6CDC],0 je short 000000000000F8FD call qword ptr [9368] mov rcx,[rbp+0FF50] mov [rdi+10],rcx mov rcx,offset MT_System.FlagsAttribute call 000000000000A6C0 mov rdx,rax mov rcx,[rbp+0FF88] xor r8d,r8d call qword ptr [8968] mov r15d,eax mov rcx,offset MT_System.Enum+EnumInfo call 000000000000A6A0 mov rsi,rax mov rcx,rsi mov edx,r15d mov r8,[rbp+0FFC0] mov r9,[rbp+0FFB8] call qword ptr [0D5D0] mov r15,rsi mov rbx,[rbp+0FF88] mov rcx,[rbx+10] test rcx,rcx je short 000000000000F98E mov rax,[rcx] test rax,rax je short 000000000000F98E lea rcx,[rax+78] mov rdx,r15 call 0000000000000010 mov rsi,[rbp+10] jmp near ptr 000000000000F7D9 mov rcx,r15 mov rdx,r14 call qword ptr [15D0] jmp near ptr 000000000000F825 mov rcx,rbx call qword ptr [72B8] jmp short 000000000000F968 xor eax,eax jmp near ptr 000000000000F825 mov rcx,rsi call qword ptr [1528] jmp near ptr 000000000000F82E call 0000000000007D40 int 3 ; Total bytes of code 660 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Enum.EnumToString(Colors) push rsi sub rsp,20 mov esi,edx mov rcx,offset MT_System.Tests.Perf_Enum+Colors call 000000000000C390 mov [rax+8],esi mov rcx,rax call qword ptr [9BD0] nop add rsp,20 pop rsi ret ; Total bytes of code 41 ``` ```assembly ; System.Enum.ToString() push rbp push r15 push r14 push r13 push r12 push rdi push rsi push rbx sub rsp,0A8 vzeroupper lea rbp,[rsp+0E0] vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rbp+0FFB0],xmm4 xor edx,edx mov [rbp+0FFC0],rdx mov rsi,rcx lea rcx,[rbp+0FF48] mov rdx,r10 call 00000000000042A0 mov rdi,rax mov rcx,rsp mov [rbp+0FF68],rcx mov rcx,rbp mov [rbp+0FF78],rcx mov rcx,rsi call 000000000000B080 mov rbx,rax mov [rbp+0FF88],rbx mov [rbp+10],rsi mov rcx,rsi call qword ptr [1900] mov r14,rax mov rcx,[rbx+10] test rcx,rcx je near ptr 000000000000F864 mov rsi,[rbp+10] mov rcx,[rcx] test rcx,rcx je near ptr 000000000000F85C mov r15,[rcx+78] test r15,r15 je short 000000000000F7CD mov rcx,offset MT_System.Enum+EnumInfo cmp [r15],rcx je short 000000000000F7CD xor r15d,r15d test r15,r15 je short 000000000000F848 cmp qword ptr [r15+10],0 je short 000000000000F842 xor ecx,ecx mov [rbp+0FFC0],rcx mov [rbp+0FFB8],rcx cmp byte ptr [r15+18],0 jne near ptr 000000000000F97D mov rcx,[r15+8] mov r8d,[rcx+8] add rcx,10 cmp r8d,20 jg short 000000000000F84E mov rdx,r14 call qword ptr [1600] test eax,eax jl near ptr 000000000000F999 mov rcx,[r15+10] cmp eax,[rcx+8] jae near ptr 000000000000F9AE mov edx,eax mov rax,[rcx+rdx*8+10] test rax,rax je near ptr 000000000000F9A0 add rsp,0A8 pop rbx pop rsi pop rdi pop r12 pop r13 pop r14 pop r15 pop rbp ret mov [rbp+10],rsi jmp short 000000000000F86F mov [rbp+10],rsi jmp short 000000000000F86F mov edx,r8d mov r8,r14 call qword ptr [39D8] jmp short 000000000000F809 xor r15d,r15d jmp near ptr 000000000000F7B6 mov rsi,[rbp+10] xor ecx,ecx jmp near ptr 000000000000F7A9 xor ecx,ecx mov [rbp+0FFC0],rcx mov [rbp+0FFB8],rcx mov [rbp+0FFB0],rbx vxorps xmm0,xmm0,xmm0 vmovupd [rbp+0FFA0],xmm0 lea rcx,[rbp+0FFA0] lea rdx,[rbp+0FFB0] call qword ptr [3318] lea rdx,[rbp+0FFC0] lea r8,[rbp+0FFB8] mov rcx,[rbp+0FFA0] mov r9,[rbp+0FFA8] mov [rbp+0FF90],rcx mov [rbp+0FF98],r9 lea rcx,[rbp+0FF90] mov r9d,1 mov rax,offset MD_System.Enum.GetEnumValuesAndNames(System.Runtime.CompilerServices.QCallTypeHandle, System.Runtime.CompilerServices.ObjectHandleOnStack, System.Runtime.CompilerServices.ObjectHandleOnStack, BOOL) mov [rbp+0FF58],rax lea rax,[0F8EA] mov [rbp+0FF70],rax lea rax,[rbp+0FF48] mov [rdi+10],rax mov byte ptr [rdi+0C],0 call qword ptr [9898] mov byte ptr [rdi+0C],1 cmp dword ptr [5D3C],0 je short 000000000000F8FD call qword ptr [8368] mov rcx,[rbp+0FF50] mov [rdi+10],rcx mov rcx,offset MT_System.FlagsAttribute call 000000000000D240 mov rdx,rax mov rcx,[rbp+0FF88] xor r8d,r8d call qword ptr [89C0] mov r15d,eax mov rcx,offset MT_System.Enum+EnumInfo call 000000000000C390 mov rsi,rax mov rcx,rsi mov edx,r15d mov r8,[rbp+0FFC0] mov r9,[rbp+0FFB8] call qword ptr [15D0] mov r15,rsi mov rbx,[rbp+0FF88] mov rcx,[rbx+10] test rcx,rcx je short 000000000000F98E mov rax,[rcx] test rax,rax je short 000000000000F98E lea rcx,[rax+78] mov rdx,r15 call 0000000000000010 mov rsi,[rbp+10] jmp near ptr 000000000000F7D9 mov rcx,r15 mov rdx,r14 call qword ptr [1600] jmp near ptr 000000000000F825 mov rcx,rbx call qword ptr [72B8] jmp short 000000000000F968 xor eax,eax jmp near ptr 000000000000F825 mov rcx,rsi call qword ptr [1558] jmp near ptr 000000000000F82E call 0000000000006930 int 3 ; Total bytes of code 660 ``` ### 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)