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

[JitDiff X64] [stephentoub] Apply OverloadResolutionPriority to Span-based delegating to ROS co ... #778

Open
MihuBot opened this issue Nov 10, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Nov 10, 2024

Job completed in 19 minutes 13 seconds.

Diffs

Found 293 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39730284
Total bytes of diff: 39728256
Total bytes of delta: -2028 (-0.01 % of base)
Total relative delta: -3.15
    diff is an improvement.
    relative diff is an improvement.


Top file regressions (bytes):
           5 : System.Net.Security.dasm (0.00 % of base)

Top file improvements (bytes):
       -1077 : System.Text.Json.dasm (-0.08 % of base)
        -383 : System.Security.Cryptography.dasm (-0.04 % of base)
        -257 : System.Reflection.Metadata.dasm (-0.05 % of base)
        -104 : System.ComponentModel.Composition.dasm (-0.02 % of base)
        -101 : System.Console.dasm (-0.12 % of base)
         -71 : System.Security.Cryptography.Pkcs.dasm (-0.02 % of base)
         -38 : System.Composition.TypedParts.dasm (-0.08 % of base)
          -2 : System.Data.Common.dasm (-0.00 % of base)

9 total files with Code Size differences (8 improved, 1 regressed), 250 unchanged.

Top method regressions (bytes):
           5 (4.90 % of base) : System.Net.Security.dasm - System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this (FullOpts)
           3 (2.34 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this (FullOpts)

Top method improvements (bytes):
        -330 (-31.37 % of base) : System.Security.Cryptography.dasm - Internal.Cryptography.Helpers:AreSamePublicECParameters(System.Security.Cryptography.ECParameters,System.Security.Cryptography.ECParameters):ubyte (FullOpts)
        -247 (-25.81 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
        -135 (-22.84 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this (FullOpts)
        -135 (-23.48 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[int]:Deserialize(System.IO.Stream):int:this (FullOpts)
        -135 (-23.40 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[long]:Deserialize(System.IO.Stream):long:this (FullOpts)
        -135 (-23.40 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[short]:Deserialize(System.IO.Stream):short:this (FullOpts)
        -135 (-24.46 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.__Canon]:Deserialize(System.IO.Stream):System.__Canon:this (FullOpts)
        -135 (-22.96 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Nullable`1[int]]:Deserialize(System.IO.Stream):System.Nullable`1[int]:this (FullOpts)
        -135 (-22.88 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]]:Deserialize(System.IO.Stream):System.Numerics.Vector`1[float]:this (FullOpts)
        -135 (-23.44 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[ubyte]:Deserialize(System.IO.Stream):ubyte:this (FullOpts)
        -101 (-8.95 % of base) : System.Console.dasm - System.TermInfo+Database:ParseExtendedStrings(ubyte[],int,ubyte):System.Collections.Generic.Dictionary`2[System.String,System.String] (FullOpts)
         -71 (-13.71 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.Pkcs.SubjectIdentifier:MatchesCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2):ubyte:this (FullOpts)
         -53 (-5.53 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.DSACertificateExtensions:CopyWithPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.DSA):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
         -38 (-4.16 % of base) : System.Composition.TypedParts.dasm - System.Composition.TypedParts.Discovery.TypeInspector:CheckGenericContractCompatibility(System.Reflection.TypeInfo,System.Reflection.TypeInfo,System.Reflection.TypeInfo) (FullOpts)
         -36 (-13.90 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo:Equals(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo):ubyte:this (FullOpts)
         -36 (-14.88 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo:op_Inequality(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo):ubyte (FullOpts)
         -32 (-13.91 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo:op_Equality(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo):ubyte (FullOpts)
         -10 (-1.05 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.MetadataAggregator:CalculateHeapSizes(System.Collections.Generic.IReadOnlyList`1[int],System.Collections.Generic.IReadOnlyList`1[System.Reflection.Metadata.MetadataReader]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[int]] (FullOpts)
          -2 (-1.79 % of base) : System.Data.Common.dasm - System.Data.DataKey:Equals(System.Data.DataKey):ubyte:this (FullOpts)

Top method regressions (percentages):
           5 (4.90 % of base) : System.Net.Security.dasm - System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this (FullOpts)
           3 (2.34 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this (FullOpts)

Top method improvements (percentages):
        -330 (-31.37 % of base) : System.Security.Cryptography.dasm - Internal.Cryptography.Helpers:AreSamePublicECParameters(System.Security.Cryptography.ECParameters,System.Security.Cryptography.ECParameters):ubyte (FullOpts)
        -247 (-25.81 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
        -135 (-24.46 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.__Canon]:Deserialize(System.IO.Stream):System.__Canon:this (FullOpts)
        -135 (-23.48 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[int]:Deserialize(System.IO.Stream):int:this (FullOpts)
        -135 (-23.44 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[ubyte]:Deserialize(System.IO.Stream):ubyte:this (FullOpts)
        -135 (-23.40 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[long]:Deserialize(System.IO.Stream):long:this (FullOpts)
        -135 (-23.40 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[short]:Deserialize(System.IO.Stream):short:this (FullOpts)
        -135 (-22.96 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Nullable`1[int]]:Deserialize(System.IO.Stream):System.Nullable`1[int]:this (FullOpts)
        -135 (-22.88 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.Numerics.Vector`1[float]]:Deserialize(System.IO.Stream):System.Numerics.Vector`1[float]:this (FullOpts)
        -135 (-22.84 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this (FullOpts)
         -36 (-14.88 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo:op_Inequality(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo):ubyte (FullOpts)
         -32 (-13.91 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo:op_Equality(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo):ubyte (FullOpts)
         -36 (-13.90 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo:Equals(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo):ubyte:this (FullOpts)
         -71 (-13.71 % of base) : System.Security.Cryptography.Pkcs.dasm - System.Security.Cryptography.Pkcs.SubjectIdentifier:MatchesCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2):ubyte:this (FullOpts)
        -101 (-8.95 % of base) : System.Console.dasm - System.TermInfo+Database:ParseExtendedStrings(ubyte[],int,ubyte):System.Collections.Generic.Dictionary`2[System.String,System.String] (FullOpts)
         -53 (-5.53 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.DSACertificateExtensions:CopyWithPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.DSA):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
         -38 (-4.16 % of base) : System.Composition.TypedParts.dasm - System.Composition.TypedParts.Discovery.TypeInspector:CheckGenericContractCompatibility(System.Reflection.TypeInfo,System.Reflection.TypeInfo,System.Reflection.TypeInfo) (FullOpts)
          -2 (-1.79 % of base) : System.Data.Common.dasm - System.Data.DataKey:Equals(System.Data.DataKey):ubyte:this (FullOpts)
         -10 (-1.05 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.MetadataAggregator:CalculateHeapSizes(System.Collections.Generic.IReadOnlyList`1[int],System.Collections.Generic.IReadOnlyList`1[System.Reflection.Metadata.MetadataReader]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[int]] (FullOpts)

21 total methods with Code Size differences (19 improved, 2 regressed), 232793 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Nov 10, 2024

Top method regressions

5 (4.90 % of base) - System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this
 ; Assembly listing for method System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 10 single block inlinees; 3 inlinees without PGO data
+; 0 inlinees with PGO data; 9 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  9,  6   )   byref  ->  rdi         this single-def
 ;  V01 arg1         [V01,T01] (  7,  4   )  struct (24) [rbp+0x10]  do-not-enreg[SF] single-def <System.Net.Security.SslSessionsCache+SslCredKey>
-;  V02 loc0         [V02,T02] (  3,  2.50)     ref  ->  rdx         class-hnd single-def <ubyte[]>
-;  V03 loc1         [V03,T03] (  3,  2.50)     ref  ->  rsi         class-hnd single-def <ubyte[]>
+;  V02 loc0         [V02,T02] (  4,  3   )     ref  ->  rdx         class-hnd single-def <ubyte[]>
+;  V03 loc1         [V03,T03] (  4,  3   )     ref  ->  rsi         class-hnd single-def <ubyte[]>
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V05 tmp1         [V05    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.Span`1[ubyte]>
-;* V06 tmp2         [V06    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V07 tmp3         [V07    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-;* V08 tmp4         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V09 tmp5         [V09    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V10 tmp6         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V11 tmp7         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V12 tmp8         [V12    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
-;* V13 tmp9         [V13    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;  V14 tmp10        [V14,T08] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
+;* V05 tmp1         [V05    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V06 tmp2         [V06    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ubyte]>
+;* V07 tmp3         [V07    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V08 tmp4         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V09 tmp5         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V10 tmp6         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V11 tmp7         [V11    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
+;* V12 tmp8         [V12    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
+;* V13 tmp9         [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;  V14 tmp10        [V14,T06] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
 ;* V15 tmp11        [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V16 tmp12        [V16    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V17 tmp13        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V18 tmp14        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V19 tmp15        [V19    ] (  0,  0   )   byref  ->  zero-ref    "impAppendStmt"
 ;* V20 tmp16        [V20    ] (  0,  0   )   byref  ->  zero-ref    single-def "impAppendStmt"
 ;* V21 tmp17        [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V22 tmp18        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V23 tmp19        [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V24 tmp20        [V24    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V25 tmp21        [V25    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V25 tmp21        [V25    ] (  0,  0   )   byref  ->  zero-ref    "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V26 tmp22        [V26    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
 ;* V27 tmp23        [V27    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V06._reference (fldOffset=0x0)" P-INDEP
 ;* V28 tmp24        [V28    ] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
-;  V29 tmp25        [V29,T06] (  2,  1   )   byref  ->  rdi         single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V30 tmp26        [V30,T10] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
-;  V31 tmp27        [V31,T07] (  2,  1   )   byref  ->  rsi         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;  V32 tmp28        [V32,T09] (  2,  1   )     int  ->  rcx         "field V08._length (fldOffset=0x8)" P-INDEP
-;* V33 tmp29        [V33    ] (  0,  0   )   byref  ->  zero-ref    "field V09._reference (fldOffset=0x0)" P-INDEP
+;* V29 tmp25        [V29    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V30 tmp26        [V30    ] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
+;  V31 tmp27        [V31,T04] (  2,  1   )   byref  ->  rdi         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V32 tmp28        [V32,T08] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
+;* V33 tmp29        [V33    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V09._reference (fldOffset=0x0)" P-INDEP
 ;* V34 tmp30        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V09._length (fldOffset=0x8)" P-INDEP
 ;* V35 tmp31        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
 ;* V36 tmp32        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
-;* V37 tmp33        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V38 tmp34        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V37 tmp33        [V37,T05] (  2,  1   )   byref  ->  rax         single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+;  V38 tmp34        [V38,T07] (  2,  1   )     int  ->  rdx         "field V13._length (fldOffset=0x8)" P-INDEP
 ;* V39 tmp35        [V39    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
 ;* V40 tmp36        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
 ;* V41 tmp37        [V41    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V17._reference (fldOffset=0x0)" P-INDEP
 ;* V42 tmp38        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
 ;* V43 tmp39        [V43    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V21._reference (fldOffset=0x0)" P-INDEP
 ;* V44 tmp40        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
 ;* V45 tmp41        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;* V46 tmp42        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
 ;* V47 tmp43        [V47    ] (  0,  0   )   byref  ->  zero-ref    "field V23._reference (fldOffset=0x0)" P-INDEP
 ;* V48 tmp44        [V48    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
 ;* V49 tmp45        [V49    ] (  0,  0   )   byref  ->  zero-ref    "field V24._reference (fldOffset=0x0)" P-INDEP
 ;* V50 tmp46        [V50    ] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
-;  V51 cse0         [V51,T04] (  2,  2   )     int  ->  rax         "CSE #01: aggressive"
-;  V52 cse1         [V52,T05] (  3,  2.50)     int  ->  rcx         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 0
 
 G_M32327_IG01:
        push     rbp
        mov      rbp, rsp
 						;; size=4 bbWeight=1 PerfScore 1.25
 G_M32327_IG02:
        mov      rdx, gword ptr [rdi]
        mov      rsi, gword ptr [rbp+0x10]
        mov      eax, dword ptr [rdx+0x08]
-       mov      ecx, dword ptr [rsi+0x08]
-       cmp      eax, ecx
+       cmp      eax, dword ptr [rsi+0x08]
        jne      SHORT G_M32327_IG04
-						;; size=17 bbWeight=1 PerfScore 8.25
+						;; size=15 bbWeight=1 PerfScore 9.00
 G_M32327_IG03:
        mov      eax, dword ptr [rdi+0x0C]
        cmp      eax, dword ptr [rbp+0x1C]
        jne      SHORT G_M32327_IG04
        mov      eax, dword ptr [rdi+0x08]
        cmp      eax, dword ptr [rbp+0x18]
        jne      SHORT G_M32327_IG04
        movzx    rax, byte  ptr [rdi+0x10]
        cmp      al, byte  ptr [rbp+0x20]
        jne      SHORT G_M32327_IG04
        movzx    rax, byte  ptr [rdi+0x11]
        cmp      al, byte  ptr [rbp+0x21]
        jne      SHORT G_M32327_IG04
        movzx    rax, byte  ptr [rdi+0x12]
        cmp      al, byte  ptr [rbp+0x22]
        jne      SHORT G_M32327_IG04
        movzx    rax, byte  ptr [rdi+0x13]
        cmp      al, byte  ptr [rbp+0x23]
        je       SHORT G_M32327_IG06
 						;; size=52 bbWeight=0.50 PerfScore 15.00
 G_M32327_IG04:
        xor      eax, eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M32327_IG05:
        pop      rbp
        ret      
 						;; size=2 bbWeight=0.50 PerfScore 0.75
 G_M32327_IG06:
        lea      rdi, bword ptr [rdx+0x10]
-       add      rsi, 16
-       mov      edx, ecx
+       mov      edx, dword ptr [rdx+0x08]
+       lea      rax, bword ptr [rsi+0x10]
+       mov      edx, dword ptr [rsi+0x08]
+       mov      rsi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
        call     [rax]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
        nop      
-						;; size=23 bbWeight=0.50 PerfScore 2.25
+						;; size=30 bbWeight=0.50 PerfScore 4.38
 G_M32327_IG07:
        pop      rbp
        ret      
 						;; size=2 bbWeight=0.50 PerfScore 0.75
 
-; Total bytes of code 102, prolog size 4, PerfScore 28.38, instruction count 37, allocated bytes for code 102 (MethodHash=541c81b8) for method System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this (FullOpts)
+; Total bytes of code 107, prolog size 4, PerfScore 31.25, instruction count 38, allocated bytes for code 107 (MethodHash=541c81b8) for method System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this (FullOpts)
 ; ============================================================
3 (2.34 % of base) - System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this
 ; Assembly listing for method System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 12 single block inlinees; 5 inlinees without PGO data
+; 0 inlinees with PGO data; 11 single block inlinees; 5 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T00] ( 12,  8.50)   byref  ->  rdi         this single-def
+;  V00 this         [V00,T00] ( 13,  9   )   byref  ->  rdi         this single-def
 ;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[ubyte]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.Span`1[ubyte]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;  V05 tmp3         [V05,T06] (  2,  2   )     int  ->  rax         "impAppendStmt"
-;  V06 tmp4         [V06,T01] (  4,  4   )     ref  ->  rax         class-hnd single-def "Inlining Arg" <ubyte[]>
-;  V07 tmp5         [V07,T02] (  4,  4   )     int  ->  rcx         "Inlining Arg"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-;* V09 tmp7         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V10 tmp8         [V10    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V12 tmp10        [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V13 tmp11        [V13    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
-;* V14 tmp12        [V14    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;  V15 tmp13        [V15,T09] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
+;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ubyte]>
+;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;  V06 tmp4         [V06,T05] (  2,  2   )     int  ->  rax         "impAppendStmt"
+;  V07 tmp5         [V07,T01] (  4,  4   )     ref  ->  rax         class-hnd single-def "Inlining Arg" <ubyte[]>
+;  V08 tmp6         [V08,T02] (  4,  4   )     int  ->  rcx         "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V10 tmp8         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
+;* V13 tmp11        [V13    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
+;* V14 tmp12        [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;  V15 tmp13        [V15,T08] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
 ;* V16 tmp14        [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V17 tmp15        [V17    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V18 tmp16        [V18    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V19 tmp17        [V19    ] (  0,  0   )   byref  ->  zero-ref    "impAppendStmt"
 ;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    single-def "impAppendStmt"
 ;* V21 tmp19        [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V22 tmp20        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V23 tmp21        [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V24 tmp22        [V24    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
 ;* V25 tmp23        [V25    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V26 tmp24        [V26    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V27 tmp25        [V27    ] (  0,  0   )   byref  ->  zero-ref    "field V01._reference (fldOffset=0x0)" P-INDEP
 ;* V28 tmp26        [V28    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V29 tmp27        [V29    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V29 tmp27        [V29    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
 ;* V30 tmp28        [V30    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;* V31 tmp29        [V31    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V04._reference (fldOffset=0x0)" P-INDEP
 ;* V32 tmp30        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V04._length (fldOffset=0x8)" P-INDEP
-;  V33 tmp31        [V33,T07] (  3,  1.50)   byref  ->  rax         "field V08._reference (fldOffset=0x0)" P-INDEP
-;  V34 tmp32        [V34,T08] (  3,  1.50)     int  ->  rcx         "field V08._length (fldOffset=0x8)" P-INDEP
-;* V35 tmp33        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V09._reference (fldOffset=0x0)" P-INDEP
-;* V36 tmp34        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V09._length (fldOffset=0x8)" P-INDEP
-;* V37 tmp35        [V37    ] (  0,  0   )   byref  ->  zero-ref    "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V33 tmp31        [V33    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V34 tmp32        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
+;  V35 tmp33        [V35,T06] (  3,  1.50)   byref  ->  rax         "field V09._reference (fldOffset=0x0)" P-INDEP
+;  V36 tmp34        [V36,T07] (  3,  1.50)     int  ->  rcx         "field V09._length (fldOffset=0x8)" P-INDEP
+;* V37 tmp35        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
 ;* V38 tmp36        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
 ;* V39 tmp37        [V39    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
 ;* V40 tmp38        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
-;* V41 tmp39        [V41    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V42 tmp40        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
+;* V41 tmp39        [V41    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V42 tmp40        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
 ;* V43 tmp41        [V43    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V44 tmp42        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
 ;* V45 tmp43        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V18._reference (fldOffset=0x0)" P-INDEP
 ;* V46 tmp44        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0x8)" P-INDEP
 ;* V47 tmp45        [V47    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V21._reference (fldOffset=0x0)" P-INDEP
 ;* V48 tmp46        [V48    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
 ;* V49 tmp47        [V49    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;* V50 tmp48        [V50    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
 ;* V51 tmp49        [V51    ] (  0,  0   )   byref  ->  zero-ref    "field V23._reference (fldOffset=0x0)" P-INDEP
 ;* V52 tmp50        [V52    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
 ;* V53 tmp51        [V53    ] (  0,  0   )   byref  ->  zero-ref    "field V24._reference (fldOffset=0x0)" P-INDEP
 ;* V54 tmp52        [V54    ] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
 ;* V55 tmp53        [V55    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V25._reference (fldOffset=0x0)" P-INDEP
 ;* V56 tmp54        [V56    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
 ;* V57 tmp55        [V57    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V26._reference (fldOffset=0x0)" P-INDEP
 ;* V58 tmp56        [V58    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
-;  V59 cse0         [V59,T05] (  3,  2.50)     int  ->  rax         "CSE #01: aggressive"
-;  V60 rat0         [V60,T03] (  3,  3   )   byref  ->  rax         "ReplaceWithLclVar is creating a new local variable"
-;  V61 rat1         [V61,T04] (  3,  3   )    long  ->  rcx         "ReplaceWithLclVar is creating a new local variable"
+;  V59 rat0         [V59,T03] (  3,  3   )   byref  ->  rax         "ReplaceWithLclVar is creating a new local variable"
+;  V60 rat1         [V60,T04] (  3,  3   )    long  ->  rcx         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 0
 
 G_M23478_IG01:
        push     rbp
        mov      rbp, rsp
 						;; size=4 bbWeight=1 PerfScore 1.25
 G_M23478_IG02:
        mov      eax, dword ptr [rdi+0x08]
        cmp      eax, dword ptr [rdi+0x0C]
        jle      SHORT G_M23478_IG04
 						;; size=8 bbWeight=1 PerfScore 6.00
 G_M23478_IG03:
+       mov      eax, dword ptr [rdi+0x08]
        mov      dword ptr [rdi+0x0C], eax
-						;; size=3 bbWeight=0.50 PerfScore 0.50
+						;; size=6 bbWeight=0.50 PerfScore 1.50
 G_M23478_IG04:
        cmp      byte  ptr [rdi+0x15], 0
        je       SHORT G_M23478_IG08
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M23478_IG05:
        mov      byte  ptr [rdi+0x15], 0
        mov      rax, gword ptr [rdi]
        mov      ecx, dword ptr [rdi+0x08]
        test     rax, rax
        je       SHORT G_M23478_IG06
        cmp      dword ptr [rax+0x08], ecx
        jb       SHORT G_M23478_IG09
        add      rax, 16
        jmp      SHORT G_M23478_IG07
 						;; size=26 bbWeight=0.50 PerfScore 6.25
 G_M23478_IG06:
        test     ecx, ecx
        jne      SHORT G_M23478_IG09
        xor      rax, rax
        xor      ecx, ecx
 						;; size=8 bbWeight=0.50 PerfScore 0.88
 G_M23478_IG07:
        cmp      ecx, 3
        jl       SHORT G_M23478_IG08
        mov      rcx, 0xD1FFAB1E      ; static handle
        movzx    rdx, word  ptr [rax]
        movzx    rax, word  ptr [rax+0x01]
        movzx    rsi, word  ptr [rcx]
        movzx    rcx, word  ptr [rcx+0x01]
        xor      edx, esi
        xor      eax, ecx
        or       eax, edx
        sete     al
        movzx    rax, al
        test     eax, eax
        je       SHORT G_M23478_IG08
        mov      byte  ptr [rdi+0x14], 3
        mov      eax, dword ptr [rdi+0x08]
        add      eax, -3
        mov      dword ptr [rdi+0x08], eax
 						;; size=58 bbWeight=0.50 PerfScore 8.50
 G_M23478_IG08:
        pop      rbp
        ret      
 						;; size=2 bbWeight=1 PerfScore 1.50
 G_M23478_IG09:
        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 128, prolog size 4, PerfScore 28.88, instruction count 44, allocated bytes for code 128 (MethodHash=3ab0a449) for method System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this (FullOpts)
+; Total bytes of code 131, prolog size 4, PerfScore 29.88, instruction count 45, allocated bytes for code 131 (MethodHash=3ab0a449) for method System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this (FullOpts)
 ; ============================================================

@MihuBot
Copy link
Owner Author

MihuBot commented Nov 10, 2024

Top method improvements

-247 (-25.81 % of base) - System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]
 ; Assembly listing for method System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 8 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 4 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 TypeCtx      [V00,T08] ( 15, 10.71)    long  ->  rbx         single-def
-;  V01 arg0         [V01,T11] (  5,  7   )     ref  ->  r15         class-hnd single-def <System.__Canon[]>
-;  V02 loc0         [V02,T18] (  7,  7.29)     ref  ->  r13         class-hnd exact single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon][]>
-;  V03 loc1         [V03,T35] (  7,  1.24)     int  ->  r12        
+;  V00 TypeCtx      [V00,T11] ( 11,  5.91)    long  ->  r15         single-def
+;  V01 arg0         [V01,T07] (  5,  7   )     ref  ->  rbx         class-hnd single-def <System.__Canon[]>
+;  V02 loc0         [V02,T12] (  7,  7.29)     ref  ->  r13         class-hnd exact single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon][]>
+;  V03 loc1         [V03,T29] (  7,  1.24)     int  ->  r12        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V05 tmp1         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;* V06 tmp2         [V06    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V07 tmp3         [V07,T03] (  8, 17.60)    long  ->  rdi         "spilling helperCall"
-;* V08 tmp4         [V08    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[System.__Canon]>
+;* V07 tmp3         [V07    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V08 tmp4         [V08    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[System.__Canon]>
 ;* V09 tmp5         [V09    ] (  0,  0   )  struct ( 8) zero-ref    "Strict ordering of exceptions for Array store" <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
 ;* V10 tmp6         [V10    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;  V11 tmp7         [V11,T23] (  4,  4.40)    long  ->  rdi         "spilling helperCall"
-;* V12 tmp8         [V12    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;  V13 tmp9         [V13,T00] ( 10, 28   )     ref  ->  [rbp-0x48]  class-hnd "Inlining Arg" <System.__Canon>
-;* V14 tmp10        [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
-;  V15 tmp11        [V15,T07] (  6, 12.80)    long  ->  rdi         "Inlining Arg"
+;* V11 tmp7         [V11    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V12 tmp8         [V12    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
+;  V13 tmp9         [V13,T00] (  8, 24   )     ref  ->  rcx         class-hnd "Inlining Arg" <System.__Canon>
+;* V14 tmp10        [V14    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.__Canon]>
+;* V15 tmp11        [V15    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp12        [V16    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V17 tmp13        [V17,T13] (  6,  8   )    long  ->  rdx         "spilling helperCall"
-;* V18 tmp14        [V18    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V19 tmp15        [V19    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V20 tmp16        [V20    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V21 tmp17        [V21    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[System.__Canon]>
-;* V22 tmp18        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[System.__Canon]>
-;* V23 tmp19        [V23    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.__Canon]>
-;* V24 tmp20        [V24    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V25 tmp21        [V25    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V26 tmp22        [V26    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V27 tmp23        [V27    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;* V28 tmp24        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V29 tmp25        [V29    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V30 tmp26        [V30    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V31 tmp27        [V31    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V32 tmp28        [V32    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V33 tmp29        [V33    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V34 tmp30        [V34    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V35 tmp31        [V35    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V36 tmp32        [V36    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V37 tmp33        [V37    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V38 tmp34        [V38    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
-;* V39 tmp35        [V39    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
-;* V40 tmp36        [V40    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;* V41 tmp37        [V41    ] (  0,  0   )   byref  ->  zero-ref    "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V42 tmp38        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;  V43 tmp39        [V43,T15] (  4,  8   )     ref  ->  rax         "field V09.array (fldOffset=0x0)" P-INDEP
-;* V44 tmp40        [V44    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V45 tmp41        [V45    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
-;  V46 tmp42        [V46,T12] (  6,  8   )   byref  ->  [rbp-0x50]  "field V14._reference (fldOffset=0x0)" P-INDEP
-;  V47 tmp43        [V47,T14] (  6,  8   )     int  ->  [rbp-0x34]  "field V14._length (fldOffset=0x8)" P-INDEP
-;* V48 tmp44        [V48    ] (  0,  0   )   byref  ->  zero-ref    "field V21._reference (fldOffset=0x0)" P-INDEP
-;* V49 tmp45        [V49    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
-;* V50 tmp46        [V50    ] (  0,  0   )   byref  ->  zero-ref    "field V22._reference (fldOffset=0x0)" P-INDEP
-;* V51 tmp47        [V51    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
-;  V52 tmp48        [V52,T16] (  4,  8   )   byref  ->  [rbp-0x58]  "field V23._reference (fldOffset=0x0)" P-INDEP
-;  V53 tmp49        [V53,T17] (  4,  8   )     int  ->  [rbp-0x38]  "field V23._length (fldOffset=0x8)" P-INDEP
-;  V54 tmp50        [V54,T30] (  2,  2   )   byref  ->  r15         "field V28._reference (fldOffset=0x0)" P-INDEP
-;  V55 tmp51        [V55,T32] (  2,  2   )     int  ->  r14         "field V28._length (fldOffset=0x8)" P-INDEP
-;* V56 tmp52        [V56    ] (  0,  0   )   byref  ->  zero-ref    "field V34._reference (fldOffset=0x0)" P-INDEP
-;* V57 tmp53        [V57    ] (  0,  0   )     int  ->  zero-ref    "field V34._length (fldOffset=0x8)" P-INDEP
-;* V58 tmp54        [V58    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V35._reference (fldOffset=0x0)" P-INDEP
-;* V59 tmp55        [V59    ] (  0,  0   )     int  ->  zero-ref    "field V35._length (fldOffset=0x8)" P-INDEP
-;  V60 tmp56        [V60,T31] (  2,  2   )   byref  ->  r15         single-def "field V36._reference (fldOffset=0x0)" P-INDEP
-;  V61 tmp57        [V61,T33] (  2,  2   )     int  ->  r14         "field V36._length (fldOffset=0x8)" P-INDEP
-;  V62 tmp58        [V62,T27] (  2,  4   )    long  ->  rdi         "argument with side effect"
-;  V63 tmp59        [V63,T05] (  4, 16   )    long  ->  rdi         "argument with side effect"
-;  V64 tmp60        [V64,T28] (  2,  4   )    long  ->  rdi         "argument with side effect"
-;  V65 cse0         [V65,T24] (  4,  4.29)    long  ->  registers   hoist multi-def "CSE #02: moderate"
-;  V66 cse1         [V66,T29] (  6,  3.54)     int  ->  r14         "CSE #01: moderate"
-;  V67 rat0         [V67,T04] (  5, 16.09)    long  ->  [rbp-0x40]  "Strength reduced derived IV"
-;  V68 rat1         [V68,T09] (  4, 12.13)     int  ->  r14         "Trip count IV"
-;  V69 rat2         [V69,T25] (  3,  4   )    long  ->  rdi         "runtime lookup"
-;  V70 rat3         [V70,T19] (  3,  5.60)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V71 rat4         [V71,T36] (  3,  1   )    long  ->  r12         "runtime lookup"
-;  V72 rat5         [V72,T34] (  3,  1.40)    long  ->  r12         "fgMakeTemp is creating a new local variable"
-;  V73 rat6         [V73,T10] (  3, 11.09)    long  ->  rdx         "fgMakeTemp is creating a new local variable"
-;  V74 rat7         [V74,T01] (  3, 22.18)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V75 rat8         [V75,T06] (  3, 15.84)    long  ->  rdi         "runtime lookup"
-;  V76 rat9         [V76,T02] (  3, 22.18)    long  ->   r8         "fgMakeTemp is creating a new local variable"
-;  V77 rat10        [V77,T40] (  3,  0.16)    long  ->  rax         "runtime lookup"
-;  V78 rat11        [V78,T37] (  3,  0.22)    long  ->  rax         "fgMakeTemp is creating a new local variable"
-;  V79 rat12        [V79,T42] (  3,  0.11)    long  ->  rdx         "fgMakeTemp is creating a new local variable"
-;  V80 rat13        [V80,T38] (  3,  0.22)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V81 rat14        [V81,T41] (  3,  0.16)    long  ->  rdi         "runtime lookup"
-;  V82 rat15        [V82,T39] (  3,  0.22)    long  ->  rdx         "fgMakeTemp is creating a new local variable"
-;  V83 rat16        [V83,T20] (  3,  5.60)    long  ->  rdi         "spilling expr"
-;  V84 rat17        [V84,T22] (  3,  4.48)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
-;  V85 rat18        [V85,T26] (  3,  4   )    long  ->  rdi         "runtime lookup"
-;  V86 rat19        [V86,T21] (  3,  5.60)    long  ->  rax         "fgMakeTemp is creating a new local variable"
+;* V17 tmp13        [V17    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V18 tmp14        [V18    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
+;* V19 tmp15        [V19    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V20 tmp16        [V20    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V21 tmp17        [V21    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V22 tmp18        [V22    ] (  0,  0   )   byref  ->  zero-ref    "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V23 tmp19        [V23    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
+;  V24 tmp20        [V24,T10] (  4,  8   )     ref  ->  rax         "field V09.array (fldOffset=0x0)" P-INDEP
+;* V25 tmp21        [V25    ] (  0,  0   )   byref  ->  zero-ref    "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp22        [V26    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
+;  V27 tmp23        [V27,T08] (  6,  8   )   byref  ->  [rbp-0x48]  "field V14._reference (fldOffset=0x0)" P-INDEP
+;  V28 tmp24        [V28,T09] (  6,  8   )     int  ->  [rbp-0x34]  "field V14._length (fldOffset=0x8)" P-INDEP
+;  V29 tmp25        [V29,T26] (  2,  2   )   byref  ->  rbx         "field V18._reference (fldOffset=0x0)" P-INDEP
+;  V30 tmp26        [V30,T27] (  2,  2   )     int  ->  r14         "field V18._length (fldOffset=0x8)" P-INDEP
+;  V31 tmp27        [V31,T22] (  2,  4   )    long  ->  rdi         "argument with side effect"
+;  V32 tmp28        [V32,T02] (  6, 17.60)    long  ->  rdi         "argument with side effect"
+;  V33 tmp29        [V33,T04] (  4, 16   )    long  ->  rdi         "argument with side effect"
+;  V34 tmp30        [V34,T17] (  3,  4.40)    long  ->  rdi         "argument with side effect"
+;  V35 tmp31        [V35,T23] (  2,  4   )    long  ->  rdi         "argument with side effect"
+;  V36 cse0         [V36,T18] (  4,  4.29)    long  ->  registers   hoist multi-def "CSE #02: moderate"
+;  V37 cse1         [V37,T25] (  6,  3.54)     int  ->  r14         "CSE #01: moderate"
+;* V38 cse2         [V38,T24] (  0,  0   )    long  ->  zero-ref    "CSE #03: aggressive"
+;  V39 rat0         [V39,T03] (  5, 16.09)    long  ->  [rbp-0x40]  "Strength reduced derived IV"
+;  V40 rat1         [V40,T06] (  4, 12.13)     int  ->  r14         "Trip count IV"
+;  V41 rat2         [V41,T19] (  3,  4   )    long  ->  rdi         "runtime lookup"
+;  V42 rat3         [V42,T13] (  3,  5.60)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V43 rat4         [V43,T30] (  3,  1   )    long  ->  r12         "runtime lookup"
+;  V44 rat5         [V44,T28] (  3,  1.40)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;  V45 rat6         [V45,T05] (  3, 15.84)    long  ->  rdi         "runtime lookup"
+;  V46 rat7         [V46,T01] (  3, 22.18)    long  ->  rcx         "fgMakeTemp is creating a new local variable"
+;  V47 rat8         [V47,T33] (  3,  0.16)    long  ->  rdx         "runtime lookup"
+;  V48 rat9         [V48,T31] (  3,  0.22)    long  ->  rdx         "fgMakeTemp is creating a new local variable"
+;  V49 rat10        [V49,T34] (  3,  0.16)    long  ->  rdi         "runtime lookup"
+;  V50 rat11        [V50,T32] (  3,  0.22)    long  ->  rdx         "fgMakeTemp is creating a new local variable"
+;  V51 rat12        [V51,T20] (  3,  4   )    long  ->  rdi         "runtime lookup"
+;  V52 rat13        [V52,T14] (  3,  5.60)    long  ->  rdi         "spilling expr"
+;  V53 rat14        [V53,T16] (  3,  4.48)    long  ->  rdi         "fgMakeTemp is creating a new local variable"
+;  V54 rat15        [V54,T21] (  3,  4   )    long  ->  rdi         "runtime lookup"
+;  V55 rat16        [V55,T15] (  3,  5.60)    long  ->  rax         "fgMakeTemp is creating a new local variable"
 ;
-; Lcl frame size = 56
+; Lcl frame size = 40
 
 G_M768_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 56
-       lea      rbp, [rsp+0x60]
+       sub      rsp, 40
+       lea      rbp, [rsp+0x50]
        mov      qword ptr [rbp-0x30], rdi
-       mov      rbx, rdi
-       mov      r15, rsi
+       mov      r15, rdi
+       mov      rbx, rsi
 						;; size=29 bbWeight=1 PerfScore 8.25
 G_M768_IG02:
-       mov      rdi, qword ptr [rbx+0x18]
+       mov      rdi, qword ptr [r15+0x18]
        mov      rdi, qword ptr [rdi+0x10]
        test     rdi, rdi
        je       SHORT G_M768_IG08
 						;; size=13 bbWeight=1 PerfScore 5.25
 G_M768_IG03:
-       mov      r14d, dword ptr [r15+0x08]
+       mov      r14d, dword ptr [rbx+0x08]
        mov      esi, r14d
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r13, rax
        xor      r12d, r12d
        test     r14d, r14d
-       jle      G_M768_IG16
+       jle      G_M768_IG14
 						;; size=27 bbWeight=1 PerfScore 5.00
 G_M768_IG04:
        cmp      dword ptr [r13+0x08], r14d
-       jl       G_M768_IG24
-       mov      rdi, qword ptr [rbx+0x18]
-       mov      r12, qword ptr [rdi+0x18]
+       jl       G_M768_IG21
+       mov      rdi, qword ptr [r15+0x18]
+       mov      r12, qword ptr [rdi+0x20]
        test     r12, r12
        je       SHORT G_M768_IG09
 						;; size=23 bbWeight=0.25 PerfScore 2.31
 G_M768_IG05:
        mov      eax, 16
 						;; size=5 bbWeight=0.25 PerfScore 0.06
 G_M768_IG06:
-       mov      rdi, r12
        mov      qword ptr [rbp-0x40], rax
-       mov      rcx, gword ptr [r15+rax]
-       mov      gword ptr [rbp-0x48], rcx
+       mov      rcx, gword ptr [rbx+rax]
        test     rcx, rcx
        jne      SHORT G_M768_IG10
-						;; size=20 bbWeight=3.96 PerfScore 21.78
+						;; size=13 bbWeight=3.96 PerfScore 16.83
 G_M768_IG07:
-       xor      r8, r8
-       mov      bword ptr [rbp-0x50], r8
-       xor      r9d, r9d
-       mov      dword ptr [rbp-0x34], r9d
-       jmp      SHORT G_M768_IG12
-						;; size=16 bbWeight=1.98 PerfScore 8.91
+       xor      rdx, rdx
+       mov      bword ptr [rbp-0x48], rdx
+       xor      r8d, r8d
+       mov      dword ptr [rbp-0x34], r8d
+       mov      rdx, bword ptr [rbp-0x48]
+       mov      r8d, dword ptr [rbp-0x34]
+       jmp      SHORT G_M768_IG11
+						;; size=23 bbWeight=1.98 PerfScore 12.87
 G_M768_IG08:
-       mov      rdi, rbx
+       mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
        call     [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
        mov      rdi, rax
        jmp      SHORT G_M768_IG03
 						;; size=30 bbWeight=0.20 PerfScore 1.20
 G_M768_IG09:
-       mov      rdi, rbx
+       mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
        call     [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
        mov      r12, rax
        jmp      SHORT G_M768_IG05
 						;; size=30 bbWeight=0.05 PerfScore 0.30
 G_M768_IG10:
-       mov      rsi, qword ptr [rdi+0x30]
-       mov      rsi, qword ptr [rsi]
-       mov      rdx, qword ptr [rsi+0x10]
-       test     rdx, rdx
-       je       G_M768_IG38
-						;; size=20 bbWeight=1.98 PerfScore 14.35
+       lea      rdx, bword ptr [rcx+0x10]
+       mov      r8d, dword ptr [rcx+0x08]
+						;; size=8 bbWeight=1.98 PerfScore 4.95
 G_M768_IG11:
-       mov      rcx, gword ptr [rbp-0x48]
-       cmp      qword ptr [rcx], rdx
-       jne      G_M768_IG40
-       lea      r8, bword ptr [rcx+0x10]
-       mov      r9d, dword ptr [rcx+0x08]
-       mov      bword ptr [rbp-0x50], r8
-       mov      dword ptr [rbp-0x34], r9d
-						;; size=29 bbWeight=1.98 PerfScore 18.81
-G_M768_IG12:
-       mov      rdi, qword ptr [rbx+0x18]
-       mov      rdi, qword ptr [rdi+0x20]
-       test     rdi, rdi
-       je       G_M768_IG22
-						;; size=17 bbWeight=3.96 PerfScore 20.79
-G_M768_IG13:
-       mov      r8, bword ptr [rbp-0x50]
-       mov      bword ptr [rbp-0x58], r8
-       mov      r9d, dword ptr [rbp-0x34]
-       mov      dword ptr [rbp-0x38], r9d
+       mov      rdi, r12
        mov      rsi, qword ptr [rdi+0x18]
-       mov      r8, qword ptr [rsi+0x18]
-       test     r8, r8
-       je       G_M768_IG23
-						;; size=33 bbWeight=3.96 PerfScore 36.63
-G_M768_IG14:
-       mov      rcx, bword ptr [rbp-0x58]
-       mov      rdi, r8
-						;; size=7 bbWeight=3.17 PerfScore 3.96
-G_M768_IG15:
-       mov      rsi, rcx
-       mov      edx, dword ptr [rbp-0x38]
+       mov      rcx, qword ptr [rsi+0x10]
+       test     rcx, rcx
+       je       G_M768_IG20
+						;; size=20 bbWeight=3.96 PerfScore 21.78
+G_M768_IG12:
+       mov      rdi, rcx
+						;; size=3 bbWeight=3.17 PerfScore 0.79
+G_M768_IG13:
+       mov      rsi, rdx
+       mov      edx, r8d
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
        call     [rcx]System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
        mov      rcx, qword ptr [rbp-0x40]
        lea      rdi, bword ptr [rcx+r13]
        mov      rsi, rax
        call     CORINFO_HELP_ASSIGN_REF
        mov      rcx, qword ptr [rbp-0x40]
        add      rcx, 8
        dec      r14d
        mov      rax, rcx
        jne      G_M768_IG06
-						;; size=54 bbWeight=3.96 PerfScore 39.60
-G_M768_IG16:
-       lea      r15, bword ptr [r13+0x10]
+						;; size=54 bbWeight=3.96 PerfScore 36.63
+G_M768_IG14:
+       lea      rbx, bword ptr [r13+0x10]
        mov      r14d, dword ptr [r13+0x08]
-       mov      rdi, qword ptr [rbx+0x18]
+       mov      rdi, qword ptr [r15+0x18]
        cmp      qword ptr [rdi+0x08], 48
-       jle      G_M768_IG36
+       jle      G_M768_IG30
 						;; size=23 bbWeight=1 PerfScore 8.50
-G_M768_IG17:
+G_M768_IG15:
        mov      rdi, qword ptr [rdi+0x30]
        test     rdi, rdi
-       je       G_M768_IG36
+       je       G_M768_IG30
 						;; size=13 bbWeight=0.80 PerfScore 2.60
-G_M768_IG18:
+G_M768_IG16:
        mov      rsi, qword ptr [rdi+0x18]
-       mov      rax, qword ptr [rsi+0x18]
+       mov      rax, qword ptr [rsi+0x10]
        test     rax, rax
-       je       G_M768_IG37
+       je       G_M768_IG31
 						;; size=17 bbWeight=1 PerfScore 5.25
-G_M768_IG19:
+G_M768_IG17:
        mov      rdi, rax
 						;; size=3 bbWeight=0.80 PerfScore 0.20
-G_M768_IG20:
-       mov      rsi, r15
+G_M768_IG18:
+       mov      rsi, rbx
        mov      edx, r14d
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.ImmutableArray:Create[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]
        call     [rax]System.Collections.Immutable.ImmutableArray:Create[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]
        nop      
 						;; size=19 bbWeight=1 PerfScore 4.00
-G_M768_IG21:
-       add      rsp, 56
+G_M768_IG19:
+       add      rsp, 40
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
-G_M768_IG22:
-       mov      rdi, rbx
+G_M768_IG20:
+       mov      bword ptr [rbp-0x48], rdx
+       mov      dword ptr [rbp-0x34], r8d
        mov      rsi, 0xD1FFAB1E      ; global ptr
        mov      rcx, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
        call     [rcx]CORINFO_HELP_RUNTIMEHANDLE_METHOD
        mov      rdi, rax
+       mov      rdx, bword ptr [rbp-0x48]
+       mov      r8d, dword ptr [rbp-0x34]
        jmp      G_M768_IG13
-						;; size=33 bbWeight=0.79 PerfScore 4.75
+						;; size=46 bbWeight=0.79 PerfScore 7.72
+G_M768_IG21:
+       mov      edi, r12d
+       mov      rcx, gword ptr [rbx+8*rdi+0x10]
+       test     rcx, rcx
+       je       SHORT G_M768_IG23
+						;; size=13 bbWeight=0.04 PerfScore 0.14
+G_M768_IG22:
+       lea      rdx, bword ptr [rcx+0x10]
+       mov      rax, rdx
+       mov      r8d, dword ptr [rcx+0x08]
+       mov      ecx, r8d
+       jmp      SHORT G_M768_IG24
+						;; size=16 bbWeight=0.02 PerfScore 0.10
 G_M768_IG23:
-       mov      rsi, 0xD1FFAB1E      ; global ptr
-       mov      r8, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       call     [r8]CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       mov      rdi, rax
-       mov      rcx, bword ptr [rbp-0x58]
-       jmp      G_M768_IG15
-						;; size=35 bbWeight=0.79 PerfScore 5.35
+       xor      rax, rax
+       mov      bword ptr [rbp-0x48], rax
+       xor      ecx, ecx
+       mov      dword ptr [rbp-0x34], ecx
+       mov      rax, bword ptr [rbp-0x48]
+       mov      ecx, dword ptr [rbp-0x34]
+						;; size=18 bbWeight=0.02 PerfScore 0.09
 G_M768_IG24:
-       mov      rdi, qword ptr [rbx+0x18]
-       mov      rax, qword ptr [rdi+0x18]
-       test     rax, rax
-       je       SHORT G_M768_IG27
+       mov      rdi, qword ptr [r15+0x18]
+       mov      rdx, qword ptr [rdi+0x20]
+       test     rdx, rdx
+       je       SHORT G_M768_IG28
 						;; size=13 bbWeight=0.04 PerfScore 0.21
 G_M768_IG25:
-       mov      rdi, rax
-       mov      esi, r12d
-       mov      rcx, gword ptr [r15+8*rsi+0x10]
-       mov      rax, rcx
-       mov      gword ptr [rbp-0x48], rax
-       test     rax, rax
-       jne      SHORT G_M768_IG28
-						;; size=23 bbWeight=0.04 PerfScore 0.20
-G_M768_IG26:
-       xor      rcx, rcx
-       mov      bword ptr [rbp-0x50], rcx
-       xor      edx, edx
-       mov      dword ptr [rbp-0x34], edx
-       jmp      SHORT G_M768_IG30
-						;; size=13 bbWeight=0.02 PerfScore 0.09
-G_M768_IG27:
-       mov      rdi, rbx
-       mov      rsi, 0xD1FFAB1E      ; global ptr
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       call     [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       jmp      SHORT G_M768_IG25
-						;; size=27 bbWeight=0.01 PerfScore 0.05
-G_M768_IG28:
-       mov      rsi, qword ptr [rdi+0x30]
-       mov      rsi, qword ptr [rsi]
+       mov      rdi, rdx
+       mov      rsi, qword ptr [rdi+0x18]
        mov      rdx, qword ptr [rsi+0x10]
        test     rdx, rdx
-       je       G_M768_IG39
-						;; size=20 bbWeight=0.02 PerfScore 0.15
-G_M768_IG29:
-       mov      rax, gword ptr [rbp-0x48]
-       cmp      qword ptr [rax], rdx
-       jne      G_M768_IG40
-       lea      r8, bword ptr [rax+0x10]
-       mov      rcx, r8
-       mov      r9d, dword ptr [rax+0x08]
-       mov      edx, r9d
-       mov      bword ptr [rbp-0x50], rcx
-       mov      dword ptr [rbp-0x34], edx
-						;; size=34 bbWeight=0.02 PerfScore 0.20
-G_M768_IG30:
-       mov      rdi, qword ptr [rbx+0x18]
-       mov      rdi, qword ptr [rdi+0x20]
-       test     rdi, rdi
-       je       SHORT G_M768_IG34
-						;; size=13 bbWeight=0.04 PerfScore 0.21
-G_M768_IG31:
-       mov      rcx, bword ptr [rbp-0x50]
-       mov      bword ptr [rbp-0x58], rcx
-       mov      edx, dword ptr [rbp-0x34]
-       mov      dword ptr [rbp-0x38], edx
-       mov      rsi, qword ptr [rdi+0x18]
-       mov      rdx, qword ptr [rsi+0x18]
-       test     rdx, rdx
-       je       SHORT G_M768_IG35
-						;; size=27 bbWeight=0.04 PerfScore 0.37
-G_M768_IG32:
-       mov      rax, bword ptr [rbp-0x58]
-       mov      ecx, dword ptr [rbp-0x38]
+       je       SHORT G_M768_IG29
+						;; size=16 bbWeight=0.04 PerfScore 0.22
+G_M768_IG26:
        mov      rdi, rdx
-						;; size=10 bbWeight=0.03 PerfScore 0.07
-G_M768_IG33:
+						;; size=3 bbWeight=0.03 PerfScore 0.01
+G_M768_IG27:
        mov      rsi, rax
        mov      edx, ecx
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
        call     [rax]System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
        cmp      r12d, dword ptr [r13+0x08]
-       jae      G_M768_IG41
+       jae      G_M768_IG32
        mov      edi, r12d
        lea      rdi, bword ptr [r13+8*rdi+0x10]
        mov      rsi, rax
        call     CORINFO_HELP_ASSIGN_REF
        inc      r12d
        cmp      r14d, r12d
-       jg       G_M768_IG24
-       jmp      G_M768_IG16
+       jg       G_M768_IG21
+       jmp      G_M768_IG14
 						;; size=60 bbWeight=0.04 PerfScore 0.59
-G_M768_IG34:
-       mov      rdi, rbx
+G_M768_IG28:
+       mov      bword ptr [rbp-0x48], rax
+       mov      dword ptr [rbp-0x34], ecx
+       mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       call     [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       mov      rdi, rax
-       jmp      SHORT G_M768_IG31
-						;; size=30 bbWeight=0.01 PerfScore 0.05
-G_M768_IG35:
+       mov      rdx, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
+       call     [rdx]CORINFO_HELP_RUNTIMEHANDLE_METHOD
+       mov      rdx, rax
+       mov      rax, bword ptr [rbp-0x48]
+       mov      ecx, dword ptr [rbp-0x34]
+       jmp      SHORT G_M768_IG25
+						;; size=44 bbWeight=0.01 PerfScore 0.08
+G_M768_IG29:
+       mov      bword ptr [rbp-0x48], rax
+       mov      dword ptr [rbp-0x34], ecx
        mov      rsi, 0xD1FFAB1E      ; global ptr
        mov      rdx, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
        call     [rdx]CORINFO_HELP_RUNTIMEHANDLE_METHOD
        mov      rdi, rax
-       mov      rax, bword ptr [rbp-0x58]
-       mov      ecx, dword ptr [rbp-0x38]
-       jmp      SHORT G_M768_IG33
-						;; size=34 bbWeight=0.01 PerfScore 0.06
-G_M768_IG36:
-       mov      rdi, rbx
+       mov      rax, bword ptr [rbp-0x48]
+       mov      ecx, dword ptr [rbp-0x34]
+       jmp      G_M768_IG27
+						;; size=44 bbWeight=0.01 PerfScore 0.08
+G_M768_IG30:
+       mov      rdi, r15
+       mov      rsi, 0xD1FFAB1E      ; global ptr
+       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
+       call     [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
+       mov      rdi, rax
+       jmp      G_M768_IG16
+						;; size=33 bbWeight=0.36 PerfScore 2.16
+G_M768_IG31:
        mov      rsi, 0xD1FFAB1E      ; global ptr
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
        call     [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
        mov      rdi, rax
        jmp      G_M768_IG18
-						;; size=33 bbWeight=0.36 PerfScore 2.16
-G_M768_IG37:
-       mov      rsi, 0xD1FFAB1E      ; global ptr
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       call     [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       mov      rdi, rax
-       jmp      G_M768_IG20
 						;; size=30 bbWeight=0.20 PerfScore 1.15
-G_M768_IG38:
-       mov      rsi, 0xD1FFAB1E      ; global ptr
-       mov      rdx, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
-       call     [rdx]CORINFO_HELP_RUNTIMEHANDLE_CLASS
-       mov      rdx, rax
-       jmp      G_M768_IG11
-						;; size=30 bbWeight=0.40 PerfScore 2.28
-G_M768_IG39:
-       mov      rsi, 0xD1FFAB1E      ; global ptr
-       mov      rcx, 0xD1FFAB1E      ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
-       call     [rcx]CORINFO_HELP_RUNTIMEHANDLE_CLASS
-       mov      rdx, rax
-       jmp      G_M768_IG29
-						;; size=30 bbWeight=0.00 PerfScore 0.02
-G_M768_IG40:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
-       call     [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
-       int3     
-						;; size=13 bbWeight=0 PerfScore 0.00
-G_M768_IG41:
+G_M768_IG32:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 957, prolog size 23, PerfScore 229.96, instruction count 232, allocated bytes for code 957 (MethodHash=b577fcff) for method System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
+; Total bytes of code 710, prolog size 23, PerfScore 153.58, instruction count 179, allocated bytes for code 710 (MethodHash=b577fcff) for method System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
 ; ============================================================
-135 (-22.84 % of base) - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this
 ; Assembly listing for method System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 16 single block inlinees; 8 inlinees without PGO data
+; 0 inlinees with PGO data; 4 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T13] (  5, 12   )     ref  ->  r15         this class-hnd single-def <System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]>
+;  V00 this         [V00,T08] (  5, 12   )     ref  ->  r15         this class-hnd single-def <System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]>
 ;  V01 arg1         [V01,T03] (  4, 34   )     ref  ->  rbx         class-hnd single-def <System.IO.Stream>
-;  V02 loc0         [V02,T21] (  3,  3   )     ref  ->  r14         class-hnd exact single-def <System.Text.Json.JsonSerializerOptions>
-;  V03 loc1         [V03    ] ( 22,158   )  struct (24) [rbp-0x30]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.Json.Serialization.ReadBufferState>
+;  V02 loc0         [V02,T13] (  3,  3   )     ref  ->  r14         class-hnd exact single-def <System.Text.Json.JsonSerializerOptions>
+;  V03 loc1         [V03    ] ( 12, 86   )  struct (24) [rbp-0x30]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.Json.Serialization.ReadBufferState>
 ;  V04 loc2         [V04    ] (  2,  9   )  struct (160) [rbp-0xD0]  do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Text.Json.ReadStack>
 ;  V05 loc3         [V05    ] (  3, 10   )  struct (56) [rbp-0x108]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.Json.JsonReaderState>
 ;  V06 loc4         [V06    ] (  2,  9   )  double  ->  [rbp-0x110]  do-not-enreg[X] addr-exposed ld-addr-op
-;  V07 loc5         [V07,T23] (  2,  2   )  double  ->  [rbp-0x118]  spill-single-def
+;  V07 loc5         [V07,T15] (  2,  2   )  double  ->  [rbp-0x118]  spill-single-def
 ;# V08 OutArgs      [V08    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V09 tmp1         [V09,T20] (  2,  4   )  struct ( 8) rax         "spilled call-like call argument" <System.Text.Json.JsonReaderOptions>
+;  V09 tmp1         [V09,T12] (  2,  4   )  struct ( 8) rax         "spilled call-like call argument" <System.Text.Json.JsonReaderOptions>
 ;* V10 tmp2         [V10    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ubyte]>
 ;  V11 tmp3         [V11,T02] (  3, 40   )     int  ->  rax         "Inline stloc first use temp"
 ;* V12 tmp4         [V12    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "Inline return value spill temp" <System.Span`1[ubyte]>
 ;  V13 tmp5         [V13,T00] (  4, 80   )     ref  ->  rsi         class-hnd "Inlining Arg" <ubyte[]>
 ;  V14 tmp6         [V14,T01] (  5, 64   )     int  ->  rdx         "Inlining Arg"
 ;* V15 tmp7         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
 ;* V16 tmp8         [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-;  V17 tmp9         [V17,T10] (  2, 16   )   byref  ->  rsi         "Inlining Arg"
-;  V18 tmp10        [V18,T11] (  2, 16   )     int  ->  rdi         "Inlining Arg"
-;* V19 tmp11        [V19    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.Span`1[ubyte]>
-;* V20 tmp12        [V20    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V21 tmp13        [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
-;  V22 tmp14        [V22,T12] (  2, 16   )     int  ->   r8         "impAppendStmt"
-;  V23 tmp15        [V23,T04] (  4, 32   )     ref  ->   r8         class-hnd "Inlining Arg" <ubyte[]>
-;  V24 tmp16        [V24,T05] (  4, 32   )     int  ->  rsi         "Inlining Arg"
-;* V25 tmp17        [V25    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-;* V26 tmp18        [V26    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V27 tmp19        [V27    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V28 tmp20        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V29 tmp21        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V30 tmp22        [V30    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V31 tmp23        [V31    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;  V32 tmp24        [V32,T18] (  2,  8   )   ubyte  ->   r8         "Inline return value spill temp"
-;* V33 tmp25        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V34 tmp26        [V34    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V35 tmp27        [V35    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V36 tmp28        [V36    ] (  0,  0   )   byref  ->  zero-ref    "impAppendStmt"
-;* V37 tmp29        [V37    ] (  0,  0   )   byref  ->  zero-ref    "impAppendStmt"
-;* V38 tmp30        [V38    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V39 tmp31        [V39    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V40 tmp32        [V40    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V41 tmp33        [V41    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V42 tmp34        [V42    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V43 tmp35        [V43    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V44 tmp36        [V44    ] (  0,  0   )   byref  ->  zero-ref    "field V10._reference (fldOffset=0x0)" P-INDEP
-;* V45 tmp37        [V45    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
-;  V46 tmp38        [V46,T06] (  3, 24   )   byref  ->  rsi         "field V12._reference (fldOffset=0x0)" P-INDEP
-;  V47 tmp39        [V47,T08] (  3, 24   )     int  ->  rdx         "field V12._length (fldOffset=0x8)" P-INDEP
-;  V48 tmp40        [V48,T17] (  2,  8   )   byref  ->  rsi         "field V15._reference (fldOffset=0x0)" P-INDEP
-;  V49 tmp41        [V49,T19] (  2,  8   )     int  ->  rdx         "field V15._length (fldOffset=0x8)" P-INDEP
-;* V50 tmp42        [V50    ] (  0,  0   )   byref  ->  zero-ref    "field V16._reference (fldOffset=0x0)" P-INDEP
-;* V51 tmp43        [V51    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
-;* V52 tmp44        [V52    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
-;* V53 tmp45        [V53    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
-;* V54 tmp46        [V54    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
-;* V55 tmp47        [V55    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
-;* V56 tmp48        [V56    ] (  0,  0   )   byref  ->  zero-ref    "field V21._reference (fldOffset=0x0)" P-INDEP
-;* V57 tmp49        [V57    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
-;  V58 tmp50        [V58,T14] (  3, 12   )   byref  ->   r8         "field V25._reference (fldOffset=0x0)" P-INDEP
-;  V59 tmp51        [V59,T15] (  3, 12   )     int  ->  rsi         "field V25._length (fldOffset=0x8)" P-INDEP
-;* V60 tmp52        [V60    ] (  0,  0   )   byref  ->  zero-ref    "field V26._reference (fldOffset=0x0)" P-INDEP
-;* V61 tmp53        [V61    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
-;* V62 tmp54        [V62    ] (  0,  0   )   byref  ->  zero-ref    "field V27._reference (fldOffset=0x0)" P-INDEP
-;* V63 tmp55        [V63    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
-;* V64 tmp56        [V64    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
-;* V65 tmp57        [V65    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
-;* V66 tmp58        [V66    ] (  0,  0   )   byref  ->  zero-ref    "field V29._reference (fldOffset=0x0)" P-INDEP
-;* V67 tmp59        [V67    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
-;* V68 tmp60        [V68    ] (  0,  0   )   byref  ->  zero-ref    "field V33._reference (fldOffset=0x0)" P-INDEP
-;* V69 tmp61        [V69    ] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
-;* V70 tmp62        [V70    ] (  0,  0   )   byref  ->  zero-ref    "field V35._reference (fldOffset=0x0)" P-INDEP
-;* V71 tmp63        [V71    ] (  0,  0   )     int  ->  zero-ref    "field V35._length (fldOffset=0x8)" P-INDEP
-;* V72 tmp64        [V72    ] (  0,  0   )   byref  ->  zero-ref    "field V38._reference (fldOffset=0x0)" P-INDEP
-;* V73 tmp65        [V73    ] (  0,  0   )     int  ->  zero-ref    "field V38._length (fldOffset=0x8)" P-INDEP
-;* V74 tmp66        [V74    ] (  0,  0   )   byref  ->  zero-ref    "field V39._reference (fldOffset=0x0)" P-INDEP
-;* V75 tmp67        [V75    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0x8)" P-INDEP
-;* V76 tmp68        [V76    ] (  0,  0   )   byref  ->  zero-ref    "field V40._reference (fldOffset=0x0)" P-INDEP
-;* V77 tmp69        [V77    ] (  0,  0   )     int  ->  zero-ref    "field V40._length (fldOffset=0x8)" P-INDEP
-;* V78 tmp70        [V78    ] (  0,  0   )   byref  ->  zero-ref    "field V41._reference (fldOffset=0x0)" P-INDEP
-;* V79 tmp71        [V79    ] (  0,  0   )     int  ->  zero-ref    "field V41._length (fldOffset=0x8)" P-INDEP
-;* V80 tmp72        [V80    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
-;* V81 tmp73        [V81    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
-;* V82 tmp74        [V82    ] (  0,  0   )   byref  ->  zero-ref    "field V43._reference (fldOffset=0x0)" P-INDEP
-;* V83 tmp75        [V83    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
-;  V84 PSPSym       [V84,T22] (  1,  1   )    long  ->  [rbp-0x120]  do-not-enreg[V] "PSPSym"
-;  V85 cse0         [V85,T16] (  3, 12   )     int  ->  rdi         "CSE #01: moderate"
-;  V86 rat0         [V86,T07] (  3, 24   )   byref  ->   r8         "ReplaceWithLclVar is creating a new local variable"
-;  V87 rat1         [V87,T09] (  3, 24   )    long  ->  rsi         "ReplaceWithLclVar is creating a new local variable"
+;  V17 tmp9         [V17,T06] (  2, 16   )   byref  ->  rsi         "Inlining Arg"
+;  V18 tmp10        [V18,T07] (  2, 16   )     int  ->  rdi         "Inlining Arg"
+;* V19 tmp11        [V19    ] (  0,  0   )   byref  ->  zero-ref    "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp12        [V20    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
+;  V21 tmp13        [V21,T04] (  3, 24   )   byref  ->  rsi         "field V12._reference (fldOffset=0x0)" P-INDEP
+;  V22 tmp14        [V22,T05] (  3, 24   )     int  ->  rdx         "field V12._length (fldOffset=0x8)" P-INDEP
+;  V23 tmp15        [V23,T10] (  2,  8   )   byref  ->  rsi         "field V15._reference (fldOffset=0x0)" P-INDEP
+;  V24 tmp16        [V24,T11] (  2,  8   )     int  ->  rdx         "field V15._length (fldOffset=0x8)" P-INDEP
+;* V25 tmp17        [V25    ] (  0,  0   )   byref  ->  zero-ref    "field V16._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp18        [V26    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
+;  V27 PSPSym       [V27,T14] (  1,  1   )    long  ->  [rbp-0x120]  do-not-enreg[V] "PSPSym"
+;  V28 cse0         [V28,T09] (  3, 12   )     int  ->  rdi         "CSE #01: moderate"
 ;
 ; Lcl frame size = 264
 
 G_M33243_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 264
        lea      rbp, [rsp+0x120]
        xor      eax, eax
        mov      qword ptr [rbp-0x108], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x100], xmm8
        vmovdqa  xmmword ptr [rbp-0xF0], xmm8
        mov      rax, -192
        vmovdqa  xmmword ptr [rbp+rax-0x20], xmm8
        vmovdqa  xmmword ptr [rbp+rax-0x10], xmm8
        vmovdqa  xmmword ptr [rax+rbp], xmm8
        add      rax, 48
        jne      SHORT  -5 instr
        mov      qword ptr [rbp-0x20], rax
        mov      qword ptr [rbp-0x120], rsp
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=101 bbWeight=1 PerfScore 20.33
 G_M33243_IG02:
        mov      r14, gword ptr [r15+0xB0]
        mov      esi, dword ptr [r14+0x7C]
        lea      rdi, [rbp-0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.ReadBufferState:.ctor(int):this
        call     [rax]System.Text.Json.Serialization.ReadBufferState:.ctor(int):this
        lea      rdi, [rbp-0xD0]
        mov      rsi, r15
        mov      edx, 1
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.ReadStack:Initialize(System.Text.Json.Serialization.Metadata.JsonTypeInfo,ubyte):this
        call     [rax]System.Text.Json.ReadStack:Initialize(System.Text.Json.Serialization.Metadata.JsonTypeInfo,ubyte):this
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.JsonSerializerOptions:GetReaderOptions():System.Text.Json.JsonReaderOptions:this
        call     [rax]System.Text.Json.JsonSerializerOptions:GetReaderOptions():System.Text.Json.JsonReaderOptions:this
        mov      qword ptr [rbp-0xF0], rax
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0xE8], xmm0
        vmovdqu  xmmword ptr [rbp-0xE0], xmm0
 						;; size=96 bbWeight=1 PerfScore 18.83
 G_M33243_IG03:
        jmp      SHORT G_M33243_IG05
 						;; size=2 bbWeight=1 PerfScore 2.00
 G_M33243_IG04:
        add      eax, dword ptr [rbp-0x28]
        mov      dword ptr [rbp-0x28], eax
-       mov      r8d, dword ptr [rbp-0x28]
-       mov      rsi, gword ptr [rbp-0x30]
-       cmp      r8d, dword ptr [rsi+0x08]
+       mov      edi, dword ptr [rbp-0x28]
+       mov      rax, gword ptr [rbp-0x30]
+       cmp      edi, dword ptr [rax+0x08]
        jge      SHORT G_M33243_IG10
-						;; size=20 bbWeight=8 PerfScore 72.00
+						;; size=18 bbWeight=8 PerfScore 72.00
 G_M33243_IG05:
        mov      rsi, gword ptr [rbp-0x30]
        mov      edx, dword ptr [rbp-0x28]
        test     rsi, rsi
        je       SHORT G_M33243_IG07
 						;; size=12 bbWeight=16 PerfScore 52.00
 G_M33243_IG06:
        mov      edi, dword ptr [rsi+0x08]
        cmp      edi, edx
-       jb       G_M33243_IG18
+       jb       SHORT G_M33243_IG12
        mov      eax, edx
        lea      rsi, bword ptr [rsi+rax+0x10]
        sub      edi, edx
        mov      edx, edi
        jmp      SHORT G_M33243_IG08
-						;; size=24 bbWeight=4 PerfScore 28.00
+						;; size=20 bbWeight=4 PerfScore 28.00
 G_M33243_IG07:
        test     edx, edx
-       jne      G_M33243_IG18
+       jne      SHORT G_M33243_IG12
        xor      rsi, rsi
        xor      edx, edx
-						;; size=12 bbWeight=4 PerfScore 7.00
+						;; size=8 bbWeight=4 PerfScore 7.00
 G_M33243_IG08:
        mov      rdi, rbx
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x60]
        call     [rax+0x20]System.IO.Stream:Read(System.Span`1[ubyte]):int:this
        test     eax, eax
        jne      SHORT G_M33243_IG04
 						;; size=17 bbWeight=16 PerfScore 136.00
 G_M33243_IG09:
        mov      byte  ptr [rbp-0x1A], 1
 						;; size=4 bbWeight=4 PerfScore 4.00
 G_M33243_IG10:
-       mov      r8d, dword ptr [rbp-0x28]
-       cmp      r8d, dword ptr [rbp-0x24]
-       jle      SHORT G_M33243_IG12
-						;; size=10 bbWeight=16 PerfScore 64.00
-G_M33243_IG11:
-       mov      r8d, dword ptr [rbp-0x28]
-       mov      dword ptr [rbp-0x24], r8d
-						;; size=8 bbWeight=4 PerfScore 8.00
-G_M33243_IG12:
-       cmp      byte  ptr [rbp-0x1B], 0
-       je       SHORT G_M33243_IG16
-						;; size=6 bbWeight=16 PerfScore 48.00
-G_M33243_IG13:
-       mov      byte  ptr [rbp-0x1B], 0
-       mov      r8, gword ptr [rbp-0x30]
-       mov      esi, dword ptr [rbp-0x28]
-       test     r8, r8
-       je       SHORT G_M33243_IG14
-       cmp      dword ptr [r8+0x08], esi
-       jb       G_M33243_IG18
-       add      r8, 16
-       jmp      SHORT G_M33243_IG15
-						;; size=32 bbWeight=4 PerfScore 42.00
-G_M33243_IG14:
-       test     esi, esi
-       jne      G_M33243_IG18
-       xor      r8, r8
-       xor      esi, esi
-						;; size=13 bbWeight=4 PerfScore 7.00
-G_M33243_IG15:
-       cmp      esi, 3
-       jl       SHORT G_M33243_IG16
-       mov      rsi, 0xD1FFAB1E      ; static handle
-       movzx    rdx, word  ptr [r8]
-       movzx    r8, word  ptr [r8+0x01]
-       movzx    rcx, word  ptr [rsi]
-       movzx    rsi, word  ptr [rsi+0x01]
-       xor      edx, ecx
-       xor      r8d, esi
-       or       r8d, edx
-       sete     r8b
-       movzx    r8, r8b
-       test     r8d, r8d
-       je       SHORT G_M33243_IG16
-       mov      byte  ptr [rbp-0x1C], 3
-       mov      r8d, dword ptr [rbp-0x28]
-       add      r8d, -3
-       mov      dword ptr [rbp-0x28], r8d
-						;; size=68 bbWeight=4 PerfScore 64.00
-G_M33243_IG16:
+       lea      rdi, [rbp-0x30]
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this
+       call     [rax]System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this
        lea      r8, [rbp-0x110]
        lea      rsi, [rbp-0x30]
        lea      rdx, [rbp-0x108]
        lea      rcx, [rbp-0xD0]
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:ContinueDeserialize(byref,byref,byref,byref):ubyte:this
        call     [rax]System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:ContinueDeserialize(byref,byref,byref,byref):ubyte:this
        test     eax, eax
-       je       G_M33243_IG05
-						;; size=48 bbWeight=8 PerfScore 54.00
-G_M33243_IG17:
+       je       SHORT G_M33243_IG05
+						;; size=60 bbWeight=8 PerfScore 84.00
+G_M33243_IG11:
        vmovsd   xmm0, qword ptr [rbp-0x110]
        vmovsd   qword ptr [rbp-0x118], xmm0
-       jmp      SHORT G_M33243_IG19
+       jmp      SHORT G_M33243_IG13
 						;; size=18 bbWeight=1 PerfScore 6.00
-G_M33243_IG18:
+G_M33243_IG12:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M33243_IG19:
+G_M33243_IG13:
        lea      rdi, [rbp-0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.ReadBufferState:Dispose():this
        call     [rax]System.Text.Json.Serialization.ReadBufferState:Dispose():this
        vmovsd   xmm0, qword ptr [rbp-0x118]
 						;; size=24 bbWeight=1 PerfScore 6.75
-G_M33243_IG20:
+G_M33243_IG14:
        add      rsp, 264
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=14 bbWeight=1 PerfScore 3.25
-G_M33243_IG21:
+G_M33243_IG15:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x120]
 						;; size=21 bbWeight=0 PerfScore 0.00
-G_M33243_IG22:
+G_M33243_IG16:
        lea      rdi, [rbp-0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.Serialization.ReadBufferState:Dispose():this
        call     [rax]System.Text.Json.Serialization.ReadBufferState:Dispose():this
        nop      
 						;; size=17 bbWeight=0 PerfScore 0.00
-G_M33243_IG23:
+G_M33243_IG17:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 591, prolog size 101, PerfScore 643.17, instruction count 149, allocated bytes for code 591 (MethodHash=675d7e24) for method System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this (FullOpts)
+; Total bytes of code 456, prolog size 101, PerfScore 440.17, instruction count 114, allocated bytes for code 456 (MethodHash=675d7e24) for method System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this (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/082b9d2f6c57df32a6bd0dd4b0d6aa18

@MihuBot
Copy link
Owner Author

MihuBot commented Nov 10, 2024

@MihaZupan

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