MihuBot / runtime-utils

0 stars 0 forks source link

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

Open MihuBot opened 1 month ago

MihuBot commented 1 month ago

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 commented 1 month ago

https://github.com/xtqqczze/dotnet-runtime/commit/7242709dacdd9abbe34b9b4019167f8dcda373ea

xtqqczze commented 1 month ago

UIntCastLengthCheck

MihuBot commented 1 month ago

Top method regressions

12 (2.20 % of base) - System.Xml.Serialization.CodeIdentifier:MakeValid(System.String):System.String ```diff ; 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 -; V01 loc0 [V01 ] ( 24, 28.07) struct (32) [rbp-0x40] do-not-enreg[XSF] must-init addr-exposed ld-addr-op +; V01 loc0 [V01 ] ( 24, 28.07) struct (32) [rbp-0x48] do-not-enreg[XSF] must-init addr-exposed ld-addr-op ;* V02 loc1 [V02 ] ( 0, 0 ) struct (16) zero-ref ;* 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" ; 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" ;* V12 tmp7 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; 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" ;* 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" -; 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" +; 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" ; V21 tmp16 [V21,T14] ( 2, 1.92) ref -> rbx class-hnd exact single-def "impAppendStmt" ; 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" ;* 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" ;* 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 ```diff ; 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 ; V01 loc0 [V01,T02] ( 9, 7.57) ref -> [rbp-0x50] class-hnd EH-live single-def ; V02 loc1 [V02,T12] ( 6, 1.33) ref -> rbx class-hnd single-def ; V03 loc2 [V03 ] ( 33, 15.34) struct (32) [rbp-0x38] do-not-enreg[XSF] must-init addr-exposed ld-addr-op ; V04 loc3 [V04,T10] ( 4, 2 ) ref -> rbx class-hnd ;* V05 loc4 [V05 ] ( 0, 0 ) struct (16) zero-ref ;# 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" ; 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" ;* V13 tmp7 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; 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" ;* 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" ; 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" ;* V24 tmp18 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; 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" ;* 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" ; V32 tmp26 [V32,T15] ( 2, 0.92) ref -> rbx class-hnd exact single-def "impAppendStmt" ; 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" ;* 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" ;* 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]) ```diff ; 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 ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; 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 ; V05 loc2 [V05,T01] ( 8, 55.00) int -> r13 ;* V06 loc3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd ; V07 loc4 [V07,T00] ( 8, 63.00) ref -> [rbp-0x98] class-hnd exact spill-single-def ; V08 loc5 [V08 ] ( 17, 0 ) struct (40) [rbp-0x58] do-not-enreg[XSF] must-init addr-exposed ld-addr-op ;* V09 loc6 [V09,T27] ( 0, 0 ) int -> zero-ref ; V10 loc7 [V10,T15] ( 4, 0 ) ref -> r15 class-hnd ;# 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" ;* 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" ; V16 tmp5 [V16,T19] ( 2, 0 ) ref -> rbx class-hnd exact "non-inline candidate call" ; V17 tmp6 [V17,T18] ( 3, 0 ) ref -> r15 class-hnd exact "NewObj constructor temp" ;* V18 tmp7 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" ;* V19 tmp8 [V19 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ; 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" -; 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" ;* 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" ; 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" -; 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" ;* 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 commented 1 month ago

Top method improvements

-27 (-2.70 % of base) - System.Runtime.Intrinsics.Vector128`1[long]:ToString(System.String,System.IFormatProvider):System.String:this ```diff ; 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 ; V02 arg2 [V02,T01] ( 6, 5.64) ref -> rbx class-hnd single-def ; V03 loc0 [V03 ] ( 62, 40.27) struct (32) [rbp-0x48] do-not-enreg[XSF] must-init addr-exposed ld-addr-op ; V04 loc1 [V04,T10] ( 5, 3.93) ref -> r13 class-hnd exact single-def ;* V05 loc2 [V05 ] ( 0, 0 ) struct (16) zero-ref ;* 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" ;* V09 tmp2 [V09 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op class-hnd exact "Single-def Box Helper" ;* V10 tmp3 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op class-hnd exact "Single-def Box Helper" ; 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" ; 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" ; V15 tmp8 [V15,T02] ( 5, 7.20) ref -> r12 class-hnd exact single-def "Inlining Arg" ; 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" ;* V19 tmp12 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; 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" ;* 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" ;* V29 tmp22 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; 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" ;* 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" ; V38 tmp31 [V38,T00] ( 5, 8.10) ref -> rbx class-hnd exact "Inlining Arg" ; 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" ;* V42 tmp35 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; 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" ;* 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" ; 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" ; V52 tmp45 [V52,T08] ( 2, 4 ) ref -> rbx class-hnd exact single-def "impAppendStmt" ; 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" ;* 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" ;* 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:g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo call [rax]System.Globalization.NumberFormatInfo: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 ```diff ; 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 ; V02 arg2 [V02,T08] ( 5, 4.52) ref -> r14 class-hnd single-def ; V03 loc0 [V03 ] ( 31, 22.08) struct (32) [rbp-0x38] do-not-enreg[XSF] must-init addr-exposed ld-addr-op ;* V04 loc1 [V04,T28] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def ;* V05 loc2 [V05 ] ( 0, 0 ) struct (16) zero-ref ;* 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" ;* V09 tmp2 [V09 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op class-hnd exact "Single-def Box Helper" ;* V10 tmp3 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op class-hnd exact "Single-def Box Helper" ; 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" ; 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" ; V15 tmp8 [V15,T07] ( 5, 7.20) ref -> rbx class-hnd exact single-def "Inlining Arg" ; 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" ;* V19 tmp12 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; 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" ;* 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" ;* V29 tmp22 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* 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" ;* 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" ;* V38 tmp31 [V38,T03] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" ;* 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" ;* V42 tmp35 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* 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" ;* 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" ; 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" ; V52 tmp45 [V52,T10] ( 2, 4 ) ref -> rbx class-hnd exact single-def "impAppendStmt" ; 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" ;* 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" ;* 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:g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo call [rax]System.Globalization.NumberFormatInfo: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 commented 1 month ago

@xtqqczze