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/wip-UIntCastLengthCheck3 #706

Open
MihuBot opened this issue Oct 7, 2024 · 5 comments
Open

[JitDiff X64] xtqqczze/dotnet-runtime/wip-UIntCastLengthCheck3 #706

MihuBot opened this issue Oct 7, 2024 · 5 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Oct 7, 2024

Job completed in 17 minutes 6 seconds.

Diffs

Found 272 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 49380697
Total bytes of diff: 49380139
Total bytes of delta: -558 (-0.00 % of base)
Total relative delta: -0.57
    diff is an improvement.
    relative diff is an improvement.


Top file regressions (bytes):
          13 : System.Private.Xml.dasm (0.00 % of base)
           3 : System.Console.dasm (0.00 % of base)
           2 : System.Diagnostics.TraceSource.dasm (0.00 % of base)
           2 : System.Runtime.Numerics.dasm (0.00 % of base)

Top file improvements (bytes):
        -521 : System.Private.CoreLib.dasm (-0.01 % of base)
         -25 : System.Security.Cryptography.dasm (-0.00 % of base)
         -13 : System.Net.Http.dasm (-0.00 % of base)
         -11 : System.Net.WebProxy.dasm (-0.18 % of base)
          -5 : Microsoft.Extensions.Logging.Abstractions.dasm (-0.00 % of base)
          -3 : System.Net.Primitives.dasm (-0.00 % of base)

10 total files with Code Size differences (6 improved, 4 regressed), 249 unchanged.

