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] xtqqczze/dotnet-runtime/UIntCastLengthCheck5 #879

Open
MihuBot opened this issue Jan 11, 2025 · 3 comments
Open

[JitDiff X64] xtqqczze/dotnet-runtime/UIntCastLengthCheck5 #879

MihuBot opened this issue Jan 11, 2025 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jan 11, 2025

Job completed in 14 minutes 52 seconds.

Diffs

Diffs
Found 280 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40205636
Total bytes of diff: 40205626
Total bytes of delta: -10 (-0.00 % of base)
Total relative delta: -0.31
    diff is an improvement.
    relative diff is an improvement.


Top file regressions (bytes):
          36 : System.Private.CoreLib.dasm (0.00 % of base)
           4 : System.Net.HttpListener.dasm (0.00 % of base)
           1 : System.Reflection.Metadata.dasm (0.00 % of base)

Top file improvements (bytes):
         -26 : System.Private.Xml.dasm (-0.00 % of base)
         -14 : System.Text.Json.dasm (-0.00 % of base)
          -7 : System.Net.Http.dasm (-0.00 % of base)
          -2 : System.Runtime.Numerics.dasm (-0.00 % of base)
          -2 : System.Private.DataContractSerialization.dasm (-0.00 % of base)

8 total files with Code Size differences (5 improved, 3 regressed), 251 unchanged.

