MihuBot / runtime-utils

0 stars 0 forks source link

[X64] [EgorBo] Expand String.EndsWith/MemoryExtensions.EndsWith in JIT #255

Open MihuBot opened 7 months ago

MihuBot commented 7 months ago

Build completed in 1 hour 41 minutes. https://github.com/dotnet/runtime/pull/98593

CoreLib diffs

Found 2 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 7342807
Total bytes of diff: 7342548
Total bytes of delta: -259 (-0.00 % of base)
Total relative delta: 0.27
    diff is an improvement.
    relative diff is a regression.

Total byte diff includes -341 bytes from reconciling methods
    Base had    1 unique methods,      341 unique bytes
    Diff had    0 unique methods,        0 unique bytes

Top file improvements (bytes):
        -259 : System.Private.CoreLib.dasm (-0.00 % of base)

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

Top method regressions (bytes):
          70 (23.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts)
          30 (5.99 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts)
          26 (3.85 % of base) : System.Private.CoreLib.dasm - System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts)
          21 (2.29 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:ResolveSatelliteAssembly(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts)
           1 (0.36 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.DebugProvider:Write(System.String):this (FullOpts)

Top method improvements (bytes):
        -341 (-100.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.Ordinal:EqualsIgnoreCase_Vector[System.Runtime.Intrinsics.Vector256`1[ushort]](byref,byref,int):ubyte (FullOpts) (1 base, 0 diff methods)
         -41 (-0.79 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:CreateManifestAndDescriptors(System.Type,System.String,System.Diagnostics.Tracing.EventSource,int):ubyte[] (FullOpts)
          -7 (-0.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts)
          -7 (-3.06 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts)
          -7 (-0.78 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts)
          -4 (-3.31 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts)

Top method regressions (percentages):
          70 (23.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts)
          30 (5.99 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts)
          26 (3.85 % of base) : System.Private.CoreLib.dasm - System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts)
          21 (2.29 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:ResolveSatelliteAssembly(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts)
           1 (0.36 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.DebugProvider:Write(System.String):this (FullOpts)

Top method improvements (percentages):
        -341 (-100.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.Ordinal:EqualsIgnoreCase_Vector[System.Runtime.Intrinsics.Vector256`1[ushort]](byref,byref,int):ubyte (FullOpts) (1 base, 0 diff methods)
          -4 (-3.31 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts)
          -7 (-3.06 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetResolvedUnmanagedDll(System.Reflection.Assembly,System.String):long:this (FullOpts)
          -7 (-0.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts)
         -41 (-0.79 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:CreateManifestAndDescriptors(System.Type,System.String,System.Diagnostics.Tracing.EventSource,int):ubyte[] (FullOpts)
          -7 (-0.78 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts)

11 total methods with Code Size differences (6 improved, 5 regressed), 56271 unchanged.

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

Frameworks diffs

Diffs ``` Found 267 files with textual diffs. Summary of Code Size diffs: (Lower is better) Total bytes of base: 38806380 Total bytes of diff: 38806279 Total bytes of delta: -101 (-0.00 % of base) Total relative delta: 0.48 diff is an improvement. relative diff is a regression. Total byte diff includes -341 bytes from reconciling methods Base had 1 unique methods, 341 unique bytes Diff had 0 unique methods, 0 unique bytes Top file regressions (bytes): 69 : System.Private.Xml.dasm (0.00 % of base) 30 : System.IO.Packaging.dasm (0.03 % of base) 24 : System.Net.Http.dasm (0.00 % of base) 23 : System.Net.Ping.dasm (0.05 % of base) 21 : System.IO.Ports.dasm (0.04 % of base) 5 : System.Reflection.MetadataLoadContext.dasm (0.00 % of base) Top file improvements (bytes): -238 : System.Private.CoreLib.dasm (-0.00 % of base) -18 : System.Diagnostics.FileVersionInfo.dasm (-0.18 % of base) -17 : System.Private.DataContractSerialization.dasm (-0.00 % of base) 9 total files with Code Size differences (3 improved, 6 regressed), 247 unchanged. Top method regressions (bytes): 70 (23.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts) 41 (6.61 % of base) : System.IO.Packaging.dasm - System.IO.Packaging.PackUriHelper+ValidatedPartUri:IsRelationshipUri():ubyte:this (FullOpts) 30 (5.99 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts) 28 (4.20 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSchemaImporter:ImportAttributeMember(System.Xml.Schema.XmlSchemaAttribute,System.String,System.Xml.Serialization.CodeIdentifiers,System.Xml.Serialization.CodeIdentifiers,System.String):this (FullOpts) 28 (2.48 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSchemaImporter:ImportElementMember(System.Xml.Schema.XmlSchemaElement,System.String,System.Xml.Serialization.CodeIdentifiers,System.Xml.Serialization.CodeIdentifiers,System.Xml.Serialization.INameScope,System.String,ubyte,byref,ubyte,ubyte):this (FullOpts) 26 (3.85 % of base) : System.Private.CoreLib.dasm - System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts) 24 (0.63 % of base) : System.Net.Http.dasm - System.Net.Http.AuthenticationHelper+d__40:MoveNext():this (FullOpts) 23 (16.67 % of base) : System.Net.Ping.dasm - System.Net.NetworkInformation.UnixCommandLinePing:IsBusyboxPing(System.String):ubyte (FullOpts) 21 (3.04 % of base) : System.IO.Ports.dasm - System.IO.Ports.SerialPort:GetPortNames_FreeBSD():System.String[] (FullOpts) 21 (2.29 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:ResolveSatelliteAssembly(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts) 20 (0.86 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSerializationReaderILGen:WriteSourceBegin(System.String):this (FullOpts) 20 (0.99 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSerializationReaderILGen:WriteSourceEnd(System.String,System.Type,System.Type):this (FullOpts) 5 (0.11 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.RoType:GetMemberImpl(System.String,int,int):System.Reflection.MemberInfo[]:this (FullOpts) 1 (0.36 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.DebugProvider:Write(System.String):this (FullOpts) Top method improvements (bytes): -341 (-100.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.Ordinal:EqualsIgnoreCase_Vector[System.Runtime.Intrinsics.Vector256`1[ushort]](byref,byref,int):ubyte (FullOpts) (1 base, 0 diff methods) -41 (-0.79 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:CreateManifestAndDescriptors(System.Type,System.String,System.Diagnostics.Tracing.EventSource,int):ubyte[] (FullOpts) -27 (-6.75 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier:EscapeKeywords(System.String,System.Text.StringBuilder) (FullOpts) -18 (-0.91 % of base) : System.Diagnostics.FileVersionInfo.dasm - System.Diagnostics.FileVersionInfo:LoadManagedAssemblyMetadata(System.Reflection.Metadata.MetadataReader,ubyte):this (FullOpts) -17 (-1.55 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.Json.JsonReaderDelegator:ParseJsonDateInDefaultFormat(System.String):System.DateTime (FullOpts) -11 (-9.57 % of base) : System.IO.Packaging.dasm - System.IO.Packaging.ZipPackage:IsZipItemValidOpcPartOrPiece(System.String):ubyte (FullOpts) -4 (-3.31 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts) Top method regressions (percentages): 70 (23.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts) 23 (16.67 % of base) : System.Net.Ping.dasm - System.Net.NetworkInformation.UnixCommandLinePing:IsBusyboxPing(System.String):ubyte (FullOpts) 41 (6.61 % of base) : System.IO.Packaging.dasm - System.IO.Packaging.PackUriHelper+ValidatedPartUri:IsRelationshipUri():ubyte:this (FullOpts) 30 (5.99 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts) 28 (4.20 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSchemaImporter:ImportAttributeMember(System.Xml.Schema.XmlSchemaAttribute,System.String,System.Xml.Serialization.CodeIdentifiers,System.Xml.Serialization.CodeIdentifiers,System.String):this (FullOpts) 26 (3.85 % of base) : System.Private.CoreLib.dasm - System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts) 21 (3.04 % of base) : System.IO.Ports.dasm - System.IO.Ports.SerialPort:GetPortNames_FreeBSD():System.String[] (FullOpts) 28 (2.48 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSchemaImporter:ImportElementMember(System.Xml.Schema.XmlSchemaElement,System.String,System.Xml.Serialization.CodeIdentifiers,System.Xml.Serialization.CodeIdentifiers,System.Xml.Serialization.INameScope,System.String,ubyte,byref,ubyte,ubyte):this (FullOpts) 21 (2.29 % of base) : System.Private.CoreLib.dasm - System.Runtime.Loader.AssemblyLoadContext:ResolveSatelliteAssembly(System.Reflection.AssemblyName):System.Reflection.Assembly:this (FullOpts) 20 (0.99 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSerializationReaderILGen:WriteSourceEnd(System.String,System.Type,System.Type):this (FullOpts) 20 (0.86 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.XmlSerializationReaderILGen:WriteSourceBegin(System.String):this (FullOpts) 24 (0.63 % of base) : System.Net.Http.dasm - System.Net.Http.AuthenticationHelper+d__40:MoveNext():this (FullOpts) 1 (0.36 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.DebugProvider:Write(System.String):this (FullOpts) 5 (0.11 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.RoType:GetMemberImpl(System.String,int,int):System.Reflection.MemberInfo[]:this (FullOpts) Top method improvements (percentages): -341 (-100.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.Ordinal:EqualsIgnoreCase_Vector[System.Runtime.Intrinsics.Vector256`1[ushort]](byref,byref,int):ubyte (FullOpts) (1 base, 0 diff methods) -11 (-9.57 % of base) : System.IO.Packaging.dasm - System.IO.Packaging.ZipPackage:IsZipItemValidOpcPartOrPiece(System.String):ubyte (FullOpts) -27 (-6.75 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier:EscapeKeywords(System.String,System.Text.StringBuilder) (FullOpts) -4 (-3.31 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts) -17 (-1.55 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.Json.JsonReaderDelegator:ParseJsonDateInDefaultFormat(System.String):System.DateTime (FullOpts) -18 (-0.91 % of base) : System.Diagnostics.FileVersionInfo.dasm - System.Diagnostics.FileVersionInfo:LoadManagedAssemblyMetadata(System.Reflection.Metadata.MetadataReader,ubyte):this (FullOpts) -41 (-0.79 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:CreateManifestAndDescriptors(System.Type,System.String,System.Diagnostics.Tracing.EventSource,int):ubyte[] (FullOpts) 21 total methods with Code Size differences (7 improved, 14 regressed), 239166 unchanged. -------------------------------------------------------------------------------- ```

Artifacts:

MihuBot commented 7 months ago

Top method regressions

70 (23.18 % of base) - System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte ```diff ; Assembly listing for method System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (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 arg0 [V00,T00] ( 8, 5.50) ref -> rbx class-hnd single-def ; V01 arg1 [V01,T01] ( 8, 5.50) ref -> r15 class-hnd single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "non-inline candidate call" ;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "non-inline candidate call" -; V05 tmp3 [V05,T02] ( 2, 2 ) ref -> r13 single-def "argument with side effect" -; V06 tmp4 [V06,T03] ( 2, 2 ) ref -> rsi single-def "argument with side effect" -; V07 tmp5 [V07,T04] ( 2, 2 ) ref -> r13 single-def "argument with side effect" -; V08 tmp6 [V08,T05] ( 2, 2 ) ref -> rsi single-def "argument with side effect" -; V09 tmp7 [V09,T06] ( 2, 2 ) ref -> rdi single-def "argument with side effect" -; V10 tmp8 [V10,T07] ( 2, 2 ) ref -> rdi single-def "argument with side effect" -; V11 cse0 [V11,T08] ( 3, 1.50) long -> r14 "CSE - moderate" -; V12 cse1 [V12,T09] ( 3, 1.50) long -> r12 "CSE - moderate" +; V05 tmp3 [V05,T02] ( 4, 4 ) ref -> rax single-def "spilling varStr" +; V06 tmp4 [V06,T10] ( 3, 3 ) byref -> rdi single-def "clonning data ptr" +; V07 tmp5 [V07,T04] ( 2, 2 ) int -> rdi "spilling unroll qmark" +; V08 tmp6 [V08,T03] ( 4, 3 ) ref -> rax single-def "spilling varStr" +; V09 tmp7 [V09,T11] ( 3, 1.50) byref -> rax single-def "clonning data ptr" +; V10 tmp8 [V10,T05] ( 3, 2 ) int -> rax "spilling unroll qmark" +; V11 tmp9 [V11,T06] ( 2, 2 ) ref -> r13 single-def "argument with side effect" +; V12 tmp10 [V12,T07] ( 2, 2 ) ref -> rsi single-def "argument with side effect" +; V13 tmp11 [V13,T08] ( 2, 2 ) ref -> r13 single-def "argument with side effect" +; V14 tmp12 [V14,T09] ( 2, 2 ) ref -> rsi single-def "argument with side effect" +; V15 cse0 [V15,T12] ( 3, 1.50) long -> r14 "CSE - moderate" +; V16 cse1 [V16,T13] ( 3, 1.50) long -> r12 "CSE - moderate" +; V17 rat0 [V17,T14] ( 3, 3 ) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable" +; V18 rat1 [V18,T15] ( 3, 1.50) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable" ; ; Lcl frame size = 8 G_M54593_IG01: push rbp push r15 push r14 push r13 push r12 push rbx push rax lea rbp, [rsp+0x30] mov rbx, rdi mov r15, rsi ;; size=22 bbWeight=1 PerfScore 8.00 G_M54593_IG02: mov rdi, rbx mov rsi, r15 mov rax, 0xD1FFAB1E ; code for System.Type:op_Equality(System.Type,System.Type):ubyte call [rax]System.Type:op_Equality(System.Type,System.Type):ubyte test eax, eax - jne G_M54593_IG07 + jne G_M54593_IG10 ;; size=26 bbWeight=1 PerfScore 5.00 G_M54593_IG03: mov rdi, rbx mov rax, qword ptr [rbx] mov r14, qword ptr [rax+0x50] call [r14+0x20]System.Type:get_FullName():System.String:this mov r13, rax mov rdi, r15 mov rax, qword ptr [r15] mov r12, qword ptr [rax+0x50] call [r12+0x20]System.Type:get_FullName():System.String:this mov rsi, rax mov rdi, r13 mov edx, 4 mov rax, 0xD1FFAB1E ; code for System.String:Equals(System.String,System.String,int):ubyte call [rax]System.String:Equals(System.String,System.String,int):ubyte test eax, eax - jne G_M54593_IG07 + jne G_M54593_IG10 mov rdi, rbx mov rax, qword ptr [rbx] mov rax, qword ptr [rax+0x40] call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this mov r13, rax mov rdi, r15 mov rax, qword ptr [r15] mov rax, qword ptr [rax+0x40] call [rax+0x30]System.Reflection.MemberInfo:get_Name():System.String:this mov rsi, rax mov rdi, r13 mov edx, 4 mov rax, 0xD1FFAB1E ; code for System.String:Equals(System.String,System.String,int):ubyte call [rax]System.String:Equals(System.String,System.String,int):ubyte test eax, eax - je SHORT G_M54593_IG05 + je G_M54593_IG08 mov rdi, rbx call [r14+0x10]System.Type:get_Namespace():System.String:this - mov rdi, rax - mov rsi, 0xD1FFAB1E ; 'Diagnostics.Tracing' - - mov edx, 4 - mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this - cmp dword ptr [rdi], edi - call [rax]System.String:EndsWith(System.String,int):ubyte:this - test eax, eax - je SHORT G_M54593_IG05 + cmp dword ptr [rax+0x08], 19 + jl G_M54593_IG08 + mov edi, dword ptr [rax+0x08] + lea rdi, bword ptr [rax+2*rdi-0x26] + vmovups ymm0, ymmword ptr [rdi+0x0C] + vpxor ymm0, ymm0, ymmword ptr [reloc @RWD00] + vmovups ymm1, ymmword ptr [rdi+0x12] + vpternlogq ymm0, ymm1, ymmword ptr [reloc @RWD32], -10 + vptest ymm0, ymm0 + sete dil + movzx rdi, dil + test edi, edi + je SHORT G_M54593_IG08 mov rdi, r15 call [r12+0x10]System.Type:get_Namespace():System.String:this - mov rdi, rax - mov rsi, 0xD1FFAB1E ; 'Diagnostics.Tracing' - - mov edx, 4 - mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this - cmp dword ptr [rdi], edi - ;; size=200 bbWeight=0.50 PerfScore 29.38 + cmp dword ptr [rax+0x08], 19 + jl SHORT G_M54593_IG05 + ;; size=208 bbWeight=0.50 PerfScore 39.50 G_M54593_IG04: + mov ecx, dword ptr [rax+0x08] + lea rax, bword ptr [rax+2*rcx-0x26] + vmovups ymm0, ymmword ptr [rax+0x0C] + vpxor ymm0, ymm0, ymmword ptr [reloc @RWD00] + vmovups ymm1, ymmword ptr [rax+0x12] + vpternlogq ymm0, ymm1, ymmword ptr [reloc @RWD32], -10 + vptest ymm0, ymm0 + sete al + movzx rax, al + jmp SHORT G_M54593_IG06 + ;; size=50 bbWeight=0.25 PerfScore 6.31 +G_M54593_IG05: + xor eax, eax + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M54593_IG06: + movzx rax, al + ;; size=3 bbWeight=0.50 PerfScore 0.12 +G_M54593_IG07: + vzeroupper add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp - tail.jmp [rax]System.String:EndsWith(System.String,int):ubyte:this - ;; size=17 bbWeight=0.50 PerfScore 2.62 -G_M54593_IG05: + ret + ;; size=18 bbWeight=0.50 PerfScore 2.62 +G_M54593_IG08: xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M54593_IG06: +G_M54593_IG09: + vzeroupper add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M54593_IG07: + ;; size=18 bbWeight=0.50 PerfScore 2.62 +G_M54593_IG10: mov eax, 1 ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M54593_IG08: +G_M54593_IG11: + vzeroupper add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=15 bbWeight=0.50 PerfScore 2.12 + ;; size=18 bbWeight=0.50 PerfScore 2.62 +RWD00 dq 0067006100690044h, 00740073006F006Eh, 002E007300630069h, 0063006100720054h +RWD32 dq 0073006F006E0067h, 0073006300690074h, 006100720054002Eh, 0067006E00690063h + -; Total bytes of code 302, prolog size 16, PerfScore 49.50, instruction count 91, allocated bytes for code 302 (MethodHash=436d2abe) for method System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts) +; Total bytes of code 372, prolog size 16, PerfScore 67.12, instruction count 108, allocated bytes for code 372 (MethodHash=436d2abe) for method System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte (FullOpts) ```
30 (5.99 % of base) - System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String ```diff ; Assembly listing for method System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (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; 12 single block inlinees; 11 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 10, 6 ) ref -> rbx class-hnd single-def -; V01 arg1 [V01,T01] ( 9, 6 ) ref -> r15 class-hnd single-def -; V02 arg2 [V02,T02] ( 4, 3 ) int -> r14 single-def -; V03 loc0 [V03,T04] ( 6, 3 ) byref -> r14 +; V01 arg1 [V01,T01] ( 8, 5.50) ref -> rsi class-hnd single-def +; V02 arg2 [V02,T02] ( 4, 3 ) int -> r15 single-def +; V03 loc0 [V03,T05] ( 6, 3 ) byref -> r15 ;* V04 loc1 [V04 ] ( 0, 0 ) int -> zero-ref ; V05 loc2 [V05 ] ( 6, 3 ) struct (16) [rbp-0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V06 loc3 [V06 ] ( 10, 5 ) struct (40) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V08 tmp1 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" -;* V09 tmp2 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -;* V10 tmp3 [V10 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" -;* V11 tmp4 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" -; V14 tmp7 [V14,T07] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" -; V15 tmp8 [V15,T13] ( 2, 2 ) int -> rsi "Inlining Arg" -;* V16 tmp9 [V16 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" -;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V18 tmp11 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" -; V19 tmp12 [V19,T08] ( 2, 2 ) byref -> rdx single-def "Inlining Arg" -; V20 tmp13 [V20,T14] ( 2, 2 ) int -> rcx "Inlining Arg" -; V21 tmp14 [V21,T05] ( 3, 3 ) int -> rcx "Inlining Arg" -;* V22 tmp15 [V22 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V23 tmp16 [V23 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V24 tmp17 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V25 tmp18 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" -; V26 tmp19 [V26,T09] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" -; V27 tmp20 [V27,T15] ( 2, 2 ) int -> rsi "Inlining Arg" -;* V28 tmp21 [V28 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" -;* V29 tmp22 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V30 tmp23 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" -; V31 tmp24 [V31,T10] ( 2, 2 ) byref -> rdx single-def "Inlining Arg" -; V32 tmp25 [V32,T16] ( 2, 2 ) int -> rcx "Inlining Arg" -; V33 tmp26 [V33,T06] ( 3, 3 ) int -> rcx "Inlining Arg" -;* V34 tmp27 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V35 tmp28 [V35 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V36 tmp29 [V36 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V37 tmp30 [V37,T03] ( 4, 4 ) int -> rdi "Inlining Arg" -;* V38 tmp31 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V39 tmp32 [V39,T11] ( 2, 2 ) byref -> rax single-def "Inlining Arg" -; V40 tmp33 [V40,T17] ( 2, 2 ) int -> rsi "Inlining Arg" -;* V41 tmp34 [V41,T33] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -;* V42 tmp35 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V43 tmp36 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" -; V44 tmp37 [V44,T12] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" -; V45 tmp38 [V45 ] ( 4, 2 ) byref -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V05._reference (fldOffset=0x0)" P-DEP -; V46 tmp39 [V46 ] ( 4, 2 ) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V05._length (fldOffset=0x8)" P-DEP -; V47 tmp40 [V47,T18] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP -; V48 tmp41 [V48,T20] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP -;* V49 tmp42 [V49 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP -;* V50 tmp43 [V50 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP -; V51 tmp44 [V51,T19] ( 3, 1.50) byref -> rdi "field V10._reference (fldOffset=0x0)" P-INDEP -; V52 tmp45 [V52,T21] ( 3, 1.50) int -> rsi "field V10._length (fldOffset=0x8)" P-INDEP -;* V53 tmp46 [V53 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP -;* V54 tmp47 [V54 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP -; V55 tmp48 [V55,T25] ( 2, 1 ) byref -> rdi single-def "field V12._reference (fldOffset=0x0)" P-INDEP -; V56 tmp49 [V56,T34] ( 2, 1 ) int -> rsi "field V12._length (fldOffset=0x8)" P-INDEP -;* V57 tmp50 [V57 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP -;* V58 tmp51 [V58 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP -; V59 tmp52 [V59,T26] ( 2, 1 ) byref -> rdx single-def "field V16._reference (fldOffset=0x0)" P-INDEP -; V60 tmp53 [V60,T35] ( 2, 1 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP -; V61 tmp54 [V61,T27] ( 2, 1 ) byref -> rdx single-def "field V17._reference (fldOffset=0x0)" P-INDEP -; V62 tmp55 [V62,T36] ( 2, 1 ) int -> rcx "field V17._length (fldOffset=0x8)" P-INDEP -;* V63 tmp56 [V63 ] ( 0, 0 ) byref -> zero-ref "field V18._reference (fldOffset=0x0)" P-INDEP -;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP -; V65 tmp58 [V65,T28] ( 2, 1 ) byref -> rdx single-def "field V22._reference (fldOffset=0x0)" P-INDEP -; V66 tmp59 [V66,T37] ( 2, 1 ) int -> rcx "field V22._length (fldOffset=0x8)" P-INDEP -; V67 tmp60 [V67,T29] ( 2, 1 ) byref -> rdi single-def "field V24._reference (fldOffset=0x0)" P-INDEP -; V68 tmp61 [V68,T38] ( 2, 1 ) int -> rsi "field V24._length (fldOffset=0x8)" P-INDEP -;* V69 tmp62 [V69 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP -;* V70 tmp63 [V70 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP -; V71 tmp64 [V71,T30] ( 2, 1 ) byref -> rdx single-def "field V28._reference (fldOffset=0x0)" P-INDEP -; V72 tmp65 [V72,T39] ( 2, 1 ) int -> rcx "field V28._length (fldOffset=0x8)" P-INDEP -; V73 tmp66 [V73,T31] ( 2, 1 ) byref -> rdx single-def "field V29._reference (fldOffset=0x0)" P-INDEP -; V74 tmp67 [V74,T40] ( 2, 1 ) int -> rcx "field V29._length (fldOffset=0x8)" P-INDEP -;* V75 tmp68 [V75 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP -;* V76 tmp69 [V76 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP -; V77 tmp70 [V77,T32] ( 2, 1 ) byref -> rdx single-def "field V34._reference (fldOffset=0x0)" P-INDEP -; V78 tmp71 [V78,T41] ( 2, 1 ) int -> rcx "field V34._length (fldOffset=0x8)" P-INDEP -;* V79 tmp72 [V79 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP -;* V80 tmp73 [V80 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP -;* V81 tmp74 [V81 ] ( 0, 0 ) byref -> zero-ref single-def "field V38._reference (fldOffset=0x0)" P-INDEP -;* V82 tmp75 [V82 ] ( 0, 0 ) int -> zero-ref "field V38._length (fldOffset=0x8)" P-INDEP -;* V83 tmp76 [V83 ] ( 0, 0 ) byref -> zero-ref single-def "field V42._reference (fldOffset=0x0)" P-INDEP -;* V84 tmp77 [V84 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP -; V85 cse0 [V85,T22] ( 3, 1.50) int -> rdx "CSE - moderate" -; V86 cse1 [V86,T23] ( 3, 1.50) int -> rdx "CSE - moderate" -; V87 cse2 [V87,T24] ( 3, 1.50) int -> rsi "CSE - moderate" +;* V08 tmp1 [V08 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" +; V09 tmp2 [V09,T21] ( 3, 3 ) byref -> rdi single-def "clonning data ptr" +; V10 tmp3 [V10,T08] ( 2, 2 ) int -> rdi "spilling unroll qmark" +;* V11 tmp4 [V11 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" +; V12 tmp5 [V12,T29] ( 2, 2 ) byref -> rdi single-def "clonning data ptr" +; V13 tmp6 [V13,T09] ( 2, 2 ) int -> rdi "spilling unroll qmark" +;* V14 tmp7 [V14 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" +;* V15 tmp8 [V15 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V16 tmp9 [V16 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" +;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V18 tmp11 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V19 tmp12 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" +; V20 tmp13 [V20,T10] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" +; V21 tmp14 [V21,T16] ( 2, 2 ) int -> rdx "Inlining Arg" +;* V22 tmp15 [V22 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" +;* V23 tmp16 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V24 tmp17 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" +; V25 tmp18 [V25,T11] ( 2, 2 ) byref -> rsi single-def "Inlining Arg" +; V26 tmp19 [V26,T17] ( 2, 2 ) int -> r14 "Inlining Arg" +; V27 tmp20 [V27,T06] ( 3, 3 ) int -> rcx "Inlining Arg" +;* V28 tmp21 [V28 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +;* V29 tmp22 [V29 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V30 tmp23 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V31 tmp24 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" +; V32 tmp25 [V32,T12] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" +; V33 tmp26 [V33,T18] ( 2, 2 ) int -> rdx "Inlining Arg" +;* V34 tmp27 [V34 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" +;* V35 tmp28 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V36 tmp29 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" +; V37 tmp30 [V37,T13] ( 2, 2 ) byref -> rsi single-def "Inlining Arg" +; V38 tmp31 [V38,T19] ( 2, 2 ) int -> rcx "Inlining Arg" +; V39 tmp32 [V39,T07] ( 3, 3 ) int -> rcx "Inlining Arg" +;* V40 tmp33 [V40 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +;* V41 tmp34 [V41 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V42 tmp35 [V42 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +; V43 tmp36 [V43,T04] ( 4, 4 ) int -> rdi "Inlining Arg" +;* V44 tmp37 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V45 tmp38 [V45,T14] ( 2, 2 ) byref -> rax single-def "Inlining Arg" +; V46 tmp39 [V46,T20] ( 2, 2 ) int -> rsi "Inlining Arg" +;* V47 tmp40 [V47,T38] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +;* V48 tmp41 [V48 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V49 tmp42 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +; V50 tmp43 [V50,T15] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" +; V51 tmp44 [V51 ] ( 4, 2 ) byref -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V05._reference (fldOffset=0x0)" P-DEP +; V52 tmp45 [V52 ] ( 4, 2 ) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V05._length (fldOffset=0x8)" P-DEP +; V53 tmp46 [V53,T22] ( 3, 1.50) byref -> rdi "field V14._reference (fldOffset=0x0)" P-INDEP +; V54 tmp47 [V54,T24] ( 3, 1.50) int -> rdx "field V14._length (fldOffset=0x8)" P-INDEP +;* V55 tmp48 [V55 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP +;* V56 tmp49 [V56 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +; V57 tmp50 [V57,T23] ( 3, 1.50) byref -> rdi "field V16._reference (fldOffset=0x0)" P-INDEP +; V58 tmp51 [V58,T25] ( 3, 1.50) int -> rdx "field V16._length (fldOffset=0x8)" P-INDEP +;* V59 tmp52 [V59 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP +;* V60 tmp53 [V60 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP +; V61 tmp54 [V61,T30] ( 2, 1 ) byref -> rdi single-def "field V18._reference (fldOffset=0x0)" P-INDEP +; V62 tmp55 [V62,T39] ( 2, 1 ) int -> rdx "field V18._length (fldOffset=0x8)" P-INDEP +;* V63 tmp56 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP +;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP +; V65 tmp58 [V65,T31] ( 2, 1 ) byref -> rsi single-def "field V22._reference (fldOffset=0x0)" P-INDEP +; V66 tmp59 [V66,T40] ( 2, 1 ) int -> r14 "field V22._length (fldOffset=0x8)" P-INDEP +; V67 tmp60 [V67,T32] ( 2, 1 ) byref -> rsi single-def "field V23._reference (fldOffset=0x0)" P-INDEP +; V68 tmp61 [V68,T41] ( 2, 1 ) int -> r14 "field V23._length (fldOffset=0x8)" P-INDEP +;* V69 tmp62 [V69 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP +;* V70 tmp63 [V70 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP +; V71 tmp64 [V71,T33] ( 2, 1 ) byref -> rax single-def "field V28._reference (fldOffset=0x0)" P-INDEP +; V72 tmp65 [V72,T42] ( 2, 1 ) int -> rcx "field V28._length (fldOffset=0x8)" P-INDEP +; V73 tmp66 [V73,T34] ( 2, 1 ) byref -> rdi single-def "field V30._reference (fldOffset=0x0)" P-INDEP +; V74 tmp67 [V74,T43] ( 2, 1 ) int -> rdx "field V30._length (fldOffset=0x8)" P-INDEP +;* V75 tmp68 [V75 ] ( 0, 0 ) byref -> zero-ref single-def "field V31._reference (fldOffset=0x0)" P-INDEP +;* V76 tmp69 [V76 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP +; V77 tmp70 [V77,T35] ( 2, 1 ) byref -> rsi single-def "field V34._reference (fldOffset=0x0)" P-INDEP +; V78 tmp71 [V78,T44] ( 2, 1 ) int -> rcx "field V34._length (fldOffset=0x8)" P-INDEP +; V79 tmp72 [V79,T36] ( 2, 1 ) byref -> rsi single-def "field V35._reference (fldOffset=0x0)" P-INDEP +; V80 tmp73 [V80,T45] ( 2, 1 ) int -> rcx "field V35._length (fldOffset=0x8)" P-INDEP +;* V81 tmp74 [V81 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP +;* V82 tmp75 [V82 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP +; V83 tmp76 [V83,T37] ( 2, 1 ) byref -> rax single-def "field V40._reference (fldOffset=0x0)" P-INDEP +; V84 tmp77 [V84,T46] ( 2, 1 ) int -> rcx "field V40._length (fldOffset=0x8)" P-INDEP +;* V85 tmp78 [V85 ] ( 0, 0 ) byref -> zero-ref "field V42._reference (fldOffset=0x0)" P-INDEP +;* V86 tmp79 [V86 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP +;* V87 tmp80 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP +;* V88 tmp81 [V88 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP +;* V89 tmp82 [V89 ] ( 0, 0 ) byref -> zero-ref single-def "field V48._reference (fldOffset=0x0)" P-INDEP +;* V90 tmp83 [V90 ] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x8)" P-INDEP +; V91 cse0 [V91,T26] ( 3, 1.50) int -> rsi "CSE - moderate" +; V92 cse1 [V92,T27] ( 3, 1.50) int -> rsi "CSE - moderate" +; V93 cse2 [V93,T03] ( 7, 4.50) int -> r14 "CSE - aggressive" +; V94 cse3 [V94,T28] ( 3, 1.50) int -> rsi "CSE - moderate" ; ; Lcl frame size = 56 G_M38999_IG01: push rbp push r15 push r14 push rbx sub rsp, 56 lea rbp, [rsp+0x50] vxorps xmm8, xmm8, xmm8 vmovdqu ymmword ptr [rbp-0x50], ymm8 vmovdqa xmmword ptr [rbp-0x30], xmm8 xor eax, eax mov qword ptr [rbp-0x20], rax mov rbx, rdi - mov r15, rsi - mov r14d, edx - ;; size=45 bbWeight=1 PerfScore 11.08 + mov r15d, edx + ;; size=42 bbWeight=1 PerfScore 10.83 G_M38999_IG02: - mov rdi, r15 - mov rsi, 0xD1FFAB1E ; 'Start' - - mov edx, 4 - mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this - cmp dword ptr [rdi], edi - call [rax]System.String:EndsWith(System.String,int):ubyte:this - test eax, eax - je SHORT G_M38999_IG07 - ;; size=36 bbWeight=1 PerfScore 8.25 + mov r14d, dword ptr [rsi+0x08] + cmp r14d, 5 + jl G_M38999_IG07 + ;; size=14 bbWeight=1 PerfScore 3.25 G_M38999_IG03: + mov edi, r14d + lea rdi, bword ptr [rsi+2*rdi-0x0A] + mov rdx, 0xD1FFAB1E + xor rdx, qword ptr [rdi+0x0C] + mov edi, dword ptr [rdi+0x12] + xor edi, 0xD1FFAB1E + or rdi, rdx + sete dil + movzx rdi, dil + test edi, edi + je SHORT G_M38999_IG07 test rbx, rbx jne SHORT G_M38999_IG04 xor rdi, rdi - xor esi, esi + xor edx, edx jmp SHORT G_M38999_IG05 - ;; size=11 bbWeight=0.50 PerfScore 1.88 + ;; size=57 bbWeight=0.50 PerfScore 6.62 G_M38999_IG04: lea rdi, bword ptr [rbx+0x0C] - mov esi, dword ptr [rbx+0x08] + mov edx, dword ptr [rbx+0x08] ;; size=7 bbWeight=0.50 PerfScore 1.25 G_M38999_IG05: - lea rdx, bword ptr [r15+0x0C] - mov ecx, dword ptr [r15+0x08] - mov bword ptr [rbp-0x28], rdx - mov dword ptr [rbp-0x20], ecx - lea r14, bword ptr [rbp-0x28] - mov edx, dword ptr [r14+0x08] - lea ecx, [rdx-0x05] - cmp ecx, edx + add rsi, 12 + mov bword ptr [rbp-0x28], rsi + mov dword ptr [rbp-0x20], r14d + lea r15, bword ptr [rbp-0x28] + mov esi, dword ptr [r15+0x08] + lea ecx, [rsi-0x05] + cmp ecx, esi ja G_M38999_IG17 - mov rdx, bword ptr [r14] + mov rax, bword ptr [r15] + mov esi, edx + mov rdx, rax mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String call [rax]System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String nop - ;; size=50 bbWeight=0.50 PerfScore 7.12 + ;; size=52 bbWeight=0.50 PerfScore 6.25 G_M38999_IG06: add rsp, 56 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M38999_IG07: - mov rdi, r15 - mov rsi, 0xD1FFAB1E ; 'Stop' - - mov edx, 4 - mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this - call [rax]System.String:EndsWith(System.String,int):ubyte:this - test eax, eax + cmp r14d, 4 + jl SHORT G_M38999_IG11 + mov edi, r14d + lea rdi, bword ptr [rsi+2*rdi-0x08] + mov rdx, 0xD1FFAB1E + cmp qword ptr [rdi+0x0C], rdx + sete dil + movzx rdi, dil + test edi, edi je SHORT G_M38999_IG11 test rbx, rbx jne SHORT G_M38999_IG08 xor rdi, rdi - xor esi, esi + xor edx, edx jmp SHORT G_M38999_IG09 - ;; size=45 bbWeight=0.50 PerfScore 4.50 + ;; size=51 bbWeight=0.50 PerfScore 6.00 G_M38999_IG08: lea rdi, bword ptr [rbx+0x0C] - mov esi, dword ptr [rbx+0x08] + mov edx, dword ptr [rbx+0x08] ;; size=7 bbWeight=0.50 PerfScore 1.25 G_M38999_IG09: - lea rdx, bword ptr [r15+0x0C] - mov ecx, dword ptr [r15+0x08] - mov bword ptr [rbp-0x28], rdx + add rsi, 12 + mov ecx, r14d + mov bword ptr [rbp-0x28], rsi mov dword ptr [rbp-0x20], ecx - lea r14, bword ptr [rbp-0x28] - mov edx, dword ptr [r14+0x08] - lea ecx, [rdx-0x04] - cmp ecx, edx + lea r15, bword ptr [rbp-0x28] + mov esi, dword ptr [r15+0x08] + lea ecx, [rsi-0x04] + cmp ecx, esi ja G_M38999_IG17 - mov rdx, bword ptr [r14] + mov rax, bword ptr [r15] + mov esi, edx + mov rdx, rax mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String call [rax]System.String:Concat(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):System.String nop - ;; size=50 bbWeight=0.50 PerfScore 7.12 + ;; size=54 bbWeight=0.50 PerfScore 6.38 G_M38999_IG10: add rsp, 56 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M38999_IG11: - test r14d, r14d + test r15d, r15d je G_M38999_IG15 lea rdi, [rbp-0x50] mov esi, 4 mov edx, 2 mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this lea rdi, [rbp-0x50] mov rsi, rbx mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted(System.String):this call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted(System.String):this mov edi, dword ptr [rbp-0x40] mov esi, dword ptr [rbp-0x30] cmp edi, esi ja G_M38999_IG17 mov rax, bword ptr [rbp-0x38] mov ecx, edi lea rax, bword ptr [rax+2*rcx] sub esi, edi cmp esi, 4 jb SHORT G_M38999_IG12 mov rdi, 0xD1FFAB1E mov rsi, qword ptr [rdi] mov qword ptr [rax], rsi mov edi, dword ptr [rbp-0x40] add edi, 4 mov dword ptr [rbp-0x40], edi jmp SHORT G_M38999_IG13 ;; size=112 bbWeight=0.50 PerfScore 11.75 G_M38999_IG12: lea rdi, [rbp-0x50] mov rsi, 0xD1FFAB1E ; 'task' mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this ;; size=26 bbWeight=0.50 PerfScore 2.00 G_M38999_IG13: lea rdi, [rbp-0x50] - mov esi, r14d + mov esi, r15d mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[int](int):this call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[int](int):this lea rdi, [rbp-0x50] mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:ToStringAndClear():System.String:this call [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:ToStringAndClear():System.String:this nop ;; size=36 bbWeight=0.50 PerfScore 4.00 G_M38999_IG14: add rsp, 56 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M38999_IG15: mov rdi, rbx - mov rsi, r15 mov rax, 0xD1FFAB1E ; code for System.String:Concat(System.String,System.String):System.String call [rax]System.String:Concat(System.String,System.String):System.String nop - ;; size=19 bbWeight=0.50 PerfScore 2.00 + ;; size=16 bbWeight=0.50 PerfScore 1.88 G_M38999_IG16: add rsp, 56 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M38999_IG17: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -; Total bytes of code 501, prolog size 36, PerfScore 68.71, instruction count 141, allocated bytes for code 501 (MethodHash=f71167a8) for method System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts) +; Total bytes of code 531, prolog size 36, PerfScore 67.96, instruction count 151, allocated bytes for code 531 (MethodHash=f71167a8) for method System.Diagnostics.Tracing.ActivityTracker:NormalizeActivityName(System.String,System.String,int):System.String (FullOpts) ```
26 (3.85 % of base) - System.StartupHookProvider:ParseStartupHook(byref,System.String) ```diff ; Assembly listing for method System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; -; V00 arg0 [V00,T07] ( 3, 3 ) byref -> rdi single-def -; V01 arg1 [V01,T08] ( 3, 3 ) ref -> rsi class-hnd single-def +; V00 arg0 [V00,T08] ( 3, 3 ) byref -> rdi single-def +; V01 arg1 [V01,T09] ( 3, 3 ) ref -> rsi class-hnd single-def ;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ;* V03 loc1 [V03 ] ( 0, 0 ) struct (16) zero-ref ; V04 loc2 [V04,T01] ( 5, 16.50) int -> r13 ;* V05 loc3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def ptr ;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V07 tmp1 [V07 ] ( 5, 5 ) struct ( 8) [rbp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" ;* V08 tmp2 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V09 tmp3 [V09,T20] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" -; V10 tmp4 [V10,T11] ( 3, 3 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" -; V11 tmp5 [V11,T23] ( 2, 0 ) ref -> rbx class-hnd single-def "impSpillSpecialSideEff" -; V12 tmp6 [V12,T21] ( 3, 0 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" -; V13 tmp7 [V13,T22] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -;* V14 tmp8 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V15 tmp9 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V16 tmp10 [V16 ] ( 0, 0 ) byref -> zero-ref single-def ptr "Inlining Arg" -;* V17 tmp11 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V18 tmp12 [V18,T19] ( 0, 0 ) ubyte -> zero-ref ptr "Inline return value spill temp" -; V19 tmp13 [V19,T04] ( 2, 16 ) ushort -> rdi "Inlining Arg" -; V20 tmp14 [V20,T05] ( 3, 8 ) ubyte -> rax "Inline return value spill temp" -; V21 tmp15 [V21,T02] ( 3, 16 ) byref -> rax "Inlining Arg" -; V22 tmp16 [V22,T00] ( 4, 24 ) short -> rcx ld-addr-op "Inlining Arg" -; V23 tmp17 [V23,T03] ( 3, 16 ) int -> rdx "Inlining Arg" -;* V24 tmp18 [V24 ] ( 0, 0 ) short -> zero-ref ld-addr-op "Inlining Arg" -; V25 tmp19 [V25,T10] ( 2, 5 ) byref -> r15 single-def "field V02._reference (fldOffset=0x0)" P-INDEP -;* V26 tmp20 [V26,T15] ( 0, 0 ) int -> zero-ref ptr "field V02._length (fldOffset=0x8)" P-INDEP -;* V27 tmp21 [V27 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP -;* V28 tmp22 [V28 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP -; V29 tmp23 [V29,T13] ( 2, 2 ) byref -> r15 single-def "field V08._reference (fldOffset=0x0)" P-INDEP -;* V30 tmp24 [V30 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP -;* V31 tmp25 [V31 ] ( 0, 0 ) byref -> zero-ref single-def ptr "field V14._reference (fldOffset=0x0)" P-INDEP -;* V32 tmp26 [V32 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP -; V33 tmp27 [V33,T14] ( 2, 2 ) byref -> r15 single-def "field V15._reference (fldOffset=0x0)" P-INDEP -;* V34 tmp28 [V34,T16] ( 0, 0 ) int -> zero-ref ptr "field V15._length (fldOffset=0x8)" P-INDEP -; V35 tmp29 [V35,T24] ( 2, 0 ) ref -> rdi "argument with side effect" -; V36 tmp30 [V36,T25] ( 2, 0 ) ref -> rsi "argument with side effect" -; V37 tmp31 [V37,T26] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V38 tmp32 [V38,T27] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V39 tmp33 [V39,T28] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V40 tmp34 [V40,T29] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V41 GsCookie [V41 ] ( 1, 1 ) long -> [rbp-0x28] do-not-enreg[X] addr-exposed "GSSecurityCookie" -; V42 tmp36 [V42,T12] ( 3, 2 ) byref -> rbx single-def "shadowVar" -; V43 tmp37 [V43,T06] ( 11, 7.50) ref -> [rbp-0x38] EH-live spill-single-def ptr "shadowVar" -; V44 PSPSym [V44,T17] ( 1, 1 ) long -> [rbp-0x40] do-not-enreg[V] "PSPSym" -;* V45 cse0 [V45,T18] ( 0, 0 ) long -> zero-ref "CSE - moderate" -; V46 cse1 [V46,T09] ( 3, 5 ) int -> r14 "CSE - moderate" +; V09 tmp3 [V09,T22] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" +;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref single-def ptr "spilling varStr" +; V11 tmp5 [V11,T14] ( 2, 2 ) byref -> rdi single-def "clonning data ptr" +; V12 tmp6 [V12,T12] ( 2, 2 ) int -> rdi "spilling unroll qmark" +; V13 tmp7 [V13,T11] ( 3, 3 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" +; V14 tmp8 [V14,T25] ( 2, 0 ) ref -> rbx class-hnd single-def "impSpillSpecialSideEff" +; V15 tmp9 [V15,T23] ( 3, 0 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" +; V16 tmp10 [V16,T24] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V17 tmp11 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V18 tmp12 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V19 tmp13 [V19 ] ( 0, 0 ) byref -> zero-ref single-def ptr "Inlining Arg" +;* V20 tmp14 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V21 tmp15 [V21,T21] ( 0, 0 ) ubyte -> zero-ref ptr "Inline return value spill temp" +; V22 tmp16 [V22,T04] ( 2, 16 ) ushort -> rdi "Inlining Arg" +; V23 tmp17 [V23,T05] ( 3, 8 ) ubyte -> rax "Inline return value spill temp" +; V24 tmp18 [V24,T02] ( 3, 16 ) byref -> rax "Inlining Arg" +; V25 tmp19 [V25,T00] ( 4, 24 ) short -> rcx ld-addr-op "Inlining Arg" +; V26 tmp20 [V26,T03] ( 3, 16 ) int -> rdx "Inlining Arg" +;* V27 tmp21 [V27 ] ( 0, 0 ) short -> zero-ref ld-addr-op "Inlining Arg" +; V28 tmp22 [V28,T10] ( 2, 5 ) byref -> r15 single-def "field V02._reference (fldOffset=0x0)" P-INDEP +;* V29 tmp23 [V29,T17] ( 0, 0 ) int -> zero-ref ptr "field V02._length (fldOffset=0x8)" P-INDEP +;* V30 tmp24 [V30 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP +;* V31 tmp25 [V31 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP +; V32 tmp26 [V32,T15] ( 2, 2 ) byref -> r15 single-def "field V08._reference (fldOffset=0x0)" P-INDEP +;* V33 tmp27 [V33 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP +;* V34 tmp28 [V34 ] ( 0, 0 ) byref -> zero-ref single-def ptr "field V17._reference (fldOffset=0x0)" P-INDEP +;* V35 tmp29 [V35 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP +; V36 tmp30 [V36,T16] ( 2, 2 ) byref -> r15 single-def "field V18._reference (fldOffset=0x0)" P-INDEP +;* V37 tmp31 [V37,T18] ( 0, 0 ) int -> zero-ref ptr "field V18._length (fldOffset=0x8)" P-INDEP +; V38 tmp32 [V38,T26] ( 2, 0 ) ref -> rdi "argument with side effect" +; V39 tmp33 [V39,T27] ( 2, 0 ) ref -> rsi "argument with side effect" +; V40 tmp34 [V40,T28] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V41 tmp35 [V41,T29] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V42 tmp36 [V42,T30] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V43 tmp37 [V43,T31] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V44 GsCookie [V44 ] ( 1, 1 ) long -> [rbp-0x28] do-not-enreg[X] addr-exposed "GSSecurityCookie" +; V45 tmp39 [V45,T13] ( 3, 2 ) byref -> rbx single-def "shadowVar" +; V46 tmp40 [V46,T06] ( 11, 7.50) ref -> [rbp-0x38] EH-live spill-single-def ptr "shadowVar" +; V47 PSPSym [V47,T19] ( 1, 1 ) long -> [rbp-0x40] do-not-enreg[V] "PSPSym" +;* V48 cse0 [V48,T20] ( 0, 0 ) long -> zero-ref "CSE - moderate" +; V49 cse1 [V49,T07] ( 5, 6 ) int -> r14 "CSE - moderate" ; ; Lcl frame size = 32 G_M53030_IG01: push rbp push r15 push r14 push r13 push rbx sub rsp, 32 lea rbp, [rsp+0x40] mov qword ptr [rbp-0x40], rsp mov qword ptr [rbp-0x28], 0xD1FFAB1E ;; size=29 bbWeight=1 PerfScore 7.75 G_M53030_IG02: mov gword ptr [rbp-0x38], rsi mov rbx, rdi mov rdi, 0xD1FFAB1E ; global ptr test byte ptr [rdi], 1 je G_M53030_IG18 ;; size=26 bbWeight=1 PerfScore 5.50 G_M53030_IG03: mov rdi, 0xD1FFAB1E ; data for System.IO.Path:DirectorySeparatorChar movzx rdi, word ptr [rdi] mov word ptr [rbp-0x30], di mov rdi, 0xD1FFAB1E ; data for System.IO.Path:AltDirectorySeparatorChar movzx rdi, word ptr [rdi] mov word ptr [rbp-0x2E], di mov word ptr [rbp-0x2C], 32 mov word ptr [rbp-0x2A], 44 lea r15, [rbp-0x30] test rsi, rsi je SHORT G_M53030_IG05 ;; size=55 bbWeight=1 PerfScore 10.25 G_M53030_IG04: mov r14d, dword ptr [rsi+0x08] test r14d, r14d je SHORT G_M53030_IG05 mov rdi, rsi mov rax, 0xD1FFAB1E ; code for System.IO.Path:IsPathFullyQualified(System.String):ubyte call [rax]System.IO.Path:IsPathFullyQualified(System.String):ubyte test eax, eax je SHORT G_M53030_IG11 jmp SHORT G_M53030_IG08 ;; size=30 bbWeight=0.50 PerfScore 5.00 G_M53030_IG05: cmp qword ptr [rbp-0x28], 0xD1FFAB1E je SHORT G_M53030_IG06 call CORINFO_HELP_FAIL_FAST ;; size=15 bbWeight=0.50 PerfScore 2.00 G_M53030_IG06: nop ;; size=1 bbWeight=0.50 PerfScore 0.12 G_M53030_IG07: add rsp, 32 pop rbx pop r13 pop r14 pop r15 pop rbp ret ;; size=13 bbWeight=0.50 PerfScore 1.88 G_M53030_IG08: lea rdi, bword ptr [rbx+0x08] mov rsi, gword ptr [rbp-0x38] call CORINFO_HELP_CHECKED_ASSIGN_REF cmp qword ptr [rbp-0x28], 0xD1FFAB1E je SHORT G_M53030_IG09 call CORINFO_HELP_FAIL_FAST ;; size=28 bbWeight=0.50 PerfScore 3.25 G_M53030_IG09: nop ;; size=1 bbWeight=0.50 PerfScore 0.12 G_M53030_IG10: add rsp, 32 pop rbx pop r13 pop r14 pop r15 pop rbp ret ;; size=13 bbWeight=0.50 PerfScore 1.88 G_M53030_IG11: xor r13d, r13d ;; size=3 bbWeight=0.50 PerfScore 0.12 G_M53030_IG12: mov edi, r13d movzx rdi, word ptr [r15+2*rdi] mov rsi, gword ptr [rbp-0x38] lea rax, bword ptr [rsi+0x0C] movsx rcx, di mov edx, r14d movzx rdi, cx dec edi cmp edi, 254 jae SHORT G_M53030_IG14 ;; size=36 bbWeight=4 PerfScore 24.00 G_M53030_IG13: mov rdi, rax mov esi, ecx mov rax, 0xD1FFAB1E ; code for System.PackedSpanHelpers:Contains(byref,short,int):ubyte call [rax]System.PackedSpanHelpers:Contains(byref,short,int):ubyte jmp SHORT G_M53030_IG15 ;; size=19 bbWeight=2 PerfScore 11.50 G_M53030_IG14: mov rdi, rax mov esi, ecx mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:NonPackedContainsValueType[short](byref,short,int):ubyte call [rax]System.SpanHelpers:NonPackedContainsValueType[short](byref,short,int):ubyte ;; size=17 bbWeight=2 PerfScore 7.50 G_M53030_IG15: test eax, eax - jne G_M53030_IG20 + jne G_M53030_IG19 inc r13d cmp r13d, 4 jl SHORT G_M53030_IG12 ;; size=17 bbWeight=4 PerfScore 11.00 G_M53030_IG16: - mov rdi, gword ptr [rbp-0x38] - mov rsi, 0xD1FFAB1E ; '.dll' - - mov edx, 5 - mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this - call [rax]System.String:EndsWith(System.String,int):ubyte:this - test eax, eax - jne SHORT G_M53030_IG19 - ;; size=35 bbWeight=0.50 PerfScore 3.00 + cmp r14d, 4 + jl SHORT G_M53030_IG17 + mov edi, r14d + mov rsi, gword ptr [rbp-0x38] + lea rdi, bword ptr [rsi+2*rdi-0x08] + mov rax, 0xD1FFAB1E + or rax, qword ptr [rdi+0x0C] + mov rdi, 0xD1FFAB1E + cmp rax, rdi + sete dil + movzx rdi, dil + test edi, edi + jne G_M53030_IG20 + ;; size=61 bbWeight=0.50 PerfScore 4.88 G_M53030_IG17: mov rdi, 0xD1FFAB1E ; System.Reflection.AssemblyName call CORINFO_HELP_NEWSFAST mov r15, rax mov rdi, r15 mov rsi, gword ptr [rbp-0x38] mov rax, 0xD1FFAB1E ; code for System.Reflection.AssemblyName:.ctor(System.String):this call [rax]System.Reflection.AssemblyName:.ctor(System.String):this mov rdi, rbx mov rsi, r15 call CORINFO_HELP_CHECKED_ASSIGN_REF jmp G_M53030_IG05 ;; size=53 bbWeight=0.50 PerfScore 4.75 G_M53030_IG18: mov rdi, 0xD1FFAB1E mov esi, 0x7E1 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov rsi, gword ptr [rbp-0x38] jmp G_M53030_IG03 ;; size=29 bbWeight=0 PerfScore 0.00 G_M53030_IG19: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String call [rax]System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String mov rdi, rax mov rsi, gword ptr [rbp-0x38] mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String call [rax]System.SR:Format(System.String,System.Object):System.String mov rsi, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this call [rax]System.ArgumentException:.ctor(System.String):this mov rdi, rbx call CORINFO_HELP_THROW ;; size=75 bbWeight=0 PerfScore 0.00 G_M53030_IG20: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String call [rax]System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String mov rdi, rax mov rsi, gword ptr [rbp-0x38] mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String call [rax]System.SR:Format(System.String,System.Object):System.String mov rsi, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this call [rax]System.ArgumentException:.ctor(System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=76 bbWeight=0 PerfScore 0.00 G_M53030_IG21: push rbp push r15 push r14 push r13 push rbx sub rsp, 16 mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp lea rbp, [rbp+0x40] ;; size=23 bbWeight=0 PerfScore 0.00 G_M53030_IG22: mov rbx, rsi mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov r15, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String call [rax]System.SR:get_Argument_InvalidStartupHookSimpleAssemblyName():System.String mov rdi, rax mov rsi, gword ptr [rbp-0x38] mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String call [rax]System.SR:Format(System.String,System.Object):System.String mov rsi, rax mov rdi, r15 mov rdx, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.Exception):this call [rax]System.ArgumentException:.ctor(System.String,System.Exception):this mov rdi, r15 call CORINFO_HELP_THROW int3 ;; size=82 bbWeight=0 PerfScore 0.00 -; Total bytes of code 676, prolog size 29, PerfScore 99.62, instruction count 165, allocated bytes for code 676 (MethodHash=6f8330d9) for method System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts) +; Total bytes of code 702, prolog size 29, PerfScore 101.50, instruction count 171, allocated bytes for code 702 (MethodHash=6f8330d9) for method System.StartupHookProvider:ParseStartupHook(byref,System.String) (FullOpts) ```

Larger list of diffs: https://gist.github.com/MihuBot/2f808f5962a46f0b068c39a02bab57e4

MihuBot commented 7 months ago

Top method improvements

-7 (-0.80 % 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 - 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 SHORT G_M53640_IG38 ;; 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_IG39 ;; 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: mov rax, r12 jmp SHORT G_M53640_IG40 ;; size=5 bbWeight=0.50 PerfScore 1.12 G_M53640_IG39: xor rax, rax ;; size=2 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, 0x4DB call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M53640_IG04 ;; size=25 bbWeight=0 PerfScore 0.00 -; Total bytes of code 875, prolog size 53, PerfScore 533.58, instruction count 217, allocated bytes for code 875 (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 (-3.06 % 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 SHORT G_M27358_IG13 ;; 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_IG14 ;; size=10 bbWeight=8 PerfScore 18.00 G_M27358_IG12: mov dword ptr [rbp-0x30], r14d jmp SHORT G_M27358_IG03 ;; size=6 bbWeight=4 PerfScore 12.00 G_M27358_IG13: 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_IG14: xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.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 229, prolog size 35, PerfScore 232.96, instruction count 77, allocated bytes for code 229 (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) ```
-7 (-0.78 % 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 - 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_IG38 ;; 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_IG30 ;; 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 rcx, 0xD1FFAB1E ; data for System.Runtime.Loader.AssemblyLoadContext:AssemblyResolve mov rdi, gword ptr [rcx] test rdi, rdi je G_M55783_IG10 mov gword ptr [rbp-0x70], rbx cmp rdi, rbx je SHORT G_M55783_IG07 mov rbx, gword ptr [rbp-0x70] 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 je SHORT G_M55783_IG09 ;; size=95 bbWeight=2 PerfScore 46.50 G_M55783_IG06: mov gword ptr [rbp-0x70], rbx ;; size=4 bbWeight=1 PerfScore 1.00 G_M55783_IG07: call System.Runtime.Loader.AssemblyLoadContext:IsTracingEnabled():ubyte test eax, eax je SHORT G_M55783_IG08 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_IG11 xor rcx, rcx xor rdx, rdx jmp G_M55783_IG14 ;; size=63 bbWeight=2 PerfScore 42.00 G_M55783_IG08: mov rax, gword ptr [rbp-0x88] mov rbx, gword ptr [rbp-0x70] jmp G_M55783_IG29 ;; size=16 bbWeight=1 PerfScore 4.00 G_M55783_IG09: mov rax, gword ptr [rbp-0x88] jmp G_M55783_IG29 ;; size=12 bbWeight=1 PerfScore 3.00 G_M55783_IG10: mov rax, gword ptr [rbp-0x88] jmp G_M55783_IG29 ;; size=12 bbWeight=1 PerfScore 3.00 G_M55783_IG11: 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_IG13 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_IG12 add rax, 12 mov rcx, rax mov rax, gword ptr [rbp-0x88] jmp SHORT G_M55783_IG15 ;; size=77 bbWeight=2 PerfScore 50.50 G_M55783_IG12: mov rax, gword ptr [rbp-0x88] mov rdx, gword ptr [rbp-0x90] jmp SHORT G_M55783_IG14 ;; size=16 bbWeight=1 PerfScore 4.00 G_M55783_IG13: mov rax, gword ptr [rbp-0x88] mov rdx, gword ptr [rbp-0x90] ;; size=14 bbWeight=1 PerfScore 2.00 G_M55783_IG14: xor ecx, ecx mov gword ptr [rbp-0x90], rdx ;; size=9 bbWeight=2 PerfScore 2.50 G_M55783_IG15: mov bword ptr [rbp-0x48], rcx mov rdx, gword ptr [rbp-0x90] test rdx, rdx je SHORT G_M55783_IG16 add rdx, 12 jmp SHORT G_M55783_IG17 ;; size=22 bbWeight=2 PerfScore 11.00 G_M55783_IG16: xor edx, edx ;; size=2 bbWeight=2 PerfScore 0.50 G_M55783_IG17: mov bword ptr [rbp-0x50], rdx test r14, r14 je SHORT G_M55783_IG18 add r14, 12 mov rsi, r14 jmp SHORT G_M55783_IG19 ;; size=18 bbWeight=2 PerfScore 9.50 G_M55783_IG18: xor esi, esi ;; size=2 bbWeight=2 PerfScore 0.50 G_M55783_IG19: mov bword ptr [rbp-0x58], rsi test r15, r15 je SHORT G_M55783_IG20 mov gword ptr [rbp-0x78], r15 lea rdi, bword ptr [r15+0x0C] jmp SHORT G_M55783_IG21 ;; size=19 bbWeight=2 PerfScore 11.50 G_M55783_IG20: xor edi, edi mov gword ptr [rbp-0x78], r15 ;; size=6 bbWeight=2 PerfScore 2.50 G_M55783_IG21: mov bword ptr [rbp-0x60], rdi mov r8, 0xD1FFAB1E ; function address mov qword ptr [rbp-0xD0], r8 lea r8, G_M55783_IG24 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_IG22: 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_IG23: call [rax]System.Runtime.Loader.AssemblyLoadContext:g____PInvoke|10_0(ulong,ulong,ulong,ulong):int ;; size=2 bbWeight=2 PerfScore 6.00 G_M55783_IG24: mov byte ptr [r13+0x0C], 1 mov rcx, 0xD1FFAB1E ; function address cmp dword ptr [rcx], 0 je SHORT G_M55783_IG25 mov rdi, 0xD1FFAB1E call [rdi]CORINFO_HELP_STOP_FOR_GC ;; size=32 bbWeight=2 PerfScore 17.00 G_M55783_IG25: 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_IG26: mov bword ptr [rbp-0x58], rdi ;; size=4 bbWeight=2 PerfScore 2.00 G_M55783_IG27: mov bword ptr [rbp-0x50], rdi ;; size=4 bbWeight=2 PerfScore 2.00 G_M55783_IG28: 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_IG29: 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_IG38 ;; size=28 bbWeight=2 PerfScore 11.50 G_M55783_IG30: 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_IG32 ;; size=34 bbWeight=4 PerfScore 24.00 G_M55783_IG31: xor rdx, rdx jmp SHORT G_M55783_IG37 ;; size=4 bbWeight=2 PerfScore 4.50 G_M55783_IG32: 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_IG35 test r14d, r14d je SHORT G_M55783_IG34 - ;; size=36 bbWeight=2 PerfScore 16.00 + ;; size=29 bbWeight=2 PerfScore 11.50 G_M55783_IG33: xor rdx, rdx jmp SHORT G_M55783_IG37 ;; size=4 bbWeight=8 PerfScore 18.00 G_M55783_IG34: mov rdx, gword ptr [rbp-0x98] jmp SHORT G_M55783_IG37 ;; size=9 bbWeight=8 PerfScore 24.00 G_M55783_IG35: mov rdx, gword ptr [rbp-0x98] cmp r14d, dword ptr [rdx+0x30] jae SHORT G_M55783_IG33 ;; size=13 bbWeight=16 PerfScore 80.00 G_M55783_IG36: cmp r14d, dword ptr [rax+0x08] jae SHORT G_M55783_IG39 mov edx, r14d mov rdx, gword ptr [rax+8*rdx+0x10] ;; size=14 bbWeight=2 PerfScore 12.50 G_M55783_IG37: 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_IG38: 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_IG39: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 895, prolog size 49, PerfScore 495.33, instruction count 217, allocated bytes for code 895 (MethodHash=d34b2618) for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts) +; Total bytes of code 888, prolog size 49, PerfScore 490.83, instruction count 216, allocated bytes for code 888 (MethodHash=d34b2618) for method System.Runtime.Loader.AssemblyLoadContext:InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String):System.Reflection.RuntimeAssembly (FullOpts) ```
-4 (-3.31 % of base) - System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int ```diff ; Assembly listing for method System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (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 arg0 [V00,T01] ( 4, 3.50) int -> r15 single-def -; V01 arg1 [V01,T00] ( 5, 3.50) ref -> rbx class-hnd single-def +; V00 arg0 [V00,T01] ( 4, 3.50) int -> rdi single-def +; V01 arg1 [V01,T00] ( 6, 4 ) ref -> rsi class-hnd single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" +;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" +; V04 tmp2 [V04,T05] ( 3, 3 ) byref -> rax single-def "clonning data ptr" +; V05 tmp3 [V05,T03] ( 2, 2 ) int -> rax "spilling unroll qmark" +;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" +; V07 tmp5 [V07,T06] ( 2, 2 ) byref -> rax single-def "clonning data ptr" +; V08 tmp6 [V08,T04] ( 2, 2 ) int -> rax "spilling unroll qmark" +; V09 cse0 [V09,T02] ( 5, 2.50) int -> rcx "CSE - aggressive" ; ; Lcl frame size = 0 G_M63502_IG01: push rbp - push r15 - push rbx - lea rbp, [rsp+0x10] - mov r15d, edi - mov rbx, rsi - ;; size=15 bbWeight=1 PerfScore 4.00 + mov rbp, rsp + ;; size=4 bbWeight=1 PerfScore 1.25 G_M63502_IG02: - test r15d, r15d + test edi, edi jne SHORT G_M63502_IG07 - ;; size=5 bbWeight=1 PerfScore 1.25 + ;; size=4 bbWeight=1 PerfScore 1.25 G_M63502_IG03: - test rbx, rbx + test rsi, rsi je SHORT G_M63502_IG07 - mov rdi, rbx - mov rsi, 0xD1FFAB1E ; 'Start' - - mov edx, 4 - mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this - call [rax]System.String:EndsWith(System.String,int):ubyte:this + mov ecx, dword ptr [rsi+0x08] + cmp ecx, 5 + jl SHORT G_M63502_IG05 + mov eax, ecx + lea rax, bword ptr [rsi+2*rax-0x0A] + mov rdx, 0xD1FFAB1E + xor rdx, qword ptr [rax+0x0C] + mov eax, dword ptr [rax+0x12] + xor eax, 0xD1FFAB1E + or rax, rdx + sete al + movzx rax, al test eax, eax je SHORT G_M63502_IG05 mov eax, 1 - ;; size=44 bbWeight=0.50 PerfScore 3.38 + ;; size=60 bbWeight=0.50 PerfScore 7.12 G_M63502_IG04: - pop rbx - pop r15 pop rbp ret - ;; size=5 bbWeight=0.50 PerfScore 1.25 + ;; size=2 bbWeight=0.50 PerfScore 0.75 G_M63502_IG05: - mov rdi, rbx - mov rsi, 0xD1FFAB1E ; 'Stop' - - mov edx, 4 - mov rax, 0xD1FFAB1E ; code for System.String:EndsWith(System.String,int):ubyte:this - call [rax]System.String:EndsWith(System.String,int):ubyte:this + cmp ecx, 4 + jl SHORT G_M63502_IG07 + mov eax, ecx + lea rax, bword ptr [rsi+2*rax-0x08] + mov rcx, 0xD1FFAB1E + cmp qword ptr [rax+0x0C], rcx + sete al + movzx rax, al test eax, eax je SHORT G_M63502_IG07 mov eax, 2 - ;; size=39 bbWeight=0.50 PerfScore 2.75 + ;; size=41 bbWeight=0.50 PerfScore 4.25 G_M63502_IG06: - pop rbx - pop r15 pop rbp ret - ;; size=5 bbWeight=0.50 PerfScore 1.25 + ;; size=2 bbWeight=0.50 PerfScore 0.75 G_M63502_IG07: - mov eax, r15d - ;; size=3 bbWeight=0.50 PerfScore 0.12 + mov eax, edi + ;; size=2 bbWeight=0.50 PerfScore 0.12 G_M63502_IG08: - pop rbx - pop r15 pop rbp ret - ;; size=5 bbWeight=0.50 PerfScore 1.25 + ;; size=2 bbWeight=0.50 PerfScore 0.75 -; Total bytes of code 121, prolog size 9, PerfScore 15.25, instruction count 39, allocated bytes for code 121 (MethodHash=d35407f1) for method System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts) +; Total bytes of code 117, prolog size 4, PerfScore 16.25, instruction count 39, allocated bytes for code 117 (MethodHash=d35407f1) for method System.Diagnostics.Tracing.EventSource:GetOpcodeWithDefault(int,System.String):int (FullOpts) ```

Note: some changes were skipped as they were too large to fit into a comment.

Larger list of diffs: https://gist.github.com/MihuBot/24f9c5500645adc300f5606575545ea4

MihuBot commented 7 months ago

@EgorBo