MihuBot / runtime-utils

0 stars 0 forks source link

[X64] [MichalPetryka] Improve updating classes for generics #286

Open MihuBot opened 3 months ago

MihuBot commented 3 months ago

Build completed in 1 hour 41 minutes.

Diffs

Found 315 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39003220
Total bytes of diff: 39002779
Total bytes of delta: -441 (-0.00 % of base)
Total relative delta: -1.09
    diff is an improvement.
    relative diff is an improvement.

Top file improvements (bytes):
        -408 : System.Net.Sockets.dasm (-0.16 % of base)
         -32 : System.Private.CoreLib.dasm (-0.00 % of base)
          -1 : System.Threading.Tasks.Dataflow.dasm (-0.00 % of base)

3 total files with Code Size differences (3 improved, 0 regressed), 253 unchanged.

Top method regressions (bytes):
           1 (0.24 % of base) : System.Collections.Immutable.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this (FullOpts)

Top method improvements (bytes):
        -408 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine:TryRegisterCore(long,System.Net.Sockets.SocketAsyncContext,byref):ubyte:this (FullOpts)
         -14 (-5.93 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts)
         -11 (-1.25 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts)
          -7 (-0.79 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts)
          -1 (-0.88 % of base) : System.Collections.Immutable.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this (FullOpts)
          -1 (-0.26 % of base) : System.Threading.Tasks.Dataflow.dasm - System.Threading.Tasks.Dataflow.BatchBlock`1+BatchBlockTargetCore[System.__Canon]:get_DebuggerDisplayContent():System.Object:this (FullOpts)

Top method regressions (percentages):
           1 (0.24 % of base) : System.Collections.Immutable.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this (FullOpts)

Top method improvements (percentages):
        -408 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine:TryRegisterCore(long,System.Net.Sockets.SocketAsyncContext,byref):ubyte:this (FullOpts)
         -14 (-5.93 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts)
         -11 (-1.25 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts)
          -1 (-0.88 % of base) : System.Collections.Immutable.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this (FullOpts)
          -7 (-0.79 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts)
          -1 (-0.26 % of base) : System.Threading.Tasks.Dataflow.dasm - System.Threading.Tasks.Dataflow.BatchBlock`1+BatchBlockTargetCore[System.__Canon]:get_DebuggerDisplayContent():System.Object:this (FullOpts)

7 total methods with Code Size differences (6 improved, 1 regressed), 239685 unchanged.

--------------------------------------------------------------------------------

Artifacts:

MihuBot commented 3 months ago

Top method regressions

1 (0.24 % of base) - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this ```diff ; Assembly listing for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; Final local variable assignments ; ; V00 this [V00,T01] ( 3, 3 ) byref -> rdi this single-def ;* V01 TypeCtx [V01 ] ( 0, 0 ) long -> zero-ref single-def ; V02 arg1 [V02,T00] ( 4, 3.50) ref -> rbx class-hnd single-def ; V03 arg2 [V03,T03] ( 3, 2.50) ref -> r15 class-hnd single-def ;* V04 loc0 [V04 ] ( 0, 0 ) struct ( 8) zero-ref ; V05 loc1 [V05,T02] ( 7, 4.50) ref -> r13 class-hnd ; V06 loc2 [V06,T05] ( 3, 1.50) ref -> rax class-hnd single-def -;* V07 loc3 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def +;* V07 loc3 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V09 tmp1 [V09,T06] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ; V10 tmp2 [V10,T07] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ; V11 tmp3 [V11,T08] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ; V12 tmp4 [V12,T04] ( 5, 3 ) ref -> r14 single-def "field V04.array (fldOffset=0x0)" P-INDEP ; V13 tmp5 [V13,T09] ( 2, 0 ) ref -> r15 single-def "argument with side effect" ; V14 tmp6 [V14,T10] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; V15 tmp7 [V15,T11] ( 2, 0 ) ref -> r15 single-def "argument with side effect" ; V16 tmp8 [V16,T12] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; V17 tmp9 [V17,T13] ( 2, 0 ) ref -> r15 single-def "argument with side effect" ; V18 tmp10 [V18,T14] ( 2, 0 ) ref -> rdx single-def "argument with side effect" ; ; Lcl frame size = 0 G_M31026_IG01: push rbp push r15 push r14 push r13 push rbx lea rbp, [rsp+0x20] mov rbx, rdx mov r15, rcx ;; size=19 bbWeight=1 PerfScore 6.00 G_M31026_IG02: mov r14, gword ptr [rdi] mov rsi, rbx mov rdi, 0xD1FFAB1E ; System.Array call CORINFO_HELP_ISINSTANCEOFCLASS mov r13, rax test r13, r13 jne SHORT G_M31026_IG06 ;; size=29 bbWeight=1 PerfScore 5.00 G_M31026_IG03: mov rsi, rbx mov rdi, 0xD1FFAB1E ; System.Collections.Immutable.IImmutableArray call CORINFO_HELP_ISINSTANCEOFINTERFACE test rax, rax je SHORT G_M31026_IG06 mov rdi, rax mov r11, 0xD1FFAB1E ; code for System.Collections.Immutable.IImmutableArray:get_Array():System.Array:this call [r11]System.Collections.Immutable.IImmutableArray:get_Array():System.Array:this mov r13, rax mov rax, r14 or rax, r13 jne SHORT G_M31026_IG05 xor eax, eax ;; size=52 bbWeight=0.50 PerfScore 4.12 G_M31026_IG04: pop rbx pop r13 pop r14 pop r15 pop rbp ret ;; size=9 bbWeight=0.50 PerfScore 1.75 G_M31026_IG05: xor edi, edi test r14, r14 sete dil - xor edx, edx + xor esi, esi test r13, r13 - sete dl - xor edi, edx + sete sil + xor edi, esi jne G_M31026_IG09 - ;; size=25 bbWeight=0.50 PerfScore 2.12 + ;; size=26 bbWeight=0.50 PerfScore 2.12 G_M31026_IG06: test r13, r13 je SHORT G_M31026_IG08 test r14, r14 je G_M31026_IG10 mov rdi, r14 - mov rdx, r15 mov rsi, r13 - mov r11, 0xD1FFAB1E ; code for System.Collections.IStructuralComparable:CompareTo(System.Object,System.Collections.IComparer):int:this + mov rdx, r15 + mov rax, 0xD1FFAB1E ; code for System.Array:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this ;; size=33 bbWeight=0.50 PerfScore 1.75 G_M31026_IG07: pop rbx pop r13 pop r14 pop r15 pop rbp - tail.jmp [r11]System.Collections.IStructuralComparable:CompareTo(System.Object,System.Collections.IComparer):int:this + tail.jmp [rax]System.Array:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this ;; size=11 bbWeight=0.50 PerfScore 2.25 G_M31026_IG08: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_ArrayLengthsNotEqual():System.String call [rax]System.SR:get_ArrayLengthsNotEqual():System.String mov r15, rax mov edi, 0x48B mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW ;; size=82 bbWeight=0 PerfScore 0.00 G_M31026_IG09: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_ArrayInitializedStateNotEqual():System.String call [rax]System.SR:get_ArrayInitializedStateNotEqual():System.String mov r15, rax mov edi, 0x48B mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW ;; size=82 bbWeight=0 PerfScore 0.00 G_M31026_IG10: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_ArrayInitializedStateNotEqual():System.String call [rax]System.SR:get_ArrayInitializedStateNotEqual():System.String mov r15, rax mov edi, 0x48B mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdx, rax mov rsi, r15 mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this call [rax]System.ArgumentException:.ctor(System.String,System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=83 bbWeight=0 PerfScore 0.00 -; Total bytes of code 425, prolog size 19, PerfScore 23.00, instruction count 105, allocated bytes for code 425 (MethodHash=f38586cd) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this (FullOpts) +; Total bytes of code 426, prolog size 19, PerfScore 23.00, instruction count 105, allocated bytes for code 426 (MethodHash=f38586cd) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralComparable.CompareTo(System.Object,System.Collections.IComparer):int:this (FullOpts) ```
MihuBot commented 3 months ago