Top method regressions (bytes):
          12 (2.20 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier:MakeValid(System.String):System.String (Tier0-FullOpts)
           9 (1.11 % of base) : System.Private.CoreLib.dasm - System.String:Concat(System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier0-FullOpts)
           7 (0.26 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeTypedArgument:ToString(ubyte):System.String:this (Tier0-FullOpts)
           6 (0.33 % of base) : System.Console.dasm - System.TermInfo+DatabaseFactory:ReadDatabase(System.String,System.String):System.TermInfo+Database (Tier0-FullOpts)
           5 (0.35 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeData:ToString():System.String:this (Tier0-FullOpts)
           2 (0.19 % of base) : System.Private.CoreLib.dasm - System.AggregateException:get_Message():System.String:this (Tier0-FullOpts)
           2 (0.16 % of base) : System.Diagnostics.TraceSource.dasm - System.Diagnostics.TraceListener:WriteFooter(System.Diagnostics.TraceEventCache):this (Tier0-FullOpts)
           2 (0.12 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HttpHeaders:ToString():System.String:this (Tier0-FullOpts)
           2 (0.05 % of base) : System.Runtime.Numerics.dasm - System.Number:FormatBigInteger(ubyte,System.Numerics.BigInteger,System.String,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo,System.Span`1[ushort],byref,byref):System.String (Tier0-FullOpts)
           2 (0.17 % of base) : System.Private.CoreLib.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier0-FullOpts)
           2 (0.19 % of base) : System.Private.CoreLib.dasm - System.String:JoinCore[System.Numerics.Vector`1[float]](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.Numerics.Vector`1[float]]):System.String (Tier0-FullOpts)
           1 (0.12 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HeaderUtilities:Encode5987(System.String):System.String (Tier0-FullOpts)
           1 (0.12 % of base) : System.Private.CoreLib.dasm - System.Threading.WaitHandle:ObtainSafeWaitHandles(System.ReadOnlySpan`1[System.Threading.WaitHandle],System.Span`1[Microsoft.Win32.SafeHandles.SafeWaitHandle],System.Span`1[long]) (Tier0-FullOpts)
           1 (0.02 % of base) : System.Private.Xml.dasm - System.Xml.Schema.XsdDuration:TryFormat(System.Span`1[ushort],byref,int):ubyte:this (Tier0-FullOpts)

Top method improvements (bytes):
         -27 (-2.70 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -27 (-4.62 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -25 (-0.85 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.X500NameEncoder:X500DistinguishedNameDecode(ubyte[],ubyte,ubyte,ubyte,System.String,System.String,ubyte):System.String (Tier0-FullOpts)
         -24 (-2.31 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.31 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.31 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-1.46 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-1.46 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-1.46 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-2.67 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -16 (-1.25 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -12 (-0.20 % of base) : System.Net.Http.dasm - System.Net.Http.AuthenticationHelper+<SendWithNtAuthAsync>d__52:MoveNext():this (Tier0-FullOpts)
         -11 (-0.77 % of base) : System.Net.WebProxy.dasm - System.Net.WebProxy:IsMatchInBypassList(System.Uri):ubyte:this (Tier0-FullOpts)
          -9 (-1.76 % of base) : System.Private.CoreLib.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:Rehash(int):this (Tier1-OSR)
          -7 (-7.07 % of base) : System.Private.CoreLib.dasm - System.String:CopyTo(System.Span`1[ushort]):this (Tier0)
          -5 (-0.54 % of base) : Microsoft.Extensions.Logging.Abstractions.dasm - Microsoft.Extensions.Logging.LogValuesFormatter:TryFormatArgumentIfNullOrEnumerable[System.__Canon](System.__Canon,byref):ubyte (Tier0-FullOpts)
          -4 (-0.16 % of base) : System.Net.Http.dasm - System.Net.Http.HttpEnvironmentProxy:GetUriFromString(System.String):System.Uri (Tier0-FullOpts)
          -3 (-0.26 % of base) : System.Net.Primitives.dasm - System.Net.SocketAddress:ToString():System.String:this (Tier0-FullOpts)
          -3 (-0.06 % of base) : System.Console.dasm - System.TermInfo+ParameterizedStrings:EvaluateInternal(System.String,byref,System.TermInfo+ParameterizedStrings+FormatParam[],System.Collections.Generic.Stack`1[System.TermInfo+ParameterizedStrings+FormatParam],byref,byref):System.String (Tier0-FullOpts)
          -2 (-2.13 % of base) : System.Private.CoreLib.dasm - System.String:TryCopyTo(System.Span`1[ushort]):ubyte:this (Tier0)
          -1 (-0.11 % of base) : System.Private.CoreLib.dasm - System.IO.Path:Combine(System.ReadOnlySpan`1[System.String]):System.String (Tier0-FullOpts)

Top method regressions (percentages):
          12 (2.20 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.CodeIdentifier:MakeValid(System.String):System.String (Tier0-FullOpts)
           9 (1.11 % of base) : System.Private.CoreLib.dasm - System.String:Concat(System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier0-FullOpts)
           5 (0.35 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeData:ToString():System.String:this (Tier0-FullOpts)
           6 (0.33 % of base) : System.Console.dasm - System.TermInfo+DatabaseFactory:ReadDatabase(System.String,System.String):System.TermInfo+Database (Tier0-FullOpts)
           7 (0.26 % of base) : System.Private.CoreLib.dasm - System.Reflection.CustomAttributeTypedArgument:ToString(ubyte):System.String:this (Tier0-FullOpts)
           2 (0.19 % of base) : System.Private.CoreLib.dasm - System.AggregateException:get_Message():System.String:this (Tier0-FullOpts)
           2 (0.19 % of base) : System.Private.CoreLib.dasm - System.String:JoinCore[System.Numerics.Vector`1[float]](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.Numerics.Vector`1[float]]):System.String (Tier0-FullOpts)
           2 (0.17 % of base) : System.Private.CoreLib.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier0-FullOpts)
           2 (0.16 % of base) : System.Diagnostics.TraceSource.dasm - System.Diagnostics.TraceListener:WriteFooter(System.Diagnostics.TraceEventCache):this (Tier0-FullOpts)
           1 (0.12 % of base) : System.Private.CoreLib.dasm - System.Threading.WaitHandle:ObtainSafeWaitHandles(System.ReadOnlySpan`1[System.Threading.WaitHandle],System.Span`1[Microsoft.Win32.SafeHandles.SafeWaitHandle],System.Span`1[long]) (Tier0-FullOpts)
           1 (0.12 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HeaderUtilities:Encode5987(System.String):System.String (Tier0-FullOpts)
           2 (0.12 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HttpHeaders:ToString():System.String:this (Tier0-FullOpts)
           2 (0.05 % of base) : System.Runtime.Numerics.dasm - System.Number:FormatBigInteger(ubyte,System.Numerics.BigInteger,System.String,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo,System.Span`1[ushort],byref,byref):System.String (Tier0-FullOpts)
           1 (0.02 % of base) : System.Private.Xml.dasm - System.Xml.Schema.XsdDuration:TryFormat(System.Span`1[ushort],byref,int):ubyte:this (Tier0-FullOpts)

Top method improvements (percentages):
          -7 (-7.07 % of base) : System.Private.CoreLib.dasm - System.String:CopyTo(System.Span`1[ushort]):this (Tier0)
         -27 (-4.62 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -27 (-2.70 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-2.67 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.31 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.31 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.31 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
          -2 (-2.13 % of base) : System.Private.CoreLib.dasm - System.String:TryCopyTo(System.Span`1[ushort]):ubyte:this (Tier0)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -24 (-2.10 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[ubyte]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
          -9 (-1.76 % of base) : System.Private.CoreLib.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:Rehash(int):this (Tier1-OSR)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -20 (-1.52 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[short]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-1.46 % of base) : System.Private.CoreLib.dasm - System.Numerics.Vector`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-1.46 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector256`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -17 (-1.46 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector512`1[double]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -16 (-1.25 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64`1[int]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
         -25 (-0.85 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.X500NameEncoder:X500DistinguishedNameDecode(ubyte[],ubyte,ubyte,ubyte,System.String,System.String,ubyte):System.String (Tier0-FullOpts)
         -11 (-0.77 % of base) : System.Net.WebProxy.dasm - System.Net.WebProxy:IsMatchInBypassList(System.Uri):ubyte:this (Tier0-FullOpts)
          -5 (-0.54 % of base) : Microsoft.Extensions.Logging.Abstractions.dasm - Microsoft.Extensions.Logging.LogValuesFormatter:TryFormatArgumentIfNullOrEnumerable[System.__Canon](System.__Canon,byref):ubyte (Tier0-FullOpts)
          -3 (-0.26 % of base) : System.Net.Primitives.dasm - System.Net.SocketAddress:ToString():System.String:this (Tier0-FullOpts)
         -12 (-0.20 % of base) : System.Net.Http.dasm - System.Net.Http.AuthenticationHelper+<SendWithNtAuthAsync>d__52:MoveNext():this (Tier0-FullOpts)
          -4 (-0.16 % of base) : System.Net.Http.dasm - System.Net.Http.HttpEnvironmentProxy:GetUriFromString(System.String):System.Uri (Tier0-FullOpts)
          -1 (-0.11 % of base) : System.Private.CoreLib.dasm - System.IO.Path:Combine(System.ReadOnlySpan`1[System.String]):System.String (Tier0-FullOpts)
          -3 (-0.06 % of base) : System.Console.dasm - System.TermInfo+ParameterizedStrings:EvaluateInternal(System.String,byref,System.TermInfo+ParameterizedStrings+FormatParam[],System.Collections.Generic.Stack`1[System.TermInfo+ParameterizedStrings+FormatParam],byref,byref):System.String (Tier0-FullOpts)

50 total methods with Code Size differences (36 improved, 14 regressed), 233020 unchanged.

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

Artifacts:

xtqqczze referenced this issue in xtqqczze/dotnet-runtime Oct 7, 2024
@xtqqczze
Copy link

xtqqczze commented Oct 7, 2024

@xtqqczze
Copy link

xtqqczze commented Oct 7, 2024

UIntCastLengthCheck

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 7, 2024

Top method regressions

12 (2.20 % of base) - System.Xml.Serialization.CodeIdentifier:MakeValid(System.String):System.String
 ; Assembly listing for method System.Xml.Serialization.CodeIdentifier:MakeValid(System.String):System.String (Tier0-FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; Tier-0 switched to FullOpts code
 ; optimized code
 ; optimized using Synthesized PGO
 ; rbp based frame
 ; partially interruptible
 ; with Synthesized PGO: fgCalledCount is 100
 ; No PGO data
 ; 0 inlinees with PGO data; 9 single block inlinees; 11 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T01] (  5, 12.53)     ref  ->  rbx         class-hnd single-def <System.String>
-;  V01 loc0         [V01    ] ( 24, 28.07)  struct (32) [rbp-0x40]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
+;  V01 loc0         [V01    ] ( 24, 28.07)  struct (32) [rbp-0x48]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
 ;* V02 loc1         [V02    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
 ;* V03 loc2         [V03,T16] (  0,  0   )     int  ->  zero-ref   
 ;  V04 loc3         [V04,T02] (  5, 11.90)  ushort  ->  r14        
 ;# 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    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V07 tmp2         [V07,T06] (  2,  4   )    long  ->  rdi         "Inlining Arg"
 ;* V08 tmp3         [V08    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V09 tmp4         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;  V10 tmp5         [V10,T07] (  5,  3.80)     int  ->  r13         "Inline stloc first use temp"
 ;* V11 tmp6         [V11    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V12 tmp7         [V12    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V13 tmp8         [V13,T11] (  2,  2.72)   byref  ->  rcx         "Inlining Arg"
+;  V13 tmp8         [V13,T11] (  2,  2.72)   byref  ->  r12         "Inlining Arg"
 ;  V14 tmp9         [V14,T09] (  2,  3.04)     int  ->  rax         "Inlining Arg"
 ;* V15 tmp10        [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V16 tmp11        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V17 tmp12        [V17    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V18 tmp13        [V18,T04] (  4,  6.74)     int  ->  rdi         "Inline stloc first use temp"
 ;* V19 tmp14        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
-;  V20 tmp15        [V20    ] (  3,  1.44)  struct (16) [rbp-0x50]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
+;  V20 tmp15        [V20    ] (  3,  1.44)  struct (16) [rbp-0x58]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V21 tmp16        [V21,T14] (  2,  1.92)     ref  ->  rbx         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V22 tmp17        [V22,T10] (  3,  2.88)     int  ->  rbx         "Inlining Arg"
 ;* V23 tmp18        [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V24 tmp19        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V25 tmp20        [V25,T15] (  3,  1.34)     ref  ->  rsi         class-hnd single-def "Inline stloc first use temp" <ushort[]>
 ;* V26 tmp21        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V02._reference (fldOffset=0x0)" P-INDEP
 ;* V27 tmp22        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V02._length (fldOffset=0x8)" P-INDEP
 ;  V28 tmp23        [V28,T13] (  2,  2   )   byref  ->  rdi         single-def "field V06._reference (fldOffset=0x0)" P-INDEP
 ;* V29 tmp24        [V29,T17] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
 ;* V30 tmp25        [V30    ] (  0,  0   )   byref  ->  zero-ref    "field V11._reference (fldOffset=0x0)" P-INDEP
 ;* V31 tmp26        [V31    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
 ;* V32 tmp27        [V32    ] (  0,  0   )   byref  ->  zero-ref    "field V12._reference (fldOffset=0x0)" P-INDEP
 ;* V33 tmp28        [V33    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
 ;* V34 tmp29        [V34    ] (  0,  0   )   byref  ->  zero-ref    "field V15._reference (fldOffset=0x0)" P-INDEP
 ;* V35 tmp30        [V35    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
 ;  V36 tmp31        [V36,T08] (  2,  3.37)   byref  ->  rsi         "field V19._reference (fldOffset=0x0)" P-INDEP
 ;  V37 tmp32        [V37,T05] (  2,  4.43)     int  ->  rax         "field V19._length (fldOffset=0x8)" P-INDEP
-;  V38 tmp33        [V38    ] (  2,  0.96)   byref  ->  [rbp-0x50]  do-not-enreg[X] addr-exposed "field V20._reference (fldOffset=0x0)" P-DEP
-;  V39 tmp34        [V39    ] (  2,  0.96)     int  ->  [rbp-0x48]  do-not-enreg[X] addr-exposed "field V20._length (fldOffset=0x8)" P-DEP
+;  V38 tmp33        [V38    ] (  2,  0.96)   byref  ->  [rbp-0x58]  do-not-enreg[X] addr-exposed "field V20._reference (fldOffset=0x0)" P-DEP
+;  V39 tmp34        [V39    ] (  2,  0.96)     int  ->  [rbp-0x50]  do-not-enreg[X] addr-exposed "field V20._length (fldOffset=0x8)" P-DEP
 ;  V40 tmp35        [V40,T18] (  2,  0.96)   byref  ->  rdi         single-def "field V23._reference (fldOffset=0x0)" P-INDEP
 ;  V41 tmp36        [V41,T19] (  2,  0.96)     int  ->  rbx         "field V23._length (fldOffset=0x8)" P-INDEP
-;  V42 GsCookie     [V42    ] (  1,  1   )    long  ->  [rbp-0x58]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
+;  V42 GsCookie     [V42    ] (  1,  1   )    long  ->  [rbp-0x60]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V43 cse0         [V43,T03] (  2, 10.53)     int  ->  rdi         "CSE #02: aggressive"
 ;  V44 cse1         [V44,T12] (  3,  2.28)     int  ->  rax         "CSE #01: moderate"
 ;  V45 rat0         [V45,T00] (  5, 19.05)    long  ->  r15         "Widened IV V03"
 ;
-; Lcl frame size = 64
+; Lcl frame size = 56
 
 G_M19837_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
+       push     r12
        push     rbx
-       sub      rsp, 64
+       sub      rsp, 56
        lea      rbp, [rsp+0x60]
+       xor      eax, eax
+       mov      qword ptr [rbp-0x58], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x50], ymm8
-       vmovdqa  xmmword ptr [rbp-0x30], xmm8
-       mov      qword ptr [rbp-0x58], 0xD1FFAB1E
+       mov      qword ptr [rbp-0x30], rax
+       mov      qword ptr [rbp-0x60], 0xD1FFAB1E
        mov      rbx, rdi
-						;; size=43 bbWeight=1 PerfScore 11.33
+						;; size=50 bbWeight=1 PerfScore 12.58
 G_M19837_IG02:
        test     rbx, rbx
        je       G_M19837_IG29
        test     dword ptr [rsp], esp
        sub      rsp, 0x400
        lea      rdi, [rsp]
        xor      rax, rax
-       mov      gword ptr [rbp-0x40], rax
-       mov      bword ptr [rbp-0x30], rdi
-       mov      dword ptr [rbp-0x28], 511
+       mov      gword ptr [rbp-0x48], rax
+       mov      bword ptr [rbp-0x38], rdi
+       mov      dword ptr [rbp-0x30], 511
 						;; size=40 bbWeight=1 PerfScore 8.25
 G_M19837_IG03:
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x40], eax
 						;; size=3 bbWeight=1 PerfScore 1.00
 G_M19837_IG04:
        xor      r15d, r15d
        jmp      SHORT G_M19837_IG07
 						;; size=5 bbWeight=1 PerfScore 2.25
 G_M19837_IG05:
-       lea      rdi, [rbp-0x40]
+       lea      rdi, [rbp-0x48]
        mov      esi, r14d
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
        call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
 						;; size=19 bbWeight=1.06 PerfScore 4.26
 G_M19837_IG06:
        inc      r15d
 						;; size=3 bbWeight=4.26 PerfScore 1.07
 G_M19837_IG07:
        mov      edi, dword ptr [rbx+0x08]
        cmp      edi, r15d
        jle      G_M19837_IG18
 						;; size=12 bbWeight=5.26 PerfScore 17.11
 G_M19837_IG08:
-       cmp      dword ptr [rbp-0x38], 511
+       cmp      dword ptr [rbp-0x40], 511
        jge      G_M19837_IG18
 						;; size=13 bbWeight=4.74 PerfScore 14.21
 G_M19837_IG09:
        movzx    r14, word  ptr [rbx+2*r15+0x0C]
        mov      edi, r14d
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Serialization.CodeIdentifier:IsValid(ushort):ubyte
        call     [rax]System.Xml.Serialization.CodeIdentifier:IsValid(ushort):ubyte
        test     eax, eax
        je       SHORT G_M19837_IG06
 						;; size=25 bbWeight=4.26 PerfScore 28.78
 G_M19837_IG10:
-       cmp      dword ptr [rbp-0x38], 0
+       cmp      dword ptr [rbp-0x40], 0
        jne      SHORT G_M19837_IG16
 						;; size=6 bbWeight=2.22 PerfScore 6.65
 G_M19837_IG11:
        mov      edi, r14d
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CharUnicodeInfo:GetUnicodeCategoryNoBoundsChecks(uint):int
        call     [rax]System.Globalization.CharUnicodeInfo:GetUnicodeCategoryNoBoundsChecks(uint):int
        cmp      eax, 8
        jne      SHORT G_M19837_IG16
 						;; size=20 bbWeight=1.15 PerfScore 5.48
 G_M19837_IG12:
-       mov      r13d, dword ptr [rbp-0x38]
-       mov      edi, dword ptr [rbp-0x28]
+       mov      r13d, dword ptr [rbp-0x40]
+       mov      edi, dword ptr [rbp-0x30]
        add      edi, -4
        cmp      r13d, edi
        jle      SHORT G_M19837_IG14
 						;; size=15 bbWeight=0.76 PerfScore 2.66
 G_M19837_IG13:
-       lea      rdi, [rbp-0x40]
+       lea      rdi, [rbp-0x48]
        mov      esi, 4
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rax]System.Text.ValueStringBuilder:Grow(int):this
 						;; size=21 bbWeight=0.61 PerfScore 2.43
 G_M19837_IG14:
-       mov      eax, dword ptr [rbp-0x28]
+       mov      eax, dword ptr [rbp-0x30]
        cmp      r13d, eax
        ja       G_M19837_IG31
-       mov      rcx, bword ptr [rbp-0x30]
+       mov      rcx, bword ptr [rbp-0x38]
        mov      edx, r13d
-       lea      rcx, bword ptr [rcx+2*rdx]
+       lea      r12, bword ptr [rcx+2*rdx]
        sub      eax, r13d
        cmp      eax, 4
        jb       G_M19837_IG30
 						;; size=35 bbWeight=0.76 PerfScore 4.18
 G_M19837_IG15:
-       mov      rax, 0xD1FFAB1E
-       mov      rdx, qword ptr [rax]
-       mov      qword ptr [rcx], rdx
-       mov      eax, dword ptr [rbp-0x38]
-       add      eax, 4
-       mov      dword ptr [rbp-0x38], eax
-						;; size=25 bbWeight=0.60 PerfScore 3.30
+       mov      rdi, 0xD1FFAB1E
+       mov      rsi, qword ptr [rdi]
+       mov      qword ptr [r12], rsi
+       mov      edi, dword ptr [rbp-0x40]
+       add      edi, 4
+       mov      dword ptr [rbp-0x40], edi
+						;; size=26 bbWeight=0.60 PerfScore 3.30
 G_M19837_IG16:
-       mov      edi, dword ptr [rbp-0x38]
-       mov      rsi, bword ptr [rbp-0x30]
-       mov      eax, dword ptr [rbp-0x28]
+       mov      edi, dword ptr [rbp-0x40]
+       mov      rsi, bword ptr [rbp-0x38]
+       mov      eax, dword ptr [rbp-0x30]
        cmp      edi, eax
        jae      G_M19837_IG05
 						;; size=18 bbWeight=2.22 PerfScore 9.42
 G_M19837_IG17:
        mov      eax, edi
        mov      word  ptr [rsi+2*rax], r14w
        inc      edi
-       mov      dword ptr [rbp-0x38], edi
+       mov      dword ptr [rbp-0x40], edi
        jmp      G_M19837_IG06
 						;; size=17 bbWeight=1.15 PerfScore 5.19
 G_M19837_IG18:
-       cmp      dword ptr [rbp-0x38], 0
+       cmp      dword ptr [rbp-0x40], 0
        jne      SHORT G_M19837_IG23
 						;; size=6 bbWeight=1 PerfScore 3.00
 G_M19837_IG19:
        mov      rax, 0xD1FFAB1E      ; 'Item'
 						;; size=10 bbWeight=0.52 PerfScore 0.13
 G_M19837_IG20:
-       cmp      qword ptr [rbp-0x58], 0xD1FFAB1E
+       cmp      qword ptr [rbp-0x60], 0xD1FFAB1E
        je       SHORT G_M19837_IG21
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=0.52 PerfScore 2.08
 G_M19837_IG21:
        nop      
 						;; size=1 bbWeight=0.52 PerfScore 0.13
 G_M19837_IG22:
-       lea      rsp, [rbp-0x20]
+       lea      rsp, [rbp-0x28]
        pop      rbx
+       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.52 PerfScore 2.08
+						;; size=15 bbWeight=0.52 PerfScore 2.34
 G_M19837_IG23:
-       mov      ebx, dword ptr [rbp-0x38]
-       cmp      ebx, dword ptr [rbp-0x28]
+       mov      ebx, dword ptr [rbp-0x40]
+       cmp      ebx, dword ptr [rbp-0x30]
        ja       G_M19837_IG31
-       mov      rdi, bword ptr [rbp-0x30]
-       mov      bword ptr [rbp-0x50], rdi
-       mov      dword ptr [rbp-0x48], ebx
-       lea      rdi, [rbp-0x50]
+       mov      rdi, bword ptr [rbp-0x38]
+       mov      bword ptr [rbp-0x58], rdi
+       mov      dword ptr [rbp-0x50], ebx
+       lea      rdi, [rbp-0x58]
        mov      rax, 0xD1FFAB1E      ; code for System.Span`1[ushort]:ToString():System.String:this
        call     [rax]System.Span`1[ushort]:ToString():System.String:this
        mov      rbx, rax
-       mov      rsi, gword ptr [rbp-0x40]
+       mov      rsi, gword ptr [rbp-0x48]
        vxorps   ymm0, ymm0, ymm0
-       vmovdqu  ymmword ptr [rbp-0x40], ymm0
+       vmovdqu  ymmword ptr [rbp-0x48], ymm0
        test     rsi, rsi
        je       SHORT G_M19837_IG25
 						;; size=60 bbWeight=0.48 PerfScore 7.00
 G_M19837_IG24:
        mov      rdi, 0xD1FFAB1E      ; const ptr
        mov      rdi, gword ptr [rdi]
        xor      edx, edx
        mov      rax, 0xD1FFAB1E      ; code for System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
        call     [rax]System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
 						;; size=27 bbWeight=0.38 PerfScore 2.21
 G_M19837_IG25:
        mov      rax, rbx
 						;; size=3 bbWeight=0.48 PerfScore 0.12
 G_M19837_IG26:
-       cmp      qword ptr [rbp-0x58], 0xD1FFAB1E
+       cmp      qword ptr [rbp-0x60], 0xD1FFAB1E
        je       SHORT G_M19837_IG27
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=0.48 PerfScore 1.92
 G_M19837_IG27:
        nop      
 						;; size=1 bbWeight=0.48 PerfScore 0.12
 G_M19837_IG28:
-       lea      rsp, [rbp-0x20]
+       lea      rsp, [rbp-0x28]
        pop      rbx
+       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.48 PerfScore 1.92
+						;; size=15 bbWeight=0.48 PerfScore 2.16
 G_M19837_IG29:
        mov      edi, 0x15521
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
 G_M19837_IG30:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M19837_IG31:
        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 546, prolog size 40, PerfScore 148.25, instruction count 140, allocated bytes for code 546 (MethodHash=9674b282) for method System.Xml.Serialization.CodeIdentifier:MakeValid(System.String):System.String (Tier0-FullOpts)
+; Total bytes of code 558, prolog size 47, PerfScore 150.00, instruction count 145, allocated bytes for code 558 (MethodHash=9674b282) for method System.Xml.Serialization.CodeIdentifier:MakeValid(System.String):System.String (Tier0-FullOpts)
 ; ============================================================
9 (1.11 % of base) - System.String:Concat(System.Collections.Generic.IEnumerable`1[System.String]):System.String
 ; Assembly listing for method System.String:Concat(System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier0-FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; Tier-0 switched to FullOpts code
 ; optimized code
 ; optimized using Synthesized PGO
 ; rbp based frame
 ; fully interruptible
 ; with Synthesized PGO: fgCalledCount is 100
 ; No PGO data
 ; 0 inlinees with PGO data; 6 single block inlinees; 14 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T03] (  4,  4   )     ref  ->  rdi         class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.String]>
 ;  V01 loc0         [V01,T02] (  9,  7.57)     ref  ->  [rbp-0x50]  class-hnd EH-live single-def <System.Collections.Generic.IEnumerator`1[System.String]>
 ;  V02 loc1         [V02,T12] (  6,  1.33)     ref  ->  rbx         class-hnd single-def <System.String>
 ;  V03 loc2         [V03    ] ( 33, 15.34)  struct (32) [rbp-0x38]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
 ;  V04 loc3         [V04,T10] (  4,  2   )     ref  ->  rbx         class-hnd <System.String>
 ;* V05 loc4         [V05    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
 ;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V07 tmp1         [V07    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V08 tmp2         [V08,T13] (  5,  1.25)     ref  ->  rbx        
 ;  V09 tmp3         [V09,T16] (  2,  0.92)    long  ->  rsi         "Inlining Arg"
 ;  V10 tmp4         [V10,T19] (  5,  0.56)     int  ->  rsi         "Inline stloc first use temp"
 ;  V11 tmp5         [V11,T20] (  5,  0.54)     int  ->  r14         "Inline stloc first use temp"
 ;* V12 tmp6         [V12    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V13 tmp7         [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V14 tmp8         [V14,T24] (  2,  0.43)   byref  ->  rdi         single-def "Inlining Arg"
 ;  V15 tmp9         [V15,T25] (  2,  0.43)     int  ->  rdx         "Inlining Arg"
 ;* V16 tmp10        [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V17 tmp11        [V17    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V18 tmp12        [V18    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V19 tmp13        [V19    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V20 tmp14        [V20,T00] (  5, 16.59)     ref  ->  rbx         class-hnd "Inlining Arg" <System.__Canon>
 ;  V21 tmp15        [V21,T04] (  5,  5.62)     int  ->  rsi         "Inline stloc first use temp"
 ;  V22 tmp16        [V22,T05] (  5,  5.38)     int  ->  r15         "Inline stloc first use temp"
 ;* V23 tmp17        [V23    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V24 tmp18        [V24    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V25 tmp19        [V25,T07] (  2,  4.31)   byref  ->  rdi         "Inlining Arg"
-;  V26 tmp20        [V26,T08] (  2,  4.31)     int  ->  rdx         "Inlining Arg"
+;  V26 tmp20        [V26,T08] (  2,  4.31)     int  ->  rax         "Inlining Arg"
 ;* V27 tmp21        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V28 tmp22        [V28    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V29 tmp23        [V29    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V30 tmp24        [V30    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V31 tmp25        [V31    ] (  3,  0.69)  struct (16) [rbp-0x48]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V32 tmp26        [V32,T15] (  2,  0.92)     ref  ->  rbx         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V33 tmp27        [V33,T11] (  3,  1.38)     int  ->  rbx         "Inlining Arg"
 ;* V34 tmp28        [V34    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V35 tmp29        [V35    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V36 tmp30        [V36,T18] (  3,  0.65)     ref  ->  rsi         class-hnd single-def "Inline stloc first use temp" <ushort[]>
 ;* V37 tmp31        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V38 tmp32        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
 ;  V39 tmp33        [V39,T21] (  2,  0.46)   byref  ->  rsi         single-def "field V07._reference (fldOffset=0x0)" P-INDEP
 ;* V40 tmp34        [V40,T26] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
 ;* V41 tmp35        [V41    ] (  0,  0   )   byref  ->  zero-ref    "field V12._reference (fldOffset=0x0)" P-INDEP
 ;* V42 tmp36        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
 ;* V43 tmp37        [V43    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V13._reference (fldOffset=0x0)" P-INDEP
 ;* V44 tmp38        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
 ;* V45 tmp39        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V46 tmp40        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
 ;* V47 tmp41        [V47    ] (  0,  0   )   byref  ->  zero-ref    "field V23._reference (fldOffset=0x0)" P-INDEP
 ;* V48 tmp42        [V48    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
 ;* V49 tmp43        [V49    ] (  0,  0   )   byref  ->  zero-ref    "field V24._reference (fldOffset=0x0)" P-INDEP
 ;* V50 tmp44        [V50    ] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
 ;* V51 tmp45        [V51    ] (  0,  0   )   byref  ->  zero-ref    "field V27._reference (fldOffset=0x0)" P-INDEP
 ;* V52 tmp46        [V52    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
 ;  V53 tmp47        [V53    ] (  2,  0.46)   byref  ->  [rbp-0x48]  do-not-enreg[X] addr-exposed "field V31._reference (fldOffset=0x0)" P-DEP
 ;  V54 tmp48        [V54    ] (  2,  0.46)     int  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed "field V31._length (fldOffset=0x8)" P-DEP
 ;  V55 tmp49        [V55,T22] (  2,  0.46)   byref  ->  rdi         single-def "field V34._reference (fldOffset=0x0)" P-INDEP
 ;  V56 tmp50        [V56,T23] (  2,  0.46)     int  ->  rbx         "field V34._length (fldOffset=0x8)" P-INDEP
 ;  V57 GsCookie     [V57    ] (  1,  1   )    long  ->  [rbp-0x58]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V58 PSPSym       [V58,T14] (  1,  1   )    long  ->  [rbp-0x60]  do-not-enreg[V] "PSPSym"
 ;  V59 cse0         [V59,T17] (  7,  0.89)     int  ->  r15         "CSE #03: conservative"
 ;  V60 cse1         [V60,T01] (  7,  8.85)     int  ->  r14         "CSE #07: aggressive"
-;  V61 cse2         [V61,T09] (  3,  3.23)     int  ->  rdx         "CSE #09: moderate"
+;  V61 cse2         [V61,T09] (  3,  3.23)     int  ->  rax         "CSE #09: moderate"
 ;  V62 cse3         [V62,T06] (  3,  4.76)     int  ->  r15         "CSE #08: aggressive"
 ;
 ; Lcl frame size = 72
 
 G_M5822_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 72
        lea      rbp, [rsp+0x60]
        xor      eax, eax
        mov      qword ptr [rbp-0x48], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rax
        mov      qword ptr [rbp-0x60], rsp
        mov      qword ptr [rbp-0x58], 0xD1FFAB1E
 						;; size=47 bbWeight=1 PerfScore 11.33
 G_M5822_IG02:
        test     rdi, rdi
-       je       G_M5822_IG35
+       je       G_M5822_IG34
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IEnumerable`1[System.__Canon]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
        call     [r11]System.Collections.Generic.IEnumerable`1[System.__Canon]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
        mov      gword ptr [rbp-0x50], rax
 						;; size=26 bbWeight=1 PerfScore 5.50
 G_M5822_IG03:
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      SHORT G_M5822_IG05
 						;; size=21 bbWeight=1 PerfScore 5.50
 G_M5822_IG04:
        mov      rbx, 0xD1FFAB1E      ; ''
-       jmp      G_M5822_IG31
+       jmp      G_M5822_IG30
 						;; size=15 bbWeight=0.52 PerfScore 1.17
 G_M5822_IG05:
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        call     [r11]System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        mov      rbx, rax
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      SHORT G_M5822_IG07
 						;; size=41 bbWeight=0.48 PerfScore 4.80
 G_M5822_IG06:
        mov      rsi, 0xD1FFAB1E      ; ''
        test     rbx, rbx
        cmove    rbx, rsi
-       jmp      G_M5822_IG31
+       jmp      G_M5822_IG30
 						;; size=22 bbWeight=0.25 PerfScore 0.69
 G_M5822_IG07:
        test     dword ptr [rsp], esp
        sub      rsp, 512
        lea      rsi, [rsp]
        xor      rdi, rdi
        mov      gword ptr [rbp-0x38], rdi
        mov      bword ptr [rbp-0x28], rsi
        mov      dword ptr [rbp-0x20], 256
 						;; size=31 bbWeight=0.23 PerfScore 1.61
 G_M5822_IG08:
        mov      dword ptr [rbp-0x30], edi
        test     rbx, rbx
        je       G_M5822_IG15
 						;; size=12 bbWeight=0.23 PerfScore 0.52
 G_M5822_IG09:
        mov      esi, dword ptr [rbp-0x30]
        mov      r15d, dword ptr [rbx+0x08]
        cmp      r15d, 1
        jne      SHORT G_M5822_IG12
 						;; size=13 bbWeight=0.18 PerfScore 0.78
 G_M5822_IG10:
        cmp      esi, dword ptr [rbp-0x20]
        jae      SHORT G_M5822_IG12
 						;; size=5 bbWeight=0.15 PerfScore 0.44
 G_M5822_IG11:
        cmp      esi, dword ptr [rbp-0x20]
-       jae      G_M5822_IG30
+       jae      G_M5822_IG29
        mov      rdi, bword ptr [rbp-0x28]
        mov      eax, esi
        movzx    rcx, word  ptr [rbx+0x0C]
        mov      word  ptr [rdi+2*rax], cx
        inc      esi
        mov      dword ptr [rbp-0x30], esi
        jmp      SHORT G_M5822_IG15
 						;; size=30 bbWeight=0.08 PerfScore 0.81
 G_M5822_IG12:
        mov      r14d, dword ptr [rbp-0x30]
        mov      esi, dword ptr [rbp-0x20]
        sub      esi, r15d
        cmp      esi, r14d
        jge      SHORT G_M5822_IG14
 						;; size=15 bbWeight=0.11 PerfScore 0.38
 G_M5822_IG13:
        mov      esi, r15d
        lea      rdi, [rbp-0x38]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rax]System.Text.ValueStringBuilder:Grow(int):this
 						;; size=19 bbWeight=0.09 PerfScore 0.34
 G_M5822_IG14:
        cmp      r14d, dword ptr [rbp-0x20]
-       ja       G_M5822_IG29
+       ja       G_M5822_IG28
        mov      rdx, bword ptr [rbp-0x28]
        mov      esi, r14d
        lea      rdi, bword ptr [rdx+2*rsi]
        mov      edx, dword ptr [rbp-0x20]
        sub      edx, r14d
        cmp      r15d, edx
-       ja       G_M5822_IG28
+       ja       G_M5822_IG27
        mov      edx, r15d
        add      rdx, rdx
        lea      rsi, bword ptr [rbx+0x0C]
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        add      r15d, dword ptr [rbp-0x30]
        mov      dword ptr [rbp-0x30], r15d
 						;; size=66 bbWeight=0.11 PerfScore 1.56
 G_M5822_IG15:
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        call     [r11]System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        mov      rbx, rax
        test     rbx, rbx
-       je       SHORT G_M5822_IG20
-						;; size=25 bbWeight=2.30 PerfScore 13.25
+       je       G_M5822_IG23
+						;; size=29 bbWeight=2.30 PerfScore 13.25
 G_M5822_IG16:
        mov      r15d, dword ptr [rbp-0x30]
        mov      esi, r15d
        mov      r14d, dword ptr [rbx+0x08]
        cmp      r14d, 1
-       jne      SHORT G_M5822_IG22
+       jne      SHORT G_M5822_IG19
 						;; size=17 bbWeight=1.84 PerfScore 8.29
 G_M5822_IG17:
        cmp      esi, dword ptr [rbp-0x20]
-       jae      SHORT G_M5822_IG22
+       jae      SHORT G_M5822_IG19
 						;; size=5 bbWeight=1.47 PerfScore 4.42
 G_M5822_IG18:
        cmp      esi, dword ptr [rbp-0x20]
-       jae      G_M5822_IG30
+       jae      G_M5822_IG29
        mov      rdi, bword ptr [rbp-0x28]
        mov      eax, esi
        movzx    rcx, word  ptr [rbx+0x0C]
        mov      word  ptr [rdi+2*rax], cx
        inc      esi
        mov      dword ptr [rbp-0x30], esi
-       jmp      SHORT G_M5822_IG20
+       jmp      SHORT G_M5822_IG23
 						;; size=30 bbWeight=0.77 PerfScore 8.05
 G_M5822_IG19:
+       mov      esi, dword ptr [rbp-0x20]
+       sub      esi, r14d
+       cmp      esi, r15d
+       jge      SHORT G_M5822_IG21
+						;; size=11 bbWeight=1.08 PerfScore 2.69
+G_M5822_IG20:
+       mov      esi, r14d
+       lea      rdi, [rbp-0x38]
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
+       call     [rax]System.Text.ValueStringBuilder:Grow(int):this
+						;; size=19 bbWeight=0.86 PerfScore 3.44
+G_M5822_IG21:
+       mov      eax, dword ptr [rbp-0x20]
+       cmp      r15d, eax
+       ja       G_M5822_IG28
+       mov      rcx, bword ptr [rbp-0x28]
+       mov      edx, r15d
+       lea      rdi, bword ptr [rcx+2*rdx]
+       sub      eax, r15d
+       cmp      r14d, eax
+       ja       G_M5822_IG27
+						;; size=35 bbWeight=1.08 PerfScore 5.92
+G_M5822_IG22:
        mov      edx, r14d
        add      rdx, rdx
        lea      rsi, bword ptr [rbx+0x0C]
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        add      r14d, dword ptr [rbp-0x30]
        mov      dword ptr [rbp-0x30], r14d
 						;; size=30 bbWeight=1.08 PerfScore 7.80
-G_M5822_IG20:
+G_M5822_IG23:
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
-       jne      SHORT G_M5822_IG15
-						;; size=21 bbWeight=2.30 PerfScore 12.67
-G_M5822_IG21:
+       jne      G_M5822_IG15
+						;; size=25 bbWeight=2.30 PerfScore 12.67
+G_M5822_IG24:
        mov      ebx, dword ptr [rbp-0x30]
        cmp      ebx, dword ptr [rbp-0x20]
-       jbe      SHORT G_M5822_IG25
-       jmp      G_M5822_IG29
-						;; size=13 bbWeight=0.23 PerfScore 1.38
-G_M5822_IG22:
-       mov      esi, dword ptr [rbp-0x20]
-       sub      esi, r14d
-       cmp      esi, r15d
-       jge      SHORT G_M5822_IG24
-						;; size=11 bbWeight=1.08 PerfScore 2.69
-G_M5822_IG23:
-       mov      esi, r14d
-       lea      rdi, [rbp-0x38]
-       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
-       call     [rax]System.Text.ValueStringBuilder:Grow(int):this
-						;; size=19 bbWeight=0.86 PerfScore 3.44
-G_M5822_IG24:
-       mov      edx, dword ptr [rbp-0x20]
-       cmp      r15d, edx
-       ja       SHORT G_M5822_IG29
-       mov      rsi, bword ptr [rbp-0x28]
-       mov      edi, r15d
-       lea      rdi, bword ptr [rsi+2*rdi]
-       sub      edx, r15d
-       cmp      r14d, edx
        ja       SHORT G_M5822_IG28
-       jmp      SHORT G_M5822_IG19
-						;; size=29 bbWeight=1.08 PerfScore 8.07
-G_M5822_IG25:
        mov      rdi, bword ptr [rbp-0x28]
        mov      bword ptr [rbp-0x48], rdi
        mov      dword ptr [rbp-0x40], ebx
        lea      rdi, [rbp-0x48]
        mov      rax, 0xD1FFAB1E      ; code for System.Span`1[ushort]:ToString():System.String:this
        call     [rax]System.Span`1[ushort]:ToString():System.String:this
        mov      rbx, rax
        mov      rsi, gword ptr [rbp-0x38]
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x38], ymm0
        test     rsi, rsi
-       je       SHORT G_M5822_IG27
-						;; size=48 bbWeight=0.23 PerfScore 2.44
-G_M5822_IG26:
+       je       SHORT G_M5822_IG26
+						;; size=56 bbWeight=0.23 PerfScore 3.36
+G_M5822_IG25:
        mov      rdi, 0xD1FFAB1E      ; const ptr
        mov      rdi, gword ptr [rdi]
        xor      edx, edx
        mov      rax, 0xD1FFAB1E      ; code for System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
        call     [rax]System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
 						;; size=27 bbWeight=0.18 PerfScore 1.06
-G_M5822_IG27:
-       jmp      SHORT G_M5822_IG31
+G_M5822_IG26:
+       jmp      SHORT G_M5822_IG30
 						;; size=2 bbWeight=0.23 PerfScore 0.46
-G_M5822_IG28:
+G_M5822_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_M5822_IG29:
+G_M5822_IG28:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M5822_IG30:
+G_M5822_IG29:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
-G_M5822_IG31:
+G_M5822_IG30:
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
        mov      rax, rbx
 						;; size=20 bbWeight=1 PerfScore 4.50
-G_M5822_IG32:
+G_M5822_IG31:
        cmp      qword ptr [rbp-0x58], 0xD1FFAB1E
-       je       SHORT G_M5822_IG33
+       je       SHORT G_M5822_IG32
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=1 PerfScore 4.00
-G_M5822_IG33:
+G_M5822_IG32:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
-G_M5822_IG34:
+G_M5822_IG33:
        lea      rsp, [rbp-0x18]
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.50
-G_M5822_IG35:
+G_M5822_IG34:
        mov      edi, 0xDAB
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:Throw(System.String)
        call     [rax]System.ArgumentNullException:Throw(System.String)
        int3     
 						;; size=36 bbWeight=0 PerfScore 0.00
-G_M5822_IG36:
+G_M5822_IG35:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x60]
 						;; size=18 bbWeight=0 PerfScore 0.00
-G_M5822_IG37:
+G_M5822_IG36:
        cmp      gword ptr [rbp-0x50], 0
-       je       SHORT G_M5822_IG38
+       je       SHORT G_M5822_IG37
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
 						;; size=24 bbWeight=0 PerfScore 0.00
-G_M5822_IG38:
+G_M5822_IG37:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M5822_IG39:
+G_M5822_IG38:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 809, prolog size 47, PerfScore 121.73, instruction count 211, allocated bytes for code 809 (MethodHash=bd2ee941) for method System.String:Concat(System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier0-FullOpts)
+; Total bytes of code 818, prolog size 47, PerfScore 119.11, instruction count 209, allocated bytes for code 818 (MethodHash=bd2ee941) for method System.String:Concat(System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier0-FullOpts)
 ; ============================================================
1 (0.12 % of base) - System.Threading.WaitHandle:ObtainSafeWaitHandles(System.ReadOnlySpan`1[System.Threading.WaitHandle],System.Span`1[Microsoft.Win32.SafeHandles.SafeWaitHandle],System.Span`1[long])
 ; Assembly listing for method System.Threading.WaitHandle:ObtainSafeWaitHandles(System.ReadOnlySpan`1[System.Threading.WaitHandle],System.Span`1[Microsoft.Win32.SafeHandles.SafeWaitHandle],System.Span`1[long]) (Tier0-FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; Tier-0 switched to FullOpts code
 ; optimized code
 ; optimized using Synthesized PGO
 ; rbp based frame
 ; fully interruptible
 ; with Synthesized PGO: fgCalledCount is 100
 ; No PGO data
 ; 1 inlinees with PGO data; 3 single block inlinees; 10 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 arg0         [V00    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Threading.WaitHandle]>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[Microsoft.Win32.SafeHandles.SafeWaitHandle]>
 ;* V02 arg2         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[long]>
 ;  V03 loc0         [V03,T05] (  5, 19.00)   ubyte  ->  [rbp-0x2C]  do-not-enreg[Z] ld-addr-op EH-live
 ;  V04 loc1         [V04,T12] (  5, 10.00)     ref  ->  [rbp-0x90]  do-not-enreg[Z] class-hnd EH-live <Microsoft.Win32.SafeHandles.SafeWaitHandle>
 ;  V05 loc2         [V05,T01] (  8, 55.00)     int  ->  r13        
 ;* V06 loc3         [V06    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.Threading.WaitHandle>
 ;  V07 loc4         [V07,T00] (  8, 63.00)     ref  ->  [rbp-0x98]  class-hnd exact spill-single-def <Microsoft.Win32.SafeHandles.SafeWaitHandle>
 ;  V08 loc5         [V08    ] ( 17,  0   )  struct (40) [rbp-0x58]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Runtime.CompilerServices.DefaultInterpolatedStringHandler>
 ;* V09 loc6         [V09,T27] (  0,  0   )     int  ->  zero-ref   
 ;  V10 loc7         [V10,T15] (  4,  0   )     ref  ->  r15         class-hnd <Microsoft.Win32.SafeHandles.SafeWaitHandle>
 ;# V11 OutArgs      [V11    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V12 tmp1         [V12,T02] (  4, 54.00)     ref  ->  rdi         class-hnd "dup spill" <System.Object>
 ;* V13 tmp2         [V13    ] (  0,  0   )     ref  ->  zero-ref   
 ;* V14 tmp3         [V14    ] (  0,  0   )   byref  ->  zero-ref    "impAppendStmt"
 ;  V15 tmp4         [V15    ] (  3,  0   )  struct (40) [rbp-0x80]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.DefaultInterpolatedStringHandler>
 ;  V16 tmp5         [V16,T19] (  2,  0   )     ref  ->  rbx         class-hnd exact "non-inline candidate call" <System.String>
 ;  V17 tmp6         [V17,T18] (  3,  0   )     ref  ->  r15         class-hnd exact "NewObj constructor temp" <System.ArgumentNullException>
 ;* V18 tmp7         [V18    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "impSpillSpecialSideEff" <System.Object>
 ;* V19 tmp8         [V19    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;  V20 tmp9         [V20,T16] (  4,  0   )     int  ->  rdi         "Inlining Arg"
 ;* V21 tmp10        [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V22 tmp11        [V22,T20] (  2,  0   )   byref  ->  rsi         "Inlining Arg"
-;  V23 tmp12        [V23,T23] (  2,  0   )     int  ->  rax         "Inlining Arg"
-;* V24 tmp13        [V24,T24] (  0,  0   )   ubyte  ->  zero-ref    "Inline stloc first use temp"
+;  V22 tmp11        [V22,T20] (  2,  0   )   byref  ->  rbx         "Inlining Arg"
+;  V23 tmp12        [V23,T23] (  2,  0   )     int  ->  rsi         "Inlining Arg"
+;* V24 tmp13        [V24,T24] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V25 tmp14        [V25    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V26 tmp15        [V26    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V27 tmp16        [V27    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V28 tmp17        [V28    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;  V29 tmp18        [V29,T17] (  4,  0   )     int  ->  rbx         "Inlining Arg"
 ;* V30 tmp19        [V30    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;  V31 tmp20        [V31,T21] (  2,  0   )   byref  ->  rdi         "Inlining Arg"
-;  V32 tmp21        [V32,T25] (  2,  0   )     int  ->  rsi         "Inlining Arg"
-;* V33 tmp22        [V33,T26] (  0,  0   )   ubyte  ->  zero-ref    "Inline stloc first use temp"
+;  V31 tmp20        [V31,T21] (  2,  0   )   byref  ->  r15         "Inlining Arg"
+;  V32 tmp21        [V32,T25] (  2,  0   )     int  ->  rdi         "Inlining Arg"
+;* V33 tmp22        [V33,T26] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V34 tmp23        [V34    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V35 tmp24        [V35    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V36 tmp25        [V36    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V37 tmp26        [V37    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V38 tmp27        [V38,T03] (  5, 45.00)     int  ->  rcx         "Inline stloc first use temp"
 ;* V39 tmp28        [V39    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V40 tmp29        [V40    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V41 tmp30        [V41,T09] (  2, 10.00)   byref  ->  rbx         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
 ;  V42 tmp31        [V42,T06] (  5, 11.00)     int  ->  [rbp-0x84]  EH-live single-def "field V00._length (fldOffset=0x8)" P-INDEP
 ;  V43 tmp32        [V43,T07] (  4, 10.00)   byref  ->  [rbp-0xA0]  EH-live single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V44 tmp33        [V44,T08] (  3, 10.00)     int  ->  [rbp-0x88]  EH-live single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;  V45 tmp34        [V45,T10] (  2, 10.00)   byref  ->  r15         single-def "field V02._reference (fldOffset=0x0)" P-INDEP
 ;  V46 tmp35        [V46,T11] (  2, 10.00)     int  ->  r14         single-def "field V02._length (fldOffset=0x8)" P-INDEP
 ;* V47 tmp36        [V47    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
 ;* V48 tmp37        [V48    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
 ;* V49 tmp38        [V49    ] (  0,  0   )   byref  ->  zero-ref    "field V21._reference (fldOffset=0x0)" P-INDEP
 ;* V50 tmp39        [V50    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
 ;* V51 tmp40        [V51    ] (  0,  0   )   byref  ->  zero-ref    "field V25._reference (fldOffset=0x0)" P-INDEP
 ;* V52 tmp41        [V52    ] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
 ;* V53 tmp42        [V53    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
 ;* V54 tmp43        [V54    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
 ;* V55 tmp44        [V55    ] (  0,  0   )   byref  ->  zero-ref    "field V30._reference (fldOffset=0x0)" P-INDEP
 ;* V56 tmp45        [V56    ] (  0,  0   )     int  ->  zero-ref    "field V30._length (fldOffset=0x8)" P-INDEP
 ;* V57 tmp46        [V57    ] (  0,  0   )   byref  ->  zero-ref    "field V34._reference (fldOffset=0x0)" P-INDEP
 ;* V58 tmp47        [V58    ] (  0,  0   )     int  ->  zero-ref    "field V34._length (fldOffset=0x8)" P-INDEP
 ;  V59 tmp48        [V59,T22] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V60 PSPSym       [V60,T13] (  1,  1   )    long  ->  [rbp-0xB0]  do-not-enreg[V] "PSPSym"
 ;  V61 cse0         [V61,T04] (  4, 36.00)    long  ->  r12         "CSE #01: aggressive"
 ;  V62 rat0         [V62,T14] (  7,  0   )    long  ->  rbx         "Widened IV V09"
 ;
 ; Lcl frame size = 136
 
 G_M55186_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 136
        lea      rbp, [rsp+0xB0]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x80], ymm8
        vmovdqu  ymmword ptr [rbp-0x60], ymm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        mov      qword ptr [rbp-0xB0], rsp
        mov      dword ptr [rbp-0x84], esi
        mov      bword ptr [rbp-0xA0], rdx
        mov      dword ptr [rbp-0x88], ecx
        mov      rbx, rdi
        mov      r15, r8
        mov      r14d, r9d
 						;; size=80 bbWeight=1 PerfScore 17.83
 G_M55186_IG02:
        mov      dword ptr [rbp-0x2C], 1
        xor      rdi, rdi
        mov      gword ptr [rbp-0x90], rdi
 						;; size=16 bbWeight=1 PerfScore 2.25
 G_M55186_IG03:
        xor      r13d, r13d
        test     esi, esi
        jle      G_M55186_IG19
 						;; size=11 bbWeight=1 PerfScore 1.50
 G_M55186_IG04:
        mov      r12d, r13d
        mov      rdi, gword ptr [rbx+8*r12]
        test     rdi, rdi
        je       G_M55186_IG09
        mov      rax, gword ptr [rdi+0x08]
        mov      gword ptr [rbp-0x98], rax
        test     rax, rax
        je       G_M55186_IG07
        mov      gword ptr [rbp-0x90], rax
        xor      edi, edi
        mov      dword ptr [rbp-0x2C], edi
        align    [5 bytes for IG05]
 						;; size=53 bbWeight=9.00 PerfScore 92.25
 G_M55186_IG05:
        mov      ecx, dword ptr [rax+0x10]
        test     cl, 1
        jne      SHORT G_M55186_IG08
        lea      rdi, bword ptr [rax+0x10]
        lea      edx, [rcx+0x04]
        mov      eax, ecx
        lock     
        cmpxchg  dword ptr [rdi], edx
        cmp      eax, ecx
        mov      rax, gword ptr [rbp-0x98]
        jne      SHORT G_M55186_IG05
 						;; size=32 bbWeight=9.00 PerfScore 222.75
 G_M55186_IG06:
        mov      dword ptr [rbp-0x2C], 1
        cmp      r13d, dword ptr [rbp-0x88]
        jae      G_M55186_IG18
        mov      rdx, bword ptr [rbp-0xA0]
        lea      rdi, bword ptr [rdx+8*r12]
        mov      rsi, rax
        call     CORINFO_HELP_CHECKED_ASSIGN_REF
        cmp      r13d, r14d
        jae      G_M55186_IG18
        mov      rdi, gword ptr [rbp-0x98]
        mov      rdi, qword ptr [rdi+0x08]
        mov      qword ptr [r15+8*r12], rdi
        inc      r13d
        cmp      r13d, dword ptr [rbp-0x84]
        jl       G_M55186_IG04
        jmp      G_M55186_IG19
 						;; size=84 bbWeight=9.00 PerfScore 155.25
 G_M55186_IG07:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowObjectDisposedException(System.Object)
        call     [rax]System.ThrowHelper:ThrowObjectDisposedException(System.Object)
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M55186_IG08:
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowObjectDisposedException(System.Object)
        call     [rax]System.ThrowHelper:ThrowObjectDisposedException(System.Object)
        int3     
 						;; size=16 bbWeight=0 PerfScore 0.00
 G_M55186_IG09:
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x80], ymm0
        vmovdqu  xmmword ptr [rbp-0x68], xmm0
        lea      rdi, [rbp-0x80]
        mov      esi, 13
        mov      edx, 1
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this
 						;; size=40 bbWeight=0 PerfScore 0.00
 G_M55186_IG10:
        vmovdqu  ymm0, ymmword ptr [rbp-0x80]
        vmovdqu  ymmword ptr [rbp-0x58], ymm0
        mov      rdi, qword ptr [rbp-0x60]
        mov      qword ptr [rbp-0x38], rdi
 						;; size=18 bbWeight=0 PerfScore 0.00
 G_M55186_IG11:
        mov      edi, dword ptr [rbp-0x48]
        cmp      edi, dword ptr [rbp-0x38]
        ja       SHORT G_M55186_IG14
        mov      rsi, bword ptr [rbp-0x40]
        mov      eax, edi
-       lea      rsi, bword ptr [rsi+2*rax]
-       mov      eax, dword ptr [rbp-0x38]
-       sub      eax, edi
-       cmp      eax, 12
-       jb       SHORT G_M55186_IG12
-       mov      rdi, 0xD1FFAB1E
-       vmovdqu  xmm0, xmmword ptr [rdi]
-       vmovdqu  xmm1, xmmword ptr [rdi+0x08]
-       vmovdqu  xmmword ptr [rsi], xmm0
-       vmovdqu  xmmword ptr [rsi+0x08], xmm1
-       mov      edi, dword ptr [rbp-0x48]
-       add      edi, 12
-       mov      dword ptr [rbp-0x48], edi
-       jmp      SHORT G_M55186_IG13
-						;; size=67 bbWeight=0 PerfScore 0.00
-G_M55186_IG12:
+       lea      rbx, bword ptr [rsi+2*rax]
+       mov      esi, dword ptr [rbp-0x38]
+       sub      esi, edi
+       cmp      esi, 12
+       jae      SHORT G_M55186_IG12
        lea      rdi, [rbp-0x58]
        mov      rsi, 0xD1FFAB1E      ; 'waitHandles['
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this
-						;; size=26 bbWeight=0 PerfScore 0.00
+       jmp      SHORT G_M55186_IG13
+						;; size=56 bbWeight=0 PerfScore 0.00
+G_M55186_IG12:
+       mov      rdi, 0xD1FFAB1E
+       vmovdqu  xmm0, xmmword ptr [rdi]
+       vmovdqu  xmm1, xmmword ptr [rdi+0x08]
+       vmovdqu  xmmword ptr [rbx], xmm0
+       vmovdqu  xmmword ptr [rbx+0x08], xmm1
+       mov      edi, dword ptr [rbp-0x48]
+       add      edi, 12
+       mov      dword ptr [rbp-0x48], edi
+						;; size=37 bbWeight=0 PerfScore 0.00
 G_M55186_IG13:
        lea      rdi, [rbp-0x58]
        mov      esi, r13d
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[int](int):this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[int](int):this
        mov      ebx, dword ptr [rbp-0x48]
        cmp      ebx, dword ptr [rbp-0x38]
        jbe      SHORT G_M55186_IG15
 						;; size=27 bbWeight=0 PerfScore 0.00
 G_M55186_IG14:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M55186_IG15:
        mov      rdi, bword ptr [rbp-0x40]
        mov      esi, ebx
-       lea      rdi, bword ptr [rdi+2*rsi]
-       mov      esi, dword ptr [rbp-0x38]
-       sub      esi, ebx
-       je       SHORT G_M55186_IG16
-       mov      rsi, 0xD1FFAB1E
-       movzx    rax, word  ptr [rsi]
-       mov      word  ptr [rdi], ax
-       mov      edi, dword ptr [rbp-0x48]
-       inc      edi
-       mov      dword ptr [rbp-0x48], edi
-       jmp      SHORT G_M55186_IG17
-						;; size=43 bbWeight=0 PerfScore 0.00
-G_M55186_IG16:
+       lea      r15, bword ptr [rdi+2*rsi]
+       mov      edi, dword ptr [rbp-0x38]
+       sub      edi, ebx
+       jne      SHORT G_M55186_IG16
        lea      rdi, [rbp-0x58]
        mov      rsi, 0xD1FFAB1E      ; ']'
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowThenCopyString(System.String):this
-						;; size=26 bbWeight=0 PerfScore 0.00
+       jmp      SHORT G_M55186_IG17
+						;; size=45 bbWeight=0 PerfScore 0.00
+G_M55186_IG16:
+       mov      rdi, 0xD1FFAB1E
+       movzx    rax, word  ptr [rdi]
+       mov      word  ptr [r15], ax
+       mov      edi, dword ptr [rbp-0x48]
+       inc      edi
+       mov      dword ptr [rbp-0x48], edi
+						;; size=25 bbWeight=0 PerfScore 0.00
 G_M55186_IG17:
        lea      rdi, [rbp-0x58]
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:ToStringAndClear():System.String:this
        call     [rax]System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:ToStringAndClear():System.String:this
        mov      rbx, rax
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentNullException
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentNull_ArrayElement():System.String
        call     [rax]System.SR:get_ArgumentNull_ArrayElement():System.String
        mov      rdx, rax
        mov      rsi, rbx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentNullException:.ctor(System.String,System.String):this
        mov      rdi, r15
        call     CORINFO_HELP_THROW
        int3     
 						;; size=79 bbWeight=0 PerfScore 0.00
 G_M55186_IG18:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 G_M55186_IG19:
        vzeroupper 
        add      rsp, 136
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M55186_IG20:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0xB0]
 						;; size=25 bbWeight=0 PerfScore 0.00
 G_M55186_IG21:
        xor      ebx, ebx
        cmp      dword ptr [rbp-0x84], 0
        jle      SHORT G_M55186_IG24
 						;; size=11 bbWeight=0 PerfScore 0.00
 G_M55186_IG22:
        cmp      ebx, dword ptr [rbp-0x88]
        jae      SHORT G_M55186_IG26
        mov      rdx, bword ptr [rbp-0xA0]
        mov      r15, gword ptr [rdx+8*rbx]
        test     r15, r15
        je       SHORT G_M55186_IG24
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.InteropServices.SafeHandle:DangerousRelease():this
        call     [rax]System.Runtime.InteropServices.SafeHandle:DangerousRelease():this
        xor      rdi, rdi
        mov      rdx, bword ptr [rbp-0xA0]
        mov      gword ptr [rdx+8*rbx], rdi
        cmp      r15, gword ptr [rbp-0x90]
        jne      SHORT G_M55186_IG23
        xor      rdi, rdi
        mov      gword ptr [rbp-0x90], rdi
        mov      dword ptr [rbp-0x2C], 1
 						;; size=77 bbWeight=0 PerfScore 0.00
 G_M55186_IG23:
        inc      ebx
        mov      esi, dword ptr [rbp-0x84]
        cmp      ebx, esi
        jl       SHORT G_M55186_IG22
 						;; size=12 bbWeight=0 PerfScore 0.00
 G_M55186_IG24:
        cmp      dword ptr [rbp-0x2C], 0
        jne      SHORT G_M55186_IG25
        mov      rdi, gword ptr [rbp-0x90]
        mov      rax, 0xD1FFAB1E      ; code for System.Runtime.InteropServices.SafeHandle:DangerousRelease():this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Runtime.InteropServices.SafeHandle:DangerousRelease():this
 						;; size=27 bbWeight=0 PerfScore 0.00
 G_M55186_IG25:
        call     CORINFO_HELP_RETHROW
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 G_M55186_IG26:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 835, prolog size 80, PerfScore 497.08, instruction count 205, allocated bytes for code 835 (MethodHash=dbd6286d) for method System.Threading.WaitHandle:ObtainSafeWaitHandles(System.ReadOnlySpan`1[System.Threading.WaitHandle],System.Span`1[Microsoft.Win32.SafeHandles.SafeWaitHandle],System.Span`1[long]) (Tier0-FullOpts)
+; Total bytes of code 836, prolog size 80, PerfScore 497.08, instruction count 205, allocated bytes for code 836 (MethodHash=dbd6286d) for method System.Threading.WaitHandle:ObtainSafeWaitHandles(System.ReadOnlySpan`1[System.Threading.WaitHandle],System.Span`1[Microsoft.Win32.SafeHandles.SafeWaitHandle],System.Span`1[long]) (Tier0-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/f48cd95aa7e83669bf8e9ae6afc677f2

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 7, 2024

Top method improvements

-27 (-2.70 % of base) - System.Runtime.Intrinsics.Vector128`1[long]:ToString(System.String,System.IFormatProvider):System.String:this
 ; Assembly listing for method System.Runtime.Intrinsics.Vector128`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; Tier-0 switched to FullOpts code
 ; optimized code
 ; optimized using Synthesized PGO
 ; rbp based frame
 ; partially interruptible
 ; with Synthesized PGO: fgCalledCount is 100
 ; No PGO data
 ; 0 inlinees with PGO data; 12 single block inlinees; 23 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T03] (  4,  4.13)   byref  ->  r15         this single-def
 ;  V01 arg1         [V01,T04] (  4,  4.13)     ref  ->  r14         class-hnd single-def <System.String>
 ;  V02 arg2         [V02,T01] (  6,  5.64)     ref  ->  rbx         class-hnd single-def <System.IFormatProvider>
 ;  V03 loc0         [V03    ] ( 62, 40.27)  struct (32) [rbp-0x48]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
 ;  V04 loc1         [V04,T10] (  5,  3.93)     ref  ->  r13         class-hnd exact single-def <System.String>
 ;* V05 loc2         [V05    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
 ;* V06 loc3         [V06,T38] (  0,  0   )     int  ->  zero-ref   
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V08 tmp1         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V09 tmp2         [V09    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op class-hnd exact "Single-def Box Helper" <System.Int64>
 ;* V10 tmp3         [V10    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op class-hnd exact "Single-def Box Helper" <System.Int64>
 ;  V11 tmp4         [V11,T09] (  2,  4   )    long  ->  rdi         "Inlining Arg"
 ;  V12 tmp5         [V12,T27] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Globalization.NumberFormatInfo>
 ;  V13 tmp6         [V13,T13] (  4,  3.04)     int  ->  rdi         "Inline stloc first use temp"
 ;* V14 tmp7         [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V15 tmp8         [V15,T02] (  5,  7.20)     ref  ->  r12         class-hnd exact single-def "Inlining Arg" <System.String>
 ;  V16 tmp9         [V16,T20] (  5,  2.44)     int  ->  rsi         "Inline stloc first use temp"
 ;  V17 tmp10        [V17,T21] (  5,  2.34)     int  ->  [rbp-0x4C]  spill-single-def "Inline stloc first use temp"
 ;* V18 tmp11        [V18    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V19 tmp12        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V20 tmp13        [V20,T33] (  2,  1.87)   byref  ->  rdi         single-def "Inlining Arg"
 ;  V21 tmp14        [V21,T34] (  2,  1.87)     int  ->  rdx         "Inlining Arg"
 ;* V22 tmp15        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V23 tmp16        [V23    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V24 tmp17        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V25 tmp18        [V25    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V26 tmp19        [V26,T16] (  5,  2.74)     int  ->  rsi         "Inline stloc first use temp"
 ;  V27 tmp20        [V27,T18] (  5,  2.63)     int  ->  [rbp-0x50]  spill-single-def "Inline stloc first use temp"
 ;* V28 tmp21        [V28    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V29 tmp22        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V30 tmp23        [V30,T23] (  2,  2.10)   byref  ->  rdi         "Inlining Arg"
 ;  V31 tmp24        [V31,T25] (  2,  2.10)     int  ->  rdx         "Inlining Arg"
 ;* V32 tmp25        [V32    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V33 tmp26        [V33    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V34 tmp27        [V34    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V35 tmp28        [V35    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V36 tmp29        [V36,T12] (  4,  3.42)     int  ->  rdi         "Inline stloc first use temp"
 ;* V37 tmp30        [V37    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V38 tmp31        [V38,T00] (  5,  8.10)     ref  ->  rbx         class-hnd exact "Inlining Arg" <System.String>
 ;  V39 tmp32        [V39,T17] (  5,  2.74)     int  ->  rsi         "Inline stloc first use temp"
 ;  V40 tmp33        [V40,T19] (  5,  2.63)     int  ->  r14         "Inline stloc first use temp"
 ;* V41 tmp34        [V41    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V42 tmp35        [V42    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V43 tmp36        [V43,T24] (  2,  2.10)   byref  ->  rdi         "Inlining Arg"
-;  V44 tmp37        [V44,T26] (  2,  2.10)     int  ->  rdx         "Inlining Arg"
+;  V44 tmp37        [V44,T26] (  2,  2.10)     int  ->  rax         "Inlining Arg"
 ;* V45 tmp38        [V45    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V46 tmp39        [V46    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V47 tmp40        [V47    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V48 tmp41        [V48    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V49 tmp42        [V49,T14] (  4,  3.04)     int  ->  rdi         "Inline stloc first use temp"
 ;* V50 tmp43        [V50    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V51 tmp44        [V51    ] (  3,  3   )  struct (16) [rbp-0x60]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V52 tmp45        [V52,T08] (  2,  4   )     ref  ->  rbx         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V53 tmp46        [V53,T05] (  3,  6   )     int  ->  rbx         "Inlining Arg"
 ;* V54 tmp47        [V54    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V55 tmp48        [V55    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V56 tmp49        [V56,T15] (  3,  2.80)     ref  ->  rsi         class-hnd single-def "Inline stloc first use temp" <ushort[]>
 ;* V57 tmp50        [V57    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V58 tmp51        [V58    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
 ;  V59 tmp52        [V59,T28] (  2,  2   )   byref  ->  rdi         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
 ;* V60 tmp53        [V60,T39] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
 ;* V61 tmp54        [V61    ] (  0,  0   )    long  ->  zero-ref    "field V09.m_value (fldOffset=0x0)" P-INDEP
 ;* V62 tmp55        [V62    ] (  0,  0   )    long  ->  zero-ref    "field V10.m_value (fldOffset=0x0)" P-INDEP
 ;  V63 tmp56        [V63,T36] (  2,  1.52)   byref  ->  rsi         single-def "field V14._reference (fldOffset=0x0)" P-INDEP
 ;  V64 tmp57        [V64,T30] (  2,  2   )     int  ->  rax         "field V14._length (fldOffset=0x8)" P-INDEP
 ;* V65 tmp58        [V65    ] (  0,  0   )   byref  ->  zero-ref    "field V18._reference (fldOffset=0x0)" P-INDEP
 ;* V66 tmp59        [V66    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0x8)" P-INDEP
 ;* V67 tmp60        [V67    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V19._reference (fldOffset=0x0)" P-INDEP
 ;* V68 tmp61        [V68    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
 ;* V69 tmp62        [V69    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;* V70 tmp63        [V70    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
 ;* V71 tmp64        [V71    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
 ;* V72 tmp65        [V72    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
 ;* V73 tmp66        [V73    ] (  0,  0   )   byref  ->  zero-ref    "field V29._reference (fldOffset=0x0)" P-INDEP
 ;* V74 tmp67        [V74    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
 ;* V75 tmp68        [V75    ] (  0,  0   )   byref  ->  zero-ref    "field V32._reference (fldOffset=0x0)" P-INDEP
 ;* V76 tmp69        [V76    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
 ;  V77 tmp70        [V77,T35] (  2,  1.71)   byref  ->  rsi         "field V37._reference (fldOffset=0x0)" P-INDEP
 ;  V78 tmp71        [V78,T22] (  2,  2.25)     int  ->  rax         "field V37._length (fldOffset=0x8)" P-INDEP
 ;* V79 tmp72        [V79    ] (  0,  0   )   byref  ->  zero-ref    "field V41._reference (fldOffset=0x0)" P-INDEP
 ;* V80 tmp73        [V80    ] (  0,  0   )     int  ->  zero-ref    "field V41._length (fldOffset=0x8)" P-INDEP
 ;* V81 tmp74        [V81    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
 ;* V82 tmp75        [V82    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
 ;* V83 tmp76        [V83    ] (  0,  0   )   byref  ->  zero-ref    "field V45._reference (fldOffset=0x0)" P-INDEP
 ;* V84 tmp77        [V84    ] (  0,  0   )     int  ->  zero-ref    "field V45._length (fldOffset=0x8)" P-INDEP
 ;  V85 tmp78        [V85,T37] (  2,  1.52)   byref  ->  rsi         single-def "field V50._reference (fldOffset=0x0)" P-INDEP
 ;  V86 tmp79        [V86,T31] (  2,  2   )     int  ->  rax         "field V50._length (fldOffset=0x8)" P-INDEP
 ;  V87 tmp80        [V87    ] (  2,  2   )   byref  ->  [rbp-0x60]  do-not-enreg[X] addr-exposed "field V51._reference (fldOffset=0x0)" P-DEP
 ;  V88 tmp81        [V88    ] (  2,  2   )     int  ->  [rbp-0x58]  do-not-enreg[X] addr-exposed "field V51._length (fldOffset=0x8)" P-DEP
 ;  V89 tmp82        [V89,T29] (  2,  2   )   byref  ->  rdi         single-def "field V54._reference (fldOffset=0x0)" P-INDEP
 ;  V90 tmp83        [V90,T32] (  2,  2   )     int  ->  rbx         "field V54._length (fldOffset=0x8)" P-INDEP
 ;  V91 GsCookie     [V91    ] (  1,  1   )    long  ->  [rbp-0x70]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V92 cse0         [V92,T06] (  7,  4.32)     int  ->  r12         "CSE #06: moderate"
 ;  V93 cse1         [V93,T07] (  7,  4.32)     int  ->  r15         "CSE #10: moderate"
 ;  V94 cse2         [V94,T11] (  7,  3.84)     int  ->  [rbp-0x64]  spill-single-def "CSE #02: moderate"
 ;
 ; Lcl frame size = 72
 
 G_M40097_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 72
        lea      rbp, [rsp+0x70]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x60], ymm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        xor      eax, eax
        mov      qword ptr [rbp-0x30], rax
        mov      qword ptr [rbp-0x70], 0xD1FFAB1E
        mov      r15, rdi
        mov      r14, rsi
        mov      rbx, rdx
 						;; size=57 bbWeight=1 PerfScore 14.08
 G_M40097_IG02:
        test     dword ptr [rsp], esp
        sub      rsp, 128
        lea      rdi, [rsp]
        mov      bword ptr [rbp-0x38], rdi
        mov      dword ptr [rbp-0x30], 64
        xor      edi, edi
        mov      dword ptr [rbp-0x40], edi
        test     rbx, rbx
        je       G_M40097_IG10
 						;; size=39 bbWeight=1 PerfScore 8.25
 G_M40097_IG03:
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.NumberFormatInfo:<GetInstance>g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo
        call     [rax]System.Globalization.NumberFormatInfo:<GetInstance>g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo
 						;; size=15 bbWeight=0.52 PerfScore 1.82
 G_M40097_IG04:
        mov      r13, gword ptr [rax+0x38]
        mov      edi, dword ptr [rbp-0x40]
        mov      rsi, bword ptr [rbp-0x38]
        mov      eax, dword ptr [rbp-0x30]
        cmp      edi, eax
        jae      SHORT G_M40097_IG11
 						;; size=18 bbWeight=1 PerfScore 6.25
 G_M40097_IG05:
        mov      eax, edi
        mov      word  ptr [rsi+2*rax], 60
        inc      edi
        mov      dword ptr [rbp-0x40], edi
 						;; size=13 bbWeight=0.52 PerfScore 1.30
 G_M40097_IG06:
        mov      rdi, qword ptr [r15]
        mov      rsi, r14
        mov      rdx, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Number:FormatInt64(long,System.String,System.IFormatProvider):System.String
        call     [rax]System.Number:FormatInt64(long,System.String,System.IFormatProvider):System.String
        mov      r12, rax
        test     r12, r12
        je       G_M40097_IG15
 						;; size=33 bbWeight=1 PerfScore 7.25
 G_M40097_IG07:
        mov      esi, dword ptr [rbp-0x40]
        mov      eax, dword ptr [r12+0x08]
        mov      dword ptr [rbp-0x64], eax
        cmp      eax, 1
        jne      SHORT G_M40097_IG12
 						;; size=16 bbWeight=0.80 PerfScore 4.20
 G_M40097_IG08:
        cmp      esi, dword ptr [rbp-0x30]
        jae      SHORT G_M40097_IG12
 						;; size=5 bbWeight=0.64 PerfScore 1.92
 G_M40097_IG09:
        cmp      esi, dword ptr [rbp-0x30]
        jae      G_M40097_IG45
        mov      rax, bword ptr [rbp-0x38]
        mov      edi, esi
        movzx    rcx, word  ptr [r12+0x0C]
        mov      word  ptr [rax+2*rdi], cx
        inc      esi
        mov      dword ptr [rbp-0x40], esi
        jmp      G_M40097_IG15
 						;; size=35 bbWeight=0.33 PerfScore 3.49
 G_M40097_IG10:
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
        call     [rax]System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
        jmp      G_M40097_IG04
 						;; size=17 bbWeight=0.48 PerfScore 2.52
 G_M40097_IG11:
        lea      rdi, [rbp-0x48]
        mov      esi, 60
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
        call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
        jmp      G_M40097_IG06
 						;; size=26 bbWeight=0.48 PerfScore 2.88
 G_M40097_IG12:
        mov      ecx, dword ptr [rbp-0x40]
        mov      dword ptr [rbp-0x4C], ecx
        mov      esi, dword ptr [rbp-0x30]
        sub      esi, eax
        cmp      esi, ecx
        jge      SHORT G_M40097_IG14
 						;; size=15 bbWeight=0.47 PerfScore 2.10
 G_M40097_IG13:
        mov      esi, eax
        lea      rdi, [rbp-0x48]
        mov      rdx, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rdx]System.Text.ValueStringBuilder:Grow(int):this
        mov      eax, dword ptr [rbp-0x64]
 						;; size=21 bbWeight=0.37 PerfScore 1.87
 G_M40097_IG14:
        mov      ecx, dword ptr [rbp-0x4C]
        cmp      ecx, dword ptr [rbp-0x30]
        ja       G_M40097_IG44
        mov      rdx, bword ptr [rbp-0x38]
        mov      esi, ecx
        lea      rdi, bword ptr [rdx+2*rsi]
        mov      edx, dword ptr [rbp-0x30]
        sub      edx, ecx
        cmp      eax, edx
        ja       G_M40097_IG43
        mov      edx, eax
        add      rdx, rdx
        lea      rsi, bword ptr [r12+0x0C]
        mov      rcx, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rcx]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      r12d, dword ptr [rbp-0x64]
        add      r12d, dword ptr [rbp-0x40]
        mov      dword ptr [rbp-0x40], r12d
 						;; size=69 bbWeight=0.47 PerfScore 7.71
 G_M40097_IG15:
        test     r13, r13
        je       G_M40097_IG22
 						;; size=9 bbWeight=1.13 PerfScore 1.41
 G_M40097_IG16:
        mov      esi, dword ptr [rbp-0x40]
        mov      r12d, dword ptr [r13+0x08]
        cmp      r12d, 1
        jne      SHORT G_M40097_IG19
 						;; size=13 bbWeight=0.90 PerfScore 3.83
 G_M40097_IG17:
        cmp      esi, dword ptr [rbp-0x30]
        jae      SHORT G_M40097_IG19
 						;; size=5 bbWeight=0.72 PerfScore 2.16
 G_M40097_IG18:
        cmp      esi, dword ptr [rbp-0x30]
        jae      G_M40097_IG45
        mov      rdi, bword ptr [rbp-0x38]
        mov      eax, esi
        movzx    rcx, word  ptr [r13+0x0C]
        mov      word  ptr [rdi+2*rax], cx
        inc      esi
        mov      dword ptr [rbp-0x40], esi
        jmp      SHORT G_M40097_IG22
 						;; size=31 bbWeight=0.37 PerfScore 3.93
 G_M40097_IG19:
        mov      eax, dword ptr [rbp-0x40]
        mov      dword ptr [rbp-0x50], eax
        mov      esi, dword ptr [rbp-0x30]
        sub      esi, r12d
        cmp      esi, eax
        jge      SHORT G_M40097_IG21
 						;; size=16 bbWeight=0.53 PerfScore 2.37
 G_M40097_IG20:
        mov      esi, r12d
        lea      rdi, [rbp-0x48]
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rcx]System.Text.ValueStringBuilder:Grow(int):this
 						;; size=19 bbWeight=0.42 PerfScore 1.68
 G_M40097_IG21:
        mov      eax, dword ptr [rbp-0x50]
        cmp      eax, dword ptr [rbp-0x30]
        ja       G_M40097_IG44
        mov      rdx, bword ptr [rbp-0x38]
        mov      esi, eax
        lea      rdi, bword ptr [rdx+2*rsi]
        mov      edx, dword ptr [rbp-0x30]
        sub      edx, eax
        cmp      r12d, edx
        ja       G_M40097_IG43
        mov      edx, r12d
        add      rdx, rdx
        lea      rsi, bword ptr [r13+0x0C]
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        add      r12d, dword ptr [rbp-0x40]
        mov      dword ptr [rbp-0x40], r12d
 						;; size=66 bbWeight=0.53 PerfScore 8.15
 G_M40097_IG22:
        mov      edi, dword ptr [rbp-0x40]
        mov      rsi, bword ptr [rbp-0x38]
        mov      eax, dword ptr [rbp-0x30]
        cmp      edi, eax
-       jae      G_M40097_IG32
-						;; size=18 bbWeight=1.13 PerfScore 4.78
+       jae      SHORT G_M40097_IG28
+						;; size=14 bbWeight=1.13 PerfScore 4.78
 G_M40097_IG23:
        mov      eax, edi
        mov      word  ptr [rsi+2*rax], 32
        inc      edi
        mov      dword ptr [rbp-0x40], edi
 						;; size=13 bbWeight=0.59 PerfScore 1.46
 G_M40097_IG24:
        mov      rdi, qword ptr [r15+0x08]
        mov      rsi, r14
        mov      rdx, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Number:FormatInt64(long,System.String,System.IFormatProvider):System.String
        call     [rax]System.Number:FormatInt64(long,System.String,System.IFormatProvider):System.String
        mov      rbx, rax
        test     rbx, rbx
-       je       SHORT G_M40097_IG29
-						;; size=30 bbWeight=1.13 PerfScore 8.16
+       je       G_M40097_IG33
+						;; size=34 bbWeight=1.13 PerfScore 8.16
 G_M40097_IG25:
        mov      esi, dword ptr [rbp-0x40]
        mov      r15d, dword ptr [rbx+0x08]
        cmp      r15d, 1
-       jne      G_M40097_IG33
-						;; size=17 bbWeight=0.90 PerfScore 3.83
+       jne      SHORT G_M40097_IG29
+						;; size=13 bbWeight=0.90 PerfScore 3.83
 G_M40097_IG26:
        cmp      esi, dword ptr [rbp-0x30]
-       jae      G_M40097_IG33
-						;; size=9 bbWeight=0.72 PerfScore 2.16
+       jae      SHORT G_M40097_IG29
+						;; size=5 bbWeight=0.72 PerfScore 2.16
 G_M40097_IG27:
        cmp      esi, dword ptr [rbp-0x30]
        jae      G_M40097_IG45
        mov      rdi, bword ptr [rbp-0x38]
        mov      eax, esi
        movzx    rcx, word  ptr [rbx+0x0C]
        mov      word  ptr [rdi+2*rax], cx
        inc      esi
        mov      dword ptr [rbp-0x40], esi
-       jmp      SHORT G_M40097_IG29
+       jmp      SHORT G_M40097_IG33
 						;; size=30 bbWeight=0.37 PerfScore 3.93
 G_M40097_IG28:
+       lea      rdi, [rbp-0x48]
+       mov      esi, 32
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
+       call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
+       jmp      SHORT G_M40097_IG24
+						;; size=23 bbWeight=0.54 PerfScore 3.24
+G_M40097_IG29:
+       mov      r14d, dword ptr [rbp-0x40]
+       mov      esi, dword ptr [rbp-0x30]
+       sub      esi, r15d
+       cmp      esi, r14d
+       jge      SHORT G_M40097_IG31
+						;; size=15 bbWeight=0.53 PerfScore 1.84
+G_M40097_IG30:
+       mov      esi, r15d
+       lea      rdi, [rbp-0x48]
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
+       call     [rax]System.Text.ValueStringBuilder:Grow(int):this
+						;; size=19 bbWeight=0.42 PerfScore 1.68
+G_M40097_IG31:
+       cmp      r14d, dword ptr [rbp-0x30]
+       ja       G_M40097_IG44
+       mov      rax, bword ptr [rbp-0x38]
+       mov      ecx, r14d
+       lea      rdi, bword ptr [rax+2*rcx]
+       mov      eax, dword ptr [rbp-0x30]
+       sub      eax, r14d
+       cmp      r15d, eax
+       ja       G_M40097_IG43
+						;; size=36 bbWeight=0.53 PerfScore 3.81
+G_M40097_IG32:
        mov      edx, r15d
        add      rdx, rdx
        lea      rsi, bword ptr [rbx+0x0C]
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        add      r15d, dword ptr [rbp-0x40]
        mov      dword ptr [rbp-0x40], r15d
 						;; size=30 bbWeight=0.53 PerfScore 3.81
-G_M40097_IG29:
+G_M40097_IG33:
        mov      edi, dword ptr [rbp-0x40]
        mov      rsi, bword ptr [rbp-0x38]
        mov      eax, dword ptr [rbp-0x30]
        cmp      edi, eax
-       jae      G_M40097_IG36
-						;; size=18 bbWeight=1 PerfScore 4.25
-G_M40097_IG30:
+       jae      SHORT G_M40097_IG36
+						;; size=14 bbWeight=1 PerfScore 4.25
+G_M40097_IG34:
        mov      eax, edi
        mov      word  ptr [rsi+2*rax], 62
        inc      edi
        mov      dword ptr [rbp-0x40], edi
 						;; size=13 bbWeight=0.52 PerfScore 1.30
-G_M40097_IG31:
+G_M40097_IG35:
        mov      ebx, dword ptr [rbp-0x40]
        cmp      ebx, dword ptr [rbp-0x30]
-       jbe      G_M40097_IG37
+       jbe      SHORT G_M40097_IG37
        jmp      G_M40097_IG44
-						;; size=17 bbWeight=1 PerfScore 6.00
-G_M40097_IG32:
-       lea      rdi, [rbp-0x48]
-       mov      esi, 32
-       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
-       call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
-       jmp      G_M40097_IG24
-						;; size=26 bbWeight=0.54 PerfScore 3.24
-G_M40097_IG33:
-       mov      r14d, dword ptr [rbp-0x40]
-       mov      esi, dword ptr [rbp-0x30]
-       sub      esi, r15d
-       cmp      esi, r14d
-       jge      SHORT G_M40097_IG35
-						;; size=15 bbWeight=0.53 PerfScore 1.84
-G_M40097_IG34:
-       mov      esi, r15d
-       lea      rdi, [rbp-0x48]
-       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
-       call     [rax]System.Text.ValueStringBuilder:Grow(int):this
-						;; size=19 bbWeight=0.42 PerfScore 1.68
-G_M40097_IG35:
-       cmp      r14d, dword ptr [rbp-0x30]
-       ja       G_M40097_IG44
-       mov      rdx, bword ptr [rbp-0x38]
-       mov      esi, r14d
-       lea      rdi, bword ptr [rdx+2*rsi]
-       mov      edx, dword ptr [rbp-0x30]
-       sub      edx, r14d
-       cmp      r15d, edx
-       ja       G_M40097_IG43
-       jmp      G_M40097_IG28
-						;; size=41 bbWeight=0.53 PerfScore 4.86
+						;; size=13 bbWeight=1 PerfScore 6.00
 G_M40097_IG36:
        lea      rdi, [rbp-0x48]
        mov      esi, 62
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
        call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
-       jmp      G_M40097_IG31
-						;; size=26 bbWeight=0.48 PerfScore 2.88
+       jmp      SHORT G_M40097_IG35
+						;; size=23 bbWeight=0.48 PerfScore 2.88
 G_M40097_IG37:
        mov      rdi, bword ptr [rbp-0x38]
        mov      bword ptr [rbp-0x60], rdi
        mov      dword ptr [rbp-0x58], ebx
        lea      rdi, [rbp-0x60]
        mov      rax, 0xD1FFAB1E      ; code for System.Span`1[ushort]:ToString():System.String:this
        call     [rax]System.Span`1[ushort]:ToString():System.String:this
        mov      rbx, rax
        mov      rsi, gword ptr [rbp-0x48]
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x48], ymm0
        test     rsi, rsi
        je       SHORT G_M40097_IG39
 						;; size=48 bbWeight=1 PerfScore 10.58
 G_M40097_IG38:
        mov      rdi, 0xD1FFAB1E      ; const ptr
        mov      rdi, gword ptr [rdi]
        xor      edx, edx
        mov      rax, 0xD1FFAB1E      ; code for System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
        call     [rax]System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
 						;; size=27 bbWeight=0.80 PerfScore 4.60
 G_M40097_IG39:
        mov      rax, rbx
 						;; size=3 bbWeight=1 PerfScore 0.25
 G_M40097_IG40:
        cmp      qword ptr [rbp-0x70], 0xD1FFAB1E
        je       SHORT G_M40097_IG41
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M40097_IG41:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
 G_M40097_IG42:
        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_M40097_IG43:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M40097_IG44:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M40097_IG45:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1001, prolog size 48, PerfScore 167.53, instruction count 263, allocated bytes for code 1001 (MethodHash=ded0635e) for method System.Runtime.Intrinsics.Vector128`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
+; Total bytes of code 974, prolog size 48, PerfScore 166.48, instruction count 262, allocated bytes for code 974 (MethodHash=ded0635e) for method System.Runtime.Intrinsics.Vector128`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
 ; ============================================================
-27 (-4.62 % of base) - System.Runtime.Intrinsics.Vector64`1[long]:ToString(System.String,System.IFormatProvider):System.String:this
 ; Assembly listing for method System.Runtime.Intrinsics.Vector64`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; Tier-0 switched to FullOpts code
 ; optimized code
 ; optimized using Synthesized PGO
 ; rbp based frame
 ; partially interruptible
 ; with Synthesized PGO: fgCalledCount is 100
 ; No PGO data
 ; 0 inlinees with PGO data; 12 single block inlinees; 23 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T04] (  3,  3   )   byref  ->  rbx         this single-def
 ;  V01 arg1         [V01,T05] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.String>
 ;  V02 arg2         [V02,T08] (  5,  4.52)     ref  ->  r14         class-hnd single-def <System.IFormatProvider>
 ;  V03 loc0         [V03    ] ( 31, 22.08)  struct (32) [rbp-0x38]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
 ;* V04 loc1         [V04,T28] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def <System.String>
 ;* V05 loc2         [V05    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
 ;* V06 loc3         [V06,T00] (  0,  0   )     int  ->  zero-ref   
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V08 tmp1         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V09 tmp2         [V09    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op class-hnd exact "Single-def Box Helper" <System.Int64>
 ;* V10 tmp3         [V10    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op class-hnd exact "Single-def Box Helper" <System.Int64>
 ;  V11 tmp4         [V11,T11] (  2,  4   )    long  ->  rdi         "Inlining Arg"
 ;  V12 tmp5         [V12,T18] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Globalization.NumberFormatInfo>
 ;  V13 tmp6         [V13,T13] (  4,  3.04)     int  ->  rdi         "Inline stloc first use temp"
 ;* V14 tmp7         [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V15 tmp8         [V15,T07] (  5,  7.20)     ref  ->  rbx         class-hnd exact single-def "Inlining Arg" <System.String>
 ;  V16 tmp9         [V16,T16] (  5,  2.44)     int  ->  rsi         "Inline stloc first use temp"
 ;  V17 tmp10        [V17,T17] (  5,  2.34)     int  ->  r14         "Inline stloc first use temp"
 ;* V18 tmp11        [V18    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V19 tmp12        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V20 tmp13        [V20,T24] (  2,  1.87)   byref  ->  rdi         single-def "Inlining Arg"
-;  V21 tmp14        [V21,T25] (  2,  1.87)     int  ->  rdx         "Inlining Arg"
+;  V21 tmp14        [V21,T25] (  2,  1.87)     int  ->  rax         "Inlining Arg"
 ;* V22 tmp15        [V22    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V23 tmp16        [V23    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V24 tmp17        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V25 tmp18        [V25    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V26 tmp19        [V26    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V27 tmp20        [V27    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V28 tmp21        [V28    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V29 tmp22        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V30 tmp23        [V30    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V31 tmp24        [V31    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V32 tmp25        [V32    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V33 tmp26        [V33    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V34 tmp27        [V34    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V35 tmp28        [V35    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V36 tmp29        [V36,T01] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V37 tmp30        [V37    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;* V38 tmp31        [V38,T03] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.String>
 ;* V39 tmp32        [V39    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V40 tmp33        [V40    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V41 tmp34        [V41    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V42 tmp35        [V42    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V43 tmp36        [V43    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V44 tmp37        [V44    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V45 tmp38        [V45    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V46 tmp39        [V46    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V47 tmp40        [V47    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V48 tmp41        [V48    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V49 tmp42        [V49,T14] (  4,  3.04)     int  ->  rdi         "Inline stloc first use temp"
 ;* V50 tmp43        [V50    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V51 tmp44        [V51    ] (  3,  3   )  struct (16) [rbp-0x48]  do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Span`1[ushort]>
 ;  V52 tmp45        [V52,T10] (  2,  4   )     ref  ->  rbx         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V53 tmp46        [V53,T09] (  3,  6   )     int  ->  rbx         "Inlining Arg"
 ;* V54 tmp47        [V54    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V55 tmp48        [V55    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V56 tmp49        [V56,T15] (  3,  2.80)     ref  ->  rsi         class-hnd single-def "Inline stloc first use temp" <ushort[]>
 ;* V57 tmp50        [V57    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V58 tmp51        [V58    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
 ;  V59 tmp52        [V59,T19] (  2,  2   )   byref  ->  rdi         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
 ;* V60 tmp53        [V60,T29] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
 ;* V61 tmp54        [V61    ] (  0,  0   )    long  ->  zero-ref    "field V09.m_value (fldOffset=0x0)" P-INDEP
 ;* V62 tmp55        [V62    ] (  0,  0   )    long  ->  zero-ref    "field V10.m_value (fldOffset=0x0)" P-INDEP
 ;  V63 tmp56        [V63,T26] (  2,  1.52)   byref  ->  rsi         single-def "field V14._reference (fldOffset=0x0)" P-INDEP
 ;  V64 tmp57        [V64,T21] (  2,  2   )     int  ->  rax         "field V14._length (fldOffset=0x8)" P-INDEP
 ;* V65 tmp58        [V65    ] (  0,  0   )   byref  ->  zero-ref    "field V18._reference (fldOffset=0x0)" P-INDEP
 ;* V66 tmp59        [V66    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0x8)" P-INDEP
 ;* V67 tmp60        [V67    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V19._reference (fldOffset=0x0)" P-INDEP
 ;* V68 tmp61        [V68    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
 ;* V69 tmp62        [V69    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;* V70 tmp63        [V70    ] (  0,  0   )     int  ->  zero-ref    "field V22._length (fldOffset=0x8)" P-INDEP
 ;* V71 tmp64        [V71    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
 ;* V72 tmp65        [V72    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
 ;* V73 tmp66        [V73    ] (  0,  0   )   byref  ->  zero-ref    "field V29._reference (fldOffset=0x0)" P-INDEP
 ;* V74 tmp67        [V74    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
 ;* V75 tmp68        [V75    ] (  0,  0   )   byref  ->  zero-ref    "field V32._reference (fldOffset=0x0)" P-INDEP
 ;* V76 tmp69        [V76    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
 ;* V77 tmp70        [V77,T06] (  0,  0   )   byref  ->  zero-ref    "field V37._reference (fldOffset=0x0)" P-INDEP
 ;* V78 tmp71        [V78,T02] (  0,  0   )     int  ->  zero-ref    "field V37._length (fldOffset=0x8)" P-INDEP
 ;* V79 tmp72        [V79    ] (  0,  0   )   byref  ->  zero-ref    "field V41._reference (fldOffset=0x0)" P-INDEP
 ;* V80 tmp73        [V80    ] (  0,  0   )     int  ->  zero-ref    "field V41._length (fldOffset=0x8)" P-INDEP
 ;* V81 tmp74        [V81    ] (  0,  0   )   byref  ->  zero-ref    "field V42._reference (fldOffset=0x0)" P-INDEP
 ;* V82 tmp75        [V82    ] (  0,  0   )     int  ->  zero-ref    "field V42._length (fldOffset=0x8)" P-INDEP
 ;* V83 tmp76        [V83    ] (  0,  0   )   byref  ->  zero-ref    "field V45._reference (fldOffset=0x0)" P-INDEP
 ;* V84 tmp77        [V84    ] (  0,  0   )     int  ->  zero-ref    "field V45._length (fldOffset=0x8)" P-INDEP
 ;  V85 tmp78        [V85,T27] (  2,  1.52)   byref  ->  rsi         single-def "field V50._reference (fldOffset=0x0)" P-INDEP
 ;  V86 tmp79        [V86,T22] (  2,  2   )     int  ->  rax         "field V50._length (fldOffset=0x8)" P-INDEP
 ;  V87 tmp80        [V87    ] (  2,  2   )   byref  ->  [rbp-0x48]  do-not-enreg[X] addr-exposed "field V51._reference (fldOffset=0x0)" P-DEP
 ;  V88 tmp81        [V88    ] (  2,  2   )     int  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed "field V51._length (fldOffset=0x8)" P-DEP
 ;  V89 tmp82        [V89,T20] (  2,  2   )   byref  ->  rdi         single-def "field V54._reference (fldOffset=0x0)" P-INDEP
 ;  V90 tmp83        [V90,T23] (  2,  2   )     int  ->  rbx         "field V54._length (fldOffset=0x8)" P-INDEP
 ;  V91 GsCookie     [V91    ] (  1,  1   )    long  ->  [rbp-0x50]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V92 cse0         [V92,T12] (  7,  3.84)     int  ->  r15         "CSE #02: moderate"
 ;
 ; Lcl frame size = 56
 
 G_M60792_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 56
        lea      rbp, [rsp+0x50]
        xor      eax, eax
        mov      qword ptr [rbp-0x48], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x40], ymm8
        mov      qword ptr [rbp-0x20], rax
        mov      qword ptr [rbp-0x50], 0xD1FFAB1E
        mov      rbx, rdi
        mov      r15, rsi
        mov      r14, rdx
 						;; size=52 bbWeight=1 PerfScore 11.08
 G_M60792_IG02:
        test     dword ptr [rsp], esp
        sub      rsp, 128
        lea      rdi, [rsp]
        mov      bword ptr [rbp-0x28], rdi
        mov      dword ptr [rbp-0x20], 64
        xor      edi, edi
        mov      dword ptr [rbp-0x30], edi
        test     r14, r14
-       je       G_M60792_IG14
+       je       G_M60792_IG10
 						;; size=39 bbWeight=1 PerfScore 8.25
 G_M60792_IG03:
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.NumberFormatInfo:<GetInstance>g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo
        call     [rax]System.Globalization.NumberFormatInfo:<GetInstance>g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo
 						;; size=15 bbWeight=0.52 PerfScore 1.82
 G_M60792_IG04:
        mov      edi, dword ptr [rax+0x38]
        mov      edi, dword ptr [rbp-0x30]
        mov      rsi, bword ptr [rbp-0x28]
        mov      eax, dword ptr [rbp-0x20]
        cmp      edi, eax
-       jae      G_M60792_IG15
-						;; size=21 bbWeight=1 PerfScore 6.25
+       jae      SHORT G_M60792_IG11
+						;; size=17 bbWeight=1 PerfScore 6.25
 G_M60792_IG05:
        mov      eax, edi
        mov      word  ptr [rsi+2*rax], 60
        inc      edi
        mov      dword ptr [rbp-0x30], edi
 						;; size=13 bbWeight=0.52 PerfScore 1.30
 G_M60792_IG06:
        mov      rdi, qword ptr [rbx]
        mov      rsi, r15
        mov      rdx, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Number:FormatInt64(long,System.String,System.IFormatProvider):System.String
        call     [rax]System.Number:FormatInt64(long,System.String,System.IFormatProvider):System.String
        mov      rbx, rax
        test     rbx, rbx
-       je       SHORT G_M60792_IG11
-						;; size=29 bbWeight=1 PerfScore 7.25
+       je       G_M60792_IG15
+						;; size=33 bbWeight=1 PerfScore 7.25
 G_M60792_IG07:
        mov      esi, dword ptr [rbp-0x30]
        mov      r15d, dword ptr [rbx+0x08]
        cmp      r15d, 1
-       jne      G_M60792_IG16
-						;; size=17 bbWeight=0.80 PerfScore 3.40
+       jne      SHORT G_M60792_IG12
+						;; size=13 bbWeight=0.80 PerfScore 3.40
 G_M60792_IG08:
        cmp      esi, dword ptr [rbp-0x20]
-       jae      G_M60792_IG16
-						;; size=9 bbWeight=0.64 PerfScore 1.92
+       jae      SHORT G_M60792_IG12
+						;; size=5 bbWeight=0.64 PerfScore 1.92
 G_M60792_IG09:
        cmp      esi, dword ptr [rbp-0x20]
-       jae      G_M60792_IG28
+       jae      G_M60792_IG27
        mov      rdi, bword ptr [rbp-0x28]
        mov      eax, esi
        movzx    rcx, word  ptr [rbx+0x0C]
        mov      word  ptr [rdi+2*rax], cx
        inc      esi
        mov      dword ptr [rbp-0x30], esi
-       jmp      SHORT G_M60792_IG11
-						;; size=30 bbWeight=0.33 PerfScore 3.49
+       jmp      G_M60792_IG15
+						;; size=33 bbWeight=0.33 PerfScore 3.49
 G_M60792_IG10:
+       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
+       call     [rax]System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
+       jmp      SHORT G_M60792_IG04
+						;; size=14 bbWeight=0.48 PerfScore 2.52
+G_M60792_IG11:
+       lea      rdi, [rbp-0x38]
+       mov      esi, 60
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
+       call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
+       jmp      SHORT G_M60792_IG06
+						;; size=23 bbWeight=0.48 PerfScore 2.88
+G_M60792_IG12:
+       mov      r14d, dword ptr [rbp-0x30]
+       mov      esi, dword ptr [rbp-0x20]
+       sub      esi, r15d
+       cmp      esi, r14d
+       jge      SHORT G_M60792_IG14
+						;; size=15 bbWeight=0.47 PerfScore 1.64
+G_M60792_IG13:
+       mov      esi, r15d
+       lea      rdi, [rbp-0x38]
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
+       call     [rax]System.Text.ValueStringBuilder:Grow(int):this
+						;; size=19 bbWeight=0.37 PerfScore 1.50
+G_M60792_IG14:
+       cmp      r14d, dword ptr [rbp-0x20]
+       ja       G_M60792_IG26
+       mov      rax, bword ptr [rbp-0x28]
+       mov      ecx, r14d
+       lea      rdi, bword ptr [rax+2*rcx]
+       mov      eax, dword ptr [rbp-0x20]
+       sub      eax, r14d
+       cmp      r15d, eax
+       ja       G_M60792_IG25
        mov      edx, r15d
        add      rdx, rdx
        lea      rsi, bword ptr [rbx+0x0C]
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        add      r15d, dword ptr [rbp-0x30]
        mov      dword ptr [rbp-0x30], r15d
-						;; size=30 bbWeight=0.47 PerfScore 3.39
-G_M60792_IG11:
+						;; size=66 bbWeight=0.47 PerfScore 6.77
+G_M60792_IG15:
        mov      edi, dword ptr [rbp-0x30]
        mov      rsi, bword ptr [rbp-0x28]
        mov      eax, dword ptr [rbp-0x20]
        cmp      edi, eax
-       jae      G_M60792_IG19
-						;; size=18 bbWeight=1 PerfScore 4.25
-G_M60792_IG12:
+       jae      SHORT G_M60792_IG18
+						;; size=14 bbWeight=1 PerfScore 4.25
+G_M60792_IG16:
        mov      eax, edi
        mov      word  ptr [rsi+2*rax], 62
        inc      edi
        mov      dword ptr [rbp-0x30], edi
 						;; size=13 bbWeight=0.52 PerfScore 1.30
-G_M60792_IG13:
+G_M60792_IG17:
        mov      ebx, dword ptr [rbp-0x30]
        cmp      ebx, dword ptr [rbp-0x20]
-       jbe      G_M60792_IG20
-       jmp      G_M60792_IG27
-						;; size=17 bbWeight=1 PerfScore 6.00
-G_M60792_IG14:
-       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
-       call     [rax]System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo
-       jmp      G_M60792_IG04
-						;; size=17 bbWeight=0.48 PerfScore 2.52
-G_M60792_IG15:
-       lea      rdi, [rbp-0x38]
-       mov      esi, 60
-       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
-       call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
-       jmp      G_M60792_IG06
-						;; size=26 bbWeight=0.48 PerfScore 2.88
-G_M60792_IG16:
-       mov      r14d, dword ptr [rbp-0x30]
-       mov      esi, dword ptr [rbp-0x20]
-       sub      esi, r15d
-       cmp      esi, r14d
-       jge      SHORT G_M60792_IG18
-						;; size=15 bbWeight=0.47 PerfScore 1.64
-G_M60792_IG17:
-       mov      esi, r15d
-       lea      rdi, [rbp-0x38]
-       mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
-       call     [rax]System.Text.ValueStringBuilder:Grow(int):this
-						;; size=19 bbWeight=0.37 PerfScore 1.50
+       jbe      SHORT G_M60792_IG19
+       jmp      G_M60792_IG26
+						;; size=13 bbWeight=1 PerfScore 6.00
 G_M60792_IG18:
-       cmp      r14d, dword ptr [rbp-0x20]
-       ja       G_M60792_IG27
-       mov      rdx, bword ptr [rbp-0x28]
-       mov      esi, r14d
-       lea      rdi, bword ptr [rdx+2*rsi]
-       mov      edx, dword ptr [rbp-0x20]
-       sub      edx, r14d
-       cmp      r15d, edx
-       ja       G_M60792_IG26
-       jmp      G_M60792_IG10
-						;; size=41 bbWeight=0.47 PerfScore 4.32
-G_M60792_IG19:
        lea      rdi, [rbp-0x38]
        mov      esi, 62
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
        call     [rax]System.Text.ValueStringBuilder:GrowAndAppend(ushort):this
-       jmp      G_M60792_IG13
-						;; size=26 bbWeight=0.48 PerfScore 2.88
-G_M60792_IG20:
+       jmp      SHORT G_M60792_IG17
+						;; size=23 bbWeight=0.48 PerfScore 2.88
+G_M60792_IG19:
        mov      rdi, bword ptr [rbp-0x28]
        mov      bword ptr [rbp-0x48], rdi
        mov      dword ptr [rbp-0x40], ebx
        lea      rdi, [rbp-0x48]
        mov      rax, 0xD1FFAB1E      ; code for System.Span`1[ushort]:ToString():System.String:this
        call     [rax]System.Span`1[ushort]:ToString():System.String:this
        mov      rbx, rax
        mov      rsi, gword ptr [rbp-0x38]
        vxorps   ymm0, ymm0, ymm0
        vmovdqu  ymmword ptr [rbp-0x38], ymm0
        test     rsi, rsi
-       je       SHORT G_M60792_IG22
+       je       SHORT G_M60792_IG21
 						;; size=48 bbWeight=1 PerfScore 10.58
-G_M60792_IG21:
+G_M60792_IG20:
        mov      rdi, 0xD1FFAB1E      ; const ptr
        mov      rdi, gword ptr [rdi]
        xor      edx, edx
        mov      rax, 0xD1FFAB1E      ; code for System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
        call     [rax]System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
 						;; size=27 bbWeight=0.80 PerfScore 4.60
-G_M60792_IG22:
+G_M60792_IG21:
        mov      rax, rbx
 						;; size=3 bbWeight=1 PerfScore 0.25
-G_M60792_IG23:
+G_M60792_IG22:
        cmp      qword ptr [rbp-0x50], 0xD1FFAB1E
-       je       SHORT G_M60792_IG24
+       je       SHORT G_M60792_IG23
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=1 PerfScore 4.00
-G_M60792_IG24:
+G_M60792_IG23:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
-G_M60792_IG25:
+G_M60792_IG24:
        lea      rsp, [rbp-0x18]
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.50
-G_M60792_IG26:
+G_M60792_IG25:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M60792_IG27:
+G_M60792_IG26:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M60792_IG28:
+G_M60792_IG27:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 584, prolog size 43, PerfScore 98.62, instruction count 148, allocated bytes for code 584 (MethodHash=74621287) for method System.Runtime.Intrinsics.Vector64`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-FullOpts)
+; Total bytes of code 557, prolog size 43, PerfScore 97.69, instruction count 147, allocated bytes for code 557 (MethodHash=74621287) for method System.Runtime.Intrinsics.Vector64`1[long]:ToString(System.String,System.IFormatProvider):System.String:this (Tier0-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/eb109b8d242e608bed259e8cff3a4997

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 7, 2024

@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

2 participants