Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

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

Open
MihuBot opened this issue Feb 17, 2024 · 3 comments
Open

Comments

@MihuBot
Copy link
Owner

MihuBot commented Feb 17, 2024

Build completed in 1 hour 41 minutes.
dotnet/runtime#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+<GetDigestTokenForCredential>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+<GetDigestTokenForCredential>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
Copy link
Owner Author

MihuBot commented Feb 17, 2024

Top method regressions

70 (23.18 % of base) - System.Diagnostics.Tracing.EventSource:AttributeTypeNamesMatch(System.Type,System.Type):ubyte
 ; 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 <System.Type>
 ;  V01 arg1         [V01,T01] (  8,  5.50)     ref  ->  r15         class-hnd single-def <System.Type>
 ;# 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" <System.String>
 ;* V04 tmp2         [V04    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "non-inline candidate call" <System.String>
-;  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
 ; 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 <System.String>
-;  V01 arg1         [V01,T01] (  9,  6   )     ref  ->  r15         class-hnd single-def <System.String>
-;  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 <System.String>
+;  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 <System.ReadOnlySpan`1[ushort]>
 ;  V06 loc3         [V06    ] ( 10,  5   )  struct (40) [rbp-0x50]  do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Runtime.CompilerServices.DefaultInterpolatedStringHandler>
 ;# 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" <System.ReadOnlySpan`1[ushort]>
-;* V09 tmp2         [V09    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-;* V10 tmp3         [V10    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
-;* V11 tmp4         [V11    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-;* V12 tmp5         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V13 tmp6         [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-;  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" <System.ReadOnlySpan`1[ushort]>
-;* V17 tmp10        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V18 tmp11        [V18    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-;  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" <System.ReadOnlySpan`1[ushort]>
-;* 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" <System.ReadOnlySpan`1[ushort]>
-;* V25 tmp18        [V25    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-;  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" <System.ReadOnlySpan`1[ushort]>
-;* V29 tmp22        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V30 tmp23        [V30    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-;  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" <System.ReadOnlySpan`1[ushort]>
-;* V35 tmp28        [V35    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V36 tmp29        [V36    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
-;  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" <System.Span`1[ushort]>
-;  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" <System.Span`1[ushort]>
-;* 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" <System.ReadOnlySpan`1[ushort]>
+;* V15 tmp8         [V15    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
+;* V16 tmp9         [V16    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
+;* V17 tmp10        [V17    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
+;* V18 tmp11        [V18    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V19 tmp12        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+;  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" <System.ReadOnlySpan`1[ushort]>
+;* V23 tmp16        [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V24 tmp17        [V24    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+;  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" <System.ReadOnlySpan`1[ushort]>
+;* 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" <System.ReadOnlySpan`1[ushort]>
+;* V31 tmp24        [V31    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+;  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" <System.ReadOnlySpan`1[ushort]>
+;* V35 tmp28        [V35    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V36 tmp29        [V36    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+;  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" <System.ReadOnlySpan`1[ushort]>
+;* V41 tmp34        [V41    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V42 tmp35        [V42    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
+;  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" <System.Span`1[ushort]>
+;  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" <System.Span`1[ushort]>
+;* 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)
 ; 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 <System.String>
+;  V00 arg0         [V00,T08] (  3,  3   )   byref  ->  rdi         single-def
+;  V01 arg1         [V01,T09] (  3,  3   )     ref  ->  rsi         class-hnd single-def <System.String>
 ;* V02 loc0         [V02    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[ushort]>
 ;* V03 loc1         [V03    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
 ;  V04 loc2         [V04,T01] (  5, 16.50)     int  ->  r13        
 ;* V05 loc3         [V05    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def ptr <System.Exception>
 ;# 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" <System.Span`1[ushort]>
-;  V09 tmp3         [V09,T20] (  3,  0   )     ref  ->  rbx         class-hnd exact "NewObj constructor temp" <System.ArgumentException>
-;  V10 tmp4         [V10,T11] (  3,  3   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.Reflection.AssemblyName>
-;  V11 tmp5         [V11,T23] (  2,  0   )     ref  ->  rbx         class-hnd single-def "impSpillSpecialSideEff" <System.Exception>
-;  V12 tmp6         [V12,T21] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
-;  V13 tmp7         [V13,T22] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
-;* V14 tmp8         [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
-;* V15 tmp9         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* 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" <System.ArgumentException>
+;* 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" <System.Reflection.AssemblyName>
+;  V14 tmp8         [V14,T25] (  2,  0   )     ref  ->  rbx         class-hnd single-def "impSpillSpecialSideEff" <System.Exception>
+;  V15 tmp9         [V15,T23] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
+;  V16 tmp10        [V16,T24] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
+;* V17 tmp11        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V18 tmp12        [V18    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* 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
Copy link
Owner Author

MihuBot commented Feb 17, 2024

Top method improvements

-7 (-0.80 % of base) - System.Runtime.Loader.AssemblyLoadContext:GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName):System.Reflection.Assembly:this
 ; 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 <System.Runtime.Loader.AssemblyLoadContext>
 ;  V01 arg1         [V01,T11] (  4,  6   )     ref  ->  [rbp-0x80]  class-hnd single-def <System.Reflection.AssemblyName>
 ;  V02 loc0         [V02    ] (  8, 33   )  struct (24) [rbp-0x40]  do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]]>
 ;* V03 loc1         [V03    ] (  0,  0   )  struct (24) zero-ref    ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]]>
 ;  V04 loc2         [V04,T12] (  4,  8   )     ref  ->  r13         class-hnd <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
 ;  V05 loc3         [V05,T06] (  8, 14.50)     ref  ->  [rbp-0x88]  class-hnd <System.Reflection.Assembly>
 ;# 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" <System.String>
 ;  V08 tmp2         [V08,T08] (  3, 12   )     ref  ->  r13         class-hnd exact "impAppendStmt" <System.String>
 ;* 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" <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
 ;* V31 tmp25        [V31    ] (  0,  0   )  struct (24) zero-ref    ld-addr-op "NewObj constructor temp" <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]]>
 ;* 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" <System.MulticastDelegate>
 ;  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" <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
 ;* V60 tmp54        [V60    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline stloc first use temp" <System.Func`3[System.Runtime.Loader.AssemblyLoadContext,System.Reflection.AssemblyName,System.Reflection.Assembly]>
 ;  V61 tmp55        [V61,T03] (  4, 20   )     ref  ->  rcx         class-hnd "Inline return value spill temp" <System.Object>
 ;  V62 tmp56        [V62,T21] (  4,  8   )     ref  ->  rax         class-hnd "Inline stloc first use temp" <System.Object[]>
 ;* 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:<TraceResolvingHandlerInvoked>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:<TraceResolvingHandlerInvoked>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
 ; 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 <System.Runtime.Loader.AssemblyLoadContext>
 ;  V01 arg1         [V01,T07] (  3,  4   )     ref  ->  rbx         class-hnd single-def <System.Reflection.Assembly>
 ;  V02 arg2         [V02,T08] (  3,  4   )     ref  ->  r15         class-hnd single-def <System.String>
 ;  V03 loc0         [V03    ] (  8, 33   )  struct (24) [rbp-0x40]  do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Reflection.Assembly,System.String,long]]>
 ;* V04 loc1         [V04    ] (  0,  0   )  struct (24) zero-ref    ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Reflection.Assembly,System.String,long]]>
 ;  V05 loc2         [V05,T09] (  3,  6   )     ref  ->  rax         class-hnd <System.Func`3[System.Reflection.Assembly,System.String,long]>
 ;  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" <System.Func`3[System.Reflection.Assembly,System.String,long]>
 ;* V09 tmp2         [V09    ] (  0,  0   )  struct (24) zero-ref    ld-addr-op "NewObj constructor temp" <System.Delegate+InvocationListEnumerator`1[System.Func`3[System.Reflection.Assembly,System.String,long]]>
 ;* 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" <System.MulticastDelegate>
 ;  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" <System.Func`3[System.Reflection.Assembly,System.String,long]>
 ;* V18 tmp11        [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline stloc first use temp" <System.Func`3[System.Reflection.Assembly,System.String,long]>
 ;  V19 tmp12        [V19,T03] (  4, 20   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Object>
 ;  V20 tmp13        [V20,T05] (  4,  8   )     ref  ->  rax         class-hnd "Inline stloc first use temp" <System.Object[]>
 ;* 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
 ; 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 <System.ResolveEventHandler>
 ;  V01 arg1         [V01,T29] (  3,  2.50)     ref  ->  r14         class-hnd single-def <System.Reflection.RuntimeAssembly>
 ;  V02 arg2         [V02,T09] (  5,  6.50)     ref  ->  [rbp-0x78]  class-hnd single-def <System.String>
 ;  V03 loc0         [V03,T33] (  2,  2.50)     ref  ->  [rbp-0x80]  class-hnd exact single-def <System.ResolveEventArgs>
 ;  V04 loc1         [V04    ] (  8, 19.50)  struct (24) [rbp-0x40]  do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.ResolveEventHandler]>
 ;* V05 loc2         [V05    ] (  0,  0   )  struct (24) zero-ref    ld-addr-op <System.Delegate+InvocationListEnumerator`1[System.ResolveEventHandler]>
 ;  V06 loc3         [V06,T10] (  4,  8   )     ref  ->  r14         class-hnd exact <System.ResolveEventHandler>
 ;  V07 loc4         [V07,T04] (  7, 14   )     ref  ->  [rbp-0x88]  class-hnd spill-single-def <System.Reflection.Assembly>
 ;  V08 loc5         [V08,T30] (  3,  4.50)     ref  ->  rax         class-hnd exact <System.Reflection.RuntimeAssembly>
 ;# 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" <System.ResolveEventArgs>
 ;* 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" <System.Delegate+InvocationListEnumerator`1[System.ResolveEventHandler]>
 ;  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" <System.ResolveEventHandler>
 ;* 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" <System.MulticastDelegate>
 ;  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" <System.ResolveEventHandler>
 ;* V51 tmp42        [V51    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inline stloc first use temp" <System.ResolveEventHandler>
 ;  V52 tmp43        [V52,T02] (  4, 20   )     ref  ->  rdx         class-hnd "Inline return value spill temp" <System.Object>
 ;  V53 tmp44        [V53,T17] (  4,  8   )     ref  ->  rax         class-hnd "Inline stloc first use temp" <System.Object[]>
 ;* 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:<TraceAssemblyResolveHandlerInvoked>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:<TraceAssemblyResolveHandlerInvoked>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
 ; 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 <System.String>
+;  V00 arg0         [V00,T01] (  4,  3.50)     int  ->  rdi         single-def
+;  V01 arg1         [V01,T00] (  6,  4   )     ref  ->  rsi         class-hnd single-def <System.String>
 ;# 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
Copy link
Owner Author

MihuBot commented Feb 17, 2024

@EgorBo

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

No branches or pull requests

1 participant