Top method improvements

-14 (-5.93 % of base) - System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this ```diff ; Assembly listing for method System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T10] ( 3, 3 ) ref -> rdi this class-hnd single-def ; V01 arg1 [V01,T07] ( 3, 4 ) ref -> rbx class-hnd single-def ; V02 arg2 [V02,T08] ( 3, 4 ) ref -> r15 class-hnd single-def ; V03 loc0 [V03 ] ( 8, 33 ) struct (24) [rbp-0x40] do-not-enreg[XS] must-init addr-exposed ld-addr-op ;* V04 loc1 [V04 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op ; V05 loc2 [V05,T09] ( 3, 6 ) ref -> rax class-hnd ; V06 loc3 [V06,T11] ( 3, 4.50) long -> rax ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V08 tmp1 [V08,T12] ( 2, 4 ) ref -> rsi class-hnd single-def "Inlining Arg" ;* V09 tmp2 [V09 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" ;* V10 tmp3 [V10,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V11 tmp4 [V11,T01] ( 6, 34 ) int -> r14 "Inline stloc first use temp" ; V12 tmp5 [V12,T00] ( 5, 84 ) ref -> r13 class-hnd "dup spill" ; V13 tmp6 [V13,T04] ( 2, 16 ) byref -> r12 ;* V14 tmp7 [V14 ] ( 0, 0 ) ref -> zero-ref ;* V15 tmp8 [V15 ] ( 0, 0 ) byref -> zero-ref ; V16 tmp9 [V16,T02] ( 4, 20 ) ref -> rax ;* V17 tmp10 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" ;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" ; V19 tmp12 [V19,T03] ( 4, 20 ) ref -> rax class-hnd "Inline return value spill temp" ; V20 tmp13 [V20,T05] ( 4, 8 ) ref -> rax class-hnd "Inline stloc first use temp" ;* V21 tmp14 [V21 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V22 tmp15 [V22 ] ( 3, 17 ) ref -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V03._delegate (fldOffset=0x0)" P-DEP ; V23 tmp16 [V23 ] ( 3, 11 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x8)" P-DEP ; V24 tmp17 [V24 ] ( 4, 21 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V03._index (fldOffset=0x10)" P-DEP ;* V25 tmp18 [V25 ] ( 0, 0 ) ref -> zero-ref "field V04._delegate (fldOffset=0x0)" P-INDEP ;* V26 tmp19 [V26 ] ( 0, 0 ) ref -> zero-ref "field V04._current (fldOffset=0x8)" P-INDEP ;* V27 tmp20 [V27 ] ( 0, 0 ) int -> zero-ref "field V04._index (fldOffset=0x10)" P-INDEP ; V28 tmp21 [V28,T13] ( 2, 2 ) ref -> rsi single-def "field V09._delegate (fldOffset=0x0)" P-INDEP ;* V29 tmp22 [V29,T14] ( 0, 0 ) ref -> zero-ref single-def "field V09._current (fldOffset=0x8)" P-INDEP ;* V30 tmp23 [V30,T15] ( 0, 0 ) int -> zero-ref "field V09._index (fldOffset=0x10)" P-INDEP ; ; Lcl frame size = 24 G_M27358_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 24 lea rbp, [rsp+0x40] vxorps xmm8, xmm8, xmm8 vmovdqa xmmword ptr [rbp-0x40], xmm8 xor eax, eax mov qword ptr [rbp-0x30], rax mov rbx, rsi mov r15, rdx ;; size=41 bbWeight=1 PerfScore 10.83 G_M27358_IG02: mov rsi, gword ptr [rdi+0x10] mov gword ptr [rbp-0x40], rsi xor rsi, rsi mov gword ptr [rbp-0x38], rsi mov dword ptr [rbp-0x30], -1 jmp SHORT G_M27358_IG04 ;; size=23 bbWeight=1 PerfScore 7.25 G_M27358_IG03: mov rax, gword ptr [rbp-0x38] mov rsi, rbx mov rdx, r15 mov rdi, gword ptr [rax+0x08] call [rax+0x18]System.Func`3[System.__Canon,System.__Canon,long]:Invoke(System.__Canon,System.__Canon):long:this test rax, rax - jne G_M27358_IG15 - ;; size=26 bbWeight=2 PerfScore 15.50 + jne SHORT G_M27358_IG15 + ;; size=22 bbWeight=2 PerfScore 15.50 G_M27358_IG04: mov r14d, dword ptr [rbp-0x30] inc r14d mov r13, gword ptr [rbp-0x40] lea r12, bword ptr [rbp-0x40] test r13, r13 jne SHORT G_M27358_IG06 ;; size=20 bbWeight=8 PerfScore 32.00 G_M27358_IG05: xor rax, rax jmp SHORT G_M27358_IG11 ;; size=4 bbWeight=2 PerfScore 4.50 G_M27358_IG06: mov rsi, gword ptr [r13+0x28] mov rdi, 0xD1FFAB1E ; System.Object[] - mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFARRAY - call [rax]CORINFO_HELP_ISINSTANCEOFARRAY + call CORINFO_HELP_ISINSTANCEOFARRAY test rax, rax jne SHORT G_M27358_IG09 test r14d, r14d je SHORT G_M27358_IG08 - ;; size=36 bbWeight=2 PerfScore 16.00 + ;; size=29 bbWeight=2 PerfScore 11.50 G_M27358_IG07: xor rax, rax jmp SHORT G_M27358_IG11 ;; size=4 bbWeight=8 PerfScore 18.00 G_M27358_IG08: mov rax, r13 jmp SHORT G_M27358_IG11 ;; size=5 bbWeight=8 PerfScore 18.00 G_M27358_IG09: cmp r14d, dword ptr [r13+0x30] jae SHORT G_M27358_IG07 ;; size=6 bbWeight=16 PerfScore 64.00 G_M27358_IG10: cmp r14d, dword ptr [rax+0x08] jae SHORT G_M27358_IG16 mov esi, r14d mov rax, gword ptr [rax+8*rsi+0x10] ;; size=14 bbWeight=2 PerfScore 12.50 G_M27358_IG11: mov gword ptr [r12+0x08], rax test rax, rax je SHORT G_M27358_IG13 ;; size=10 bbWeight=8 PerfScore 18.00 G_M27358_IG12: mov dword ptr [rbp-0x30], r14d - jmp G_M27358_IG03 - ;; size=9 bbWeight=4 PerfScore 12.00 + jmp SHORT G_M27358_IG03 + ;; size=6 bbWeight=4 PerfScore 12.00 G_M27358_IG13: xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.12 G_M27358_IG14: add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 G_M27358_IG15: add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 G_M27358_IG16: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 236, prolog size 35, PerfScore 232.96, instruction count 77, allocated bytes for code 236 (MethodHash=16d79521) for method System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts) +; Total bytes of code 222, prolog size 35, PerfScore 228.46, instruction count 76, allocated bytes for code 222 (MethodHash=16d79521) for method System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts) ```
-11 (-1.25 % of base) - System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this ```diff ; Assembly listing for method System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 15 single block inlinees; 10 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T05] ( 8, 13 ) ref -> [rbp-0x78] this class-hnd single-def ; V01 arg1 [V01,T11] ( 4, 6 ) ref -> [rbp-0x80] class-hnd single-def ; V02 loc0 [V02 ] ( 8, 33 ) struct (24) [rbp-0x40] do-not-enreg[XS] must-init addr-exposed ld-addr-op ;* V03 loc1 [V03 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op ; V04 loc2 [V04,T12] ( 4, 8 ) ref -> r13 class-hnd ; V05 loc3 [V05,T06] ( 8, 14.50) ref -> [rbp-0x88] class-hnd ;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V07 tmp1 [V07,T07] ( 3, 12 ) ref -> [rbp-0x90] class-hnd exact spill-single-def "impAppendStmt" ; V08 tmp2 [V08,T08] ( 3, 12 ) ref -> r13 class-hnd exact "impAppendStmt" ;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref ;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref ;* V11 tmp5 [V11 ] ( 0, 0 ) ref -> zero-ref ;* V12 tmp6 [V12 ] ( 0, 0 ) ref -> zero-ref ; V13 tmp7 [V13,T13] ( 4, 8 ) ref -> [rbp-0x98] ;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref ;* V15 tmp9 [V15 ] ( 0, 0 ) ref -> zero-ref ;* V16 tmp10 [V16 ] ( 0, 0 ) ref -> zero-ref ;* V17 tmp11 [V17 ] ( 0, 0 ) ref -> zero-ref ;* V18 tmp12 [V18 ] ( 0, 0 ) ref -> zero-ref ;* V19 tmp13 [V19 ] ( 0, 0 ) ref -> zero-ref ; V20 tmp14 [V20,T14] ( 4, 8 ) ref -> [rbp-0xA0] ;* V21 tmp15 [V21 ] ( 0, 0 ) ref -> zero-ref ;* V22 tmp16 [V22 ] ( 0, 0 ) ref -> zero-ref ;* V23 tmp17 [V23 ] ( 0, 0 ) ref -> zero-ref ;* V24 tmp18 [V24 ] ( 0, 0 ) ref -> zero-ref ;* V25 tmp19 [V25 ] ( 0, 0 ) ref -> zero-ref ;* V26 tmp20 [V26 ] ( 0, 0 ) ref -> zero-ref ;* V27 tmp21 [V27 ] ( 0, 0 ) ref -> zero-ref ;* V28 tmp22 [V28 ] ( 0, 0 ) ref -> zero-ref ; V29 tmp23 [V29,T15] ( 3, 6 ) ref -> rax ; V30 tmp24 [V30,T31] ( 2, 4 ) ref -> rsi class-hnd single-def "Inlining Arg" ;* V31 tmp25 [V31 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" ;* V32 tmp26 [V32 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V33 tmp27 [V33 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V34 tmp28 [V34 ] ( 2, 4 ) byref -> [rbp-0x48] must-init pinned "Inline stloc first use temp" ;* V35 tmp29 [V35 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ; V36 tmp30 [V36 ] ( 2, 4 ) byref -> [rbp-0x50] must-init pinned "Inline stloc first use temp" ;* V37 tmp31 [V37 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ; V38 tmp32 [V38 ] ( 2, 4 ) byref -> [rbp-0x58] must-init pinned "Inline stloc first use temp" ;* V39 tmp33 [V39 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ; V40 tmp34 [V40 ] ( 2, 4 ) byref -> [rbp-0x60] must-init pinned "Inline stloc first use temp" ;* V41 tmp35 [V41 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ; V42 tmp36 [V42 ] ( 2, 4 ) byref -> [rbp-0x68] must-init pinned "Inline stloc first use temp" ;* V43 tmp37 [V43 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V44 tmp38 [V44 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V45 tmp39 [V45 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" ; V46 tmp40 [V46,T16] ( 4, 8 ) byref -> r8 "Inline return value spill temp" ; V47 tmp41 [V47,T17] ( 4, 8 ) byref -> rcx "Inline return value spill temp" ; V48 tmp42 [V48,T18] ( 4, 8 ) byref -> rdx "Inline return value spill temp" ; V49 tmp43 [V49,T19] ( 4, 8 ) byref -> rsi "Inline return value spill temp" ; V50 tmp44 [V50,T20] ( 4, 8 ) byref -> r13 "Inline return value spill temp" ;* V51 tmp45 [V51 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V52 tmp46 [V52,T23] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V53 tmp47 [V53,T01] ( 6, 34 ) int -> r13 "Inline stloc first use temp" ; V54 tmp48 [V54,T00] ( 5, 84 ) ref -> r12 class-hnd "dup spill" ; V55 tmp49 [V55,T04] ( 2, 16 ) byref -> [rbp-0xA8] spill-single-def ;* V56 tmp50 [V56 ] ( 0, 0 ) ref -> zero-ref ;* V57 tmp51 [V57 ] ( 0, 0 ) byref -> zero-ref ; V58 tmp52 [V58,T02] ( 4, 20 ) ref -> rcx ;* V59 tmp53 [V59 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" ;* V60 tmp54 [V60 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" ; V61 tmp55 [V61,T03] ( 4, 20 ) ref -> rcx class-hnd "Inline return value spill temp" ; V62 tmp56 [V62,T21] ( 4, 8 ) ref -> rax class-hnd "Inline stloc first use temp" ;* V63 tmp57 [V63 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V64 tmp58 [V64,T30] ( 3, 4 ) ref -> rax "Single return block return value" ; V65 FramesRoot [V65,T10] ( 6, 10 ) long -> r14 "Pinvoke FrameListRoot" ; V66 PInvokeFrame [V66 ] ( 8, 12 ) struct (72) [rbp-0xF0] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" ; V67 tmp61 [V67 ] ( 3, 17 ) ref -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V02._delegate (fldOffset=0x0)" P-DEP ; V68 tmp62 [V68 ] ( 3, 11 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V02._current (fldOffset=0x8)" P-DEP ; V69 tmp63 [V69 ] ( 4, 21 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V02._index (fldOffset=0x10)" P-DEP ;* V70 tmp64 [V70 ] ( 0, 0 ) ref -> zero-ref "field V03._delegate (fldOffset=0x0)" P-INDEP ;* V71 tmp65 [V71 ] ( 0, 0 ) ref -> zero-ref "field V03._current (fldOffset=0x8)" P-INDEP ;* V72 tmp66 [V72 ] ( 0, 0 ) int -> zero-ref "field V03._index (fldOffset=0x10)" P-INDEP ; V73 tmp67 [V73,T32] ( 2, 2 ) ref -> rsi single-def "field V31._delegate (fldOffset=0x0)" P-INDEP ;* V74 tmp68 [V74,T33] ( 0, 0 ) ref -> zero-ref single-def "field V31._current (fldOffset=0x8)" P-INDEP ;* V75 tmp69 [V75,T34] ( 0, 0 ) int -> zero-ref "field V31._index (fldOffset=0x10)" P-INDEP ; V76 tmp70 [V76,T09] ( 3, 12 ) ref -> rax "argument with side effect" ; V77 tmp71 [V77,T24] ( 2, 8 ) long -> r8 "Cast away GC" ; V78 tmp72 [V78,T25] ( 2, 8 ) long -> rcx "Cast away GC" ; V79 tmp73 [V79,T26] ( 2, 8 ) long -> rdx "Cast away GC" ; V80 tmp74 [V80,T27] ( 2, 8 ) long -> rsi "Cast away GC" ; V81 tmp75 [V81,T28] ( 2, 8 ) long -> rdi "Cast away GC" ; V82 tmp76 [V82,T29] ( 2, 8 ) long -> rdi "argument with side effect" ; V83 cse0 [V83,T22] ( 4, 8 ) long -> [rbp-0x70] spill-single-def "CSE #02: moderate" ; ; Lcl frame size = 200 G_M53640_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 200 vzeroupper lea rbp, [rsp+0xF0] xor ecx, ecx mov qword ptr [rbp-0x68], rcx vxorps xmm8, xmm8, xmm8 vmovdqu ymmword ptr [rbp-0x60], ymm8 vmovdqa xmmword ptr [rbp-0x40], xmm8 mov qword ptr [rbp-0x30], rcx mov rbx, rdi mov r15, rsi ;; size=59 bbWeight=1 PerfScore 14.83 G_M53640_IG02: lea rdi, [rbp-0xE8] mov rsi, r10 call CORINFO_HELP_INIT_PINVOKE_FRAME mov r14, rax mov rsi, rsp mov qword ptr [rbp-0xC8], rsi mov rsi, rbp mov qword ptr [rbp-0xB8], rsi mov rsi, gword ptr [rbx+0x18] mov gword ptr [rbp-0x40], rsi xor rsi, rsi mov gword ptr [rbp-0x38], rsi mov dword ptr [rbp-0x30], -1 jmp G_M53640_IG29 ;; size=64 bbWeight=1 PerfScore 11.75 G_M53640_IG03: mov r13, gword ptr [rbp-0x38] mov rsi, rbx mov rdx, r15 mov rdi, gword ptr [r13+0x08] call [r13+0x18]System.Func`3[System.__Canon,System.__Canon,System.__Canon]:Invoke(System.__Canon,System.__Canon):System.__Canon:this mov r12, rax call System.Runtime.Loader.AssemblyLoadContext:IsTracingEnabled():ubyte test eax, eax je G_M53640_IG28 mov gword ptr [rbp-0x80], r15 mov rdi, r15 mov rax, 0xD1FFAB1E ; code for System.Reflection.AssemblyName:get_FullName():System.String:this cmp dword ptr [rdi], edi call [rax]System.Reflection.AssemblyName:get_FullName():System.String:this mov gword ptr [rbp-0x90], rax mov rdi, r13 mov rax, 0xD1FFAB1E ; code for System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this cmp dword ptr [rdi], edi call [rax]System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this mov rdi, rax mov rax, qword ptr [rax] mov rax, qword ptr [rax+0x40] call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this mov r13, rax mov rdi, 0xD1FFAB1E ; global ptr test byte ptr [rdi], 1 je G_M53640_IG42 ;; size=114 bbWeight=2 PerfScore 71.50 G_M53640_IG04: mov rdi, 0xD1FFAB1E ; data for System.Runtime.Loader.DefaultAssemblyLoadContext:s_loadContext cmp rbx, gword ptr [rdi] jne SHORT G_M53640_IG05 mov rax, gword ptr [rbx+0x28] mov rdx, rax jmp SHORT G_M53640_IG06 ;; size=24 bbWeight=2 PerfScore 17.00 G_M53640_IG05: mov rdi, rbx mov gword ptr [rbp-0x78], rbx mov rax, qword ptr [rbx] mov rax, qword ptr [rax+0x40] call [rax+0x08]System.Object:ToString():System.String:this mov gword ptr [rbp-0x98], rax mov rdx, gword ptr [rbp-0x98] mov rbx, gword ptr [rbp-0x78] ;; size=35 bbWeight=2 PerfScore 22.50 G_M53640_IG06: test r12, r12 jne SHORT G_M53640_IG07 xor rax, rax xor rcx, rcx jmp SHORT G_M53640_IG10 ;; size=11 bbWeight=2 PerfScore 7.50 G_M53640_IG07: mov gword ptr [rbp-0x98], rdx mov rdi, r12 mov rax, qword ptr [r12] mov rax, qword ptr [rax+0x48] mov qword ptr [rbp-0x70], rax call [rax+0x18]System.Reflection.Assembly:get_FullName():System.String:this mov gword ptr [rbp-0xA0], rax mov rdi, r12 mov rax, qword ptr [rbp-0x70] call [rax+0x28]System.Reflection.Assembly:get_IsDynamic():ubyte:this test eax, eax jne SHORT G_M53640_IG09 mov gword ptr [rbp-0x88], r12 mov rdi, r12 mov rax, qword ptr [rbp-0x70] call [rax+0x30]System.Reflection.Assembly:get_Location():System.String:this test rax, rax je SHORT G_M53640_IG08 add rax, 12 mov r8, rax jmp SHORT G_M53640_IG11 ;; size=77 bbWeight=2 PerfScore 49.50 G_M53640_IG08: mov rcx, gword ptr [rbp-0xA0] mov rdx, gword ptr [rbp-0x98] mov r12, gword ptr [rbp-0x88] jmp SHORT G_M53640_IG10 ;; size=23 bbWeight=1 PerfScore 5.00 G_M53640_IG09: mov rcx, gword ptr [rbp-0xA0] mov rdx, gword ptr [rbp-0x98] ;; size=14 bbWeight=1 PerfScore 2.00 G_M53640_IG10: xor r8d, r8d mov gword ptr [rbp-0x88], r12 mov gword ptr [rbp-0x98], rdx mov gword ptr [rbp-0xA0], rcx ;; size=24 bbWeight=2 PerfScore 6.50 G_M53640_IG11: mov bword ptr [rbp-0x48], r8 mov rcx, gword ptr [rbp-0xA0] test rcx, rcx je SHORT G_M53640_IG12 add rcx, 12 jmp SHORT G_M53640_IG13 ;; size=22 bbWeight=2 PerfScore 11.00 G_M53640_IG12: xor ecx, ecx ;; size=2 bbWeight=2 PerfScore 0.50 G_M53640_IG13: mov bword ptr [rbp-0x50], rcx mov rdx, gword ptr [rbp-0x98] test rdx, rdx je SHORT G_M53640_IG14 add rdx, 12 jmp SHORT G_M53640_IG15 ;; size=22 bbWeight=2 PerfScore 11.00 G_M53640_IG14: xor edx, edx ;; size=2 bbWeight=2 PerfScore 0.50 G_M53640_IG15: mov bword ptr [rbp-0x58], rdx test r13, r13 je SHORT G_M53640_IG16 add r13, 12 mov rsi, r13 jmp SHORT G_M53640_IG17 ;; size=18 bbWeight=2 PerfScore 9.50 G_M53640_IG16: xor esi, esi ;; size=2 bbWeight=2 PerfScore 0.50 G_M53640_IG17: mov bword ptr [rbp-0x60], rsi mov r13, gword ptr [rbp-0x90] test r13, r13 je SHORT G_M53640_IG18 add r13, 12 mov gword ptr [rbp-0x78], rbx jmp SHORT G_M53640_IG19 ;; size=26 bbWeight=2 PerfScore 13.00 G_M53640_IG18: xor r13d, r13d mov gword ptr [rbp-0x78], rbx ;; size=7 bbWeight=2 PerfScore 2.50 G_M53640_IG19: mov bword ptr [rbp-0x68], r13 mov rdi, r13 mov rax, 0xD1FFAB1E ; function address mov qword ptr [rbp-0xD8], rax lea rax, G_M53640_IG22 mov qword ptr [rbp-0xC0], rax lea rax, bword ptr [rbp-0xE8] mov qword ptr [r14+0x10], rax mov byte ptr [r14+0x0C], 0 ;; size=54 bbWeight=2 PerfScore 14.00 G_M53640_IG20: mov rax, 0xD1FFAB1E ; code for System.Runtime.Loader.AssemblyLoadContext:g____PInvoke|9_0(ulong,ulong,ulong,ulong,ulong):int ;; size=10 bbWeight=2 PerfScore 0.50 G_M53640_IG21: call [rax]System.Runtime.Loader.AssemblyLoadContext:g____PInvoke|9_0(ulong,ulong,ulong,ulong,ulong):int ;; size=2 bbWeight=2 PerfScore 6.00 G_M53640_IG22: mov byte ptr [r14+0x0C], 1 mov rcx, 0xD1FFAB1E ; function address cmp dword ptr [rcx], 0 je SHORT G_M53640_IG23 mov rdi, 0xD1FFAB1E call [rdi]CORINFO_HELP_STOP_FOR_GC ;; size=32 bbWeight=2 PerfScore 17.00 G_M53640_IG23: mov rax, bword ptr [rbp-0xE0] mov qword ptr [r14+0x10], rax xor eax, eax mov bword ptr [rbp-0x68], rax ;; size=17 bbWeight=2 PerfScore 6.50 G_M53640_IG24: mov bword ptr [rbp-0x60], rax ;; size=4 bbWeight=2 PerfScore 2.00 G_M53640_IG25: mov bword ptr [rbp-0x58], rax ;; size=4 bbWeight=2 PerfScore 2.00 G_M53640_IG26: mov bword ptr [rbp-0x50], rax ;; size=4 bbWeight=2 PerfScore 2.00 G_M53640_IG27: mov bword ptr [rbp-0x48], rax mov rbx, gword ptr [rbp-0x78] mov r12, gword ptr [rbp-0x88] mov r15, gword ptr [rbp-0x80] ;; size=19 bbWeight=2 PerfScore 8.00 G_M53640_IG28: test r12, r12 - jne G_M53640_IG39 - ;; size=9 bbWeight=2 PerfScore 2.50 + jne SHORT G_M53640_IG39 + ;; size=5 bbWeight=2 PerfScore 2.50 G_M53640_IG29: mov r13d, dword ptr [rbp-0x30] inc r13d mov r12, gword ptr [rbp-0x40] lea rax, bword ptr [rbp-0x40] mov bword ptr [rbp-0xA8], rax test r12, r12 jne SHORT G_M53640_IG31 ;; size=27 bbWeight=8 PerfScore 40.00 G_M53640_IG30: xor rcx, rcx jmp SHORT G_M53640_IG36 ;; size=4 bbWeight=2 PerfScore 4.50 G_M53640_IG31: mov rsi, gword ptr [r12+0x28] mov rdi, 0xD1FFAB1E ; System.Object[] - mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFARRAY - call [rcx]CORINFO_HELP_ISINSTANCEOFARRAY + call CORINFO_HELP_ISINSTANCEOFARRAY test rax, rax jne SHORT G_M53640_IG34 test r13d, r13d je SHORT G_M53640_IG33 - ;; size=37 bbWeight=2 PerfScore 16.00 + ;; size=30 bbWeight=2 PerfScore 11.50 G_M53640_IG32: xor rcx, rcx jmp SHORT G_M53640_IG36 ;; size=4 bbWeight=8 PerfScore 18.00 G_M53640_IG33: mov rcx, r12 jmp SHORT G_M53640_IG36 ;; size=5 bbWeight=8 PerfScore 18.00 G_M53640_IG34: cmp r13d, dword ptr [r12+0x30] jae SHORT G_M53640_IG32 ;; size=7 bbWeight=16 PerfScore 64.00 G_M53640_IG35: cmp r13d, dword ptr [rax+0x08] jae SHORT G_M53640_IG41 mov ecx, r13d mov rcx, gword ptr [rax+8*rcx+0x10] ;; size=14 bbWeight=2 PerfScore 12.50 G_M53640_IG36: mov rax, bword ptr [rbp-0xA8] mov gword ptr [rax+0x08], rcx test rcx, rcx je SHORT G_M53640_IG38 ;; size=16 bbWeight=8 PerfScore 26.00 G_M53640_IG37: mov dword ptr [rbp-0x30], r13d jmp G_M53640_IG03 ;; size=9 bbWeight=4 PerfScore 12.00 G_M53640_IG38: xor rax, rax jmp SHORT G_M53640_IG40 ;; size=4 bbWeight=0.50 PerfScore 1.12 G_M53640_IG39: mov rax, r12 ;; size=3 bbWeight=0.50 PerfScore 0.12 G_M53640_IG40: add rsp, 200 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=18 bbWeight=1 PerfScore 4.25 G_M53640_IG41: call CORINFO_HELP_RNGCHKFAIL ;; size=5 bbWeight=0 PerfScore 0.00 G_M53640_IG42: mov rdi, 0xD1FFAB1E mov esi, 0x4F7 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M53640_IG04 ;; size=25 bbWeight=0 PerfScore 0.00 -; Total bytes of code 879, prolog size 53, PerfScore 533.58, instruction count 217, allocated bytes for code 879 (MethodHash=69bc2e77) for method System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts) +; Total bytes of code 868, prolog size 53, PerfScore 529.08, instruction count 216, allocated bytes for code 868 (MethodHash=69bc2e77) for method System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts) ```
-7 (-0.79 % of base) - System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly ```diff ; Assembly listing for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 15 single block inlinees; 10 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T07] ( 6, 7.50) ref -> [rbp-0x70] class-hnd single-def ; V01 arg1 [V01,T29] ( 3, 2.50) ref -> r14 class-hnd single-def ; V02 arg2 [V02,T09] ( 5, 6.50) ref -> [rbp-0x78] class-hnd single-def ; V03 loc0 [V03,T33] ( 2, 2.50) ref -> [rbp-0x80] class-hnd exact single-def ; V04 loc1 [V04 ] ( 8, 19.50) struct (24) [rbp-0x40] do-not-enreg[XS] must-init addr-exposed ld-addr-op ;* V05 loc2 [V05 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op ; V06 loc3 [V06,T10] ( 4, 8 ) ref -> r14 class-hnd exact ; V07 loc4 [V07,T04] ( 7, 14 ) ref -> [rbp-0x88] class-hnd spill-single-def ; V08 loc5 [V08,T30] ( 3, 4.50) ref -> rax class-hnd exact ;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V10 tmp1 [V10,T31] ( 4, 4 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" ;* V11 tmp2 [V11 ] ( 0, 0 ) ref -> zero-ref ; V12 tmp3 [V12,T27] ( 3, 6 ) ref -> r14 ;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref ;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref ; V15 tmp6 [V15,T11] ( 4, 8 ) ref -> [rbp-0x90] ;* V16 tmp7 [V16 ] ( 0, 0 ) ref -> zero-ref ;* V17 tmp8 [V17 ] ( 0, 0 ) ref -> zero-ref ;* V18 tmp9 [V18 ] ( 0, 0 ) ref -> zero-ref ;* V19 tmp10 [V19 ] ( 0, 0 ) ref -> zero-ref ;* V20 tmp11 [V20 ] ( 0, 0 ) ref -> zero-ref ;* V21 tmp12 [V21 ] ( 0, 0 ) ref -> zero-ref ; V22 tmp13 [V22,T12] ( 3, 6 ) ref -> rax ;* V23 tmp14 [V23 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" ; V24 tmp15 [V24,T28] ( 2, 4 ) ubyte -> rax "Inline return value spill temp" ; V25 tmp16 [V25,T03] ( 4, 16 ) ref -> rdi class-hnd exact "Inlining Arg" ;* V26 tmp17 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V27 tmp18 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V28 tmp19 [V28 ] ( 2, 4 ) byref -> [rbp-0x48] must-init pinned "Inline stloc first use temp" ;* V29 tmp20 [V29 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ; V30 tmp21 [V30 ] ( 2, 4 ) byref -> [rbp-0x50] must-init pinned "Inline stloc first use temp" ;* V31 tmp22 [V31 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ; V32 tmp23 [V32 ] ( 2, 4 ) byref -> [rbp-0x58] must-init pinned "Inline stloc first use temp" ;* V33 tmp24 [V33 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ; V34 tmp25 [V34 ] ( 2, 4 ) byref -> [rbp-0x60] must-init pinned "Inline stloc first use temp" ;* V35 tmp26 [V35 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V36 tmp27 [V36 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V37 tmp28 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" ; V38 tmp29 [V38,T13] ( 4, 8 ) byref -> rcx "Inline return value spill temp" ; V39 tmp30 [V39,T14] ( 4, 8 ) byref -> rdx "Inline return value spill temp" ; V40 tmp31 [V40,T15] ( 4, 8 ) byref -> rsi "Inline return value spill temp" ; V41 tmp32 [V41,T16] ( 4, 8 ) byref -> rdi "Inline return value spill temp" ;* V42 tmp33 [V42 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V43 tmp34 [V43,T21] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V44 tmp35 [V44,T01] ( 6, 30 ) int -> r14 "Inline stloc first use temp" ; V45 tmp36 [V45,T00] ( 5, 68 ) ref -> [rbp-0x98] class-hnd spill-single-def "dup spill" ; V46 tmp37 [V46,T19] ( 2, 8 ) byref -> [rbp-0xA0] spill-single-def ;* V47 tmp38 [V47 ] ( 0, 0 ) ref -> zero-ref ;* V48 tmp39 [V48 ] ( 0, 0 ) byref -> zero-ref ; V49 tmp40 [V49,T05] ( 4, 12 ) ref -> rdx ;* V50 tmp41 [V50 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" ;* V51 tmp42 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" ; V52 tmp43 [V52,T02] ( 4, 20 ) ref -> rdx class-hnd "Inline return value spill temp" ; V53 tmp44 [V53,T17] ( 4, 8 ) ref -> rax class-hnd "Inline stloc first use temp" ;* V54 tmp45 [V54 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V55 tmp46 [V55,T32] ( 3, 4 ) ref -> rax "Single return block return value" ; V56 FramesRoot [V56,T08] ( 6, 10 ) long -> r13 "Pinvoke FrameListRoot" ; V57 PInvokeFrame [V57 ] ( 8, 12 ) struct (72) [rbp-0xE8] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" ; V58 tmp49 [V58 ] ( 3, 8.50) ref -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V04._delegate (fldOffset=0x0)" P-DEP ; V59 tmp50 [V59 ] ( 3, 6.50) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V04._current (fldOffset=0x8)" P-DEP ; V60 tmp51 [V60 ] ( 4, 12.50) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V04._index (fldOffset=0x10)" P-DEP ;* V61 tmp52 [V61 ] ( 0, 0 ) ref -> zero-ref "field V05._delegate (fldOffset=0x0)" P-INDEP ;* V62 tmp53 [V62 ] ( 0, 0 ) ref -> zero-ref "field V05._current (fldOffset=0x8)" P-INDEP ;* V63 tmp54 [V63 ] ( 0, 0 ) int -> zero-ref "field V05._index (fldOffset=0x10)" P-INDEP ;* V64 tmp55 [V64,T34] ( 0, 0 ) ref -> zero-ref single-def "field V23._delegate (fldOffset=0x0)" P-INDEP ;* V65 tmp56 [V65,T35] ( 0, 0 ) ref -> zero-ref single-def "field V23._current (fldOffset=0x8)" P-INDEP ;* V66 tmp57 [V66,T36] ( 0, 0 ) int -> zero-ref "field V23._index (fldOffset=0x10)" P-INDEP ; V67 tmp58 [V67,T20] ( 2, 8 ) ref -> rsi "argument with side effect" ; V68 tmp59 [V68,T06] ( 3, 12 ) ref -> rax "argument with side effect" ; V69 tmp60 [V69,T22] ( 2, 8 ) long -> rcx "Cast away GC" ; V70 tmp61 [V70,T23] ( 2, 8 ) long -> rdx "Cast away GC" ; V71 tmp62 [V71,T24] ( 2, 8 ) long -> rsi "Cast away GC" ; V72 tmp63 [V72,T25] ( 2, 8 ) long -> rdi "Cast away GC" ; V73 tmp64 [V73,T26] ( 2, 8 ) long -> rdi "argument with side effect" ; V74 cse0 [V74,T18] ( 4, 8 ) long -> [rbp-0x68] spill-single-def "CSE #02: moderate" ; ; Lcl frame size = 200 G_M55783_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 200 vzeroupper lea rbp, [rsp+0xF0] vxorps xmm8, xmm8, xmm8 vmovdqu ymmword ptr [rbp-0x60], ymm8 vmovdqa xmmword ptr [rbp-0x40], xmm8 xor ecx, ecx mov qword ptr [rbp-0x30], rcx mov rbx, rdi mov r14, rsi mov r15, rdx ;; size=58 bbWeight=1 PerfScore 14.08 G_M55783_IG02: lea rdi, [rbp-0xE0] mov rsi, r10 call CORINFO_HELP_INIT_PINVOKE_FRAME mov r13, rax mov rdi, rsp mov qword ptr [rbp-0xC0], rdi mov rdi, rbp mov qword ptr [rbp-0xB0], rdi test rbx, rbx jne SHORT G_M55783_IG04 ;; size=43 bbWeight=1 PerfScore 5.75 G_M55783_IG03: xor rax, rax jmp G_M55783_IG37 ;; size=7 bbWeight=0.50 PerfScore 1.12 G_M55783_IG04: mov rdi, 0xD1FFAB1E ; System.ResolveEventArgs call CORINFO_HELP_NEWSFAST mov r12, rax lea rdi, bword ptr [r12+0x08] mov rsi, r15 call CORINFO_HELP_ASSIGN_REF lea rdi, bword ptr [r12+0x10] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov gword ptr [rbp-0x40], rbx xor rsi, rsi mov gword ptr [rbp-0x38], rsi mov dword ptr [rbp-0x30], -1 jmp G_M55783_IG29 ;; size=66 bbWeight=0.50 PerfScore 5.12 G_M55783_IG05: mov r14, gword ptr [rbp-0x38] mov rax, 0xD1FFAB1E ; code for System.AppDomain:get_CurrentDomain():System.AppDomain call [rax]System.AppDomain:get_CurrentDomain():System.AppDomain mov rsi, rax mov gword ptr [rbp-0x80], r12 mov rdx, r12 mov rdi, gword ptr [r14+0x08] call [r14+0x18]System.ResolveEventHandler:Invoke(System.Object,System.ResolveEventArgs):System.Reflection.Assembly:this mov gword ptr [rbp-0x88], rax mov rdi, 0xD1FFAB1E ; data for System.Runtime.Loader.AssemblyLoadContext:AssemblyResolve mov rdi, gword ptr [rdi] test rdi, rdi je SHORT G_M55783_IG09 cmp rdi, rbx je SHORT G_M55783_IG06 mov gword ptr [rbp-0x70], rbx mov rsi, rbx mov rcx, 0xD1FFAB1E ; code for System.MulticastDelegate:Equals(System.Object):ubyte:this call [rcx]System.MulticastDelegate:Equals(System.Object):ubyte:this test eax, eax mov rbx, gword ptr [rbp-0x70] je SHORT G_M55783_IG08 ;; size=91 bbWeight=2 PerfScore 46.50 G_M55783_IG06: call System.Runtime.Loader.AssemblyLoadContext:IsTracingEnabled():ubyte test eax, eax je SHORT G_M55783_IG07 mov rdi, r14 mov rax, 0xD1FFAB1E ; code for System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this cmp dword ptr [rdi], edi call [rax]System.MulticastDelegate:GetMethodImpl():System.Reflection.MethodInfo:this mov rdi, rax mov rax, qword ptr [rax] mov rax, qword ptr [rax+0x40] call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this mov r14, rax mov rax, gword ptr [rbp-0x88] test rax, rax jne SHORT G_M55783_IG10 xor rcx, rcx xor rdx, rdx jmp G_M55783_IG13 ;; size=63 bbWeight=2 PerfScore 42.00 G_M55783_IG07: mov rax, gword ptr [rbp-0x88] jmp G_M55783_IG28 ;; size=12 bbWeight=1 PerfScore 3.00 G_M55783_IG08: mov rax, gword ptr [rbp-0x88] jmp G_M55783_IG28 ;; size=12 bbWeight=1 PerfScore 3.00 G_M55783_IG09: mov rax, gword ptr [rbp-0x88] jmp G_M55783_IG28 ;; size=12 bbWeight=1 PerfScore 3.00 G_M55783_IG10: mov rdi, rax mov rcx, qword ptr [rax] mov rcx, qword ptr [rcx+0x48] mov qword ptr [rbp-0x68], rcx call [rcx+0x18]System.Reflection.Assembly:get_FullName():System.String:this mov gword ptr [rbp-0x90], rax mov rdi, gword ptr [rbp-0x88] mov rax, qword ptr [rbp-0x68] call [rax+0x28]System.Reflection.Assembly:get_IsDynamic():ubyte:this test eax, eax jne SHORT G_M55783_IG12 mov rdi, gword ptr [rbp-0x88] mov rax, qword ptr [rbp-0x68] call [rax+0x30]System.Reflection.Assembly:get_Location():System.String:this test rax, rax je SHORT G_M55783_IG11 add rax, 12 mov rcx, rax mov rax, gword ptr [rbp-0x88] jmp SHORT G_M55783_IG14 ;; size=77 bbWeight=2 PerfScore 50.50 G_M55783_IG11: mov rax, gword ptr [rbp-0x88] mov rdx, gword ptr [rbp-0x90] jmp SHORT G_M55783_IG13 ;; size=16 bbWeight=1 PerfScore 4.00 G_M55783_IG12: mov rax, gword ptr [rbp-0x88] mov rdx, gword ptr [rbp-0x90] ;; size=14 bbWeight=1 PerfScore 2.00 G_M55783_IG13: xor ecx, ecx mov gword ptr [rbp-0x90], rdx ;; size=9 bbWeight=2 PerfScore 2.50 G_M55783_IG14: mov bword ptr [rbp-0x48], rcx mov rdx, gword ptr [rbp-0x90] test rdx, rdx je SHORT G_M55783_IG15 add rdx, 12 jmp SHORT G_M55783_IG16 ;; size=22 bbWeight=2 PerfScore 11.00 G_M55783_IG15: xor edx, edx ;; size=2 bbWeight=2 PerfScore 0.50 G_M55783_IG16: mov bword ptr [rbp-0x50], rdx test r14, r14 je SHORT G_M55783_IG17 add r14, 12 mov rsi, r14 jmp SHORT G_M55783_IG18 ;; size=18 bbWeight=2 PerfScore 9.50 G_M55783_IG17: xor esi, esi ;; size=2 bbWeight=2 PerfScore 0.50 G_M55783_IG18: mov bword ptr [rbp-0x58], rsi test r15, r15 je SHORT G_M55783_IG19 mov gword ptr [rbp-0x78], r15 lea rdi, bword ptr [r15+0x0C] mov gword ptr [rbp-0x70], rbx jmp SHORT G_M55783_IG20 ;; size=23 bbWeight=2 PerfScore 13.50 G_M55783_IG19: xor edi, edi mov gword ptr [rbp-0x70], rbx mov gword ptr [rbp-0x78], r15 ;; size=10 bbWeight=2 PerfScore 4.50 G_M55783_IG20: mov bword ptr [rbp-0x60], rdi mov r8, 0xD1FFAB1E ; function address mov qword ptr [rbp-0xD0], r8 lea r8, G_M55783_IG23 mov qword ptr [rbp-0xB8], r8 lea r8, bword ptr [rbp-0xE0] mov qword ptr [r13+0x10], r8 mov byte ptr [r13+0x0C], 0 ;; size=51 bbWeight=2 PerfScore 13.50 G_M55783_IG21: mov rax, 0xD1FFAB1E ; code for System.Runtime.Loader.AssemblyLoadContext:g____PInvoke|10_0(ulong,ulong,ulong,ulong):int ;; size=10 bbWeight=2 PerfScore 0.50 G_M55783_IG22: call [rax]System.Runtime.Loader.AssemblyLoadContext:g____PInvoke|10_0(ulong,ulong,ulong,ulong):int ;; size=2 bbWeight=2 PerfScore 6.00 G_M55783_IG23: mov byte ptr [r13+0x0C], 1 mov rcx, 0xD1FFAB1E ; function address cmp dword ptr [rcx], 0 je SHORT G_M55783_IG24 mov rdi, 0xD1FFAB1E call [rdi]CORINFO_HELP_STOP_FOR_GC ;; size=32 bbWeight=2 PerfScore 17.00 G_M55783_IG24: mov rdi, bword ptr [rbp-0xD8] mov qword ptr [r13+0x10], rdi xor edi, edi mov bword ptr [rbp-0x60], rdi ;; size=17 bbWeight=2 PerfScore 6.50 G_M55783_IG25: mov bword ptr [rbp-0x58], rdi ;; size=4 bbWeight=2 PerfScore 2.00 G_M55783_IG26: mov bword ptr [rbp-0x50], rdi ;; size=4 bbWeight=2 PerfScore 2.00 G_M55783_IG27: mov bword ptr [rbp-0x48], rdi mov rax, gword ptr [rbp-0x88] mov rbx, gword ptr [rbp-0x70] mov r15, gword ptr [rbp-0x78] ;; size=19 bbWeight=2 PerfScore 8.00 G_M55783_IG28: mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.Runtime.Loader.AssemblyLoadContext:GetRuntimeAssembly(System.Reflection.Assembly):System.Reflection.RuntimeAssembly call [rax]System.Runtime.Loader.AssemblyLoadContext:GetRuntimeAssembly(System.Reflection.Assembly):System.Reflection.RuntimeAssembly test rax, rax mov r12, gword ptr [rbp-0x80] jne G_M55783_IG37 ;; size=28 bbWeight=2 PerfScore 11.50 G_M55783_IG29: mov r14d, dword ptr [rbp-0x30] inc r14d mov rax, gword ptr [rbp-0x40] mov gword ptr [rbp-0x98], rax lea rcx, bword ptr [rbp-0x40] mov bword ptr [rbp-0xA0], rcx test rax, rax jne SHORT G_M55783_IG31 ;; size=34 bbWeight=4 PerfScore 24.00 G_M55783_IG30: xor rdx, rdx jmp SHORT G_M55783_IG36 ;; size=4 bbWeight=2 PerfScore 4.50 G_M55783_IG31: mov rsi, gword ptr [rax+0x28] mov rdi, 0xD1FFAB1E ; System.Object[] - mov rdx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFARRAY - call [rdx]CORINFO_HELP_ISINSTANCEOFARRAY + call CORINFO_HELP_ISINSTANCEOFARRAY test rax, rax jne SHORT G_M55783_IG34 test r14d, r14d je SHORT G_M55783_IG33 - ;; size=36 bbWeight=2 PerfScore 16.00 + ;; size=29 bbWeight=2 PerfScore 11.50 G_M55783_IG32: xor rdx, rdx jmp SHORT G_M55783_IG36 ;; size=4 bbWeight=8 PerfScore 18.00 G_M55783_IG33: mov rdx, gword ptr [rbp-0x98] jmp SHORT G_M55783_IG36 ;; size=9 bbWeight=8 PerfScore 24.00 G_M55783_IG34: mov rdx, gword ptr [rbp-0x98] cmp r14d, dword ptr [rdx+0x30] jae SHORT G_M55783_IG32 ;; size=13 bbWeight=16 PerfScore 80.00 G_M55783_IG35: cmp r14d, dword ptr [rax+0x08] jae SHORT G_M55783_IG38 mov edx, r14d mov rdx, gword ptr [rax+8*rdx+0x10] ;; size=14 bbWeight=2 PerfScore 12.50 G_M55783_IG36: mov rcx, bword ptr [rbp-0xA0] mov gword ptr [rcx+0x08], rdx test rdx, rdx je G_M55783_IG03 mov dword ptr [rbp-0x30], r14d jmp G_M55783_IG05 ;; size=29 bbWeight=4 PerfScore 25.00 G_M55783_IG37: add rsp, 200 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=18 bbWeight=1 PerfScore 4.25 G_M55783_IG38: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 891, prolog size 49, PerfScore 497.33, instruction count 217, allocated bytes for code 891 (MethodHash=d34b2618) for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts) +; Total bytes of code 884, prolog size 49, PerfScore 492.83, instruction count 216, allocated bytes for code 884 (MethodHash=d34b2618) for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts) ```
-1 (-0.88 % of base) - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this ```diff ; Assembly listing for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; Final local variable assignments ; ; V00 this [V00,T01] ( 3, 3 ) byref -> rdi this single-def ; V01 TypeCtx [V01,T00] ( 5, 3.60) long -> rsi single-def ; V02 arg1 [V02,T02] ( 3, 2.50) ref -> rax class-hnd single-def ; V03 loc0 [V03 ] ( 3, 2.50) struct ( 8) [rbp-0x10] do-not-enreg[XS] must-init addr-exposed ld-addr-op -; V04 loc1 [V04,T04] ( 3, 2.50) ref -> rdi class-hnd single-def +; V04 loc1 [V04,T04] ( 3, 2.50) ref -> rdi class-hnd single-def ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ; V07 tmp2 [V07,T05] ( 3, 2 ) long -> rax "Indirect call through function pointer" ; V08 tmp3 [V08 ] ( 3, 2.50) ref -> [rbp-0x10] do-not-enreg[X] addr-exposed "field V03.array (fldOffset=0x0)" P-DEP ; V09 rat0 [V09,T03] ( 3, 2.80) long -> rax "fgMakeTemp is creating a new local variable" ; ; Lcl frame size = 16 G_M35883_IG01: push rbp sub rsp, 16 lea rbp, [rsp+0x10] xor eax, eax mov qword ptr [rbp-0x10], rax mov qword ptr [rbp-0x08], rsi mov rax, rdx ;; size=23 bbWeight=1 PerfScore 4.25 G_M35883_IG02: mov rdi, gword ptr [rdi] mov gword ptr [rbp-0x10], rdi mov rdi, gword ptr [rbp-0x10] test rdi, rdi jne SHORT G_M35883_IG08 ;; size=16 bbWeight=1 PerfScore 5.25 G_M35883_IG03: mov rdi, qword ptr [rsi+0x30] mov rdi, qword ptr [rdi] mov rax, qword ptr [rdi+0xD8] test rax, rax je SHORT G_M35883_IG05 ;; size=19 bbWeight=0.50 PerfScore 3.62 G_M35883_IG04: jmp SHORT G_M35883_IG06 ;; size=2 bbWeight=0.40 PerfScore 0.80 G_M35883_IG05: mov rdi, rsi mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=18 bbWeight=0.10 PerfScore 0.15 G_M35883_IG06: lea rdi, [rbp-0x10] call rax nop ;; size=7 bbWeight=0.50 PerfScore 1.88 G_M35883_IG07: add rsp, 16 pop rbp ret ;; size=6 bbWeight=0.50 PerfScore 0.88 G_M35883_IG08: mov rsi, rax - mov r11, 0xD1FFAB1E ; code for System.Collections.IStructuralEquatable:GetHashCode(System.Collections.IEqualityComparer):int:this - call [r11]System.Collections.IStructuralEquatable:GetHashCode(System.Collections.IEqualityComparer):int:this + mov rax, 0xD1FFAB1E ; code for System.Array:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this + call [rax]System.Array:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this nop - ;; size=17 bbWeight=0.50 PerfScore 1.88 + ;; size=16 bbWeight=0.50 PerfScore 1.88 G_M35883_IG09: add rsp, 16 pop rbp ret ;; size=6 bbWeight=0.50 PerfScore 0.88 -; Total bytes of code 114, prolog size 20, PerfScore 19.58, instruction count 34, allocated bytes for code 114 (MethodHash=2def73d4) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this (FullOpts) +; Total bytes of code 113, prolog size 20, PerfScore 19.58, instruction count 34, allocated bytes for code 113 (MethodHash=2def73d4) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:System.Collections.IStructuralEquatable.GetHashCode(System.Collections.IEqualityComparer):int:this (FullOpts) ```

Larger list of diffs: https://gist.github.com/MihuBot/85c14d2301e753a8f962f52138a8d01a

MihuBot commented 3 months ago

@MichalPetryka