MihuBot / runtime-utils

0 stars 0 forks source link

[X64] [MichalPetryka] Interlocked intrinsic improvements #208

Open MihuBot opened 11 months ago

MihuBot commented 11 months ago

Build completed in 2 hours 55 minutes. https://github.com/dotnet/runtime/pull/93821

CoreLib diffs

Found 2 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 6739713
Total bytes of diff: 6740101
Total bytes of delta: 388 (0.01 % of base)
Total relative delta: 0.36
    diff is a regression.
    relative diff is a regression.

Top file regressions (bytes):
         388 : System.Private.CoreLib.dasm (0.01 % of base)

1 total files with Code Size differences (0 improved, 1 regressed), 0 unchanged.

Top method regressions (bytes):
         198 (23.19 % of base) : System.Private.CoreLib.dasm - System.IO.FileSystem:RemoveDirectoryRecursive(System.String) (FullOpts)
         121 (7.85 % of base) : System.Private.CoreLib.dasm - System.IO.File+<InternalReadAllBytesUnknownLengthAsync>d__91:MoveNext():this (FullOpts)
          97 (7.80 % of base) : System.Private.CoreLib.dasm - System.IO.File+<InternalReadAllBytesAsync>d__90:MoveNext():this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[double]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[int]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[long]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[short]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Nullable`1[int]]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Numerics.Vector`1[float]]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.ReadOnlyMemory`1[ushort]]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ubyte]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ushort]:Trim():ubyte:this (FullOpts)

Top method improvements (bytes):
         -51 (-3.32 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts)
          -3 (-1.72 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts)
          -1 (-0.12 % of base) : System.Private.CoreLib.dasm - System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this (FullOpts)

Top method regressions (percentages):
         198 (23.19 % of base) : System.Private.CoreLib.dasm - System.IO.FileSystem:RemoveDirectoryRecursive(System.String) (FullOpts)
         121 (7.85 % of base) : System.Private.CoreLib.dasm - System.IO.File+<InternalReadAllBytesUnknownLengthAsync>d__91:MoveNext():this (FullOpts)
          97 (7.80 % of base) : System.Private.CoreLib.dasm - System.IO.File+<InternalReadAllBytesAsync>d__90:MoveNext():this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[double]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[int]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[long]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[short]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Nullable`1[int]]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Numerics.Vector`1[float]]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.ReadOnlyMemory`1[ushort]]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ubyte]:Trim():ubyte:this (FullOpts)
           3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ushort]:Trim():ubyte:this (FullOpts)

Top method improvements (percentages):
         -51 (-3.32 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts)
          -3 (-1.72 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts)
          -1 (-0.12 % of base) : System.Private.CoreLib.dasm - System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this (FullOpts)

15 total methods with Code Size differences (3 improved, 12 regressed), 55336 unchanged.

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

Frameworks diffs