Top method regressions (bytes):
           7 (0.99 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String (FullOpts)
           7 (1.13 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String (FullOpts)
           7 (1.10 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[long](System.Enum+EnumInfo`1[long],long):System.String (FullOpts)
           7 (1.11 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[short](System.Enum+EnumInfo`1[short],short):System.String (FullOpts)
           7 (1.11 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[ubyte](System.Enum+EnumInfo`1[ubyte],ubyte):System.String (FullOpts)
           6 (1.17 % of base) : System.Private.CoreLib.dasm - System.String:ReplaceHelper(int,System.String,System.ReadOnlySpan`1[int]):System.String:this (FullOpts)
           4 (0.90 % of base) : System.Net.HttpListener.dasm - System.Net.HttpListener+<>c:<AddPrefix>b__32_1(System.Span`1[ushort],System.ValueTuple`3[System.String,int,int]):this (FullOpts)
           3 (0.37 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[double](System.Enum+EnumInfo`1[double],double,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.42 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[int](System.Enum+EnumInfo`1[int],int,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.42 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[long](System.Enum+EnumInfo`1[long],long,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.41 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[short](System.Enum+EnumInfo`1[short],short,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.41 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[ubyte](System.Enum+EnumInfo`1[ubyte],ubyte,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (1.60 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this (FullOpts)
           3 (2.26 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this (FullOpts)
           2 (0.08 % of base) : System.Private.CoreLib.dasm - System.Reflection.AssemblyNameFormatter:ComputeDisplayName(System.String,System.Version,System.String,ubyte[],int,int,ubyte[]):System.String (FullOpts)
           2 (0.08 % of base) : System.Reflection.Metadata.dasm - System.Reflection.AssemblyNameFormatter:ComputeDisplayName(System.String,System.Version,System.String,ubyte[],int,int,ubyte[]):System.String (FullOpts)
           1 (0.13 % of base) : System.Private.CoreLib.dasm - System.IO.Path:Join(System.ReadOnlySpan`1[System.String]):System.String (FullOpts)

Top method improvements (bytes):
         -13 (-13.68 % of base) : System.Text.Json.dasm - System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):this (FullOpts)
          -9 (-14.29 % of base) : System.Private.CoreLib.dasm - System.String:CopyTo(System.Span`1[ushort]):this (FullOpts)
          -8 (-2.80 % of base) : System.Private.CoreLib.dasm - System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (FullOpts)
          -8 (-4.21 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):this (FullOpts)
          -8 (-4.21 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):this (FullOpts)
          -4 (-1.73 % of base) : System.Private.Xml.dasm - System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this (FullOpts)
          -3 (-0.20 % of base) : System.Private.CoreLib.dasm - System.ApplicationId:ToString():System.String:this (FullOpts)
          -3 (-0.19 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.AltSvcHeaderValue:ToString():System.String:this (FullOpts)
          -3 (-0.35 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HeaderUtilities:Encode5987(System.String):System.String (FullOpts)
          -2 (-0.63 % of base) : System.Runtime.Numerics.dasm - System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):this (FullOpts)
          -2 (-0.20 % of base) : System.Private.CoreLib.dasm - System.Reflection.MethodBase:AppendParameters(byref,System.Type[],int) (FullOpts)
          -2 (-0.26 % of base) : System.Private.CoreLib.dasm - System.Reflection.RuntimeConstructorInfo:ToString():System.String:this (FullOpts)
          -2 (-0.08 % of base) : System.Private.Xml.dasm - System.Xml.Schema.XsdDateTime:TryFormat(System.Span`1[ushort],byref):ubyte:this (FullOpts)
          -2 (-0.05 % of base) : System.Private.Xml.dasm - System.Xml.Schema.XsdDuration:TryFormat(System.Span`1[ushort],byref,int):ubyte:this (FullOpts)
          -2 (-0.28 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.UniqueId:ToSpan(System.Span`1[ushort]):this (FullOpts)
          -2 (-0.22 % of base) : System.Private.Xml.dasm - System.Xml.XmlDeclaration:get_InnerText():System.String:this (FullOpts)
          -1 (-0.12 % of base) : System.Private.CoreLib.dasm - System.Exception:ToString():System.String:this (FullOpts)
          -1 (-0.10 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.WarningHeaderValue:ToString():System.String:this (FullOpts)
          -1 (-0.08 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeData:ToString():System.String:this (FullOpts)
          -1 (-0.04 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeTypedArgument:ToString(ubyte):System.String:this (FullOpts)
          -1 (-0.16 % of base) : System.Private.CoreLib.dasm - System.Reflection.Metadata.TypeNameParserHelpers:GetRankOrModifierStringRepresentation(int,byref):System.String (FullOpts)
          -1 (-0.16 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.TypeNameParserHelpers:GetRankOrModifierStringRepresentation(int,byref):System.String (FullOpts)
          -1 (-0.15 % of base) : System.Private.CoreLib.dasm - System.Reflection.RuntimePropertyInfo:ToString():System.String:this (FullOpts)
          -1 (-0.16 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonObject:GetPath(byref,System.Text.Json.Nodes.JsonNode):this (FullOpts)

Top method regressions (percentages):
           3 (2.26 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this (FullOpts)
           3 (1.60 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this (FullOpts)
           6 (1.17 % of base) : System.Private.CoreLib.dasm - System.String:ReplaceHelper(int,System.String,System.ReadOnlySpan`1[int]):System.String:this (FullOpts)
           7 (1.13 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String (FullOpts)
           7 (1.11 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[short](System.Enum+EnumInfo`1[short],short):System.String (FullOpts)
           7 (1.11 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[ubyte](System.Enum+EnumInfo`1[ubyte],ubyte):System.String (FullOpts)
           7 (1.10 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[long](System.Enum+EnumInfo`1[long],long):System.String (FullOpts)
           7 (0.99 % of base) : System.Private.CoreLib.dasm - System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String (FullOpts)
           4 (0.90 % of base) : System.Net.HttpListener.dasm - System.Net.HttpListener+<>c:<AddPrefix>b__32_1(System.Span`1[ushort],System.ValueTuple`3[System.String,int,int]):this (FullOpts)
           3 (0.42 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[int](System.Enum+EnumInfo`1[int],int,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.42 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[long](System.Enum+EnumInfo`1[long],long,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.41 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[ubyte](System.Enum+EnumInfo`1[ubyte],ubyte,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.41 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[short](System.Enum+EnumInfo`1[short],short,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           3 (0.37 % of base) : System.Private.CoreLib.dasm - System.Enum:TryFormatFlagNames[double](System.Enum+EnumInfo`1[double],double,System.Span`1[ushort],byref,byref):ubyte (FullOpts)
           1 (0.13 % of base) : System.Private.CoreLib.dasm - System.IO.Path:Join(System.ReadOnlySpan`1[System.String]):System.String (FullOpts)
           2 (0.08 % of base) : System.Private.CoreLib.dasm - System.Reflection.AssemblyNameFormatter:ComputeDisplayName(System.String,System.Version,System.String,ubyte[],int,int,ubyte[]):System.String (FullOpts)
           2 (0.08 % of base) : System.Reflection.Metadata.dasm - System.Reflection.AssemblyNameFormatter:ComputeDisplayName(System.String,System.Version,System.String,ubyte[],int,int,ubyte[]):System.String (FullOpts)

Top method improvements (percentages):
          -9 (-14.29 % of base) : System.Private.CoreLib.dasm - System.String:CopyTo(System.Span`1[ushort]):this (FullOpts)
         -13 (-13.68 % of base) : System.Text.Json.dasm - System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):this (FullOpts)
          -8 (-4.21 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):this (FullOpts)
          -8 (-4.21 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):this (FullOpts)
          -8 (-2.80 % of base) : System.Private.CoreLib.dasm - System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (FullOpts)
          -4 (-1.73 % of base) : System.Private.Xml.dasm - System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this (FullOpts)
          -2 (-0.63 % of base) : System.Runtime.Numerics.dasm - System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):this (FullOpts)
          -3 (-0.35 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HeaderUtilities:Encode5987(System.String):System.String (FullOpts)
          -2 (-0.28 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.UniqueId:ToSpan(System.Span`1[ushort]):this (FullOpts)
          -2 (-0.26 % of base) : System.Private.CoreLib.dasm - System.Reflection.RuntimeConstructorInfo:ToString():System.String:this (FullOpts)
          -2 (-0.22 % of base) : System.Private.Xml.dasm - System.Xml.XmlDeclaration:get_InnerText():System.String:this (FullOpts)
          -2 (-0.20 % of base) : System.Private.CoreLib.dasm - System.Reflection.MethodBase:AppendParameters(byref,System.Type[],int) (FullOpts)
          -3 (-0.20 % of base) : System.Private.CoreLib.dasm - System.ApplicationId:ToString():System.String:this (FullOpts)
          -3 (-0.19 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.AltSvcHeaderValue:ToString():System.String:this (FullOpts)
          -1 (-0.16 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonObject:GetPath(byref,System.Text.Json.Nodes.JsonNode):this (FullOpts)
          -1 (-0.16 % of base) : System.Private.CoreLib.dasm - System.Reflection.Metadata.TypeNameParserHelpers:GetRankOrModifierStringRepresentation(int,byref):System.String (FullOpts)
          -1 (-0.16 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.TypeNameParserHelpers:GetRankOrModifierStringRepresentation(int,byref):System.String (FullOpts)
          -1 (-0.15 % of base) : System.Private.CoreLib.dasm - System.Reflection.RuntimePropertyInfo:ToString():System.String:this (FullOpts)
          -1 (-0.12 % of base) : System.Private.CoreLib.dasm - System.Exception:ToString():System.String:this (FullOpts)
          -1 (-0.10 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.WarningHeaderValue:ToString():System.String:this (FullOpts)
          -2 (-0.08 % of base) : System.Private.Xml.dasm - System.Xml.Schema.XsdDateTime:TryFormat(System.Span`1[ushort],byref):ubyte:this (FullOpts)
          -1 (-0.08 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeData:ToString():System.String:this (FullOpts)
          -2 (-0.05 % of base) : System.Private.Xml.dasm - System.Xml.Schema.XsdDuration:TryFormat(System.Span`1[ushort],byref,int):ubyte:this (FullOpts)
          -1 (-0.04 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeTypedArgument:ToString(ubyte):System.String:this (FullOpts)

41 total methods with Code Size differences (24 improved, 17 regressed), 233019 unchanged.

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

Artifacts:

xtqqczze referenced this issue in xtqqczze/dotnet-runtime Jan 11, 2025
@MihuBot
Copy link
Owner Author

MihuBot commented Jan 11, 2025

Top method regressions

7 (0.99 % of base) - System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String
 ; Assembly listing for method System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):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; 24 single block inlinees; 11 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T21] (  4,  4   )     ref  ->  rdi         class-hnd single-def <System.Enum+EnumInfo`1[double]>
 ;  V01 arg1         [V01,T51] (  6,  8   )  double  ->  mm0         single-def
 ;  V02 loc0         [V02,T08] ( 11, 16   )     ref  ->  rbx         class-hnd exact single-def <System.String[]>
 ;  V03 loc1         [V03,T16] (  7, 11   )     ref  ->  rdi         class-hnd single-def <double[]>
 ;  V04 loc2         [V04,T25] (  6,  4.50)     ref  ->  r15         class-hnd <System.String>
 ;  V05 loc3         [V05,T31] (  6,  3   )     int  ->  rcx         ld-addr-op
 ;* V06 loc4         [V06    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[int]>
 ;  V07 loc5         [V07,T23] (  4,  5   )     int  ->  rdx         ld-addr-op
 ;  V08 loc6         [V08,T17] (  8, 10   )     int  ->  r13         ld-addr-op
 ;# V09 OutArgs      [V09    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V10 tmp1         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
 ;* V11 tmp2         [V11    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[int]>
 ;* V12 tmp3         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V13 tmp4         [V13,T32] (  5,  3   )     ref  ->  r15         class-hnd "Inline return value spill temp" <System.String>
 ;  V14 tmp5         [V14,T30] (  7,  3.25)     int  ->  rcx         "Inline stloc first use temp"
 ;* V15 tmp6         [V15    ] (  0,  0   )  double  ->  zero-ref    "impAppendStmt"
 ;* V16 tmp7         [V16    ] (  0,  0   )  double  ->  zero-ref    "Inlining Arg"
 ;* V17 tmp8         [V17    ] (  0,  0   )  double  ->  zero-ref    "Inlining Arg"
 ;  V18 tmp9         [V18,T35] (  2,  2   )    long  ->  r14         "Inlining Arg"
 ;  V19 tmp10        [V19,T36] (  2,  2   )     int  ->  rcx         "Inlining Arg"
 ;  V20 tmp11        [V20,T49] (  6, 22   )  double  ->  mm0         "Inlining Arg"
 ;  V21 tmp12        [V21,T50] (  5, 16   )  double  ->  mm1         "Inline stloc first use temp"
 ;* V22 tmp13        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[int]>
 ;* V23 tmp14        [V23    ] (  0,  0   )     int  ->  zero-ref    "Span.get_Item index"
 ;* V24 tmp15        [V24    ] (  0,  0   )  double  ->  zero-ref    "Inlining Arg"
 ;* V25 tmp16        [V25    ] (  0,  0   )  double  ->  zero-ref    "Inlining Arg"
 ;* V26 tmp17        [V26    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V27 tmp18        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
 ;* V28 tmp19        [V28    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V29 tmp20        [V29    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V30 tmp21        [V30    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V31 tmp22        [V31    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V32 tmp23        [V32    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[int]>
 ;* V33 tmp24        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
 ;* V34 tmp25        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
 ;* V35 tmp26        [V35    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V36 tmp27        [V36,T34] (  2,  2   )   byref  ->  r12         single-def "Inlining Arg"
 ;  V37 tmp28        [V37,T37] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;* V38 tmp29        [V38    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[int]>
 ;  V39 tmp30        [V39,T42] (  2,  1   )     int  ->  rdx         "Inline stloc first use temp"
 ;  V40 tmp31        [V40,T14] (  3, 12   )     ref  ->  rsi         class-hnd exact "Inline stloc first use temp" <System.String>
 ;* V41 tmp32        [V41    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V42 tmp33        [V42    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.Span`1[ushort]>
 ;* V43 tmp34        [V43    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V44 tmp35        [V44    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V45 tmp36        [V45    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V46 tmp37        [V46    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V47 tmp38        [V47,T03] (  3, 24   )     int  ->   r8         "Inlining Arg"
+;  V47 tmp38        [V47,T03] (  3, 24   )     int  ->  rdx         "Inlining Arg"
 ;* V48 tmp39        [V48    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V49 tmp40        [V49,T10] (  2, 16   )   byref  ->  r12         "Inlining Arg"
-;  V50 tmp41        [V50,T04] (  2, 16   )     int  ->  rax         "Inlining Arg"
+;  V50 tmp41        [V50,T04] (  2, 16   )     int  ->  rsi         "Inlining Arg"
 ;* V51 tmp42        [V51    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V52 tmp43        [V52,T11] (  2, 16   )   byref  ->  rcx         "Inlining Arg"
-;  V53 tmp44        [V53,T12] (  2, 16   )     int  ->  rax         "Inlining Arg"
-;  V54 tmp45        [V54,T26] (  4,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.String>
-;* V55 tmp46        [V55    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;  V52 tmp43        [V52,T11] (  2, 16   )   byref  ->  rsi         "Inlining Arg"
+;  V53 tmp44        [V53,T12] (  2, 16   )     int  ->  rdx         "Inlining Arg"
+;* V54 tmp45        [V54    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;  V55 tmp46        [V55,T26] (  4,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.String>
 ;* V56 tmp47        [V56    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V57 tmp48        [V57    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V58 tmp49        [V58    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V59 tmp50        [V59,T29] (  3,  3   )   byref  ->  r14         "field V06._reference (fldOffset=0x0)" P-INDEP
 ;* V60 tmp51        [V60,T45] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
 ;  V61 tmp52        [V61,T38] (  2,  1   )   byref  ->  r14         single-def "field V10._reference (fldOffset=0x0)" P-INDEP
 ;* V62 tmp53        [V62,T46] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
 ;* V63 tmp54        [V63    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
 ;* V64 tmp55        [V64    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
 ;  V65 tmp56        [V65,T39] (  2,  1   )   byref  ->  r12         single-def "field V12._reference (fldOffset=0x0)" P-INDEP
 ;  V66 tmp57        [V66,T43] (  2,  1   )     int  ->  rax         "field V12._length (fldOffset=0x8)" P-INDEP
 ;* V67 tmp58        [V67,T44] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;* V68 tmp59        [V68,T47] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
 ;  V69 tmp60        [V69,T40] (  2,  1   )   byref  ->  r14         single-def "field V27._reference (fldOffset=0x0)" P-INDEP
 ;* V70 tmp61        [V70    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
 ;* V71 tmp62        [V71    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V32._reference (fldOffset=0x0)" P-INDEP
 ;* V72 tmp63        [V72    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
 ;  V73 tmp64        [V73,T41] (  2,  1   )   byref  ->  r14         single-def "field V33._reference (fldOffset=0x0)" P-INDEP
 ;* V74 tmp65        [V74,T48] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
 ;  V75 tmp66        [V75,T24] (  3,  5   )   byref  ->  r14         single-def "field V38._reference (fldOffset=0x0)" P-INDEP
 ;  V76 tmp67        [V76,T22] (  4,  5.50)     int  ->  r13         "field V38._length (fldOffset=0x8)" P-INDEP
 ;  V77 tmp68        [V77,T00] (  9, 29   )   byref  ->  r12         "field V41._reference (fldOffset=0x0)" P-INDEP
 ;  V78 tmp69        [V78,T01] (  9, 29   )     int  ->  [rbp-0x2C]  "field V41._length (fldOffset=0x8)" P-INDEP
 ;* V79 tmp70        [V79    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
 ;* V80 tmp71        [V80    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
 ;* V81 tmp72        [V81    ] (  0,  0   )   byref  ->  zero-ref    "field V43._reference (fldOffset=0x0)" P-INDEP
 ;* V82 tmp73        [V82    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
 ;  V83 tmp74        [V83,T18] (  2,  8   )   byref  ->  r12         "field V48._reference (fldOffset=0x0)" P-INDEP
 ;* V84 tmp75        [V84,T28] (  0,  0   )     int  ->  zero-ref    "field V48._length (fldOffset=0x8)" P-INDEP
-;  V85 tmp76        [V85,T19] (  2,  8   )   byref  ->  rcx         "field V51._reference (fldOffset=0x0)" P-INDEP
-;  V86 tmp77        [V86,T20] (  2,  8   )     int  ->  rax         "field V51._length (fldOffset=0x8)" P-INDEP
-;* V87 tmp78        [V87    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V55._reference (fldOffset=0x0)" P-INDEP
-;* V88 tmp79        [V88    ] (  0,  0   )     int  ->  zero-ref    "field V55._length (fldOffset=0x8)" P-INDEP
+;  V85 tmp76        [V85,T19] (  2,  8   )   byref  ->  rsi         "field V51._reference (fldOffset=0x0)" P-INDEP
+;  V86 tmp77        [V86,T20] (  2,  8   )     int  ->  rdx         "field V51._length (fldOffset=0x8)" P-INDEP
+;* V87 tmp78        [V87    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V54._reference (fldOffset=0x0)" P-INDEP
+;* V88 tmp79        [V88    ] (  0,  0   )     int  ->  zero-ref    "field V54._length (fldOffset=0x8)" P-INDEP
 ;  V89 tmp80        [V89,T05] (  3, 24   )     int  ->  rdx         "index expr"
-;  V90 tmp81        [V90,T33] (  3,  3   )     int  ->  rcx         "index expr"
+;  V90 tmp81        [V90,T33] (  3,  3   )     int  ->  rsi         "index expr"
 ;  V91 GsCookie     [V91    ] (  1,  1   )    long  ->  [rbp-0x50]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V92 cse0         [V92,T15] (  3, 12   )    long  ->  [rbp-0x38]  spill-single-def "CSE #12: moderate"
 ;  V93 cse1         [V93,T13] (  8, 14.50)     int  ->  rax         multi-def "CSE #01: moderate"
 ;  V94 cse2         [V94,T09] (  4, 16   )     int  ->  [rbp-0x3C]  spill-single-def "CSE #10: moderate"
 ;  V95 cse3         [V95,T27] (  2,  4   )    long  ->  rsi         "CSE #07: moderate"
 ;  V96 rat0         [V96,T06] (  9, 21.75)    long  ->  rdx         "Widened IV V14"
 ;  V97 rat1         [V97,T02] (  9, 26.50)    long  ->  rcx         "Widened IV V19"
 ;  V98 rat2         [V98,T07] (  7, 21   )    long  ->  [rbp-0x48]  "Widened IV V39"
 ;
 ; Lcl frame size = 40
 
 G_M41568_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x50]
        mov      qword ptr [rbp-0x50], 0xD1FFAB1E
 						;; size=27 bbWeight=1 PerfScore 7.75
 G_M41568_IG02:
        mov      rbx, gword ptr [rdi+0x10]
        mov      rdi, gword ptr [rdi+0x08]
        vxorps   xmm1, xmm1, xmm1
        vucomisd xmm0, xmm1
        jp       SHORT G_M41568_IG03
        je       SHORT G_M41568_IG09
 						;; size=20 bbWeight=1 PerfScore 8.33
 G_M41568_IG03:
        mov      eax, dword ptr [rdi+0x08]
        lea      ecx, [rax-0x01]
        mov      edx, ecx
        cmp      eax, edx
        jbe      SHORT G_M41568_IG07
        align    [5 bytes for IG04]
 						;; size=17 bbWeight=0.50 PerfScore 2.12
 G_M41568_IG04:
        cmp      edx, eax
-       jae      G_M41568_IG27
+       jae      G_M41568_IG29
        vucomisd xmm0, qword ptr [rdi+8*rdx+0x10]
        jae      SHORT G_M41568_IG06
        dec      edx
        cmp      eax, edx
        ja       SHORT G_M41568_IG04
 						;; size=22 bbWeight=4 PerfScore 35.00
 G_M41568_IG05:
        mov      ecx, edx
        jmp      SHORT G_M41568_IG07
        align    [0 bytes for IG13]
 						;; size=4 bbWeight=0.25 PerfScore 0.56
 G_M41568_IG06:
        mov      ecx, edx
        mov      edx, ecx
        vmovsd   xmm1, qword ptr [rdi+8*rdx+0x10]
        vucomisd xmm1, xmm0
        jp       SHORT G_M41568_IG07
        je       SHORT G_M41568_IG08
 						;; size=18 bbWeight=0.50 PerfScore 4.25
 G_M41568_IG07:
        xor      r15, r15
        jmp      SHORT G_M41568_IG11
 						;; size=5 bbWeight=0.50 PerfScore 1.12
 G_M41568_IG08:
        cmp      ecx, dword ptr [rbx+0x08]
-       jae      G_M41568_IG27
+       jae      G_M41568_IG29
        mov      edx, ecx
        mov      r15, gword ptr [rbx+8*rdx+0x10]
        jmp      SHORT G_M41568_IG11
 						;; size=18 bbWeight=0.50 PerfScore 4.12
 G_M41568_IG09:
        xor      ecx, ecx
        mov      eax, dword ptr [rdi+0x08]
        test     eax, eax
        je       SHORT G_M41568_IG10
        vmovsd   xmm1, qword ptr [rdi+0x10]
        vxorps   xmm2, xmm2, xmm2
        vucomisd xmm1, xmm2
        jp       SHORT G_M41568_IG10
        jne      SHORT G_M41568_IG10
        cmp      dword ptr [rbx+0x08], 0
-       jbe      G_M41568_IG27
+       jbe      G_M41568_IG29
        mov      r15, gword ptr [rbx+0x10]
        jmp      SHORT G_M41568_IG11
 						;; size=42 bbWeight=0.50 PerfScore 9.92
 G_M41568_IG10:
        mov      r15, 0xD1FFAB1E      ; '0'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M41568_IG11:
        test     r15, r15
-       jne      G_M41568_IG21
+       jne      G_M41568_IG23
 						;; size=9 bbWeight=1 PerfScore 1.25
 G_M41568_IG12:
        test     dword ptr [rsp], esp
        sub      rsp, 256
        lea      r14, [rsp]
        xor      edx, edx
        xor      r13d, r13d
        mov      ecx, ecx
        jmp      SHORT G_M41568_IG14
 						;; size=23 bbWeight=0.50 PerfScore 3.25
 G_M41568_IG13:
        dec      ecx
 						;; size=2 bbWeight=4 PerfScore 1.00
 G_M41568_IG14:
        cmp      eax, ecx
        jbe      G_M41568_IG18
        vmovsd   xmm1, qword ptr [rdi+8*rcx+0x10]
        test     ecx, ecx
        jne      SHORT G_M41568_IG16
 						;; size=18 bbWeight=4 PerfScore 26.00
 G_M41568_IG15:
        vxorps   xmm2, xmm2, xmm2
        vucomisd xmm1, xmm2
        jp       SHORT G_M41568_IG16
        je       SHORT G_M41568_IG18
 						;; size=12 bbWeight=2 PerfScore 8.67
 G_M41568_IG16:
        vmovd    rsi, xmm0
        vmovd    r8, xmm1
        and      rsi, r8
        vmovd    xmm2, rsi
        vucomisd xmm2, xmm1
        jp       SHORT G_M41568_IG13
        jne      SHORT G_M41568_IG13
 						;; size=26 bbWeight=4 PerfScore 41.00
 G_M41568_IG17:
        vmovd    rsi, xmm1
        not      rsi
        vmovd    r8, xmm0
        and      rsi, r8
        vmovd    xmm0, rsi
        cmp      r13d, 64
-       jae      G_M41568_IG27
+       jae      G_M41568_IG29
        mov      esi, r13d
        mov      dword ptr [r14+4*rsi], ecx
        inc      r13d
        cmp      ecx, dword ptr [rbx+0x08]
-       jae      G_M41568_IG27
+       jae      G_M41568_IG29
        mov      rsi, gword ptr [rbx+8*rcx+0x10]
        add      edx, dword ptr [rsi+0x08]
-       jo       G_M41568_IG28
+       jo       G_M41568_IG30
        vxorps   xmm1, xmm1, xmm1
        vucomisd xmm0, xmm1
        jp       G_M41568_IG13
        jne      G_M41568_IG13
 						;; size=84 bbWeight=2 PerfScore 47.17
 G_M41568_IG18:
        vxorps   xmm1, xmm1, xmm1
        vucomisd xmm0, xmm1
-       jp       G_M41568_IG21
-       jne      G_M41568_IG21
+       jp       G_M41568_IG23
+       jne      G_M41568_IG23
        cmp      r13d, 64
-       ja       G_M41568_IG26
+       ja       G_M41568_IG28
        lea      edi, [r13+r13]
        add      edi, -2
        add      edi, edx
-       jo       G_M41568_IG28
+       jo       G_M41568_IG30
        call     System.String:FastAllocateString(int):System.String
        mov      r15, rax
        lea      r12, bword ptr [r15+0x0C]
        mov      eax, dword ptr [r15+0x08]
        lea      edx, [r13-0x01]
        mov      ecx, edx
        test     ecx, ecx
-       je       G_M41568_IG20
-						;; size=76 bbWeight=0.50 PerfScore 7.42
+       jne      SHORT G_M41568_IG21
+						;; size=72 bbWeight=0.50 PerfScore 7.42
 G_M41568_IG19:
+       mov      edx, eax
+       jmp      G_M41568_IG22
+						;; size=7 bbWeight=0.25 PerfScore 0.56
+G_M41568_IG20:
+       mov      eax, edx
+						;; size=2 bbWeight=2 PerfScore 0.50
+G_M41568_IG21:
        cmp      ecx, r13d
-       jae      G_M41568_IG27
+       jae      G_M41568_IG29
        mov      qword ptr [rbp-0x48], rcx
        mov      edx, dword ptr [r14+4*rcx]
        cmp      edx, dword ptr [rbx+0x08]
-       jae      G_M41568_IG27
+       jae      G_M41568_IG29
        mov      rsi, gword ptr [rbx+8*rdx+0x10]
        mov      r8d, dword ptr [rsi+0x08]
        mov      dword ptr [rbp-0x3C], r8d
        mov      dword ptr [rbp-0x2C], eax
        cmp      r8d, eax
-       jg       G_M41568_IG25
+       jg       G_M41568_IG27
        mov      r9d, r8d
        add      r9, r9
        mov      qword ptr [rbp-0x38], r9
        mov      rdx, r9
        add      rsi, 12
        mov      rdi, r12
        mov      r10, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [r10]System.SpanHelpers:Memmove(byref,byref,ulong)
-       mov      r8d, dword ptr [rbp-0x3C]
-       mov      eax, dword ptr [rbp-0x2C]
-       cmp      r8d, eax
-       ja       G_M41568_IG26
-       mov      r9, qword ptr [rbp-0x38]
-       add      r12, r9
-       sub      eax, r8d
-       cmp      eax, 2
-       jb       G_M41568_IG26
-       lea      rcx, bword ptr [r12+0x04]
-       add      eax, -2
+       mov      edx, dword ptr [rbp-0x3C]
+       mov      esi, dword ptr [rbp-0x2C]
+       cmp      edx, esi
+       ja       G_M41568_IG28
+       mov      rdi, qword ptr [rbp-0x38]
+       add      r12, rdi
+       sub      esi, edx
+       mov      edx, esi
+       cmp      edx, 2
+       jb       G_M41568_IG28
+       lea      rsi, bword ptr [r12+0x04]
+       add      edx, -2
        mov      word  ptr [r12], 44
        mov      word  ptr [r12+0x02], 32
-       mov      r12, rcx
-       mov      rcx, qword ptr [rbp-0x48]
-       dec      ecx
-       jne      G_M41568_IG19
-						;; size=157 bbWeight=4 PerfScore 129.00
-G_M41568_IG20:
+       mov      r12, rsi
+       mov      rsi, qword ptr [rbp-0x48]
+       dec      esi
+       mov      rcx, rsi
+       jne      G_M41568_IG20
+						;; size=159 bbWeight=4 PerfScore 131.00
+G_M41568_IG22:
        test     r13d, r13d
-       je       SHORT G_M41568_IG27
-       mov      ecx, dword ptr [r14]
-       cmp      ecx, dword ptr [rbx+0x08]
-       jae      SHORT G_M41568_IG27
-       mov      rsi, gword ptr [rbx+8*rcx+0x10]
-       cmp      dword ptr [rsi+0x08], eax
-       jg       SHORT G_M41568_IG25
+       je       SHORT G_M41568_IG29
+       mov      esi, dword ptr [r14]
+       cmp      esi, dword ptr [rbx+0x08]
+       jae      SHORT G_M41568_IG29
+       mov      rsi, gword ptr [rbx+8*rsi+0x10]
+       cmp      dword ptr [rsi+0x08], edx
+       jg       SHORT G_M41568_IG27
        mov      edx, dword ptr [rsi+0x08]
        add      rdx, rdx
        add      rsi, 12
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
 						;; size=48 bbWeight=0.50 PerfScore 9.62
-G_M41568_IG21:
+G_M41568_IG23:
        mov      rax, r15
 						;; size=3 bbWeight=1 PerfScore 0.25
-G_M41568_IG22:
+G_M41568_IG24:
        cmp      qword ptr [rbp-0x50], 0xD1FFAB1E
-       je       SHORT G_M41568_IG23
+       je       SHORT G_M41568_IG25
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=1 PerfScore 4.00
-G_M41568_IG23:
+G_M41568_IG25:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
-G_M41568_IG24:
+G_M41568_IG26:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.50
-G_M41568_IG25:
+G_M41568_IG27:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M41568_IG26:
+G_M41568_IG28:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M41568_IG27:
+G_M41568_IG29:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
-G_M41568_IG28:
+G_M41568_IG30:
        call     CORINFO_HELP_OVERFLOW
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 710, prolog size 27, PerfScore 356.69, instruction count 195, allocated bytes for code 710 (MethodHash=7b8d5d9f) for method System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String (FullOpts)
+; Total bytes of code 717, prolog size 27, PerfScore 359.75, instruction count 200, allocated bytes for code 717 (MethodHash=7b8d5d9f) for method System.Enum:FormatFlagNames[double](System.Enum+EnumInfo`1[double],double):System.String (FullOpts)
 ; ============================================================
7 (1.13 % of base) - System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String
 ; Assembly listing for method System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):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; 24 single block inlinees; 11 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T24] (  4,  4   )     ref  ->  rdi         class-hnd single-def <System.Enum+EnumInfo`1[int]>
 ;  V01 arg1         [V01,T20] (  6,  8   )     int  ->  rsi         single-def
 ;  V02 loc0         [V02,T10] ( 11, 16   )     ref  ->  rbx         class-hnd exact single-def <System.String[]>
 ;  V03 loc1         [V03,T18] (  7, 11   )     ref  ->  rdi         class-hnd single-def <int[]>
 ;  V04 loc2         [V04,T28] (  6,  4.50)     ref  ->  r15         class-hnd <System.String>
 ;  V05 loc3         [V05,T33] (  6,  3   )     int  ->  rcx         ld-addr-op
 ;* V06 loc4         [V06    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[int]>
 ;  V07 loc5         [V07,T26] (  4,  5   )     int  ->  rdx         ld-addr-op
 ;  V08 loc6         [V08,T19] (  8, 10   )     int  ->  r13         ld-addr-op
 ;# V09 OutArgs      [V09    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V10 tmp1         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
 ;* V11 tmp2         [V11    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[int]>
 ;* V12 tmp3         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V13 tmp4         [V13,T34] (  5,  3   )     ref  ->  r15         class-hnd "Inline return value spill temp" <System.String>
 ;  V14 tmp5         [V14,T32] (  7,  3.25)     int  ->  rcx         "Inline stloc first use temp"
 ;* V15 tmp6         [V15    ] (  0,  0   )     int  ->  zero-ref    "impAppendStmt"
 ;* V16 tmp7         [V16    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V17 tmp8         [V17    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V18 tmp9         [V18,T37] (  2,  2   )    long  ->  r14         "Inlining Arg"
 ;  V19 tmp10        [V19,T38] (  2,  2   )     int  ->  rcx         "Inlining Arg"
 ;  V20 tmp11        [V20,T06] (  6, 22   )     int  ->  rsi         "Inlining Arg"
 ;  V21 tmp12        [V21,T09] (  5, 18   )     int  ->   r8         "Inline stloc first use temp"
 ;* V22 tmp13        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[int]>
 ;* V23 tmp14        [V23    ] (  0,  0   )     int  ->  zero-ref    "Span.get_Item index"
 ;* V24 tmp15        [V24    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V25 tmp16        [V25    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V26 tmp17        [V26    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V27 tmp18        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
 ;* V28 tmp19        [V28    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V29 tmp20        [V29    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V30 tmp21        [V30    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V31 tmp22        [V31    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V32 tmp23        [V32    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[int]>
 ;* V33 tmp24        [V33    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
 ;* V34 tmp25        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
 ;* V35 tmp26        [V35    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V36 tmp27        [V36,T36] (  2,  2   )   byref  ->  r12         single-def "Inlining Arg"
 ;  V37 tmp28        [V37,T39] (  2,  2   )     int  ->  rax         "Inlining Arg"
 ;* V38 tmp29        [V38    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[int]>
 ;  V39 tmp30        [V39,T44] (  2,  1   )     int  ->  rdx         "Inline stloc first use temp"
 ;  V40 tmp31        [V40,T16] (  3, 12   )     ref  ->  rsi         class-hnd exact "Inline stloc first use temp" <System.String>
 ;* V41 tmp32        [V41    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V42 tmp33        [V42    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.Span`1[ushort]>
 ;* V43 tmp34        [V43    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V44 tmp35        [V44    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V45 tmp36        [V45    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V46 tmp37        [V46    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V47 tmp38        [V47,T03] (  3, 24   )     int  ->   r8         "Inlining Arg"
+;  V47 tmp38        [V47,T03] (  3, 24   )     int  ->  rdx         "Inlining Arg"
 ;* V48 tmp39        [V48    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V49 tmp40        [V49,T12] (  2, 16   )   byref  ->  r12         "Inlining Arg"
-;  V50 tmp41        [V50,T04] (  2, 16   )     int  ->  rax         "Inlining Arg"
+;  V50 tmp41        [V50,T04] (  2, 16   )     int  ->  rsi         "Inlining Arg"
 ;* V51 tmp42        [V51    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V52 tmp43        [V52,T13] (  2, 16   )   byref  ->  rcx         "Inlining Arg"
-;  V53 tmp44        [V53,T14] (  2, 16   )     int  ->  rax         "Inlining Arg"
-;  V54 tmp45        [V54,T29] (  4,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.String>
-;* V55 tmp46        [V55    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;  V52 tmp43        [V52,T13] (  2, 16   )   byref  ->  rsi         "Inlining Arg"
+;  V53 tmp44        [V53,T14] (  2, 16   )     int  ->  rdx         "Inlining Arg"
+;* V54 tmp45        [V54    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;  V55 tmp46        [V55,T29] (  4,  4   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.String>
 ;* V56 tmp47        [V56    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V57 tmp48        [V57    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V58 tmp49        [V58    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V59 tmp50        [V59,T31] (  3,  3   )   byref  ->  r14         "field V06._reference (fldOffset=0x0)" P-INDEP
 ;* V60 tmp51        [V60,T47] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
 ;  V61 tmp52        [V61,T40] (  2,  1   )   byref  ->  r14         single-def "field V10._reference (fldOffset=0x0)" P-INDEP
 ;* V62 tmp53        [V62,T48] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
 ;* V63 tmp54        [V63    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
 ;* V64 tmp55        [V64    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
 ;  V65 tmp56        [V65,T41] (  2,  1   )   byref  ->  r12         single-def "field V12._reference (fldOffset=0x0)" P-INDEP
 ;  V66 tmp57        [V66,T45] (  2,  1   )     int  ->  rax         "field V12._length (fldOffset=0x8)" P-INDEP
 ;* V67 tmp58        [V67,T46] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;* V68 tmp59        [V68,T49] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
 ;  V69 tmp60        [V69,T42] (  2,  1   )   byref  ->  r14         single-def "field V27._reference (fldOffset=0x0)" P-INDEP
 ;* V70 tmp61        [V70    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
 ;* V71 tmp62        [V71    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V32._reference (fldOffset=0x0)" P-INDEP
 ;* V72 tmp63        [V72    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
 ;  V73 tmp64        [V73,T43] (  2,  1   )   byref  ->  r14         single-def "field V33._reference (fldOffset=0x0)" P-INDEP
 ;* V74 tmp65        [V74,T50] (  0,  0   )     int  ->  zero-ref    "field V33._length (fldOffset=0x8)" P-INDEP
 ;  V75 tmp66        [V75,T27] (  3,  5   )   byref  ->  r14         single-def "field V38._reference (fldOffset=0x0)" P-INDEP
 ;  V76 tmp67        [V76,T25] (  4,  5.50)     int  ->  r13         "field V38._length (fldOffset=0x8)" P-INDEP
 ;  V77 tmp68        [V77,T00] (  9, 29   )   byref  ->  r12         "field V41._reference (fldOffset=0x0)" P-INDEP
 ;  V78 tmp69        [V78,T01] (  9, 29   )     int  ->  [rbp-0x2C]  "field V41._length (fldOffset=0x8)" P-INDEP
 ;* V79 tmp70        [V79    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
 ;* V80 tmp71        [V80    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
 ;* V81 tmp72        [V81    ] (  0,  0   )   byref  ->  zero-ref    "field V43._reference (fldOffset=0x0)" P-INDEP
 ;* V82 tmp73        [V82    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
 ;  V83 tmp74        [V83,T21] (  2,  8   )   byref  ->  r12         "field V48._reference (fldOffset=0x0)" P-INDEP
 ;* V84 tmp75        [V84,T30] (  0,  0   )     int  ->  zero-ref    "field V48._length (fldOffset=0x8)" P-INDEP
-;  V85 tmp76        [V85,T22] (  2,  8   )   byref  ->  rcx         "field V51._reference (fldOffset=0x0)" P-INDEP
-;  V86 tmp77        [V86,T23] (  2,  8   )     int  ->  rax         "field V51._length (fldOffset=0x8)" P-INDEP
-;* V87 tmp78        [V87    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V55._reference (fldOffset=0x0)" P-INDEP
-;* V88 tmp79        [V88    ] (  0,  0   )     int  ->  zero-ref    "field V55._length (fldOffset=0x8)" P-INDEP
+;  V85 tmp76        [V85,T22] (  2,  8   )   byref  ->  rsi         "field V51._reference (fldOffset=0x0)" P-INDEP
+;  V86 tmp77        [V86,T23] (  2,  8   )     int  ->  rdx         "field V51._length (fldOffset=0x8)" P-INDEP
+;* V87 tmp78        [V87    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V54._reference (fldOffset=0x0)" P-INDEP
+;* V88 tmp79        [V88    ] (  0,  0   )     int  ->  zero-ref    "field V54._length (fldOffset=0x8)" P-INDEP
 ;  V89 tmp80        [V89,T05] (  3, 24   )     int  ->  rdx         "index expr"
-;  V90 tmp81        [V90,T35] (  3,  3   )     int  ->  rcx         "index expr"
+;  V90 tmp81        [V90,T35] (  3,  3   )     int  ->  rsi         "index expr"
 ;  V91 GsCookie     [V91    ] (  1,  1   )    long  ->  [rbp-0x50]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V92 cse0         [V92,T17] (  3, 12   )    long  ->  [rbp-0x38]  spill-single-def "CSE #09: moderate"
 ;  V93 cse1         [V93,T15] (  8, 14.50)     int  ->  rax         multi-def "CSE #01: moderate"
 ;  V94 cse2         [V94,T11] (  4, 16   )     int  ->  [rbp-0x3C]  spill-single-def "CSE #07: moderate"
 ;  V95 rat0         [V95,T07] (  9, 21.75)    long  ->  rdx         "Widened IV V14"
 ;  V96 rat1         [V96,T02] (  9, 26.50)    long  ->  rcx         "Widened IV V19"
 ;  V97 rat2         [V97,T08] (  7, 21   )    long  ->  [rbp-0x48]  "Widened IV V39"
 ;
 ; Lcl frame size = 40
 
 G_M902_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x50]
        mov      qword ptr [rbp-0x50], 0xD1FFAB1E
 						;; size=27 bbWeight=1 PerfScore 7.75
 G_M902_IG02:
        mov      rbx, gword ptr [rdi+0x10]
        mov      rdi, gword ptr [rdi+0x08]
        test     esi, esi
        je       SHORT G_M902_IG09
 						;; size=12 bbWeight=1 PerfScore 5.25
 G_M902_IG03:
        mov      eax, dword ptr [rdi+0x08]
        lea      ecx, [rax-0x01]
        mov      edx, ecx
        cmp      eax, edx
        jbe      SHORT G_M902_IG07
        align    [13 bytes for IG04]
 						;; size=25 bbWeight=0.50 PerfScore 2.12
 G_M902_IG04:
        cmp      edx, eax
-       jae      G_M902_IG26
+       jae      G_M902_IG28
        cmp      dword ptr [rdi+4*rdx+0x10], esi
        jle      SHORT G_M902_IG06
        dec      edx
        cmp      eax, edx
        ja       SHORT G_M902_IG04
 						;; size=20 bbWeight=4 PerfScore 27.00
 G_M902_IG05:
        mov      ecx, edx
        jmp      SHORT G_M902_IG07
        align    [0 bytes for IG13]
 						;; size=4 bbWeight=0.25 PerfScore 0.56
 G_M902_IG06:
        mov      ecx, edx
        mov      edx, ecx
        cmp      dword ptr [rdi+4*rdx+0x10], esi
        je       SHORT G_M902_IG08
 						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M902_IG07:
        xor      r15, r15
        jmp      SHORT G_M902_IG11
 						;; size=5 bbWeight=0.50 PerfScore 1.12
 G_M902_IG08:
        cmp      ecx, dword ptr [rbx+0x08]
-       jae      G_M902_IG26
+       jae      G_M902_IG28
        mov      edx, ecx
        mov      r15, gword ptr [rbx+8*rdx+0x10]
        jmp      SHORT G_M902_IG11
 						;; size=18 bbWeight=0.50 PerfScore 4.12
 G_M902_IG09:
        xor      ecx, ecx
        mov      eax, dword ptr [rdi+0x08]
        test     eax, eax
        je       SHORT G_M902_IG10
        cmp      dword ptr [rdi+0x10], 0
        jne      SHORT G_M902_IG10
        cmp      dword ptr [rbx+0x08], 0
-       jbe      G_M902_IG26
+       jbe      G_M902_IG28
        mov      r15, gword ptr [rbx+0x10]
        jmp      SHORT G_M902_IG11
 						;; size=31 bbWeight=0.50 PerfScore 7.75
 G_M902_IG10:
        mov      r15, 0xD1FFAB1E      ; '0'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M902_IG11:
        test     r15, r15
-       jne      G_M902_IG20
+       jne      G_M902_IG22
 						;; size=9 bbWeight=1 PerfScore 1.25
 G_M902_IG12:
        test     dword ptr [rsp], esp
        sub      rsp, 256
        lea      r14, [rsp]
        xor      edx, edx
        xor      r13d, r13d
        mov      ecx, ecx
        jmp      SHORT G_M902_IG16
 						;; size=23 bbWeight=0.50 PerfScore 3.25
 G_M902_IG13:
        mov      r9d, esi
        and      r9d, r8d
        cmp      r9d, r8d
        jne      SHORT G_M902_IG15
 						;; size=11 bbWeight=4 PerfScore 7.00
 G_M902_IG14:
        andn     esi, r8d, esi
        cmp      r13d, 64
-       jae      G_M902_IG26
+       jae      G_M902_IG28
        mov      r8d, r13d
        mov      dword ptr [r14+4*r8], ecx
        inc      r13d
        cmp      ecx, dword ptr [rbx+0x08]
-       jae      G_M902_IG26
+       jae      G_M902_IG28
        mov      r8, gword ptr [rbx+8*rcx+0x10]
        add      edx, dword ptr [r8+0x08]
-       jo       G_M902_IG27
+       jo       G_M902_IG29
        test     esi, esi
        je       SHORT G_M902_IG17
 						;; size=53 bbWeight=2 PerfScore 29.00
 G_M902_IG15:
        dec      ecx
 						;; size=2 bbWeight=4 PerfScore 1.00
 G_M902_IG16:
        cmp      eax, ecx
        jbe      SHORT G_M902_IG17
        mov      r8d, dword ptr [rdi+4*rcx+0x10]
        mov      r9d, ecx
        or       r9d, r8d
        jne      SHORT G_M902_IG13
 						;; size=17 bbWeight=4 PerfScore 19.00
 G_M902_IG17:
        test     esi, esi
-       jne      G_M902_IG20
+       jne      G_M902_IG22
        cmp      r13d, 64
-       ja       G_M902_IG25
+       ja       G_M902_IG27
        lea      edi, [r13+r13]
        add      edi, -2
        add      edi, edx
-       jo       G_M902_IG27
+       jo       G_M902_IG29
        call     System.String:FastAllocateString(int):System.String
        mov      r15, rax
        lea      r12, bword ptr [r15+0x0C]
        mov      eax, dword ptr [r15+0x08]
        lea      edx, [r13-0x01]
        mov      ecx, edx
        test     ecx, ecx
-       je       G_M902_IG19
-						;; size=64 bbWeight=0.50 PerfScore 5.88
+       jne      SHORT G_M902_IG20
+						;; size=60 bbWeight=0.50 PerfScore 5.88
 G_M902_IG18:
+       mov      edx, eax
+       jmp      G_M902_IG21
+						;; size=7 bbWeight=0.25 PerfScore 0.56
+G_M902_IG19:
+       mov      eax, edx
+						;; size=2 bbWeight=2 PerfScore 0.50
+G_M902_IG20:
        cmp      ecx, r13d
-       jae      G_M902_IG26
+       jae      G_M902_IG28
        mov      qword ptr [rbp-0x48], rcx
        mov      edx, dword ptr [r14+4*rcx]
        cmp      edx, dword ptr [rbx+0x08]
-       jae      G_M902_IG26
+       jae      G_M902_IG28
        mov      rsi, gword ptr [rbx+8*rdx+0x10]
        mov      r8d, dword ptr [rsi+0x08]
        mov      dword ptr [rbp-0x3C], r8d
        mov      dword ptr [rbp-0x2C], eax
        cmp      r8d, eax
-       jg       G_M902_IG24
+       jg       G_M902_IG26
        mov      r9d, r8d
        add      r9, r9
        mov      qword ptr [rbp-0x38], r9
        mov      rdx, r9
        add      rsi, 12
        mov      rdi, r12
        mov      r10, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [r10]System.SpanHelpers:Memmove(byref,byref,ulong)
-       mov      r8d, dword ptr [rbp-0x3C]
-       mov      eax, dword ptr [rbp-0x2C]
-       cmp      r8d, eax
-       ja       G_M902_IG25
-       mov      r9, qword ptr [rbp-0x38]
-       add      r12, r9
-       sub      eax, r8d
-       cmp      eax, 2
-       jb       G_M902_IG25
-       lea      rcx, bword ptr [r12+0x04]
-       add      eax, -2
+       mov      edx, dword ptr [rbp-0x3C]
+       mov      esi, dword ptr [rbp-0x2C]
+       cmp      edx, esi
+       ja       G_M902_IG27
+       mov      rdi, qword ptr [rbp-0x38]
+       add      r12, rdi
+       sub      esi, edx
+       mov      edx, esi
+       cmp      edx, 2
+       jb       G_M902_IG27
+       lea      rsi, bword ptr [r12+0x04]
+       add      edx, -2
        mov      word  ptr [r12], 44
        mov      word  ptr [r12+0x02], 32
-       mov      r12, rcx
-       mov      rcx, qword ptr [rbp-0x48]
-       dec      ecx
-       jne      G_M902_IG18
-						;; size=157 bbWeight=4 PerfScore 129.00
-G_M902_IG19:
+       mov      r12, rsi
+       mov      rsi, qword ptr [rbp-0x48]
+       dec      esi
+       mov      rcx, rsi
+       jne      G_M902_IG19
+						;; size=159 bbWeight=4 PerfScore 131.00
+G_M902_IG21:
        test     r13d, r13d
-       je       SHORT G_M902_IG26
-       mov      ecx, dword ptr [r14]
-       cmp      ecx, dword ptr [rbx+0x08]
-       jae      SHORT G_M902_IG26
-       mov      rsi, gword ptr [rbx+8*rcx+0x10]
-       cmp      dword ptr [rsi+0x08], eax
-       jg       SHORT G_M902_IG24
+       je       SHORT G_M902_IG28
+       mov      esi, dword ptr [r14]
+       cmp      esi, dword ptr [rbx+0x08]
+       jae      SHORT G_M902_IG28
+       mov      rsi, gword ptr [rbx+8*rsi+0x10]
+       cmp      dword ptr [rsi+0x08], edx
+       jg       SHORT G_M902_IG26
        mov      edx, dword ptr [rsi+0x08]
        add      rdx, rdx
        add      rsi, 12
        mov      rdi, r12
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
 						;; size=48 bbWeight=0.50 PerfScore 9.62
-G_M902_IG20:
+G_M902_IG22:
        mov      rax, r15
 						;; size=3 bbWeight=1 PerfScore 0.25
-G_M902_IG21:
+G_M902_IG23:
        cmp      qword ptr [rbp-0x50], 0xD1FFAB1E
-       je       SHORT G_M902_IG22
+       je       SHORT G_M902_IG24
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=1 PerfScore 4.00
-G_M902_IG22:
+G_M902_IG24:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
-G_M902_IG23:
+G_M902_IG25:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.50
-G_M902_IG24:
+G_M902_IG26:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M902_IG25:
+G_M902_IG27:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M902_IG26:
+G_M902_IG28:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
-G_M902_IG27:
+G_M902_IG29:
        call     CORINFO_HELP_OVERFLOW
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 618, prolog size 27, PerfScore 272.06, instruction count 174, allocated bytes for code 618 (MethodHash=5deffc79) for method System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String (FullOpts)
+; Total bytes of code 625, prolog size 27, PerfScore 275.12, instruction count 179, allocated bytes for code 625 (MethodHash=5deffc79) for method System.Enum:FormatFlagNames[int](System.Enum+EnumInfo`1[int],int):System.String (FullOpts)
 ; ============================================================
3 (1.60 % of base) - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this
 ; Assembly listing for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):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; 1 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] ( 11,  7   )   byref  ->  rbx         this single-def
 ;  V01 arg1         [V01,T01] (  6,  4   )     ref  ->  r15         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   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;  V04 tmp2         [V04,T04] (  3,  3   )     int  ->  rsi         "Inlining Arg"
-;  V05 tmp3         [V05,T02] (  4,  4   )     int  ->  rcx         "Inlining Arg"
-;  V06 tmp4         [V06,T03] (  3,  3   )   byref  ->  rax         single-def "Inlining Arg"
+;  V05 tmp3         [V05,T02] (  4,  4   )     int  ->  rsi         "Inlining Arg"
+;  V06 tmp4         [V06,T03] (  3,  3   )   byref  ->  rdx         single-def "Inlining Arg"
 ;* V07 tmp5         [V07    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V08 tmp6         [V08,T06] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
-;  V09 tmp7         [V09,T07] (  2,  2   )     int  ->  rdx         "Inlining Arg"
+;  V08 tmp6         [V08,T06] (  2,  2   )   byref  ->  rax         single-def "Inlining Arg"
+;  V09 tmp7         [V09,T07] (  2,  2   )     int  ->  rdi         "Inlining Arg"
 ;* V10 tmp8         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V11 tmp9         [V11    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V13 tmp11        [V13    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V14 tmp12        [V14    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
 ;* V15 tmp13        [V15    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V07._reference (fldOffset=0x0)" P-INDEP
 ;* V17 tmp15        [V17    ] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
 ;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
 ;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
-;  V20 cse0         [V20,T08] (  3,  1.50)     int  ->  rdx         "CSE #01: moderate"
+;  V20 cse0         [V20,T08] (  3,  1.50)     int  ->  rdi         "CSE #01: moderate"
 ;  V21 cse1         [V21,T05] (  5,  2.50)     int  ->  r14         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M21571_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=18 bbWeight=1 PerfScore 6.00
 G_M21571_IG02:
        cmp      byte  ptr [rbx+0x14], 0
        jne      SHORT G_M21571_IG05
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M21571_IG03:
        test     r15, r15
        je       SHORT G_M21571_IG06
        mov      r14d, dword ptr [r15+0x08]
        mov      esi, r14d
        mov      edi, dword ptr [rbx+0x20]
        sub      edi, dword ptr [rbx+0x10]
        cmp      edi, esi
        jge      SHORT G_M21571_IG04
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
 						;; size=37 bbWeight=0.50 PerfScore 6.62
 G_M21571_IG04:
-       lea      rax, bword ptr [rbx+0x18]
-       mov      ecx, dword ptr [rbx+0x10]
-       mov      edx, dword ptr [rax+0x08]
-       cmp      ecx, edx
+       lea      rdx, bword ptr [rbx+0x18]
+       mov      esi, dword ptr [rbx+0x10]
+       mov      edi, dword ptr [rdx+0x08]
+       cmp      esi, edi
        ja       SHORT G_M21571_IG09
-       mov      rax, bword ptr [rax]
-       mov      edi, ecx
-       lea      rdi, bword ptr [rax+2*rdi]
-       sub      edx, ecx
-       cmp      r14d, edx
+       mov      rdx, bword ptr [rdx]
+       mov      eax, esi
+       lea      rax, bword ptr [rdx+2*rax]
+       sub      edi, esi
+       cmp      r14d, edi
        ja       SHORT G_M21571_IG08
        mov      edx, r14d
        add      rdx, rdx
        lea      rsi, bword ptr [r15+0x0C]
+       mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        add      dword ptr [rbx+0x10], r14d
        jmp      SHORT G_M21571_IG06
-						;; size=58 bbWeight=0.50 PerfScore 9.62
+						;; size=61 bbWeight=0.50 PerfScore 9.75
 G_M21571_IG05:
        mov      rdi, rbx
        mov      rdx, r15
        mov      rsi, 0xD1FFAB1E      ; System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendCustomFormatter[System.String](System.String,System.String):this
        xor      rcx, rcx
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendCustomFormatter[System.__Canon](System.__Canon,System.String):this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendCustomFormatter[System.__Canon](System.__Canon,System.String):this
 						;; size=30 bbWeight=0.50 PerfScore 2.12
 G_M21571_IG06:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
 G_M21571_IG07:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
 G_M21571_IG08:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M21571_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 187, prolog size 12, PerfScore 31.88, instruction count 58, allocated bytes for code 187 (MethodHash=00faabbc) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this (FullOpts)
+; Total bytes of code 190, prolog size 12, PerfScore 32.00, instruction count 59, allocated bytes for code 190 (MethodHash=00faabbc) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSlow(System.String):this (FullOpts)
 ; ============================================================
3 (2.26 % of base) - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this
 ; Assembly listing for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):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; 1 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  7,  7   )   byref  ->  rbx         this single-def
 ;  V01 arg1         [V01,T02] (  4,  4   )     ref  ->  r15         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   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
-;  V04 tmp2         [V04,T01] (  4,  8   )     int  ->  rcx         "Inlining Arg"
-;  V05 tmp3         [V05,T03] (  3,  6   )   byref  ->  rax         single-def "Inlining Arg"
+;  V04 tmp2         [V04,T01] (  4,  8   )     int  ->  rsi         "Inlining Arg"
+;  V05 tmp3         [V05,T03] (  3,  6   )   byref  ->  rdx         single-def "Inlining Arg"
 ;* V06 tmp4         [V06    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V07 tmp5         [V07,T05] (  2,  4   )   byref  ->  rdi         single-def "Inlining Arg"
-;  V08 tmp6         [V08,T06] (  2,  4   )     int  ->  rdx         "Inlining Arg"
+;  V07 tmp5         [V07,T05] (  2,  4   )   byref  ->  rax         single-def "Inlining Arg"
+;  V08 tmp6         [V08,T06] (  2,  4   )     int  ->  rdi         "Inlining Arg"
 ;* V09 tmp7         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V11 tmp9         [V11    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V12 tmp10        [V12    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V13 tmp11        [V13    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
 ;* V14 tmp12        [V14    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V06._reference (fldOffset=0x0)" P-INDEP
 ;* V16 tmp14        [V16    ] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
 ;* V17 tmp15        [V17    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V09._reference (fldOffset=0x0)" P-INDEP
 ;* V18 tmp16        [V18    ] (  0,  0   )     int  ->  zero-ref    "field V09._length (fldOffset=0x8)" P-INDEP
-;  V19 cse0         [V19,T07] (  3,  3   )     int  ->  rdx         "CSE #01: aggressive"
+;  V19 cse0         [V19,T07] (  3,  3   )     int  ->  rdi         "CSE #01: aggressive"
 ;  V20 cse1         [V20,T04] (  5,  5   )     int  ->  r14         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M61046_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=18 bbWeight=1 PerfScore 6.00
 G_M61046_IG02:
        mov      r14d, dword ptr [r15+0x08]
        mov      esi, r14d
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this
-       lea      rax, bword ptr [rbx+0x18]
-       mov      ecx, dword ptr [rbx+0x10]
-       mov      edx, dword ptr [rax+0x08]
-       cmp      ecx, edx
+       lea      rdx, bword ptr [rbx+0x18]
+       mov      esi, dword ptr [rbx+0x10]
+       mov      edi, dword ptr [rdx+0x08]
+       cmp      esi, edi
        ja       SHORT G_M61046_IG05
-       mov      rax, bword ptr [rax]
-       mov      edi, ecx
-       lea      rdi, bword ptr [rax+2*rdi]
-       sub      edx, ecx
-       cmp      r14d, edx
+       mov      rdx, bword ptr [rdx]
+       mov      eax, esi
+       lea      rax, bword ptr [rdx+2*rax]
+       sub      edi, esi
+       cmp      r14d, edi
        ja       SHORT G_M61046_IG04
        mov      edx, r14d
        add      rdx, rdx
        lea      rsi, bword ptr [r15+0x0C]
+       mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        add      dword ptr [rbx+0x10], r14d
-						;; size=78 bbWeight=1 PerfScore 23.00
+						;; size=81 bbWeight=1 PerfScore 23.25
 G_M61046_IG03:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
 G_M61046_IG04:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M61046_IG05:
        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 133, prolog size 12, PerfScore 32.25, instruction count 42, allocated bytes for code 133 (MethodHash=5c741189) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this (FullOpts)
+; Total bytes of code 136, prolog size 12, PerfScore 32.50, instruction count 43, allocated bytes for code 136 (MethodHash=5c741189) for method System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):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/c83beaaaa32759e7d73125253807dfc0

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 11, 2025

Top method improvements

-13 (-13.68 % of base) - System.Text.Json.JsonCamelCaseNamingPolicy+<>c:b__0_0(System.Span`1[ushort],System.String):this
 ; Assembly listing for method System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):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; 0 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Text.Json.JsonCamelCaseNamingPolicy+<>c>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg single-def <System.Span`1[ushort]>
 ;  V02 arg2         [V02,T00] (  4,  4   )     ref  ->  rcx         class-hnd single-def <System.String>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V05 tmp2         [V05    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V06 tmp3         [V06    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp4         [V07    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V08 tmp5         [V08,T01] (  3,  3   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V09 tmp6         [V09,T02] (  3,  3   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;* V10 tmp7         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V04._reference (fldOffset=0x0)" P-INDEP
 ;* V11 tmp8         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V04._length (fldOffset=0x8)" P-INDEP
-;  V12 cse0         [V12,T03] (  3,  3   )     int  ->  r14         "CSE #01: aggressive"
+;  V12 cse0         [V12,T03] (  3,  3   )     int  ->  rdx         "CSE #01: aggressive"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 0
 
 G_M52091_IG01:
        push     rbp
        push     r15
-       push     r14
        push     rbx
-       push     rax
-       lea      rbp, [rsp+0x20]
+       lea      rbp, [rsp+0x10]
        mov      rbx, rsi
        mov      r15d, edx
-						;; size=18 bbWeight=1 PerfScore 6.00
+						;; size=15 bbWeight=1 PerfScore 4.00
 G_M52091_IG02:
-       mov      r14d, dword ptr [rcx+0x08]
-       cmp      r14d, r15d
+       mov      edx, dword ptr [rcx+0x08]
+       cmp      edx, r15d
        jg       SHORT G_M52091_IG04
-       mov      edx, r14d
        add      rdx, rdx
        lea      rsi, bword ptr [rcx+0x0C]
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rdi, rbx
        mov      esi, r15d
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Json.JsonCamelCaseNamingPolicy:FixCasing(System.Span`1[ushort])
        call     [rax]System.Text.Json.JsonCamelCaseNamingPolicy:FixCasing(System.Span`1[ushort])
        nop      
-						;; size=53 bbWeight=1 PerfScore 11.75
+						;; size=49 bbWeight=1 PerfScore 11.50
 G_M52091_IG03:
-       add      rsp, 8
        pop      rbx
-       pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=5 bbWeight=1 PerfScore 2.50
 G_M52091_IG04:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 95, prolog size 12, PerfScore 21.00, instruction count 31, allocated bytes for code 95 (MethodHash=ff1b3484) for method System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):this (FullOpts)
+; Total bytes of code 82, prolog size 9, PerfScore 18.00, instruction count 26, allocated bytes for code 82 (MethodHash=ff1b3484) for method System.Text.Json.JsonCamelCaseNamingPolicy+<>c:<ConvertName>b__0_0(System.Span`1[ushort],System.String):this (FullOpts)
 ; ============================================================
-9 (-14.29 % of base) - System.String:CopyTo(System.Span`1[ushort]):this
 ; Assembly listing for method System.String:CopyTo(System.Span`1[ushort]):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; 0 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  4,  4   )     ref  ->  rdi         this class-hnd single-def <System.String>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V03 tmp1         [V03    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V04 tmp2         [V04    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V05 tmp3         [V05    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V06 tmp4         [V06,T01] (  2,  2   )   byref  ->  rax         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V07 tmp5         [V07,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V08 cse0         [V08,T03] (  3,  3   )     int  ->  rbx         "CSE #01: aggressive"
+;  V08 cse0         [V08,T03] (  3,  3   )     int  ->  rsi         "CSE #01: aggressive"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 0
 
 G_M48522_IG01:
        push     rbp
-       push     rbx
-       push     rax
-       lea      rbp, [rsp+0x10]
+       mov      rbp, rsp
        mov      rax, rsi
-						;; size=11 bbWeight=1 PerfScore 3.75
+						;; size=7 bbWeight=1 PerfScore 1.50
 G_M48522_IG02:
-       mov      ebx, dword ptr [rdi+0x08]
-       cmp      ebx, edx
+       mov      esi, dword ptr [rdi+0x08]
+       cmp      esi, edx
        jg       SHORT G_M48522_IG04
-       mov      edx, ebx
+       mov      edx, esi
        add      rdx, rdx
        lea      rsi, bword ptr [rdi+0x0C]
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        nop      
 						;; size=32 bbWeight=1 PerfScore 8.00
 G_M48522_IG03:
-       add      rsp, 8
-       pop      rbx
        pop      rbp
        ret      
-						;; size=7 bbWeight=1 PerfScore 2.25
+						;; size=2 bbWeight=1 PerfScore 1.50
 G_M48522_IG04:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 63, prolog size 8, PerfScore 14.00, instruction count 22, allocated bytes for code 63 (MethodHash=6df64275) for method System.String:CopyTo(System.Span`1[ushort]):this (FullOpts)
+; Total bytes of code 54, prolog size 4, PerfScore 11.00, instruction count 18, allocated bytes for code 54 (MethodHash=6df64275) for method System.String:CopyTo(System.Span`1[ushort]):this (FullOpts)
 ; ============================================================
-8 (-2.80 % of base) - System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort])
 ; Assembly listing for method System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (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; 2 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T10] (  6, 12   )     ref  ->  r14         class-hnd single-def <System.String[]>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[int]>
 ;* V02 arg2         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
 ;  V03 loc0         [V03,T20] (  2,  2   )     int  ->  rdx        
 ;  V04 loc1         [V04,T11] (  3, 12   )     ref  ->  rsi         class-hnd exact <System.String>
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V06 tmp1         [V06    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.Span`1[ushort]>
 ;* V07 tmp2         [V07    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V08 tmp3         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V09 tmp4         [V09    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V10 tmp5         [V10    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V11 tmp6         [V11,T01] (  3, 24   )     int  ->  rcx         "Inlining Arg"
+;  V11 tmp6         [V11,T01] (  3, 24   )     int  ->  rdx         "Inlining Arg"
 ;* V12 tmp7         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V13 tmp8         [V13,T00] (  4, 32   )   byref  ->   r8         "Inlining Arg"
+;  V13 tmp8         [V13,T00] (  4, 32   )   byref  ->  rsi         "Inlining Arg"
 ;  V14 tmp9         [V14,T02] (  3, 24   )     int  ->  rbx         "Inlining Arg"
 ;* V15 tmp10        [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V16 tmp11        [V16,T08] (  2, 16   )   byref  ->  r15         "Inlining Arg"
 ;  V17 tmp12        [V17,T09] (  2, 16   )     int  ->  rbx         "Inlining Arg"
-;  V18 tmp13        [V18,T17] (  3,  6   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.String>
-;* V19 tmp14        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V18 tmp13        [V18    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;  V19 tmp14        [V19,T17] (  3,  6   )     ref  ->  rsi         class-hnd exact single-def "Inlining Arg" <System.String>
 ;* V20 tmp15        [V20    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V21 tmp16        [V21    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V22 tmp17        [V22    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V23 tmp18        [V23,T14] (  3,  6   )   byref  ->  r12         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V24 tmp19        [V24,T13] (  4,  7   )     int  ->  r13         single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;  V25 tmp20        [V25,T06] (  5, 14   )   byref  ->  r15         "field V02._reference (fldOffset=0x0)" P-INDEP
 ;  V26 tmp21        [V26,T05] (  6, 18   )     int  ->  rbx         "field V02._length (fldOffset=0x8)" P-INDEP
 ;* V27 tmp22        [V27    ] (  0,  0   )   byref  ->  zero-ref    "field V06._reference (fldOffset=0x0)" P-INDEP
 ;* V28 tmp23        [V28    ] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
 ;* V29 tmp24        [V29    ] (  0,  0   )   byref  ->  zero-ref    "field V07._reference (fldOffset=0x0)" P-INDEP
 ;* V30 tmp25        [V30    ] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
 ;* V31 tmp26        [V31    ] (  0,  0   )   byref  ->  zero-ref    "field V12._reference (fldOffset=0x0)" P-INDEP
 ;* V32 tmp27        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
 ;  V33 tmp28        [V33,T15] (  2,  8   )   byref  ->  r15         "field V15._reference (fldOffset=0x0)" P-INDEP
 ;  V34 tmp29        [V34,T16] (  2,  8   )     int  ->  rbx         "field V15._length (fldOffset=0x8)" P-INDEP
-;* V35 tmp30        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V19._reference (fldOffset=0x0)" P-INDEP
-;* V36 tmp31        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
+;* V35 tmp30        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V36 tmp31        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0x8)" P-INDEP
 ;  V37 tmp32        [V37,T03] (  3, 24   )     int  ->  rdx         "index expr"
-;  V38 tmp33        [V38,T18] (  3,  6   )     int  ->  rax         "index expr"
+;  V38 tmp33        [V38,T18] (  3,  6   )     int  ->  rdx         "index expr"
 ;  V39 cse0         [V39,T12] (  3, 12   )    long  ->  [rbp-0x30]  spill-single-def "CSE #03: moderate"
 ;  V40 cse1         [V40,T07] (  4, 16   )     int  ->  [rbp-0x34]  spill-single-def "CSE #01: moderate"
-;  V41 cse2         [V41,T19] (  3,  3   )     int  ->  r14         "CSE #05: moderate"
+;  V41 cse2         [V41,T19] (  3,  3   )     int  ->  rdx         "CSE #05: moderate"
 ;  V42 rat0         [V42,T04] (  7, 22   )    long  ->  [rbp-0x40]  "Widened IV V03"
 ;
 ; Lcl frame size = 24
 
 G_M57347_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x40]
        mov      r14, rdi
        mov      r12, rsi
        mov      r13d, edx
        mov      r15, rcx
        mov      ebx, r8d
 						;; size=34 bbWeight=1 PerfScore 8.00
 G_M57347_IG02:
        lea      edx, [r13-0x01]
        mov      eax, edx
        test     eax, eax
        je       G_M57347_IG04
 						;; size=14 bbWeight=1 PerfScore 2.00
 G_M57347_IG03:
        cmp      eax, r13d
        jae      G_M57347_IG08
        mov      qword ptr [rbp-0x40], rax
        mov      edx, dword ptr [r12+4*rax]
        cmp      edx, dword ptr [r14+0x08]
        jae      G_M57347_IG08
        mov      rsi, gword ptr [r14+8*rdx+0x10]
        mov      ecx, dword ptr [rsi+0x08]
        mov      dword ptr [rbp-0x34], ecx
        cmp      ecx, ebx
-       jg       G_M57347_IG06
+       jg       G_M57347_IG07
        mov      r8d, ecx
        add      r8, r8
        mov      qword ptr [rbp-0x30], r8
        mov      rdx, r8
        add      rsi, 12
        mov      rdi, r15
        mov      r9, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [r9]System.SpanHelpers:Memmove(byref,byref,ulong)
-       mov      ecx, dword ptr [rbp-0x34]
-       cmp      ecx, ebx
-       ja       G_M57347_IG07
-       mov      r8, qword ptr [rbp-0x30]
-       add      r8, r15
-       sub      ebx, ecx
+       mov      edx, dword ptr [rbp-0x34]
+       cmp      edx, ebx
+       ja       SHORT G_M57347_IG06
+       mov      rsi, qword ptr [rbp-0x30]
+       add      rsi, r15
+       sub      ebx, edx
        cmp      ebx, 2
-       jb       SHORT G_M57347_IG07
-       lea      r15, bword ptr [r8+0x04]
+       jb       SHORT G_M57347_IG06
+       lea      r15, bword ptr [rsi+0x04]
        add      ebx, -2
-       mov      word  ptr [r8], 44
-       mov      word  ptr [r8+0x02], 32
-       mov      rax, qword ptr [rbp-0x40]
-       dec      eax
+       mov      word  ptr [rsi], 44
+       mov      word  ptr [rsi+0x02], 32
+       mov      rdx, qword ptr [rbp-0x40]
+       dec      edx
+       mov      rax, rdx
        jne      G_M57347_IG03
-						;; size=136 bbWeight=4 PerfScore 120.00
+						;; size=133 bbWeight=4 PerfScore 121.00
 G_M57347_IG04:
        test     r13d, r13d
        je       SHORT G_M57347_IG08
-       mov      eax, dword ptr [r12]
-       cmp      eax, dword ptr [r14+0x08]
+       mov      edx, dword ptr [r12]
+       cmp      edx, dword ptr [r14+0x08]
        jae      SHORT G_M57347_IG08
-       mov      rsi, gword ptr [r14+8*rax+0x10]
-       mov      r14d, dword ptr [rsi+0x08]
-       cmp      r14d, ebx
-       jg       SHORT G_M57347_IG06
-       mov      edx, r14d
+       mov      rsi, gword ptr [r14+8*rdx+0x10]
+       mov      edx, dword ptr [rsi+0x08]
+       cmp      edx, ebx
+       jg       SHORT G_M57347_IG07
        add      rdx, rdx
        add      rsi, 12
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        nop      
-						;; size=55 bbWeight=1 PerfScore 17.00
+						;; size=50 bbWeight=1 PerfScore 16.75
 G_M57347_IG05:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M57347_IG06:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
-       call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
+       call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M57347_IG07:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
-       call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+       call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M57347_IG08:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 286, prolog size 19, PerfScore 151.25, instruction count 83, allocated bytes for code 286 (MethodHash=81621ffc) for method System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (FullOpts)
+; Total bytes of code 278, prolog size 19, PerfScore 152.00, instruction count 83, allocated bytes for code 278 (MethodHash=81621ffc) for method System.Enum:WriteMultipleFoundFlagsNames(System.String[],System.ReadOnlySpan`1[int],System.Span`1[ushort]) (FullOpts)
 ; ============================================================
-8 (-4.21 % of base) - System.Xml.Serialization.CodeIdentifier+<>c:b__3_0(System.Span`1[ushort],System.String):this
 ; Assembly listing for method System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):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; 10 single block inlinees; 7 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Xml.Serialization.CodeIdentifier+<>c>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
 ;  V02 arg2         [V02,T01] (  4,  4   )     ref  ->  rcx         class-hnd single-def <System.String>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )   byref  ->  zero-ref    single-def "impAppendStmt"
 ;* V05 tmp2         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V06 tmp3         [V06    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp4         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V09 tmp6         [V09,T00] (  5,  7   )  ushort  ->  r15         "Inlining Arg"
 ;  V10 tmp7         [V10,T06] (  3,  2   )  ushort  ->  rax         "Inline return value spill temp"
 ;  V11 tmp8         [V11,T03] (  5,  5   )  ushort  ->  rax         "Inlining Arg"
 ;* V12 tmp9         [V12    ] (  0,  0   )  ushort  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp10        [V13    ] (  0,  0   )    long  ->  zero-ref    "Inline stloc first use temp"
 ;* V14 tmp11        [V14    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
 ;* V15 tmp12        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
 ;* V16 tmp13        [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V17 tmp14        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;  V18 tmp15        [V18    ] (  3,  1.50)  ushort  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
+;  V18 tmp15        [V18    ] (  3,  1.50)  ushort  ->  [rbp-0x18]  do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
 ;  V19 tmp16        [V19,T07] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Globalization.TextInfo>
-;  V20 tmp17        [V20    ] (  2,  2   )  ushort  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
+;  V20 tmp17        [V20    ] (  2,  2   )  ushort  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
 ;  V21 tmp18        [V21,T02] (  4,  4   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V22 tmp19        [V22,T04] (  3,  3   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;* V23 tmp20        [V23    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V24 tmp21        [V24    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
 ;* V25 tmp22        [V25    ] (  0,  0   )   byref  ->  zero-ref    "field V14._reference (fldOffset=0x0)" P-INDEP
 ;* V26 tmp23        [V26    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
 ;* V27 tmp24        [V27    ] (  0,  0   )   byref  ->  zero-ref    "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V28 tmp25        [V28    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
 ;* V29 tmp26        [V29    ] (  0,  0   )   byref  ->  zero-ref    "field V17._reference (fldOffset=0x0)" P-INDEP
 ;* V30 tmp27        [V30    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
-;  V31 cse0         [V31,T05] (  3,  3   )     int  ->  r14         "CSE #01: aggressive"
+;  V31 cse0         [V31,T05] (  3,  3   )     int  ->  rdx         "CSE #01: aggressive"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 16
 
 G_M44984_IG01:
        push     rbp
        push     r15
-       push     r14
        push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x30]
+       sub      rsp, 16
+       lea      rbp, [rsp+0x20]
        mov      rbx, rsi
        mov      r15d, edx
-						;; size=21 bbWeight=1 PerfScore 5.25
+						;; size=19 bbWeight=1 PerfScore 4.25
 G_M44984_IG02:
-       mov      r14d, dword ptr [rcx+0x08]
-       cmp      r14d, r15d
+       mov      edx, dword ptr [rcx+0x08]
+       cmp      edx, r15d
        jg       G_M44984_IG07
-       mov      edx, r14d
        add      rdx, rdx
        lea      rsi, bword ptr [rcx+0x0C]
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        test     r15d, r15d
        je       SHORT G_M44984_IG08
        movzx    r15, word  ptr [rbx]
        cmp      r15d, 127
        jle      SHORT G_M44984_IG04
-						;; size=53 bbWeight=1 PerfScore 12.25
+						;; size=49 bbWeight=1 PerfScore 12.00
 G_M44984_IG03:
        mov      rcx, 0xD1FFAB1E      ; const ptr
        mov      rdi, gword ptr [rcx]
-       mov      word  ptr [rbp-0x28], r15w
+       mov      word  ptr [rbp-0x20], r15w
        xor      ecx, ecx
-       mov      dword ptr [rbp-0x20], ecx
-       lea      rcx, [rbp-0x20]
-       lea      rsi, [rbp-0x28]
+       mov      dword ptr [rbp-0x18], ecx
+       lea      rcx, [rbp-0x18]
+       lea      rsi, [rbp-0x20]
        mov      edx, 1
        mov      r8d, 1
        xor      r9d, r9d
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
        call     [rax]System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
-       movzx    rax, word  ptr [rbp-0x20]
+       movzx    rax, word  ptr [rbp-0x18]
        jmp      SHORT G_M44984_IG05
 						;; size=63 bbWeight=0.50 PerfScore 6.25
 G_M44984_IG04:
        mov      eax, r15d
        lea      ecx, [rax-0x41]
        or       r15d, 32
        movzx    rdx, r15b
        cmp      ecx, 25
        cmovbe   eax, edx
 						;; size=20 bbWeight=0.50 PerfScore 0.88
 G_M44984_IG05:
        mov      word  ptr [rbx], ax
 						;; size=3 bbWeight=1 PerfScore 1.00
 G_M44984_IG06:
-       add      rsp, 24
+       add      rsp, 16
        pop      rbx
-       pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=9 bbWeight=1 PerfScore 2.75
 G_M44984_IG07:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M44984_IG08:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 190, prolog size 15, PerfScore 28.88, instruction count 54, allocated bytes for code 190 (MethodHash=f2a85047) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):this (FullOpts)
+; Total bytes of code 182, prolog size 13, PerfScore 27.12, instruction count 51, allocated bytes for code 182 (MethodHash=f2a85047) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakeCamel>b__3_0(System.Span`1[ushort],System.String):this (FullOpts)
 ; ============================================================
-8 (-4.21 % of base) - System.Xml.Serialization.CodeIdentifier+<>c:b__2_0(System.Span`1[ushort],System.String):this
 ; Assembly listing for method System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):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; 10 single block inlinees; 7 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Xml.Serialization.CodeIdentifier+<>c>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
 ;  V02 arg2         [V02,T01] (  4,  4   )     ref  ->  rcx         class-hnd single-def <System.String>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )   byref  ->  zero-ref    single-def "impAppendStmt"
 ;* V05 tmp2         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V06 tmp3         [V06    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp4         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V08 tmp5         [V08    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V09 tmp6         [V09,T00] (  5,  7   )  ushort  ->  r15         "Inlining Arg"
 ;  V10 tmp7         [V10,T06] (  3,  2   )  ushort  ->  rax         "Inline return value spill temp"
 ;  V11 tmp8         [V11,T03] (  5,  5   )  ushort  ->  rax         "Inlining Arg"
 ;* V12 tmp9         [V12    ] (  0,  0   )  ushort  ->  zero-ref    "Inline return value spill temp"
 ;* V13 tmp10        [V13    ] (  0,  0   )    long  ->  zero-ref    "Inline stloc first use temp"
 ;* V14 tmp11        [V14    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
 ;* V15 tmp12        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inline stloc first use temp"
 ;* V16 tmp13        [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V17 tmp14        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;  V18 tmp15        [V18    ] (  3,  1.50)  ushort  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
+;  V18 tmp15        [V18    ] (  3,  1.50)  ushort  ->  [rbp-0x18]  do-not-enreg[X] addr-exposed ld-addr-op "Inline stloc first use temp"
 ;  V19 tmp16        [V19,T07] (  2,  2   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.Globalization.TextInfo>
-;  V20 tmp17        [V20    ] (  2,  2   )  ushort  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
+;  V20 tmp17        [V20    ] (  2,  2   )  ushort  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
 ;  V21 tmp18        [V21,T02] (  4,  4   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V22 tmp19        [V22,T04] (  3,  3   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;* V23 tmp20        [V23    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V24 tmp21        [V24    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
 ;* V25 tmp22        [V25    ] (  0,  0   )   byref  ->  zero-ref    "field V14._reference (fldOffset=0x0)" P-INDEP
 ;* V26 tmp23        [V26    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
 ;* V27 tmp24        [V27    ] (  0,  0   )   byref  ->  zero-ref    "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V28 tmp25        [V28    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
 ;* V29 tmp26        [V29    ] (  0,  0   )   byref  ->  zero-ref    "field V17._reference (fldOffset=0x0)" P-INDEP
 ;* V30 tmp27        [V30    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
-;  V31 cse0         [V31,T05] (  3,  3   )     int  ->  r14         "CSE #01: aggressive"
+;  V31 cse0         [V31,T05] (  3,  3   )     int  ->  rdx         "CSE #01: aggressive"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 16
 
 G_M7923_IG01:
        push     rbp
        push     r15
-       push     r14
        push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x30]
+       sub      rsp, 16
+       lea      rbp, [rsp+0x20]
        mov      rbx, rsi
        mov      r15d, edx
-						;; size=21 bbWeight=1 PerfScore 5.25
+						;; size=19 bbWeight=1 PerfScore 4.25
 G_M7923_IG02:
-       mov      r14d, dword ptr [rcx+0x08]
-       cmp      r14d, r15d
+       mov      edx, dword ptr [rcx+0x08]
+       cmp      edx, r15d
        jg       G_M7923_IG07
-       mov      edx, r14d
        add      rdx, rdx
        lea      rsi, bword ptr [rcx+0x0C]
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        test     r15d, r15d
        je       SHORT G_M7923_IG08
        movzx    r15, word  ptr [rbx]
        cmp      r15d, 127
        jle      SHORT G_M7923_IG04
-						;; size=53 bbWeight=1 PerfScore 12.25
+						;; size=49 bbWeight=1 PerfScore 12.00
 G_M7923_IG03:
        mov      rcx, 0xD1FFAB1E      ; const ptr
        mov      rdi, gword ptr [rcx]
-       mov      word  ptr [rbp-0x28], r15w
+       mov      word  ptr [rbp-0x20], r15w
        xor      ecx, ecx
-       mov      dword ptr [rbp-0x20], ecx
-       lea      rcx, [rbp-0x20]
-       lea      rsi, [rbp-0x28]
+       mov      dword ptr [rbp-0x18], ecx
+       lea      rcx, [rbp-0x18]
+       lea      rsi, [rbp-0x20]
        mov      edx, 1
        mov      r8d, 1
        mov      r9d, 1
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
        call     [rax]System.Globalization.TextInfo:IcuChangeCase(ulong,int,ulong,int,ubyte):this
-       movzx    rax, word  ptr [rbp-0x20]
+       movzx    rax, word  ptr [rbp-0x18]
        jmp      SHORT G_M7923_IG05
 						;; size=66 bbWeight=0.50 PerfScore 6.25
 G_M7923_IG04:
        mov      eax, r15d
        lea      ecx, [rax-0x61]
        and      r15d, 95
        cmp      ecx, 25
        cmovbe   eax, r15d
 						;; size=17 bbWeight=0.50 PerfScore 0.75
 G_M7923_IG05:
        mov      word  ptr [rbx], ax
 						;; size=3 bbWeight=1 PerfScore 1.00
 G_M7923_IG06:
-       add      rsp, 24
+       add      rsp, 16
        pop      rbx
-       pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=9 bbWeight=1 PerfScore 2.75
 G_M7923_IG07:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M7923_IG08:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 190, prolog size 15, PerfScore 28.75, instruction count 53, allocated bytes for code 190 (MethodHash=1ba3e10c) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):this (FullOpts)
+; Total bytes of code 182, prolog size 13, PerfScore 27.00, instruction count 50, allocated bytes for code 182 (MethodHash=1ba3e10c) for method System.Xml.Serialization.CodeIdentifier+<>c:<MakePascal>b__2_0(System.Span`1[ushort],System.String):this (FullOpts)
 ; ============================================================
-4 (-1.73 % of base) - System.Xml.XmlEntityReference+<>c:b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this
 ; Assembly listing for method System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):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; 6 single block inlinees; 5 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Xml.XmlEntityReference+<>c>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
 ;* V02 arg2         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-arg single-def <System.ValueTuple`2[System.String,System.String]>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V05 tmp2         [V05    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
-;* V06 tmp3         [V06    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Inlining Arg" <System.__Canon>
-;* V07 tmp4         [V07    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V07 tmp4         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Inlining Arg" <System.__Canon>
 ;* V08 tmp5         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V09 tmp6         [V09    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V10 tmp7         [V10    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V11 tmp8         [V11    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Inlining Arg" <System.__Canon>
 ;* V12 tmp9         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V13 tmp10        [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
 ;  V14 tmp11        [V14,T13] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
 ;  V15 tmp12        [V15,T14] (  2,  2   )     int  ->  rsi         "Inlining Arg"
 ;  V16 tmp13        [V16,T01] (  3,  6   )     int  ->  r13         "Inlining Arg"
 ;* V17 tmp14        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V18 tmp15        [V18,T06] (  3,  4   )   byref  ->  r12         single-def "Inlining Arg"
 ;  V19 tmp16        [V19,T07] (  3,  4   )     int  ->  rbx         "Inlining Arg"
 ;* V20 tmp17        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;  V21 tmp18        [V21,T08] (  4,  3   )    long  ->   r8         "Inline stloc first use temp"
 ;* V22 tmp19        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V23 tmp20        [V23    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inline stloc first use temp"
 ;* V24 tmp21        [V24    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inline stloc first use temp"
 ;  V25 tmp22        [V25,T12] (  4,  2   )    long  ->  rdx         "Inline stloc first use temp"
 ;* V26 tmp23        [V26    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V27 tmp24        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;  V28 tmp25        [V28,T03] (  3,  3   )   byref  ->  r14         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V29 tmp26        [V29,T00] (  4,  4   )     int  ->  rbx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;  V30 tmp27        [V30,T04] (  3,  3   )     ref  ->  rcx         single-def "field V02.Item1 (fldOffset=0x0)" P-INDEP
 ;  V31 tmp28        [V31,T02] (  4,  3   )     ref  ->  r15         single-def "field V02.Item2 (fldOffset=0x8)" P-INDEP
 ;  V32 tmp29        [V32,T11] (  4,  2   )   byref  ->  rdi         "field V04._reference (fldOffset=0x0)" P-INDEP
 ;  V33 tmp30        [V33,T10] (  4,  2.50)     int  ->  rsi         "field V04._length (fldOffset=0x8)" P-INDEP
 ;* V34 tmp31        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V35 tmp32        [V35    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
-;* V36 tmp33        [V36    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V37 tmp34        [V37    ] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
+;* V36 tmp33        [V36    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V37 tmp34        [V37    ] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
 ;  V38 tmp35        [V38,T15] (  2,  1   )   byref  ->  rdi         single-def "field V12._reference (fldOffset=0x0)" P-INDEP
 ;  V39 tmp36        [V39,T16] (  2,  1   )     int  ->  rsi         "field V12._length (fldOffset=0x8)" P-INDEP
 ;* V40 tmp37        [V40    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V13._reference (fldOffset=0x0)" P-INDEP
 ;* V41 tmp38        [V41    ] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
 ;* V42 tmp39        [V42    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V17._reference (fldOffset=0x0)" P-INDEP
 ;* V43 tmp40        [V43    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
 ;* V44 tmp41        [V44    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V20._reference (fldOffset=0x0)" P-INDEP
 ;* V45 tmp42        [V45    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
 ;* V46 tmp43        [V46    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;* V47 tmp44        [V47    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
 ;* V48 tmp45        [V48    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V26._reference (fldOffset=0x0)" P-INDEP
 ;* V49 tmp46        [V49    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
 ;* V50 tmp47        [V50    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
 ;* V51 tmp48        [V51    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
 ;  V52 cse0         [V52,T09] (  3,  3   )    long  ->  r12         "CSE #03: moderate"
 ;  V53 cse1         [V53,T05] (  4,  4   )     int  ->  r13         "CSE #01: moderate"
 ;
 ; Lcl frame size = 8
 
 G_M30333_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        lea      rbp, [rsp+0x30]
        mov      r14, rsi
        mov      ebx, edx
        mov      r15, r8
 						;; size=24 bbWeight=1 PerfScore 8.25
 G_M30333_IG02:
        mov      r13d, dword ptr [rcx+0x08]
        cmp      r13d, ebx
-       jg       G_M30333_IG11
+       jg       G_M30333_IG12
        lea      rsi, bword ptr [rcx+0x0C]
        mov      r12d, r13d
        add      r12, r12
        mov      rdx, r12
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        test     r15, r15
        je       SHORT G_M30333_IG04
 						;; size=46 bbWeight=1 PerfScore 9.25
 G_M30333_IG03:
        lea      rdi, bword ptr [r15+0x0C]
        mov      esi, dword ptr [r15+0x08]
        jmp      SHORT G_M30333_IG05
 						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M30333_IG04:
        xor      rdi, rdi
        xor      esi, esi
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M30333_IG05:
        cmp      r13d, ebx
-       ja       G_M30333_IG12
+       ja       SHORT G_M30333_IG11
        add      r12, r14
        sub      ebx, r13d
        mov      r8d, esi
        test     r8, r8
        je       SHORT G_M30333_IG08
-						;; size=23 bbWeight=1 PerfScore 3.25
+						;; size=19 bbWeight=1 PerfScore 3.25
 G_M30333_IG06:
        mov      edx, ebx
        cmp      r8, rdx
-       ja       SHORT G_M30333_IG11
+       ja       SHORT G_M30333_IG12
        mov      rdx, r12
        sub      rdx, rdi
        je       SHORT G_M30333_IG07
        mov      esi, esi
        add      rsi, rsi
        cmp      rdx, rsi
        jb       SHORT G_M30333_IG10
        movsxd   rsi, ebx
        add      rsi, rsi
        neg      rsi
        cmp      rsi, rdx
        jb       SHORT G_M30333_IG10
 						;; size=39 bbWeight=0.50 PerfScore 3.38
 G_M30333_IG07:
        mov      rsi, r12
        mov      edx, 92
        mov      ecx, 47
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:ReplaceValueType[ushort](byref,byref,ushort,ushort,ulong)
        call     [rax]System.SpanHelpers:ReplaceValueType[ushort](byref,byref,ushort,ushort,ulong)
 						;; size=25 bbWeight=0.50 PerfScore 2.00
 G_M30333_IG08:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
 G_M30333_IG09:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M30333_IG10:
        mov      edi, 72
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
 G_M30333_IG11:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
-       call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
-       int3     
-						;; size=13 bbWeight=0 PerfScore 0.00
-G_M30333_IG12:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
+G_M30333_IG12:
+       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+       call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+       int3     
+						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 231, prolog size 16, PerfScore 33.12, instruction count 74, allocated bytes for code 231 (MethodHash=8f5d8982) for method System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this (FullOpts)
+; Total bytes of code 227, prolog size 16, PerfScore 33.12, instruction count 74, allocated bytes for code 227 (MethodHash=8f5d8982) for method System.Xml.XmlEntityReference+<>c:<ConstructBaseURI>b__27_0(System.Span`1[ushort],System.ValueTuple`2[System.String,System.String]):this (FullOpts)
 ; ============================================================
-2 (-0.63 % of base) - System.Number+<>c:b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):this
 ; Assembly listing for method System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):this (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; 9 single block inlinees; 6 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.Number+<>c>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[ushort]>
 ;  V02 arg2         [V02,T24] (  4,  4   )  struct (24) [rbp+0x10]  do-not-enreg[SF] single-def <System.ValueTuple`4[int,long,int,System.String]>
-;  V03 loc0         [V03    ] (  2,  2   )   byref  ->  [rbp-0x20]  must-init pinned
+;  V03 loc0         [V03    ] (  2,  2   )   byref  ->  [rbp-0x18]  must-init pinned
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V05 tmp1         [V05,T17] (  5,  7   )     ref  ->  r14         class-hnd single-def "dup spill" <System.__Canon>
+;  V05 tmp1         [V05,T17] (  5,  7   )     ref  ->  rdx         class-hnd single-def "dup spill" <System.__Canon>
 ;* V06 tmp2         [V06    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V07 tmp3         [V07    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[uint]>
 ;  V08 tmp4         [V08,T25] (  2,  4   )    long  ->  rax         "impAppendStmt"
 ;* V09 tmp5         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V10 tmp6         [V10    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V11 tmp7         [V11    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V12 tmp8         [V12    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V13 tmp9         [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;  V14 tmp10        [V14,T20] (  3,  6   )     int  ->  rcx         "Inlining Arg"
 ;* V15 tmp11        [V15    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V16 tmp12        [V16,T30] (  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[uint]>
 ;  V18 tmp14        [V18,T10] (  4, 20   )    long  ->  rax         "Inlining Arg"
 ;  V19 tmp15        [V19,T11] (  4, 20   )     int  ->  rdi         "Inlining Arg"
 ;  V20 tmp16        [V20,T21] (  3,  6   )     int  ->   r8         "Span.get_Item index"
 ;  V21 tmp17        [V21,T00] (  6,144   )     int  ->  registers   "Inlining Arg"
 ;  V22 tmp18        [V22,T01] (  4,136   )     int  ->  r10         "Inlining Arg"
 ;* V23 tmp19        [V23    ] (  0,  0   )  struct ( 8) zero-ref    "dup spill" <System.ValueTuple`2[uint,uint]>
 ;* V24 tmp20        [V24    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;  V25 tmp21        [V25,T02] (  5,112   )    long  ->  rax         "Inlining Arg"
 ;  V26 tmp22        [V26,T03] (  2, 64   )    long  ->  rax         "dup spill"
 ;  V27 tmp23        [V27,T04] (  3, 48   )     int  ->  r11         "Inline stloc first use temp"
 ;* V28 tmp24        [V28    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[uint,uint]>
 ;* V29 tmp25        [V29    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V30 tmp26        [V30    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V31 tmp27        [V31    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.Utf16Char>
 ;* V32 tmp28        [V32    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;  V33 tmp29        [V33,T05] (  6, 36   )     int  ->  registers   "Inlining Arg"
 ;  V34 tmp30        [V34,T06] (  4, 34   )     int  ->  rdx         "Inlining Arg"
 ;* V35 tmp31        [V35    ] (  0,  0   )  struct ( 8) zero-ref    "dup spill" <System.ValueTuple`2[uint,uint]>
 ;* V36 tmp32        [V36    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;  V37 tmp33        [V37,T09] (  4, 26   )    long  ->  rax         "Inlining Arg"
 ;  V38 tmp34        [V38,T13] (  2, 16   )    long  ->  rax         "dup spill"
 ;  V39 tmp35        [V39,T14] (  3, 12   )     int  ->  rdi         "Inline stloc first use temp"
 ;* V40 tmp36        [V40    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[uint,uint]>
 ;* V41 tmp37        [V41    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V42 tmp38        [V42    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V43 tmp39        [V43    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.Utf16Char>
 ;* V44 tmp40        [V44    ] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;  V45 tmp41        [V45,T22] (  4,  3.50)   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V46 tmp42        [V46,T23] (  3,  2.50)     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;  V47 tmp43        [V47,T28] (  2,  2   )   byref  ->  rdx         single-def "field V07._reference (fldOffset=0x0)" P-INDEP
 ;  V48 tmp44        [V48,T29] (  2,  2   )     int  ->  rcx         "field V07._length (fldOffset=0x8)" P-INDEP
 ;* V49 tmp45        [V49    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V09._reference (fldOffset=0x0)" P-INDEP
 ;* V50 tmp46        [V50    ] (  0,  0   )     int  ->  zero-ref    "field V09._length (fldOffset=0x8)" P-INDEP
 ;* V51 tmp47        [V51    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V13._reference (fldOffset=0x0)" P-INDEP
 ;* V52 tmp48        [V52    ] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
 ;  V53 tmp49        [V53,T19] (  3,  6   )   byref  ->  rdx         single-def "field V17._reference (fldOffset=0x0)" P-INDEP
 ;  V54 tmp50        [V54,T27] (  3,  3   )     int  ->  rcx         "field V17._length (fldOffset=0x8)" P-INDEP
 ;* V55 tmp51        [V55    ] (  0,  0   )     int  ->  zero-ref    "field V23.Item1 (fldOffset=0x0)" P-INDEP
 ;* V56 tmp52        [V56    ] (  0,  0   )     int  ->  zero-ref    "field V23.Item2 (fldOffset=0x4)" P-INDEP
 ;* V57 tmp53        [V57    ] (  0,  0   )     int  ->  zero-ref    "field V28.Item1 (fldOffset=0x0)" P-INDEP
 ;  V58 tmp54        [V58,T07] (  2, 32   )     int  ->   r9         "field V28.Item2 (fldOffset=0x4)" P-INDEP
 ;  V59 tmp55        [V59,T08] (  2, 32   )  ushort  ->   r9         "field V31.value (fldOffset=0x0)" P-INDEP
 ;* V60 tmp56        [V60    ] (  0,  0   )     int  ->  zero-ref    "field V35.Item1 (fldOffset=0x0)" P-INDEP
 ;* V61 tmp57        [V61    ] (  0,  0   )     int  ->  zero-ref    "field V35.Item2 (fldOffset=0x4)" P-INDEP
 ;* V62 tmp58        [V62    ] (  0,  0   )     int  ->  zero-ref    "field V40.Item1 (fldOffset=0x0)" P-INDEP
 ;  V63 tmp59        [V63,T15] (  2,  8   )     int  ->  rcx         "field V40.Item2 (fldOffset=0x4)" P-INDEP
 ;  V64 tmp60        [V64,T16] (  2,  8   )  ushort  ->  rcx         "field V43.value (fldOffset=0x0)" P-INDEP
 ;  V65 tmp61        [V65,T26] (  2,  4   )    long  ->  rbx         "Cast away GC"
 ;  V66 cse0         [V66,T18] (  4,  7   )     int  ->   r8         "CSE #02: moderate"
 ;  V67 rat0         [V67,T12] (  5, 17   )    long  ->  rsi         "Widened IV V16"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 16
 
 G_M39766_IG01:
        push     rbp
        push     r15
-       push     r14
        push     rbx
-       push     rax
+       sub      rsp, 16
        lea      rbp, [rsp+0x20]
        xor      eax, eax
-       mov      qword ptr [rbp-0x20], rax
+       mov      qword ptr [rbp-0x18], rax
        mov      rbx, rsi
        mov      r15d, edx
-						;; size=24 bbWeight=1 PerfScore 7.25
+						;; size=25 bbWeight=1 PerfScore 5.50
 G_M39766_IG02:
-       mov      r14, gword ptr [rbp+0x10]
-       test     r14, r14
+       mov      rdx, gword ptr [rbp+0x10]
+       test     rdx, rdx
        je       SHORT G_M39766_IG04
 						;; size=9 bbWeight=1 PerfScore 2.25
 G_M39766_IG03:
-       cmp      dword ptr [r14+0x08], r15d
-       jg       G_M39766_IG18
-       lea      rsi, bword ptr [r14+0x0C]
-       mov      edx, dword ptr [r14+0x08]
+       cmp      dword ptr [rdx+0x08], r15d
+       jg       G_M39766_IG19
+       lea      rsi, bword ptr [rdx+0x0C]
+       mov      edx, dword ptr [rdx+0x08]
        add      rdx, rdx
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
-						;; size=36 bbWeight=0.50 PerfScore 5.12
+						;; size=35 bbWeight=0.50 PerfScore 5.12
 G_M39766_IG04:
-       mov      bword ptr [rbp-0x20], rbx
+       mov      bword ptr [rbp-0x18], rbx
        mov      eax, r15d
        lea      rax, [rbx+2*rax]
        mov      ecx, dword ptr [rbp+0x24]
        test     ecx, ecx
-       jl       G_M39766_IG19
+       jl       G_M39766_IG18
        mov      rdx, qword ptr [rbp+0x18]
        mov      edi, dword ptr [rbp+0x20]
        xor      esi, esi
        lea      r8d, [rcx-0x01]
        test     r8d, r8d
        jle      SHORT G_M39766_IG11
 						;; size=40 bbWeight=1 PerfScore 8.00
 G_M39766_IG05:
        mov      r9d, dword ptr [rdx+4*rsi]
        mov      r10d, 9
        test     r9d, r9d
        jne      SHORT G_M39766_IG08
 						;; size=15 bbWeight=4 PerfScore 14.00
 G_M39766_IG06:
        mov      r11d, r9d
 						;; size=3 bbWeight=2 PerfScore 0.50
 G_M39766_IG07:
        test     r10d, r10d
        mov      r9d, r11d
        jle      SHORT G_M39766_IG10
        align    [0 bytes for IG08]
 						;; size=8 bbWeight=32 PerfScore 48.00
 G_M39766_IG08:
        dec      r10d
        mov      r11d, 0xD1FFAB1E
        mov      ebx, r9d
        imul     r11, rbx
        shr      r11, 35
        lea      ebx, [r11+4*r11]
        add      ebx, ebx
        sub      r9d, ebx
        add      rax, -2
        add      r9d, 48
        movzx    r9, r9w
        mov      word  ptr [rax], r9w
        test     r11d, r11d
        je       SHORT G_M39766_IG07
 						;; size=50 bbWeight=16 PerfScore 116.00
 G_M39766_IG09:
        mov      r9d, r11d
        jmp      SHORT G_M39766_IG08
 						;; size=5 bbWeight=8 PerfScore 18.00
 G_M39766_IG10:
        add      edi, -9
        inc      esi
        cmp      esi, r8d
        jl       SHORT G_M39766_IG05
 						;; size=10 bbWeight=4 PerfScore 7.00
 G_M39766_IG11:
        cmp      r8d, ecx
        jae      SHORT G_M39766_IG20
        mov      ecx, r8d
        mov      ecx, dword ptr [rdx+4*rcx]
        mov      edx, edi
        test     ecx, ecx
        jne      SHORT G_M39766_IG14
 						;; size=17 bbWeight=1 PerfScore 5.00
 G_M39766_IG12:
        mov      edi, ecx
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M39766_IG13:
        test     edx, edx
        mov      ecx, edi
        jle      SHORT G_M39766_IG16
        align    [0 bytes for IG14]
 						;; size=6 bbWeight=8 PerfScore 12.00
 G_M39766_IG14:
        dec      edx
        mov      edi, 0xD1FFAB1E
        mov      esi, ecx
        imul     rdi, rsi
        shr      rdi, 35
        lea      esi, [rdi+4*rdi]
        add      esi, esi
        sub      ecx, esi
        add      rax, -2
        add      ecx, 48
        movzx    rcx, cx
        mov      word  ptr [rax], cx
        test     edi, edi
        je       SHORT G_M39766_IG13
 						;; size=41 bbWeight=4 PerfScore 29.00
 G_M39766_IG15:
        mov      ecx, edi
        jmp      SHORT G_M39766_IG14
 						;; size=4 bbWeight=2 PerfScore 4.50
 G_M39766_IG16:
        xor      eax, eax
-       mov      bword ptr [rbp-0x20], rax
+       mov      bword ptr [rbp-0x18], rax
 						;; size=6 bbWeight=1 PerfScore 1.25
 G_M39766_IG17:
-       add      rsp, 8
+       add      rsp, 16
        pop      rbx
-       pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.25
+						;; size=9 bbWeight=1 PerfScore 2.75
 G_M39766_IG18:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
-       call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
+       call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M39766_IG19:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
-       call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
+       call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M39766_IG20:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 319, prolog size 24, PerfScore 281.25, instruction count 106, allocated bytes for code 319 (MethodHash=7fe064a9) for method System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):this (FullOpts)
+; Total bytes of code 317, prolog size 25, PerfScore 279.00, instruction count 104, allocated bytes for code 317 (MethodHash=7fe064a9) for method System.Number+<>c:<FormatBigInteger>b__17_0(System.Span`1[ushort],System.ValueTuple`4[int,long,int,System.String]):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/37f13b5ce09304832e7de00c80aa3e19

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 11, 2025

@xtqqczze

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