Diffs ``` Found 277 files with textual diffs. Summary of Code Size diffs: (Lower is better) Total bytes of base: 38055924 Total bytes of diff: 38058810 Total bytes of delta: 2886 (0.01 % of base) Total relative delta: 31.27 diff is a regression. relative diff is a regression. Top file regressions (bytes): 1728 : System.Net.Sockets.dasm (0.68 % of base) 388 : System.Private.CoreLib.dasm (0.01 % of base) 315 : System.IO.Compression.ZipFile.dasm (2.36 % of base) 270 : System.IO.Pipes.dasm (0.69 % of base) 185 : System.Formats.Tar.dasm (0.15 % of base) 14 : System.Diagnostics.TraceSource.dasm (0.03 % of base) Top file improvements (bytes): -11 : System.Security.Cryptography.dasm (-0.00 % of base) -3 : System.Net.Http.dasm (-0.00 % of base) 8 total files with Code Size differences (2 improved, 6 regressed), 248 unchanged. Top method regressions (bytes): 342 (1,900.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:AcceptAsync(System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Net.Sockets.Socket]:this (FullOpts) 327 (320.59 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.TcpListener:AcceptSocketAsync(System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Net.Sockets.Socket]:this (FullOpts) 315 (41.34 % of base) : System.IO.Compression.ZipFile.dasm - System.IO.Compression.ZipFile:CreateZipArchiveFromDirectory(System.String,System.IO.Compression.ZipArchive,System.Nullable`1[int],ubyte) (FullOpts) 270 (18.44 % of base) : System.IO.Pipes.dasm - System.IO.Pipes.NamedPipeServerStream+<>c__DisplayClass25_0+<g__WaitForConnectionAsyncCore|0>d:MoveNext():this (FullOpts) 250 (581.40 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketTaskExtensions:SendAsync(System.Net.Sockets.Socket,System.ReadOnlyMemory`1[ubyte],int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[int] (FullOpts) 198 (23.19 % of base) : System.Private.CoreLib.dasm - System.IO.FileSystem:RemoveDirectoryRecursive(System.String) (FullOpts) 185 (16.91 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarFile+d__11:MoveNext():ubyte:this (FullOpts) 142 (39.66 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:SendAsync(System.ArraySegment`1[ubyte],int):System.Threading.Tasks.Task`1[int]:this (FullOpts) 140 (38.89 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketTaskExtensions:SendAsync(System.Net.Sockets.Socket,System.ArraySegment`1[ubyte],int):System.Threading.Tasks.Task`1[int] (FullOpts) 139 (28.37 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:BeginSend(ubyte[],int,int,int,byref,System.AsyncCallback,System.Object):System.IAsyncResult:this (FullOpts) 139 (32.63 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:BeginSend(ubyte[],int,int,int,System.AsyncCallback,System.Object):System.IAsyncResult:this (FullOpts) 132 (63.16 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:AcceptAsync():System.Threading.Tasks.Task`1[System.Net.Sockets.Socket]:this (FullOpts) 121 (7.85 % of base) : System.Private.CoreLib.dasm - System.IO.File+d__91:MoveNext():this (FullOpts) 117 (30.47 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:ReceiveAsync(System.ArraySegment`1[ubyte],int,ubyte):System.Threading.Tasks.Task`1[int]:this (FullOpts) 97 (7.80 % of base) : System.Private.CoreLib.dasm - System.IO.File+d__90:MoveNext():this (FullOpts) 14 (2.72 % of base) : System.Diagnostics.TraceSource.dasm - System.Diagnostics.TraceInternal:get_Listeners():System.Diagnostics.TraceListenerCollection (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[double]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[int]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[long]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[short]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Nullable`1[int]]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Numerics.Vector`1[float]]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.ReadOnlyMemory`1[ushort]]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ubyte]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ushort]:Trim():ubyte:this (FullOpts) Top method improvements (bytes): -51 (-3.32 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts) -11 (-23.40 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.UnixPkcs12Reader+RentedSubjectPublicKeyInfo:Dispose():this (FullOpts) -3 (-0.07 % of base) : System.Net.Http.dasm - System.Net.Http.Http2Connection+Http2Stream+d__45:MoveNext():this (FullOpts) -3 (-1.72 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts) -1 (-0.12 % of base) : System.Private.CoreLib.dasm - System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this (FullOpts) Top method regressions (percentages): 342 (1,900.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:AcceptAsync(System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Net.Sockets.Socket]:this (FullOpts) 250 (581.40 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketTaskExtensions:SendAsync(System.Net.Sockets.Socket,System.ReadOnlyMemory`1[ubyte],int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[int] (FullOpts) 327 (320.59 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.TcpListener:AcceptSocketAsync(System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Net.Sockets.Socket]:this (FullOpts) 132 (63.16 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:AcceptAsync():System.Threading.Tasks.Task`1[System.Net.Sockets.Socket]:this (FullOpts) 315 (41.34 % of base) : System.IO.Compression.ZipFile.dasm - System.IO.Compression.ZipFile:CreateZipArchiveFromDirectory(System.String,System.IO.Compression.ZipArchive,System.Nullable`1[int],ubyte) (FullOpts) 142 (39.66 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:SendAsync(System.ArraySegment`1[ubyte],int):System.Threading.Tasks.Task`1[int]:this (FullOpts) 140 (38.89 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketTaskExtensions:SendAsync(System.Net.Sockets.Socket,System.ArraySegment`1[ubyte],int):System.Threading.Tasks.Task`1[int] (FullOpts) 139 (32.63 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:BeginSend(ubyte[],int,int,int,System.AsyncCallback,System.Object):System.IAsyncResult:this (FullOpts) 117 (30.47 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:ReceiveAsync(System.ArraySegment`1[ubyte],int,ubyte):System.Threading.Tasks.Task`1[int]:this (FullOpts) 139 (28.37 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.Socket:BeginSend(ubyte[],int,int,int,byref,System.AsyncCallback,System.Object):System.IAsyncResult:this (FullOpts) 198 (23.19 % of base) : System.Private.CoreLib.dasm - System.IO.FileSystem:RemoveDirectoryRecursive(System.String) (FullOpts) 270 (18.44 % of base) : System.IO.Pipes.dasm - System.IO.Pipes.NamedPipeServerStream+<>c__DisplayClass25_0+<g__WaitForConnectionAsyncCore|0>d:MoveNext():this (FullOpts) 185 (16.91 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarFile+d__11:MoveNext():ubyte:this (FullOpts) 121 (7.85 % of base) : System.Private.CoreLib.dasm - System.IO.File+d__91:MoveNext():this (FullOpts) 97 (7.80 % of base) : System.Private.CoreLib.dasm - System.IO.File+d__90:MoveNext():this (FullOpts) 14 (2.72 % of base) : System.Diagnostics.TraceSource.dasm - System.Diagnostics.TraceInternal:get_Listeners():System.Diagnostics.TraceListenerCollection (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[double]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[int]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[long]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[short]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Nullable`1[int]]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.Numerics.Vector`1[float]]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.ReadOnlyMemory`1[ushort]]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ubyte]:Trim():ubyte:this (FullOpts) 3 (0.25 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[ushort]:Trim():ubyte:this (FullOpts) Top method improvements (percentages): -11 (-23.40 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.UnixPkcs12Reader+RentedSubjectPublicKeyInfo:Dispose():this (FullOpts) -51 (-3.32 % of base) : System.Private.CoreLib.dasm - System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts) -3 (-1.72 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts) -1 (-0.12 % of base) : System.Private.CoreLib.dasm - System.Threading.CancellationTokenSource:ExecuteCallbackHandlers(ubyte):this (FullOpts) -3 (-0.07 % of base) : System.Net.Http.dasm - System.Net.Http.Http2Connection+Http2Stream+d__45:MoveNext():this (FullOpts) 30 total methods with Code Size differences (5 improved, 25 regressed), 235249 unchanged. -------------------------------------------------------------------------------- ```

Artifacts:

MihuBot commented 11 months ago

Top method regressions

198 (23.19 % of base) - System.IO.FileSystem:RemoveDirectoryRecursive(System.String) ```diff ; Assembly listing for method System.IO.FileSystem:RemoveDirectoryRecursive(System.String) (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 11 single block inlinees; 3 inlinees without PGO data +; 0 inlinees with PGO data; 18 single block inlinees; 5 inlinees without PGO data ; Final local variable assignments ; -; V00 arg0 [V00,T05] ( 5, 5 ) ref -> [rbp-0x28] class-hnd EH-live single-def -; V01 loc0 [V01,T17] ( 8, 2 ) ref -> [rbp-0x30] do-not-enreg[Z] class-hnd EH-live -;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact -; V03 loc2 [V03,T02] ( 6, 13 ) ref -> [rbp-0x38] class-hnd EH-live spill-single-def -; V04 loc3 [V04,T03] ( 3, 12 ) ref -> rdi class-hnd -; V05 loc4 [V05,T08] ( 2, 8 ) ubyte -> rax -; V06 loc5 [V06,T26] ( 2, 0 ) ref -> rsi class-hnd -; V07 loc6 [V07,T27] ( 2, 0 ) ref -> rsi class-hnd single-def +; V00 arg0 [V00,T06] ( 5, 5 ) ref -> [rbp-0x30] class-hnd EH-live single-def +; V01 loc0 [V01,T27] ( 8, 2 ) ref -> [rbp-0x38] do-not-enreg[Z] class-hnd EH-live +; V02 loc1 [V02,T13] ( 5, 5 ) ref -> r15 class-hnd exact single-def +; V03 loc2 [V03,T03] ( 6, 13 ) ref -> [rbp-0x40] class-hnd EH-live spill-single-def +; V04 loc3 [V04,T04] ( 3, 12 ) ref -> rdi class-hnd +; V05 loc4 [V05,T10] ( 2, 8 ) ubyte -> rax +; V06 loc5 [V06,T37] ( 2, 0 ) ref -> rsi class-hnd +; V07 loc6 [V07,T38] ( 2, 0 ) ref -> rsi class-hnd single-def ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V09 tmp1 [V09,T13] ( 2, 4 ) ref -> rbx class-hnd exact single-def "dup spill" -;* V10 tmp2 [V10,T21] ( 0, 0 ) ref -> zero-ref single-def -; V11 tmp3 [V11,T11] ( 5, 5 ) ref -> rbx -; V12 tmp4 [V12,T01] ( 9, 18 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" +; V09 tmp1 [V09,T20] ( 2, 4 ) ref -> rbx class-hnd exact single-def "dup spill" +;* V10 tmp2 [V10,T31] ( 0, 0 ) ref -> zero-ref single-def +; V11 tmp3 [V11,T14] ( 5, 5 ) ref -> rbx +; V12 tmp4 [V12,T02] ( 9, 18 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" ;* V13 tmp5 [V13 ] ( 0, 0 ) struct (16) zero-ref multireg-ret "Return value temp for multireg return" -; V14 tmp6 [V14,T28] ( 2, 0 ) ref -> rsi class-hnd "impSpillSpecialSideEff" -; V15 tmp7 [V15,T04] ( 5, 10 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V16 tmp8 [V16,T29] ( 2, 0 ) ref -> rsi class-hnd single-def "impSpillSpecialSideEff" -; V17 tmp9 [V17,T10] ( 3, 6 ) ref -> rsi class-hnd exact single-def "Inlining Arg" c> -; V18 tmp10 [V18,T14] ( 2, 4 ) ref -> r14 class-hnd exact single-def "Inlining Arg" -;* V19 tmp11 [V19,T22] ( 0, 0 ) ref -> zero-ref single-def -; V20 tmp12 [V20,T18] ( 2, 2 ) ref -> rsi +; V14 tmp6 [V14,T39] ( 2, 0 ) ref -> rsi class-hnd "impSpillSpecialSideEff" +; V15 tmp7 [V15,T05] ( 5, 10 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V16 tmp8 [V16,T40] ( 2, 0 ) ref -> rsi class-hnd single-def "impSpillSpecialSideEff" +; V17 tmp9 [V17,T12] ( 3, 6 ) ref -> rsi class-hnd exact single-def "Inlining Arg" c> +; V18 tmp10 [V18,T21] ( 2, 4 ) ref -> r14 class-hnd exact single-def "Inlining Arg" +;* V19 tmp11 [V19,T32] ( 0, 0 ) ref -> zero-ref single-def +; V20 tmp12 [V20,T28] ( 2, 2 ) ref -> rsi ; V21 tmp13 [V21,T00] ( 10, 20 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V22 tmp14 [V22,T15] ( 2, 4 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" -; V23 tmp15 [V23,T06] ( 4, 8 ) ref -> r14 class-hnd exact single-def "Inlining Arg" +; V22 tmp14 [V22,T22] ( 2, 4 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" +; V23 tmp15 [V23,T07] ( 4, 8 ) ref -> r14 class-hnd exact single-def "Inlining Arg" ;* V24 tmp16 [V24 ] ( 0, 0 ) ref -> zero-ref -; V25 tmp17 [V25,T19] ( 2, 2 ) ref -> rdi class-hnd single-def "Inline stloc first use temp" -; V26 tmp18 [V26,T16] ( 2, 4 ) ref -> r13 class-hnd single-def "Inlining Arg" -;* V27 tmp19 [V27,T23] ( 0, 0 ) ref -> zero-ref single-def -; V28 tmp20 [V28,T12] ( 4, 4 ) ref -> rsi +; V25 tmp17 [V25,T29] ( 2, 2 ) ref -> rdi class-hnd single-def "Inline stloc first use temp" +; V26 tmp18 [V26,T23] ( 2, 4 ) ref -> r12 class-hnd single-def "Inlining Arg" +;* V27 tmp19 [V27,T33] ( 0, 0 ) ref -> zero-ref single-def +; V28 tmp20 [V28,T15] ( 4, 4 ) ref -> rsi ;* V29 tmp21 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" -; V30 tmp22 [V30,T07] ( 2, 8 ) ref -> rdi "field V13.Item1 (fldOffset=0x0)" P-INDEP -; V31 tmp23 [V31,T09] ( 2, 8 ) ubyte -> rdx "field V13.Item2 (fldOffset=0x8)" P-INDEP -; V32 PSPSym [V32,T24] ( 1, 1 ) long -> [rbp-0x40] do-not-enreg[V] "PSPSym" -;* V33 cse0 [V33,T25] ( 0, 0 ) long -> zero-ref "CSE - moderate" -; V34 cse1 [V34,T20] ( 2, 2 ) ref -> rsi "CSE - moderate" +; V30 tmp22 [V30,T24] ( 2, 4 ) ref -> rbx class-hnd single-def "dup spill" +; V31 tmp23 [V31,T16] ( 4, 4 ) ref -> rbx +; V32 tmp24 [V32,T01] ( 10, 20 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V33 tmp25 [V33,T25] ( 2, 4 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" +; V34 tmp26 [V34,T08] ( 4, 8 ) ref -> r14 class-hnd exact single-def "Inlining Arg" +;* V35 tmp27 [V35 ] ( 0, 0 ) ref -> zero-ref +; V36 tmp28 [V36,T30] ( 2, 2 ) ref -> rdi class-hnd single-def "Inline stloc first use temp" +; V37 tmp29 [V37,T26] ( 2, 4 ) ref -> r12 class-hnd single-def "Inlining Arg" +;* V38 tmp30 [V38,T34] ( 0, 0 ) ref -> zero-ref single-def +; V39 tmp31 [V39,T17] ( 4, 4 ) ref -> rsi +;* V40 tmp32 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" +; V41 tmp33 [V41,T09] ( 2, 8 ) ref -> rdi "field V13.Item1 (fldOffset=0x0)" P-INDEP +; V42 tmp34 [V42,T11] ( 2, 8 ) ubyte -> rdx "field V13.Item2 (fldOffset=0x8)" P-INDEP +; V43 PSPSym [V43,T35] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym" +;* V44 cse0 [V44,T36] ( 0, 0 ) long -> zero-ref "CSE - moderate" +; V45 cse1 [V45,T18] ( 4, 4 ) ref -> rsi multi-def "CSE - moderate" +; V46 cse2 [V46,T19] ( 4, 4 ) ref -> r13 "CSE - moderate" ; -; Lcl frame size = 32 +; Lcl frame size = 40 G_M13930_IG01: push rbp push r15 push r14 push r13 + push r12 push rbx - sub rsp, 32 - lea rbp, [rsp+0x40] - mov qword ptr [rbp-0x40], rsp - mov gword ptr [rbp-0x28], rdi - ;; size=25 bbWeight=1 PerfScore 7.75 + sub rsp, 40 + lea rbp, [rsp+0x50] + mov qword ptr [rbp-0x50], rsp + mov gword ptr [rbp-0x30], rdi + ;; size=27 bbWeight=1 PerfScore 8.75 G_M13930_IG02: xor rax, rax - mov gword ptr [rbp-0x30], rax + mov gword ptr [rbp-0x38], rax ;; size=6 bbWeight=1 PerfScore 1.25 G_M13930_IG03: mov rax, 0xD1FFAB1E ; global ptr test byte ptr [rax], 1 je SHORT G_M13930_IG06 ;; size=15 bbWeight=1 PerfScore 4.25 G_M13930_IG04: mov rax, 0xD1FFAB1E ; data for System.IO.FileSystem+<>c:<>9__20_0 mov rbx, gword ptr [rax] test rbx, rbx jne SHORT G_M13930_IG07 mov rdi, 0xD1FFAB1E ; System.IO.Enumeration.FileSystemEnumerable`1+FindTransform[System.ValueTuple`2[System.String,ubyte]] call CORINFO_HELP_NEWSFAST mov rbx, rax mov rdi, 0xD1FFAB1E ; data for System.IO.FileSystem+<>c:<>9 mov rsi, gword ptr [rdi] test rsi, rsi je SHORT G_M13930_IG05 lea rdi, bword ptr [rbx+0x08] call CORINFO_HELP_ASSIGN_REF mov rdi, 0xD1FFAB1E ; code for System.IO.FileSystem+<>c:b__20_0(byref):System.ValueTuple`2[System.String,ubyte]:this mov qword ptr [rbx+0x18], rdi mov rdi, 0xD1FFAB1E ; data for System.IO.FileSystem+<>c:<>9__20_0 mov rsi, rbx call CORINFO_HELP_ASSIGN_REF jmp SHORT G_M13930_IG07 ;; size=97 bbWeight=1 PerfScore 14.75 G_M13930_IG05: mov rax, 0xD1FFAB1E ; code for System.MulticastDelegate:ThrowNullThisInDelegateToInstance() call [rax]System.MulticastDelegate:ThrowNullThisInDelegateToInstance() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M13930_IG06: mov rdi, 0xD1FFAB1E mov esi, 0x7B4 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M13930_IG04 ;; size=25 bbWeight=0 PerfScore 0.00 G_M13930_IG07: mov rdi, 0xD1FFAB1E ; System.IO.Enumeration.FileSystemEnumerable`1[System.ValueTuple`2[System.String,ubyte]] call CORINFO_HELP_NEWSFAST mov r15, rax mov rdi, 0xD1FFAB1E ; const ptr mov r14, gword ptr [rdi] - mov rdi, gword ptr [rbp-0x28] - mov rsi, 0xD1FFAB1E ; 'directory' + mov rdi, gword ptr [rbp-0x30] + mov r13, 0xD1FFAB1E ; 'directory' + mov rsi, r13 mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String) call [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String) mov rdi, rbx mov rsi, 0xD1FFAB1E ; 'transform' mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String) call [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String) lea rdi, bword ptr [r15+0x20] - mov rsi, gword ptr [rbp-0x28] + mov rsi, gword ptr [rbp-0x30] call CORINFO_HELP_ASSIGN_REF lea rdi, bword ptr [r15+0x10] mov rsi, rbx call CORINFO_HELP_ASSIGN_REF mov rsi, r14 lea rdi, bword ptr [r15+0x18] call CORINFO_HELP_ASSIGN_REF mov rdi, 0xD1FFAB1E ; System.IO.Enumeration.FileSystemEnumerable`1+DelegateEnumerator[System.ValueTuple`2[System.String,ubyte]] call CORINFO_HELP_NEWFAST mov rbx, rax mov r14, gword ptr [r15+0x20] - mov r13, gword ptr [r15+0x18] + mov r12, gword ptr [r15+0x18] mov rdi, 0xD1FFAB1E ; System.Object call CORINFO_HELP_NEWSFAST lea rdi, bword ptr [rbx+0x20] mov rsi, rax call CORINFO_HELP_ASSIGN_REF mov rdi, r14 - mov rsi, 0xD1FFAB1E ; 'directory' - + mov rsi, r13 mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String) call [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String) lea rdi, bword ptr [rbx+0x08] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov rdi, r14 - ;; size=212 bbWeight=1 PerfScore 32.25 + ;; size=208 bbWeight=1 PerfScore 32.50 G_M13930_IG08: mov rax, 0xD1FFAB1E ; code for System.IO.Path:GetFullPath(System.String):System.String call [rax]System.IO.Path:GetFullPath(System.String):System.String mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.IO.PathInternal:TrimEndingDirectorySeparator(System.String):System.String call [rax]System.IO.PathInternal:TrimEndingDirectorySeparator(System.String):System.String lea rdi, bword ptr [rbx+0x10] mov rsi, rax call CORINFO_HELP_ASSIGN_REF - mov rsi, r13 + mov rsi, r12 test rsi, rsi jne SHORT G_M13930_IG09 mov rsi, 0xD1FFAB1E ; const ptr mov rsi, gword ptr [rsi] ;; size=60 bbWeight=1 PerfScore 12.25 G_M13930_IG09: lea rdi, bword ptr [rbx+0x18] call CORINFO_HELP_ASSIGN_REF mov rdi, gword ptr [rbx+0x18] mov edi, dword ptr [rdi+0x08] mov dword ptr [rbx+0x50], edi mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.IO.Enumeration.FileSystemEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:Init():this call [rax]System.IO.Enumeration.FileSystemEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:Init():this lea rdi, bword ptr [rbx+0x78] mov rsi, r15 call CORINFO_HELP_ASSIGN_REF lea rdi, bword ptr [r15+0x08] mov rsi, rbx call CORINFO_HELP_ASSIGN_REF - mov rdi, r15 - mov rax, 0xD1FFAB1E ; code for System.IO.Enumeration.FileSystemEnumerable`1[System.ValueTuple`2[System.__Canon,ubyte]]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:this - call [rax]System.IO.Enumeration.FileSystemEnumerable`1[System.ValueTuple`2[System.__Canon,ubyte]]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:this + lea rdi, bword ptr [r15+0x08] + xor rax, rax mov rbx, rax - mov gword ptr [rbp-0x38], rbx - ;; size=80 bbWeight=1 PerfScore 18.25 + xchg gword ptr [rdi], rbx + test rbx, rbx + jne G_M13930_IG12 + mov rdi, 0xD1FFAB1E ; System.IO.Enumeration.FileSystemEnumerable`1+DelegateEnumerator[System.ValueTuple`2[System.String,ubyte]] + call CORINFO_HELP_NEWFAST + mov rbx, rax + mov r14, gword ptr [r15+0x20] + mov r12, gword ptr [r15+0x18] + mov rdi, 0xD1FFAB1E ; System.Object + call CORINFO_HELP_NEWSFAST + lea rdi, bword ptr [rbx+0x20] + mov rsi, rax + call CORINFO_HELP_ASSIGN_REF + mov rdi, r14 + mov rsi, r13 + mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String) + call [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String) + lea rdi, bword ptr [rbx+0x08] + mov rsi, r14 + call CORINFO_HELP_ASSIGN_REF + mov rdi, r14 + mov rax, 0xD1FFAB1E ; code for System.IO.Path:GetFullPath(System.String):System.String + call [rax]System.IO.Path:GetFullPath(System.String):System.String + mov rdi, rax + mov rax, 0xD1FFAB1E ; code for System.IO.PathInternal:TrimEndingDirectorySeparator(System.String):System.String + ;; size=190 bbWeight=1 PerfScore 53.75 G_M13930_IG10: - jmp SHORT G_M13930_IG14 - ;; size=2 bbWeight=1 PerfScore 2.00 + call [rax]System.IO.PathInternal:TrimEndingDirectorySeparator(System.String):System.String + lea rdi, bword ptr [rbx+0x10] + mov rsi, rax + call CORINFO_HELP_ASSIGN_REF + mov rsi, r12 + test rsi, rsi + jne SHORT G_M13930_IG11 + mov rsi, 0xD1FFAB1E ; const ptr + mov rsi, gword ptr [rsi] + ;; size=35 bbWeight=1 PerfScore 8.50 G_M13930_IG11: - mov rdi, gword ptr [rbp-0x38] + lea rdi, bword ptr [rbx+0x18] + call CORINFO_HELP_ASSIGN_REF + mov rdi, gword ptr [rbx+0x18] + mov edi, dword ptr [rdi+0x08] + mov dword ptr [rbx+0x50], edi + mov rdi, rbx + mov rax, 0xD1FFAB1E ; code for System.IO.Enumeration.FileSystemEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:Init():this + call [rax]System.IO.Enumeration.FileSystemEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:Init():this + lea rdi, bword ptr [rbx+0x78] + mov rsi, r15 + call CORINFO_HELP_ASSIGN_REF + ;; size=46 bbWeight=1 PerfScore 11.75 +G_M13930_IG12: + mov gword ptr [rbp-0x40], rbx + ;; size=4 bbWeight=1 PerfScore 1.00 +G_M13930_IG13: + jmp SHORT G_M13930_IG17 + ;; size=2 bbWeight=1 PerfScore 2.00 +G_M13930_IG14: + mov rdi, gword ptr [rbp-0x40] mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:get_Current():System.ValueTuple`2[System.__Canon,ubyte]:this call [r11]System.Collections.Generic.IEnumerator`1[System.ValueTuple`2[System.__Canon,ubyte]]:get_Current():System.ValueTuple`2[System.__Canon,ubyte]:this mov rdi, rax movzx rax, dl ;; size=23 bbWeight=4 PerfScore 19.00 -G_M13930_IG12: +G_M13930_IG15: test eax, eax - je SHORT G_M13930_IG13 + je SHORT G_M13930_IG16 mov rax, 0xD1FFAB1E ; code for System.IO.FileSystem:RemoveDirectoryRecursive(System.String) call [rax]System.IO.FileSystem:RemoveDirectoryRecursive(System.String) - jmp SHORT G_M13930_IG14 + jmp SHORT G_M13930_IG17 ;; size=18 bbWeight=4 PerfScore 26.00 -G_M13930_IG13: +G_M13930_IG16: mov rax, 0xD1FFAB1E ; code for System.IO.FileSystem:DeleteFile(System.String) call [rax]System.IO.FileSystem:DeleteFile(System.String) nop ;; size=13 bbWeight=4 PerfScore 14.00 -G_M13930_IG14: - mov rdi, gword ptr [rbp-0x38] +G_M13930_IG17: + mov rdi, gword ptr [rbp-0x40] 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_M13930_IG11 + jne SHORT G_M13930_IG14 ;; size=21 bbWeight=8 PerfScore 44.00 -G_M13930_IG15: - mov rdi, gword ptr [rbp-0x38] +G_M13930_IG18: + mov rdi, gword ptr [rbp-0x40] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this nop ;; size=18 bbWeight=1 PerfScore 4.50 -G_M13930_IG16: - cmp gword ptr [rbp-0x30], 0 - jne SHORT G_M13930_IG18 - mov rdi, gword ptr [rbp-0x28] +G_M13930_IG19: + cmp gword ptr [rbp-0x38], 0 + jne SHORT G_M13930_IG21 + mov rdi, gword ptr [rbp-0x30] xor esi, esi mov edx, 1 mov rax, 0xD1FFAB1E ; code for System.IO.FileSystem:RemoveEmptyDirectory(System.String,ubyte,ubyte):ubyte call [rax]System.IO.FileSystem:RemoveEmptyDirectory(System.String,ubyte,ubyte):ubyte nop ;; size=31 bbWeight=1 PerfScore 8.00 -G_M13930_IG17: - add rsp, 32 +G_M13930_IG20: + add rsp, 40 pop rbx + pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=13 bbWeight=1 PerfScore 3.75 -G_M13930_IG18: - mov rdi, gword ptr [rbp-0x30] + ;; size=15 bbWeight=1 PerfScore 4.25 +G_M13930_IG21: + mov rdi, gword ptr [rbp-0x38] call CORINFO_HELP_THROW int3 ;; size=10 bbWeight=0 PerfScore 0.00 -G_M13930_IG19: +G_M13930_IG22: push rbp push r15 push r14 push r13 + push r12 push rbx - sub rsp, 16 + push rax mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp - lea rbp, [rbp+0x40] - ;; size=23 bbWeight=0 PerfScore 0.00 -G_M13930_IG20: - cmp gword ptr [rbp-0x30], 0 - jne SHORT G_M13930_IG21 - mov gword ptr [rbp-0x30], rsi + lea rbp, [rbp+0x50] + ;; size=22 bbWeight=0 PerfScore 0.00 +G_M13930_IG23: + cmp gword ptr [rbp-0x38], 0 + jne SHORT G_M13930_IG24 + mov gword ptr [rbp-0x38], rsi ;; size=11 bbWeight=0 PerfScore 0.00 -G_M13930_IG21: - lea rax, G_M13930_IG14 +G_M13930_IG24: + lea rax, G_M13930_IG17 ;; size=7 bbWeight=0 PerfScore 0.00 -G_M13930_IG22: - add rsp, 16 +G_M13930_IG25: + add rsp, 8 pop rbx + pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=13 bbWeight=0 PerfScore 0.00 -G_M13930_IG23: + ;; size=15 bbWeight=0 PerfScore 0.00 +G_M13930_IG26: push rbp push r15 push r14 push r13 + push r12 push rbx - sub rsp, 16 + push rax mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp - lea rbp, [rbp+0x40] - ;; size=23 bbWeight=0 PerfScore 0.00 -G_M13930_IG24: - cmp gword ptr [rbp-0x38], 0 - je SHORT G_M13930_IG25 - mov rdi, gword ptr [rbp-0x38] + lea rbp, [rbp+0x50] + ;; size=22 bbWeight=0 PerfScore 0.00 +G_M13930_IG27: + cmp gword ptr [rbp-0x40], 0 + je SHORT G_M13930_IG28 + mov rdi, gword ptr [rbp-0x40] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this ;; size=24 bbWeight=0 PerfScore 0.00 -G_M13930_IG25: +G_M13930_IG28: nop ;; size=1 bbWeight=0 PerfScore 0.00 -G_M13930_IG26: - add rsp, 16 +G_M13930_IG29: + add rsp, 8 pop rbx + pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=13 bbWeight=0 PerfScore 0.00 -G_M13930_IG27: + ;; size=15 bbWeight=0 PerfScore 0.00 +G_M13930_IG30: push rbp push r15 push r14 push r13 + push r12 push rbx - sub rsp, 16 + push rax mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp - lea rbp, [rbp+0x40] - ;; size=23 bbWeight=0 PerfScore 0.00 -G_M13930_IG28: - cmp gword ptr [rbp-0x30], 0 - cmovne rsi, gword ptr [rbp-0x30] - mov gword ptr [rbp-0x30], rsi - lea rax, G_M13930_IG16 + lea rbp, [rbp+0x50] + ;; size=22 bbWeight=0 PerfScore 0.00 +G_M13930_IG31: + cmp gword ptr [rbp-0x38], 0 + cmovne rsi, gword ptr [rbp-0x38] + mov gword ptr [rbp-0x38], rsi + lea rax, G_M13930_IG19 ;; size=21 bbWeight=0 PerfScore 0.00 -G_M13930_IG29: - add rsp, 16 +G_M13930_IG32: + add rsp, 8 pop rbx + pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=13 bbWeight=0 PerfScore 0.00 + ;; size=15 bbWeight=0 PerfScore 0.00 -; Total bytes of code 854, prolog size 25, PerfScore 297.40, instruction count 215, allocated bytes for code 854 (MethodHash=ff7fc995) for method System.IO.FileSystem:RemoveDirectoryRecursive(System.String) (FullOpts) +; Total bytes of code 1052, prolog size 27, PerfScore 375.70, instruction count 268, allocated bytes for code 1052 (MethodHash=ff7fc995) for method System.IO.FileSystem:RemoveDirectoryRecursive(System.String) (FullOpts) ```

Larger list of diffs: https://gist.github.com/MihuBot/51ce196d5d5ea9421a388a2443e54577

MihuBot commented 11 months ago

Top method improvements

-51 (-3.32 % of base) - System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this ```diff ; Assembly listing for method System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 20 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 18 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T21] ( 12, 24 ) ref -> [rbp-0x68] this class-hnd EH-live single-def -; V01 loc0 [V01,T10] ( 5, 33.50) int -> rbx -; V02 loc1 [V02,T33] ( 5, 19 ) int -> r15 -; V03 loc2 [V03,T20] ( 7, 27 ) ref -> r14 class-hnd exact single-def -; V04 loc3 [V04,T38] ( 4, 10 ) ref -> [rbp-0x70] class-hnd spill-single-def -; V05 loc4 [V05,T32] ( 6, 19 ) int -> r12 -; V06 loc5 [V06,T41] ( 7, 9 ) ref -> [rbp-0x78] class-hnd EH-live spill-single-def +; V00 this [V00,T15] ( 18, 27 ) ref -> [rbp-0x60] this class-hnd EH-live single-def +; V01 loc0 [V01,T07] ( 5, 33.50) int -> rbx +; V02 loc1 [V02,T27] ( 5, 19 ) int -> r15 +; V03 loc2 [V03,T16] ( 7, 27 ) ref -> r14 class-hnd exact single-def +; V04 loc3 [V04,T31] ( 4, 10 ) ref -> [rbp-0x68] class-hnd spill-single-def +; V05 loc4 [V05,T26] ( 6, 19 ) int -> r12 +; V06 loc5 [V06,T33] ( 7, 9 ) ref -> [rbp-0x70] class-hnd EH-live spill-single-def ;* V07 loc6 [V07 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op -; V08 loc7 [V08,T42] ( 7, 9 ) ref -> [rbp-0x80] class-hnd EH-live spill-single-def +; V08 loc7 [V08,T34] ( 7, 9 ) ref -> [rbp-0x78] class-hnd EH-live spill-single-def ;* V09 loc8 [V09 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op -; V10 loc9 [V10,T22] ( 3, 24 ) ref -> r15 class-hnd +; V10 loc9 [V10,T17] ( 3, 24 ) ref -> r15 class-hnd ; V11 loc10 [V11,T00] ( 5, 68 ) int -> rbx -; V12 loc11 [V12,T06] ( 4, 48 ) ref -> [rbp-0x88] class-hnd spill-single-def -; V13 loc12 [V13,T45] ( 2, 8.50) int -> r12 -; V14 loc13 [V14,T81] ( 2, 1 ) int -> r12 -; V15 loc14 [V15,T43] ( 7, 9 ) ref -> [rbp-0x90] class-hnd EH-live spill-single-def +; V12 loc11 [V12,T05] ( 4, 48 ) ref -> [rbp-0x80] class-hnd spill-single-def +; V13 loc12 [V13,T36] ( 2, 8.50) int -> r12 +; V14 loc13 [V14,T77] ( 2, 1 ) int -> r12 +; V15 loc14 [V15,T35] ( 7, 9 ) ref -> [rbp-0x88] class-hnd EH-live spill-single-def ;* V16 loc15 [V16 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op -; V17 loc16 [V17,T05] ( 6, 48 ) ref -> [rbp-0x98] class-hnd spill-single-def +; V17 loc16 [V17,T04] ( 6, 48 ) ref -> r15 class-hnd ; V18 loc17 [V18,T01] ( 5, 68 ) int -> [rbp-0x34] -; V19 loc18 [V19,T23] ( 3, 24 ) int -> rsi -; V20 loc19 [V20,T11] ( 4, 32 ) ref -> [rbp-0xA0] class-hnd spill-single-def +; V19 loc18 [V19,T18] ( 3, 24 ) int -> rdx +; V20 loc19 [V20,T08] ( 4, 32 ) ref -> [rbp-0x90] class-hnd spill-single-def ;# V21 OutArgs [V21 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V22 tmp1 [V22,T35] ( 2, 16 ) ref -> rax class-hnd "dup spill" -; V23 tmp2 [V23,T39] ( 3, 10 ) ref -> [rbp-0xA8] spill-single-def -; V24 tmp3 [V24,T08] ( 2, 36 ) int -> [rbp-0x38] spill-single-def "impAppendStmt" +; V22 tmp1 [V22,T29] ( 2, 16 ) ref -> rax class-hnd "dup spill" +; V23 tmp2 [V23,T32] ( 3, 10 ) ref -> [rbp-0x98] spill-single-def +; V24 tmp3 [V24,T06] ( 2, 36 ) int -> [rbp-0x38] spill-single-def "impAppendStmt" ;* V25 tmp4 [V25 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V26 tmp5 [V26 ] ( 0, 0 ) long -> zero-ref "VirtualCall with runtime lookup" ;* V27 tmp6 [V27 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V28 tmp7 [V28,T24] ( 3, 24 ) long -> r11 "VirtualCall with runtime lookup" +; V28 tmp7 [V28,T19] ( 3, 24 ) long -> r11 "VirtualCall with runtime lookup" ;* V29 tmp8 [V29 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" ;* V30 tmp9 [V30 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -;* V31 tmp10 [V31 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V32 tmp11 [V32,T14] ( 2, 32 ) int -> [rbp-0x3C] spill-single-def "impAppendStmt" -; V33 tmp12 [V33,T15] ( 2, 32 ) int -> [rbp-0x40] spill-single-def "impAppendStmt" -;* V34 tmp13 [V34 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -;* V35 tmp14 [V35 ] ( 0, 0 ) long -> zero-ref "VirtualCall with runtime lookup" -;* V36 tmp15 [V36 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V37 tmp16 [V37,T25] ( 3, 24 ) long -> r11 "VirtualCall with runtime lookup" -;* V38 tmp17 [V38 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" -;* V39 tmp18 [V39 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -;* V40 tmp19 [V40 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V41 tmp20 [V41,T16] ( 2, 32 ) int -> [rbp-0x44] spill-single-def "impAppendStmt" -; V42 tmp21 [V42,T17] ( 2, 32 ) int -> [rbp-0x48] spill-single-def "impAppendStmt" +; V31 tmp10 [V31,T09] ( 2, 32 ) int -> [rbp-0x3C] spill-single-def "impAppendStmt" +; V32 tmp11 [V32,T10] ( 2, 32 ) int -> [rbp-0x40] spill-single-def "impAppendStmt" +;* V33 tmp12 [V33 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V34 tmp13 [V34 ] ( 0, 0 ) long -> zero-ref "VirtualCall with runtime lookup" +;* V35 tmp14 [V35 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V36 tmp15 [V36,T20] ( 3, 24 ) long -> r11 "VirtualCall with runtime lookup" +;* V37 tmp16 [V37 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" +;* V38 tmp17 [V38 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V39 tmp18 [V39,T11] ( 2, 32 ) int -> [rbp-0x44] spill-single-def "impAppendStmt" +; V40 tmp19 [V40,T12] ( 2, 32 ) int -> [rbp-0x48] spill-single-def "impAppendStmt" +;* V41 tmp20 [V41 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V42 tmp21 [V42 ] ( 0, 0 ) long -> zero-ref "VirtualCall with runtime lookup" ;* V43 tmp22 [V43 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -;* V44 tmp23 [V44 ] ( 0, 0 ) long -> zero-ref "VirtualCall with runtime lookup" -;* V45 tmp24 [V45 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V46 tmp25 [V46,T26] ( 3, 24 ) long -> r11 "VirtualCall with runtime lookup" -;* V47 tmp26 [V47 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" -;* V48 tmp27 [V48 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V49 tmp28 [V49,T34] ( 2, 18 ) int -> [rbp-0x4C] spill-single-def "Inline stloc first use temp" -; V50 tmp29 [V50,T30] ( 3, 20 ) ref -> [rbp-0xB0] class-hnd spill-single-def "Inline stloc first use temp" -; V51 tmp30 [V51,T02] ( 5, 66 ) int -> [rbp-0x50] "Inline stloc first use temp" -;* V52 tmp31 [V52 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -; V53 tmp32 [V53,T03] ( 2, 64 ) ref -> rcx class-hnd "updating class info" -; V54 tmp33 [V54,T18] ( 2, 32 ) int -> r8 "Inlining Arg" -;* V55 tmp34 [V55 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -; V56 tmp35 [V56,T13] ( 2, 32 ) ref -> rsi class-hnd "updating class info" -; V57 tmp36 [V57,T19] ( 2, 32 ) int -> r8 "Inlining Arg" -; V58 tmp37 [V58,T47] ( 2, 8 ) ref -> rdi "field V07.key (fldOffset=0x0)" P-INDEP -; V59 tmp38 [V59,T50] ( 1, 4 ) ref -> rdx "field V07.value (fldOffset=0x8)" P-INDEP -; V60 tmp39 [V60,T48] ( 2, 8 ) ref -> r15 "field V09.key (fldOffset=0x0)" P-INDEP -; V61 tmp40 [V61,T51] ( 1, 4 ) ref -> rdx "field V09.value (fldOffset=0x8)" P-INDEP -; V62 tmp41 [V62,T49] ( 2, 8 ) ref -> rax "field V16.key (fldOffset=0x0)" P-INDEP -; V63 tmp42 [V63,T52] ( 1, 4 ) ref -> rdx "field V16.value (fldOffset=0x8)" P-INDEP -;* V64 tmp43 [V64 ] ( 0, 0 ) ref -> zero-ref "field V29.key (fldOffset=0x0)" P-DEP -;* V65 tmp44 [V65 ] ( 0, 0 ) ref -> zero-ref "field V29.value (fldOffset=0x8)" P-DEP -;* V66 tmp45 [V66 ] ( 0, 0 ) ref -> zero-ref "field V38.key (fldOffset=0x0)" P-DEP -;* V67 tmp46 [V67 ] ( 0, 0 ) ref -> zero-ref "field V38.value (fldOffset=0x8)" P-DEP -;* V68 tmp47 [V68 ] ( 0, 0 ) ref -> zero-ref "field V47.key (fldOffset=0x0)" P-DEP -;* V69 tmp48 [V69 ] ( 0, 0 ) ref -> zero-ref "field V47.value (fldOffset=0x8)" P-DEP -; V70 PSPSym [V70,T85] ( 1, 1 ) long -> [rbp-0xC0] do-not-enreg[V] "PSPSym" -;* V71 cse0 [V71,T40] ( 0, 0 ) long -> zero-ref hoist multi-def "CSE - moderate" -; V72 cse1 [V72,T36] ( 6, 13.50) long -> registers hoist multi-def "CSE - moderate" -;* V73 cse2 [V73,T80] ( 0, 0 ) long -> zero-ref hoist multi-def "CSE - moderate" -; V74 cse3 [V74,T04] ( 5, 56 ) long -> rdi "CSE - aggressive" -; V75 cse4 [V75,T29] ( 17, 16.54) long -> r13 multi-def "CSE - moderate" -; V76 cse5 [V76,T31] ( 3, 20 ) int -> [rbp-0x54] spill-single-def "CSE - moderate" -; V77 cse6 [V77,T27] ( 3, 24 ) int -> [rbp-0x58] spill-single-def "CSE - moderate" -; V78 cse7 [V78,T28] ( 3, 24 ) int -> [rbp-0x5C] spill-single-def "CSE - moderate" -; V79 rat0 [V79,T62] ( 2, 2 ) long -> rax "Spilling to split statement for tree" -;* V80 rat1 [V80,T82] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V81 rat2 [V81,T53] ( 2, 2 ) long -> rax "spilling expr" -;* V82 rat3 [V82,T65] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V83 rat4 [V83,T74] ( 3, 2 ) long -> r12 "runtime lookup" -; V84 rat5 [V84,T54] ( 3, 2.80) long -> rdi "spilling expr" -; V85 rat6 [V85,T66] ( 3, 2.24) long -> r12 "fgMakeTemp is creating a new local variable" -;* V86 rat7 [V86,T75] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V87 rat8 [V87,T55] ( 2, 2 ) long -> rdi "spilling expr" -;* V88 rat9 [V88,T67] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V89 rat10 [V89,T63] ( 2, 2 ) long -> rax "Spilling to split statement for tree" -;* V90 rat11 [V90,T83] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V91 rat12 [V91,T56] ( 2, 2 ) long -> rax "spilling expr" -;* V92 rat13 [V92,T68] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V93 rat14 [V93,T76] ( 3, 2 ) long -> r12 "runtime lookup" -; V94 rat15 [V94,T57] ( 3, 2.80) long -> rdi "spilling expr" -; V95 rat16 [V95,T69] ( 3, 2.24) long -> r12 "fgMakeTemp is creating a new local variable" -;* V96 rat17 [V96,T77] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V97 rat18 [V97,T58] ( 2, 2 ) long -> rdi "spilling expr" -;* V98 rat19 [V98,T70] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V99 rat20 [V99,T46] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V100 rat21 [V100,T37] ( 3, 11.20) long -> rdi "spilling expr" -; V101 rat22 [V101,T44] ( 2, 6.40) long -> rdi "fgMakeTemp is creating a new local variable" -; V102 rat23 [V102,T64] ( 2, 2 ) long -> rax "Spilling to split statement for tree" -;* V103 rat24 [V103,T84] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V104 rat25 [V104,T59] ( 2, 2 ) long -> rax "spilling expr" -;* V105 rat26 [V105,T71] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V106 rat27 [V106,T78] ( 3, 2 ) long -> rax "runtime lookup" -; V107 rat28 [V107,T60] ( 3, 2.80) long -> rdi "spilling expr" -; V108 rat29 [V108,T72] ( 3, 2.24) long -> rax "fgMakeTemp is creating a new local variable" -;* V109 rat30 [V109,T79] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V110 rat31 [V110,T61] ( 2, 2 ) long -> rdi "spilling expr" -;* V111 rat32 [V111,T73] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V112 rat33 [V112,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" -; V113 rat34 [V113,T07] ( 2, 32 ) long -> rsi "spilling expr" -;* V114 rat35 [V114,T09] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" +; V44 tmp23 [V44,T21] ( 3, 24 ) long -> r11 "VirtualCall with runtime lookup" +;* V45 tmp24 [V45 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" +;* V46 tmp25 [V46 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V47 tmp26 [V47,T28] ( 2, 18 ) int -> [rbp-0x4C] spill-single-def "Inline stloc first use temp" +; V48 tmp27 [V48,T24] ( 3, 20 ) ref -> [rbp-0xA0] class-hnd spill-single-def "Inline stloc first use temp" +; V49 tmp28 [V49,T02] ( 5, 66 ) int -> [rbp-0x50] "Inline stloc first use temp" +; V50 tmp29 [V50,T13] ( 2, 32 ) int -> r8 "Inlining Arg" +; V51 tmp30 [V51,T14] ( 2, 32 ) int -> r8 "Inlining Arg" +; V52 tmp31 [V52,T37] ( 2, 8 ) ref -> rdi "field V07.key (fldOffset=0x0)" P-INDEP +; V53 tmp32 [V53,T40] ( 1, 4 ) ref -> rdx "field V07.value (fldOffset=0x8)" P-INDEP +; V54 tmp33 [V54,T38] ( 2, 8 ) ref -> r15 "field V09.key (fldOffset=0x0)" P-INDEP +; V55 tmp34 [V55,T41] ( 1, 4 ) ref -> rdx "field V09.value (fldOffset=0x8)" P-INDEP +; V56 tmp35 [V56,T39] ( 2, 8 ) ref -> r15 "field V16.key (fldOffset=0x0)" P-INDEP +; V57 tmp36 [V57,T42] ( 1, 4 ) ref -> rdx "field V16.value (fldOffset=0x8)" P-INDEP +;* V58 tmp37 [V58 ] ( 0, 0 ) ref -> zero-ref "field V29.key (fldOffset=0x0)" P-DEP +;* V59 tmp38 [V59 ] ( 0, 0 ) ref -> zero-ref "field V29.value (fldOffset=0x8)" P-DEP +;* V60 tmp39 [V60 ] ( 0, 0 ) ref -> zero-ref "field V37.key (fldOffset=0x0)" P-DEP +;* V61 tmp40 [V61 ] ( 0, 0 ) ref -> zero-ref "field V37.value (fldOffset=0x8)" P-DEP +;* V62 tmp41 [V62 ] ( 0, 0 ) ref -> zero-ref "field V45.key (fldOffset=0x0)" P-DEP +;* V63 tmp42 [V63 ] ( 0, 0 ) ref -> zero-ref "field V45.value (fldOffset=0x8)" P-DEP +; V64 PSPSym [V64,T81] ( 1, 1 ) long -> [rbp-0xB0] do-not-enreg[V] "PSPSym" +; V65 cse0 [V65,T30] ( 6, 13.50) long -> r13 hoist multi-def "CSE - moderate" +;* V66 cse1 [V66,T76] ( 0, 0 ) long -> zero-ref hoist multi-def "CSE - moderate" +; V67 cse2 [V67,T03] ( 5, 56 ) long -> rdi "CSE - aggressive" +; V68 cse3 [V68,T25] ( 3, 20 ) int -> [rbp-0x54] spill-single-def "CSE - moderate" +; V69 cse4 [V69,T22] ( 3, 24 ) int -> r12 "CSE - moderate" +; V70 cse5 [V70,T23] ( 3, 24 ) int -> [rbp-0x58] spill-single-def "CSE - moderate" +; V71 rat0 [V71,T52] ( 2, 2 ) long -> rax "Spilling to split statement for tree" +;* V72 rat1 [V72,T78] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V73 rat2 [V73,T43] ( 2, 2 ) long -> rax "spilling expr" +;* V74 rat3 [V74,T61] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" +; V75 rat4 [V75,T53] ( 3, 2.36) long -> rsi "Spilling to split statement for tree" +; V76 rat5 [V76,T70] ( 3, 2 ) long -> r13 "runtime lookup" +; V77 rat6 [V77,T44] ( 3, 2.80) long -> rax "spilling expr" +; V78 rat7 [V78,T62] ( 3, 2.24) long -> r13 "fgMakeTemp is creating a new local variable" +; V79 rat8 [V79,T54] ( 2, 2 ) long -> r11 "Spilling to split statement for tree" +;* V80 rat9 [V80,T71] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V81 rat10 [V81,T45] ( 2, 2 ) long -> r11 "spilling expr" +;* V82 rat11 [V82,T63] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" +; V83 rat12 [V83,T55] ( 2, 2 ) long -> rax "Spilling to split statement for tree" +;* V84 rat13 [V84,T79] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V85 rat14 [V85,T46] ( 2, 2 ) long -> rax "spilling expr" +;* V86 rat15 [V86,T64] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" +; V87 rat16 [V87,T56] ( 3, 2.36) long -> rsi "Spilling to split statement for tree" +; V88 rat17 [V88,T72] ( 3, 2 ) long -> r13 "runtime lookup" +; V89 rat18 [V89,T47] ( 3, 2.80) long -> rax "spilling expr" +; V90 rat19 [V90,T65] ( 3, 2.24) long -> r13 "fgMakeTemp is creating a new local variable" +; V91 rat20 [V91,T57] ( 2, 2 ) long -> r11 "Spilling to split statement for tree" +;* V92 rat21 [V92,T73] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V93 rat22 [V93,T48] ( 2, 2 ) long -> r11 "spilling expr" +;* V94 rat23 [V94,T66] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat24 [V95,T58] ( 2, 2 ) long -> rax "Spilling to split statement for tree" +;* V96 rat25 [V96,T80] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V97 rat26 [V97,T49] ( 2, 2 ) long -> rax "spilling expr" +;* V98 rat27 [V98,T67] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" +; V99 rat28 [V99,T59] ( 3, 2.36) long -> rsi "Spilling to split statement for tree" +; V100 rat29 [V100,T74] ( 3, 2 ) long -> r13 "runtime lookup" +; V101 rat30 [V101,T50] ( 3, 2.80) long -> rax "spilling expr" +; V102 rat31 [V102,T68] ( 3, 2.24) long -> r13 "fgMakeTemp is creating a new local variable" +; V103 rat32 [V103,T60] ( 2, 2 ) long -> r11 "Spilling to split statement for tree" +;* V104 rat33 [V104,T75] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V105 rat34 [V105,T51] ( 2, 2 ) long -> r11 "spilling expr" +;* V106 rat35 [V106,T69] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" ; -; Lcl frame size = 152 +; Lcl frame size = 136 G_M16529_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 152 - lea rbp, [rsp+0xC0] - mov qword ptr [rbp-0xC0], rsp + sub rsp, 136 + lea rbp, [rsp+0xB0] + mov qword ptr [rbp-0xB0], rsp mov qword ptr [rbp-0x30], rdi - mov gword ptr [rbp-0x68], rdi + mov gword ptr [rbp-0x60], rdi ;; size=40 bbWeight=1 PerfScore 9.75 G_M16529_IG02: call System.Environment:get_TickCount():int mov ebx, eax mov rax, 0xD1FFAB1E ; code for System.Buffers.Utilities:GetMemoryPressure():int call [rax]System.Buffers.Utilities:GetMemoryPressure():int mov r15d, eax mov rdi, 0xD1FFAB1E ; const ptr mov r14, gword ptr [rdi] cmp byte ptr [r14+0x9D], 0 je SHORT G_M16529_IG04 ;; size=45 bbWeight=1 PerfScore 11.00 G_M16529_IG03: mov rdi, r14 mov ecx, r15d mov edx, ebx mov esi, 5 mov rax, 0xD1FFAB1E ; code for System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int):this call [rax]System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int):this ;; size=25 bbWeight=0.50 PerfScore 2.12 G_M16529_IG04: - mov rdi, gword ptr [rbp-0x68] + mov rdi, gword ptr [rbp-0x60] mov r13, gword ptr [rdi+0x10] - mov gword ptr [rbp-0x70], r13 + mov gword ptr [rbp-0x68], r13 xor r12d, r12d cmp dword ptr [r13+0x08], 0 jle G_M16529_IG09 ;; size=26 bbWeight=1 PerfScore 8.25 G_M16529_IG05: - mov rdi, gword ptr [rbp-0x68] + mov rdi, gword ptr [rbp-0x60] mov eax, r12d mov rax, gword ptr [r13+8*rax+0x10] - mov gword ptr [rbp-0xA8], rax + mov gword ptr [rbp-0x98], rax test rax, rax je G_M16529_IG08 ;; size=28 bbWeight=4 PerfScore 22.00 G_M16529_IG06: call System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int mov dword ptr [rbp-0x38], eax mov edi, 16 shlx r9d, edi, r12d mov dword ptr [rbp-0x4C], r9d - mov rdi, gword ptr [rbp-0xA8] + mov rdi, gword ptr [rbp-0x98] mov r10, gword ptr [rdi+0x08] - mov gword ptr [rbp-0xB0], r10 + mov gword ptr [rbp-0xA0], r10 xor r11d, r11d mov r8d, dword ptr [r10+0x08] mov dword ptr [rbp-0x54], r8d test r8d, r8d jle SHORT G_M16529_IG08 ;; size=56 bbWeight=2 PerfScore 24.50 G_M16529_IG07: mov dword ptr [rbp-0x50], r11d mov edi, r11d mov rdi, gword ptr [r10+8*rdi+0x10] mov esi, ebx mov edx, eax mov ecx, r15d mov r8d, r9d mov r13, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1+Partition[System.__Canon]:Trim(int,int,int,int):this cmp dword ptr [rdi], edi call [r13]System.Buffers.SharedArrayPool`1+Partition[System.__Canon]:Trim(int,int,int,int):this mov r13d, dword ptr [rbp-0x50] inc r13d mov edi, dword ptr [rbp-0x54] cmp edi, r13d mov r11d, r13d mov eax, dword ptr [rbp-0x38] mov r9d, dword ptr [rbp-0x4C] - mov r10, gword ptr [rbp-0xB0] + mov r10, gword ptr [rbp-0xA0] jg SHORT G_M16529_IG07 ;; size=70 bbWeight=16 PerfScore 276.00 G_M16529_IG08: inc r12d - mov r13, gword ptr [rbp-0x70] + mov r13, gword ptr [rbp-0x68] cmp dword ptr [r13+0x08], r12d jg G_M16529_IG05 ;; size=17 bbWeight=4 PerfScore 21.00 G_M16529_IG09: cmp r15d, 2 - jne G_M16529_IG36 + jne G_M16529_IG34 ;; size=10 bbWeight=1 PerfScore 1.25 G_M16529_IG10: cmp byte ptr [r14+0x9D], 0 jne G_M16529_IG19 - mov rdi, gword ptr [rbp-0x68] - mov r13, qword ptr [rdi] - mov rax, r13 + mov rdi, gword ptr [rbp-0x60] + mov rax, qword ptr [rdi] mov rax, qword ptr [rax+0x30] mov rax, qword ptr [rax+0x08] cmp qword ptr [rax+0x08], 72 jle SHORT G_M16529_IG11 - ;; size=39 bbWeight=0.50 PerfScore 7.62 + ;; size=36 bbWeight=0.50 PerfScore 7.50 G_M16529_IG11: mov rdi, gword ptr [rdi+0x08] mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this cmp dword ptr [rdi], edi call [rax]System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this - mov gword ptr [rbp-0x78], rax + mov gword ptr [rbp-0x70], rax ;; size=22 bbWeight=0.50 PerfScore 4.62 G_M16529_IG12: mov rdi, rax mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this test eax, eax je SHORT G_M16529_IG18 - mov rdi, qword ptr [r13+0x30] - mov rdi, qword ptr [rdi+0x08] - cmp qword ptr [rdi+0x08], 80 + mov rdi, gword ptr [rbp-0x60] + mov rsi, qword ptr [rdi] + mov rax, qword ptr [rsi+0x30] + mov rax, qword ptr [rax+0x08] + cmp qword ptr [rax+0x08], 80 jle SHORT G_M16529_IG15 - ;; size=35 bbWeight=0.50 PerfScore 6.38 + ;; size=42 bbWeight=0.50 PerfScore 7.88 G_M16529_IG13: - mov r12, qword ptr [rdi+0x50] - test r12, r12 + mov r13, qword ptr [rax+0x50] + test r13, r13 je SHORT G_M16529_IG15 ;; size=9 bbWeight=0.40 PerfScore 1.30 G_M16529_IG14: jmp SHORT G_M16529_IG16 ;; size=2 bbWeight=0.32 PerfScore 0.64 G_M16529_IG15: - mov rdi, r13 + mov rdi, rsi mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov r12, rax + mov r13, rax ;; size=21 bbWeight=0.18 PerfScore 0.32 G_M16529_IG16: - mov rdi, qword ptr [r13+0x30] - mov rdi, qword ptr [rdi+0x08] - cmp qword ptr [rdi+0x08], 88 + mov rdi, gword ptr [rbp-0x60] + mov r11, qword ptr [rdi] + mov r11, qword ptr [r11+0x30] + mov r11, qword ptr [r11+0x08] + cmp qword ptr [r11+0x08], 88 jle SHORT G_M16529_IG17 - ;; size=15 bbWeight=0.50 PerfScore 4.00 + ;; size=22 bbWeight=0.50 PerfScore 5.50 G_M16529_IG17: - mov r11, r12 - mov rdi, gword ptr [rbp-0x78] + mov r11, r13 + mov rdi, gword ptr [rbp-0x70] call [r11] mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.Array:Clear(System.Array) call [rax]System.Array:Clear(System.Array) - mov rdi, gword ptr [rbp-0x78] + mov rdi, gword ptr [rbp-0x70] 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_M16529_IG17 ;; size=46 bbWeight=4 PerfScore 53.00 G_M16529_IG18: - mov rdi, gword ptr [rbp-0x78] + mov rdi, gword ptr [rbp-0x70] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this - jmp G_M16529_IG55 + jmp G_M16529_IG50 ;; size=22 bbWeight=0.50 PerfScore 3.12 G_M16529_IG19: - mov rdi, gword ptr [rbp-0x68] - mov r13, qword ptr [rdi] - mov rax, r13 + mov rdi, gword ptr [rbp-0x60] + mov rax, qword ptr [rdi] mov rax, qword ptr [rax+0x30] mov rax, qword ptr [rax+0x08] cmp qword ptr [rax+0x08], 72 jle SHORT G_M16529_IG20 - ;; size=25 bbWeight=0.50 PerfScore 5.62 + ;; size=22 bbWeight=0.50 PerfScore 5.50 G_M16529_IG20: mov rdi, gword ptr [rdi+0x08] mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this cmp dword ptr [rdi], edi call [rax]System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this - mov gword ptr [rbp-0x80], rax + mov gword ptr [rbp-0x78], rax ;; size=22 bbWeight=0.50 PerfScore 4.62 G_M16529_IG21: mov rdi, rax mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this test eax, eax - je G_M16529_IG35 - mov rdi, qword ptr [r13+0x30] - mov rdi, qword ptr [rdi+0x08] - cmp qword ptr [rdi+0x08], 80 + je G_M16529_IG33 + mov rdi, gword ptr [rbp-0x60] + mov rsi, qword ptr [rdi] + mov rax, qword ptr [rsi+0x30] + mov rax, qword ptr [rax+0x08] + cmp qword ptr [rax+0x08], 80 jle SHORT G_M16529_IG24 - ;; size=39 bbWeight=0.50 PerfScore 6.38 + ;; size=46 bbWeight=0.50 PerfScore 7.88 G_M16529_IG22: - mov r12, qword ptr [rdi+0x50] - test r12, r12 + mov r13, qword ptr [rax+0x50] + test r13, r13 je SHORT G_M16529_IG24 ;; size=9 bbWeight=0.40 PerfScore 1.30 G_M16529_IG23: jmp SHORT G_M16529_IG25 ;; size=2 bbWeight=0.32 PerfScore 0.64 G_M16529_IG24: - mov rdi, r13 + mov rdi, rsi mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov r12, rax + mov r13, rax ;; size=21 bbWeight=0.18 PerfScore 0.32 G_M16529_IG25: - mov rdi, qword ptr [r13+0x30] - mov rdi, qword ptr [rdi+0x08] - cmp qword ptr [rdi+0x08], 88 + mov rdi, gword ptr [rbp-0x60] + mov r11, qword ptr [rdi] + mov r11, qword ptr [r11+0x30] + mov r11, qword ptr [r11+0x08] + cmp qword ptr [r11+0x08], 88 jle SHORT G_M16529_IG26 - ;; size=15 bbWeight=0.50 PerfScore 4.00 + ;; size=22 bbWeight=0.50 PerfScore 5.50 G_M16529_IG26: - mov r11, r12 - mov rdi, gword ptr [rbp-0x80] + mov r11, r13 + mov rdi, gword ptr [rbp-0x78] call [r11] mov r15, rax xor ebx, ebx - mov eax, dword ptr [r15+0x08] - mov dword ptr [rbp-0x58], eax - test eax, eax - jle SHORT G_M16529_IG32 - ;; size=26 bbWeight=4 PerfScore 36.00 + mov r12d, dword ptr [r15+0x08] + test r12d, r12d + jle SHORT G_M16529_IG30 + ;; size=24 bbWeight=4 PerfScore 32.00 G_M16529_IG27: - mov rdi, qword ptr [r13+0x30] - mov rdi, qword ptr [rdi+0x08] - cmp qword ptr [rdi+0x08], 96 - jle SHORT G_M16529_IG29 - ;; size=15 bbWeight=2 PerfScore 16.00 -G_M16529_IG28: - mov rdi, qword ptr [rdi+0x60] - test rdi, rdi - ;; size=7 bbWeight=1.60 PerfScore 3.60 -G_M16529_IG29: mov edi, ebx shl rdi, 4 lea rdi, bword ptr [r15+rdi+0x10] - xor rcx, rcx - xchg gword ptr [rdi], rcx - mov gword ptr [rbp-0x88], rcx - test rcx, rcx - je SHORT G_M16529_IG31 - ;; size=28 bbWeight=16 PerfScore 388.00 -G_M16529_IG30: - mov rdi, rcx + xor rax, rax + xchg gword ptr [rdi], rax + mov gword ptr [rbp-0x80], rax + test rax, rax + je SHORT G_M16529_IG29 + ;; size=25 bbWeight=16 PerfScore 388.00 +G_M16529_IG28: + mov rdi, rax call System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int mov dword ptr [rbp-0x44], eax - mov rdi, gword ptr [rbp-0x88] + mov rdi, gword ptr [rbp-0x80] mov ecx, dword ptr [rdi+0x08] mov dword ptr [rbp-0x48], ecx - mov rdi, gword ptr [rbp-0x68] + mov rdi, gword ptr [rbp-0x60] call System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int mov r8d, eax mov rdi, r14 mov edx, dword ptr [rbp-0x44] mov ecx, dword ptr [rbp-0x48] mov esi, 4 mov rax, 0xD1FFAB1E ; code for System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this call [rax]System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this - ;; size=62 bbWeight=8 PerfScore 114.00 -G_M16529_IG31: + ;; size=59 bbWeight=8 PerfScore 114.00 +G_M16529_IG29: inc ebx - mov eax, dword ptr [rbp-0x58] - cmp eax, ebx - jg SHORT G_M16529_IG29 - ;; size=9 bbWeight=16 PerfScore 40.00 -G_M16529_IG32: - mov rdi, gword ptr [rbp-0x80] + cmp r12d, ebx + jg SHORT G_M16529_IG27 + ;; size=7 bbWeight=16 PerfScore 24.00 +G_M16529_IG30: + mov rdi, gword ptr [rbp-0x78] mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this test eax, eax jne G_M16529_IG26 ;; size=25 bbWeight=4 PerfScore 22.00 -G_M16529_IG33: - jmp SHORT G_M16529_IG35 +G_M16529_IG31: + jmp SHORT G_M16529_IG33 ;; size=2 bbWeight=0.50 PerfScore 1.00 -G_M16529_IG34: +G_M16529_IG32: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -G_M16529_IG35: - mov rdi, gword ptr [rbp-0x80] +G_M16529_IG33: + mov rdi, gword ptr [rbp-0x78] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this - jmp G_M16529_IG55 + jmp G_M16529_IG50 ;; size=22 bbWeight=0.50 PerfScore 3.12 -G_M16529_IG36: +G_M16529_IG34: mov r12d, 0x7530 mov edi, 0x3A98 cmp r15d, 1 cmove r12d, edi - mov rdi, gword ptr [rbp-0x68] - mov r13, qword ptr [rdi] - mov rax, r13 + mov rdi, gword ptr [rbp-0x60] + mov rax, qword ptr [rdi] mov rax, qword ptr [rax+0x30] mov rax, qword ptr [rax+0x08] cmp qword ptr [rax+0x08], 72 - jle SHORT G_M16529_IG37 - ;; size=44 bbWeight=0.50 PerfScore 6.12 -G_M16529_IG37: + jle SHORT G_M16529_IG35 + ;; size=41 bbWeight=0.50 PerfScore 6.00 +G_M16529_IG35: mov rdi, gword ptr [rdi+0x08] mov rax, 0xD1FFAB1E ; code for System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this cmp dword ptr [rdi], edi call [rax]System.Runtime.CompilerServices.ConditionalWeakTable`2[System.__Canon,System.__Canon]:System.Collections.Generic.IEnumerable>.GetEnumerator():System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:this - mov gword ptr [rbp-0x90], rax + mov gword ptr [rbp-0x88], rax ;; size=25 bbWeight=0.50 PerfScore 4.62 -G_M16529_IG38: +G_M16529_IG36: mov rdi, rax mov r11, 0xD1FFAB1E ; code for System.Collections.IEnumerator:MoveNext():ubyte:this call [r11]System.Collections.IEnumerator:MoveNext():ubyte:this test eax, eax - je G_M16529_IG54 - mov rdi, qword ptr [r13+0x30] - mov rdi, qword ptr [rdi+0x08] - cmp qword ptr [rdi+0x08], 80 - jle SHORT G_M16529_IG41 - ;; size=39 bbWeight=0.50 PerfScore 6.38 -G_M16529_IG39: - mov rax, qword ptr [rdi+0x50] - test rax, rax - je SHORT G_M16529_IG41 + je G_M16529_IG49 + mov rdi, gword ptr [rbp-0x60] + mov rsi, qword ptr [rdi] + mov rax, qword ptr [rsi+0x30] + mov rax, qword ptr [rax+0x08] + cmp qword ptr [rax+0x08], 80 + jle SHORT G_M16529_IG39 + ;; size=46 bbWeight=0.50 PerfScore 7.88 +G_M16529_IG37: + mov r13, qword ptr [rax+0x50] + test r13, r13 + je SHORT G_M16529_IG39 ;; size=9 bbWeight=0.40 PerfScore 1.30 -G_M16529_IG40: - jmp SHORT G_M16529_IG42 +G_M16529_IG38: + jmp SHORT G_M16529_IG40 ;; size=2 bbWeight=0.32 PerfScore 0.64 -G_M16529_IG41: - mov rdi, r13 +G_M16529_IG39: + mov rdi, rsi mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS - ;; size=18 bbWeight=0.18 PerfScore 0.27 -G_M16529_IG42: + mov r13, rax + ;; size=21 bbWeight=0.18 PerfScore 0.32 +G_M16529_IG40: + mov rdi, gword ptr [rbp-0x60] + mov r11, qword ptr [rdi] + mov r11, qword ptr [r11+0x30] + mov r11, qword ptr [r11+0x08] + cmp qword ptr [r11+0x08], 88 + jle SHORT G_M16529_IG41 + ;; size=22 bbWeight=0.50 PerfScore 5.50 +G_M16529_IG41: + mov r11, r13 + mov rdi, gword ptr [rbp-0x88] + call [r11] mov r15, rax - mov rdi, qword ptr [r13+0x30] - mov rdi, qword ptr [rdi+0x08] - cmp qword ptr [rdi+0x08], 88 - jle SHORT G_M16529_IG43 - ;; size=18 bbWeight=0.50 PerfScore 4.12 + xor eax, eax + mov ecx, dword ptr [r15+0x08] + mov dword ptr [rbp-0x58], ecx + test ecx, ecx + jle SHORT G_M16529_IG45 + ;; size=29 bbWeight=4 PerfScore 36.00 +G_M16529_IG42: + mov dword ptr [rbp-0x34], eax + mov edi, eax + shl rdi, 4 + cmp gword ptr [r15+rdi+0x10], 0 + je SHORT G_M16529_IG44 + ;; size=17 bbWeight=16 PerfScore 92.00 G_M16529_IG43: - mov r11, r15 - mov rdi, gword ptr [rbp-0x90] - call [r11] - mov gword ptr [rbp-0x98], rax - xor ecx, ecx - mov edx, dword ptr [rax+0x08] - mov dword ptr [rbp-0x5C], edx + mov edx, dword ptr [r15+rdi+0x18] test edx, edx - jle SHORT G_M16529_IG47 - ;; size=32 bbWeight=4 PerfScore 39.00 + jne SHORT G_M16529_IG48 + mov dword ptr [r15+rdi+0x18], ebx + ;; size=14 bbWeight=8 PerfScore 34.00 G_M16529_IG44: - mov dword ptr [rbp-0x34], ecx - mov edi, ecx - shl rdi, 4 - cmp gword ptr [rax+rdi+0x10], 0 - je SHORT G_M16529_IG46 - ;; size=17 bbWeight=16 PerfScore 92.00 -G_M16529_IG45: - mov esi, dword ptr [rax+rdi+0x18] - test esi, esi - jne SHORT G_M16529_IG50 - mov dword ptr [rax+rdi+0x18], ebx - ;; size=12 bbWeight=8 PerfScore 34.00 -G_M16529_IG46: - mov ecx, dword ptr [rbp-0x34] - inc ecx - mov edx, dword ptr [rbp-0x5C] - cmp edx, ecx - jg SHORT G_M16529_IG44 + mov eax, dword ptr [rbp-0x34] + inc eax + mov ecx, dword ptr [rbp-0x58] + cmp ecx, eax + jg SHORT G_M16529_IG42 ;; size=12 bbWeight=16 PerfScore 56.00 -G_M16529_IG47: - mov rdi, gword ptr [rbp-0x90] +G_M16529_IG45: + mov rdi, gword ptr [rbp-0x88] 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_M16529_IG43 + jne SHORT G_M16529_IG41 ;; size=24 bbWeight=4 PerfScore 22.00 -G_M16529_IG48: - jmp G_M16529_IG54 - ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M16529_IG49: +G_M16529_IG46: + jmp SHORT G_M16529_IG49 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M16529_IG47: call CORINFO_HELP_RNGCHKFAIL ;; size=5 bbWeight=0 PerfScore 0.00 -G_M16529_IG50: - mov r8d, ebx - sub r8d, esi - movsxd rsi, r8d - mov r8d, r12d - cmp rsi, r8 - jl SHORT G_M16529_IG46 - mov rsi, qword ptr [r13+0x30] - mov rsi, qword ptr [rsi+0x08] - cmp qword ptr [rsi+0x08], 96 - jle SHORT G_M16529_IG51 - ;; size=32 bbWeight=8 PerfScore 82.00 -G_M16529_IG51: - lea rdi, bword ptr [rax+rdi+0x10] - xor rsi, rsi - xchg gword ptr [rdi], rsi - mov gword ptr [rbp-0xA0], rsi - test rsi, rsi - je SHORT G_M16529_IG53 +G_M16529_IG48: + mov esi, ebx + sub esi, edx + movsxd rdx, esi + mov esi, r12d + cmp rdx, rsi + jl SHORT G_M16529_IG44 + lea rdi, bword ptr [r15+rdi+0x10] + xor rdx, rdx + xchg gword ptr [rdi], rdx + mov gword ptr [rbp-0x90], rdx + test rdx, rdx + je SHORT G_M16529_IG44 cmp byte ptr [r14+0x9D], 0 - je SHORT G_M16529_IG52 - mov rdi, rsi + je SHORT G_M16529_IG44 + mov rdi, rdx call System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int mov dword ptr [rbp-0x3C], eax - mov rdi, gword ptr [rbp-0xA0] + mov rdi, gword ptr [rbp-0x90] mov ecx, dword ptr [rdi+0x08] mov dword ptr [rbp-0x40], ecx - mov rdi, gword ptr [rbp-0x68] + mov rdi, gword ptr [rbp-0x60] call System.Runtime.CompilerServices.RuntimeHelpers:GetHashCode(System.Object):int mov r8d, eax mov rdi, r14 mov edx, dword ptr [rbp-0x3C] mov ecx, dword ptr [rbp-0x40] mov esi, 4 mov rax, 0xD1FFAB1E ; code for System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this call [rax]System.Diagnostics.Tracing.EventSource:WriteEvent(int,int,int,int):this - mov rax, gword ptr [rbp-0x98] - jmp G_M16529_IG46 - ;; size=106 bbWeight=8 PerfScore 358.00 -G_M16529_IG52: - mov rax, gword ptr [rbp-0x98] - jmp G_M16529_IG46 - ;; size=12 bbWeight=4 PerfScore 12.00 -G_M16529_IG53: - mov rax, gword ptr [rbp-0x98] - jmp G_M16529_IG46 - ;; size=12 bbWeight=4 PerfScore 12.00 -G_M16529_IG54: - mov rdi, gword ptr [rbp-0x90] + jmp G_M16529_IG44 + ;; size=114 bbWeight=8 PerfScore 368.00 +G_M16529_IG49: + mov rdi, gword ptr [rbp-0x88] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this ;; size=20 bbWeight=0.50 PerfScore 2.12 -G_M16529_IG55: +G_M16529_IG50: mov eax, 1 ;; size=5 bbWeight=1 PerfScore 0.25 -G_M16529_IG56: - add rsp, 152 +G_M16529_IG51: + add rsp, 136 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=18 bbWeight=1 PerfScore 4.25 -G_M16529_IG57: +G_M16529_IG52: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -G_M16529_IG58: +G_M16529_IG53: 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+0xC0] + lea rbp, [rbp+0xB0] ;; size=25 bbWeight=0 PerfScore 0.00 -G_M16529_IG59: - cmp gword ptr [rbp-0x78], 0 - je SHORT G_M16529_IG60 - mov rdi, gword ptr [rbp-0x78] +G_M16529_IG54: + cmp gword ptr [rbp-0x70], 0 + je SHORT G_M16529_IG55 + mov rdi, gword ptr [rbp-0x70] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this ;; size=24 bbWeight=0 PerfScore 0.00 -G_M16529_IG60: +G_M16529_IG55: nop ;; size=1 bbWeight=0 PerfScore 0.00 -G_M16529_IG61: +G_M16529_IG56: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0 PerfScore 0.00 -G_M16529_IG62: +G_M16529_IG57: 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+0xC0] + lea rbp, [rbp+0xB0] ;; size=25 bbWeight=0 PerfScore 0.00 -G_M16529_IG63: - cmp gword ptr [rbp-0x80], 0 - je SHORT G_M16529_IG64 - mov rdi, gword ptr [rbp-0x80] +G_M16529_IG58: + cmp gword ptr [rbp-0x78], 0 + je SHORT G_M16529_IG59 + mov rdi, gword ptr [rbp-0x78] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this ;; size=24 bbWeight=0 PerfScore 0.00 -G_M16529_IG64: +G_M16529_IG59: nop ;; size=1 bbWeight=0 PerfScore 0.00 -G_M16529_IG65: +G_M16529_IG60: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0 PerfScore 0.00 -G_M16529_IG66: +G_M16529_IG61: 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+0xC0] + lea rbp, [rbp+0xB0] ;; size=25 bbWeight=0 PerfScore 0.00 -G_M16529_IG67: - cmp gword ptr [rbp-0x90], 0 - je SHORT G_M16529_IG68 - mov rdi, gword ptr [rbp-0x90] +G_M16529_IG62: + cmp gword ptr [rbp-0x88], 0 + je SHORT G_M16529_IG63 + mov rdi, gword ptr [rbp-0x88] mov r11, 0xD1FFAB1E ; code for System.IDisposable:Dispose():this call [r11]System.IDisposable:Dispose():this ;; size=30 bbWeight=0 PerfScore 0.00 -G_M16529_IG68: +G_M16529_IG63: nop ;; size=1 bbWeight=0 PerfScore 0.00 -G_M16529_IG69: +G_M16529_IG64: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0 PerfScore 0.00 -; Total bytes of code 1537, prolog size 40, PerfScore 1995.27, instruction count 405, allocated bytes for code 1537 (MethodHash=d29cbf6e) for method System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts) +; Total bytes of code 1486, prolog size 40, PerfScore 1860.12, instruction count 397, allocated bytes for code 1486 (MethodHash=d29cbf6e) for method System.Buffers.SharedArrayPool`1[System.__Canon]:Trim():ubyte:this (FullOpts) ```
-3 (-1.72 % of base) - System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this ```diff ; Assembly listing for method System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 2 single block inlinees; 2 inlinees without PGO data +; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T00] ( 6, 5 ) ref -> [rbp-0x20] this class-hnd EH-live single-def -; V01 loc0 [V01,T04] ( 5, 3.50) ref -> rbx class-hnd exact single-def -; V02 loc1 [V02,T06] ( 4, 1 ) ref -> [rbp-0x28] class-hnd EH-live spill-single-def +; V00 this [V00,T00] ( 6, 5 ) ref -> rbx this class-hnd single-def +; V01 loc0 [V01,T01] ( 5, 3.50) ref -> r15 class-hnd single-def +; V02 loc1 [V02,T02] ( 4, 1 ) ref -> [rbp-0x20] class-hnd EH-live spill-single-def ; V03 loc2 [V03 ] ( 5, 2 ) ubyte -> [rbp-0x18] do-not-enreg[X] addr-exposed ld-addr-op ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V05 tmp1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -;* V06 tmp2 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -; V07 tmp3 [V07,T03] ( 2, 4 ) ref -> rbx class-hnd single-def "updating class info" -; V08 PSPSym [V08,T07] ( 1, 1 ) long -> [rbp-0x30] do-not-enreg[V] "PSPSym" -;* V09 rat0 [V09,T02] ( 0, 0 ) long -> zero-ref "Spilling to split statement for tree" -;* V10 rat1 [V10,T05] ( 0, 0 ) long -> zero-ref "runtime lookup" -;* V11 rat2 [V11,T01] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" +; V05 PSPSym [V05,T03] ( 1, 1 ) long -> [rbp-0x30] do-not-enreg[V] "PSPSym" ; -; Lcl frame size = 40 +; Lcl frame size = 32 G_M1143_IG01: push rbp + push r15 push rbx - sub rsp, 40 + sub rsp, 32 lea rbp, [rsp+0x30] mov qword ptr [rbp-0x30], rsp - mov qword ptr [rbp-0x10], rdi - mov gword ptr [rbp-0x20], rdi - ;; size=23 bbWeight=1 PerfScore 5.75 + mov rbx, rdi + ;; size=20 bbWeight=1 PerfScore 5.00 G_M1143_IG02: - cmp dword ptr [rdi], edi - lea rsi, bword ptr [rdi+0x08] - xor rax, rax - mov rbx, rax - xchg gword ptr [rsi], rbx - test rbx, rbx - je SHORT G_M1143_IG09 + cmp byte ptr [rbx], bl + lea rsi, bword ptr [rbx+0x08] + xor rdi, rdi + mov r15, rdi + xchg gword ptr [rsi], r15 + test r15, r15 + je SHORT G_M1143_IG10 ;; size=19 bbWeight=1 PerfScore 25.25 G_M1143_IG03: xor esi, esi - mov qword ptr [rdi+0x18], rsi - mov qword ptr [rdi+0x20], rsi - mov rsi, gword ptr [rbx+0x08] - mov gword ptr [rbp-0x28], rsi - xor eax, eax - mov dword ptr [rbp-0x18], eax - ;; size=23 bbWeight=0.50 PerfScore 3.25 + mov qword ptr [rbx+0x18], rsi + mov qword ptr [rbx+0x20], rsi + mov rdi, gword ptr [r15+0x08] + mov gword ptr [rbp-0x20], rdi + ;; size=18 bbWeight=0.50 PerfScore 2.62 G_M1143_IG04: + mov dword ptr [rbp-0x18], esi + ;; size=3 bbWeight=0.50 PerfScore 0.50 +G_M1143_IG05: cmp byte ptr [rbp-0x18], 0 - jne SHORT G_M1143_IG05 + jne SHORT G_M1143_IG06 lea rsi, [rbp-0x18] - mov rdi, gword ptr [rbp-0x28] call System.Threading.Monitor:ReliableEnter(System.Object,byref) - jmp SHORT G_M1143_IG06 - ;; size=21 bbWeight=0.50 PerfScore 3.75 -G_M1143_IG05: + jmp SHORT G_M1143_IG07 + ;; size=17 bbWeight=0.50 PerfScore 3.25 +G_M1143_IG06: mov rax, 0xD1FFAB1E ; code for System.Threading.Monitor:ThrowLockTakenException() call [rax]System.Threading.Monitor:ThrowLockTakenException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M1143_IG06: - dec dword ptr [rbx+0x18] - ;; size=3 bbWeight=0.50 PerfScore 1.50 G_M1143_IG07: + dec dword ptr [r15+0x18] + ;; size=4 bbWeight=0.50 PerfScore 1.50 +G_M1143_IG08: cmp byte ptr [rbp-0x18], 0 - je SHORT G_M1143_IG08 - mov rdi, gword ptr [rbp-0x28] + je SHORT G_M1143_IG09 + mov rdi, gword ptr [rbp-0x20] call System.Threading.Monitor:Exit(System.Object) ;; size=15 bbWeight=0.50 PerfScore 2.50 -G_M1143_IG08: - mov rdi, gword ptr [rbp-0x20] - call System.GC:_SuppressFinalize(System.Object) - mov rdi, gword ptr [rbp-0x20] - ;; size=13 bbWeight=0.50 PerfScore 1.50 G_M1143_IG09: - add rsp, 40 + mov rdi, rbx + call System.GC:_SuppressFinalize(System.Object) + ;; size=8 bbWeight=0.50 PerfScore 0.62 +G_M1143_IG10: + nop + ;; size=1 bbWeight=1 PerfScore 0.25 +G_M1143_IG11: + add rsp, 32 pop rbx + pop r15 pop rbp ret - ;; size=7 bbWeight=1 PerfScore 2.25 -G_M1143_IG10: + ;; size=9 bbWeight=1 PerfScore 2.75 +G_M1143_IG12: push rbp + push r15 push rbx - push rax + sub rsp, 16 mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp lea rbp, [rbp+0x30] - ;; size=14 bbWeight=0 PerfScore 0.00 -G_M1143_IG11: + ;; size=19 bbWeight=0 PerfScore 0.00 +G_M1143_IG13: cmp byte ptr [rbp-0x18], 0 - je SHORT G_M1143_IG12 - mov rdi, gword ptr [rbp-0x28] + je SHORT G_M1143_IG14 + mov rdi, gword ptr [rbp-0x20] call System.Threading.Monitor:Exit(System.Object) ;; size=15 bbWeight=0 PerfScore 0.00 -G_M1143_IG12: +G_M1143_IG14: nop ;; size=1 bbWeight=0 PerfScore 0.00 -G_M1143_IG13: - add rsp, 8 +G_M1143_IG15: + add rsp, 16 pop rbx + pop r15 pop rbp ret - ;; size=7 bbWeight=0 PerfScore 0.00 + ;; size=9 bbWeight=0 PerfScore 0.00 -; Total bytes of code 174, prolog size 23, PerfScore 63.15, instruction count 57, allocated bytes for code 174 (MethodHash=6275fb88) for method System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts) +; Total bytes of code 171, prolog size 20, PerfScore 61.35, instruction count 58, allocated bytes for code 171 (MethodHash=6275fb88) for method System.Runtime.CompilerServices.ConditionalWeakTable`2+Enumerator[System.__Canon,System.__Canon]:Dispose():this (FullOpts) ```

Larger list of diffs: https://gist.github.com/MihuBot/f51f54cde9bf294728f74bd03de71b4c

MihuBot commented 11 months ago

@MichalPetryka