MihuBot / runtime-utils

0 stars 0 forks source link

[X64] [EgorBo] Optimize a castclass over nullables #211

Open MihuBot opened 11 months ago

MihuBot commented 11 months ago

Build completed in 2 hours 8 minutes. https://github.com/dotnet/runtime/pull/95764

CoreLib diffs

Found 2 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 6771604
Total bytes of diff: 6774990
Total bytes of delta: 3386 (0.05 % of base)
Total relative delta: 8.94
    diff is a regression.
    relative diff is a regression.

Top file regressions (bytes):
        3386 : System.Private.CoreLib.dasm (0.05 % of base)

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

Top method regressions (bytes):
         436 (103.56 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts)
         378 (91.08 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts)
         373 (91.65 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts)
         369 (91.79 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts)
         348 (70.02 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendSpanFormattable>g__GrowAndAppendFormatted|20_0[System.Nullable`1[int]](byref,System.Nullable`1[int],int,byref,System.String):ubyte (FullOpts)
         339 (99.41 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendSpanFormattable[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts)
         324 (109.46 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts)
         308 (78.57 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts)
         300 (77.32 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts)
         276 (101.47 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts)
          10 (3.42 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Nullable`1[int],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (3.18 % of base) : System.Private.CoreLib.dasm - System.Tuple`1[System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.49 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[double,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.71 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[int,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.70 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[long,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[short,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.85 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.__Canon,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.48 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[ubyte,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)

Top method improvements (bytes):
         -48 (-11.57 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts)
         -48 (-11.51 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts)
         -19 (-15.45 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts)

Top method regressions (percentages):
         324 (109.46 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts)
         436 (103.56 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts)
         276 (101.47 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts)
         339 (99.41 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendSpanFormattable[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts)
         369 (91.79 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts)
         373 (91.65 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts)
         378 (91.08 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts)
         308 (78.57 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts)
         300 (77.32 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts)
         348 (70.02 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendSpanFormattable>g__GrowAndAppendFormatted|20_0[System.Nullable`1[int]](byref,System.Nullable`1[int],int,byref,System.String):ubyte (FullOpts)
          10 (3.42 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Nullable`1[int],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (3.18 % of base) : System.Private.CoreLib.dasm - System.Tuple`1[System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.85 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.__Canon,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.71 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[int,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.70 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[long,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[short,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[ubyte,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.49 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[double,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)
           5 (1.48 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts)

Top method improvements (percentages):
         -19 (-15.45 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts)
         -48 (-11.57 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts)
         -48 (-11.51 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts)

22 total methods with Code Size differences (3 improved, 19 regressed), 55812 unchanged.

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

Frameworks diffs

Diffs ``` Found 282 files with textual diffs. Summary of Code Size diffs: (Lower is better) Total bytes of base: 37999869 Total bytes of diff: 37999927 Total bytes of delta: 58 (0.00 % of base) Total relative delta: -5.99 diff is a regression. relative diff is an improvement. Total byte diff includes 0 bytes from reconciling methods Base had 1 unique methods, 169 unique bytes Diff had 1 unique methods, 169 unique bytes Top file regressions (bytes): 3386 : System.Private.CoreLib.dasm (0.05 % of base) Top file improvements (bytes): -1324 : System.Text.Json.dasm (-0.10 % of base) -732 : Microsoft.Extensions.Logging.Abstractions.dasm (-1.00 % of base) -346 : System.Diagnostics.DiagnosticSource.dasm (-0.15 % of base) -325 : System.ComponentModel.TypeConverter.dasm (-0.11 % of base) -236 : Microsoft.Extensions.Logging.Console.dasm (-0.28 % of base) -104 : System.Data.Common.dasm (-0.01 % of base) -88 : System.Reflection.Context.dasm (-0.15 % of base) -46 : System.ComponentModel.Composition.dasm (-0.01 % of base) -41 : System.Linq.Expressions.dasm (-0.00 % of base) -40 : System.Threading.Tasks.Dataflow.dasm (-0.00 % of base) -27 : System.Private.Xml.dasm (-0.00 % of base) -19 : System.Linq.Parallel.dasm (-0.00 % of base) 13 total files with Code Size differences (12 improved, 1 regressed), 243 unchanged. Top method regressions (bytes): 436 (103.56 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) 378 (91.08 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts) 373 (91.65 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) 369 (91.79 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts) 348 (70.02 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:g__GrowAndAppendFormatted|20_0[System.Nullable`1[int]](byref,System.Nullable`1[int],int,byref,System.String):ubyte (FullOpts) 339 (99.41 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendSpanFormattable[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) 324 (109.46 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts) 308 (78.57 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts) 300 (77.32 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts) 276 (101.47 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts) 169 (Infinity of base) : System.Net.Sockets.dasm - 10 (3.42 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Nullable`1[int],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (3.18 % of base) : System.Private.CoreLib.dasm - System.Tuple`1[System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.49 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[double,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.71 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[int,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.70 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[long,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[short,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.85 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.__Canon,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.48 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[ubyte,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) Top method improvements (bytes): -732 (-86.52 % of base) : Microsoft.Extensions.Logging.Abstractions.dasm - Microsoft.Extensions.Logging.LogValuesFormatter:TryFormatArgumentIfNullOrEnumerable[System.Nullable`1[int]](System.Nullable`1[int],byref):ubyte (FullOpts) -236 (-7.93 % of base) : Microsoft.Extensions.Logging.Console.dasm - Microsoft.Extensions.Logging.Console.JsonConsoleFormatter:Write[System.Nullable`1[int]](byref,Microsoft.Extensions.Logging.IExternalScopeProvider,System.IO.TextWriter):this (FullOpts) -200 (-95.24 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.ActivityCreationOptions`1[System.Nullable`1[int]]:get_TraceId():System.Diagnostics.ActivityTraceId:this (FullOpts) -169 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine:TryRegisterSocket(long,System.Net.Sockets.SocketAsyncContext,byref,byref):ubyte (FullOpts) (1 base, 0 diff methods) -153 (-96.23 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:HookPropertyChanged(System.Nullable`1[int]):this (FullOpts) -146 (-36.87 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.ActivityCreationOptions`1[System.Nullable`1[int]]:.ctor(System.Diagnostics.ActivitySource,System.String,System.Nullable`1[int],int,System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.String,System.Object]],System.Collections.Generic.IEnumerable`1[System.Diagnostics.ActivityLink],int):this (FullOpts) -122 (-40.40 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[System.__Canon](byref):ubyte:this (FullOpts) -101 (-58.05 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[int](byref):ubyte:this (FullOpts) -97 (-25.46 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[System.__Canon]():System.__Canon:this (FullOpts) -89 (-32.60 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[int]():int:this (FullOpts) -84 (-93.33 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:UnhookPropertyChanged(System.Nullable`1[int]):this (FullOpts) -79 (-47.02 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[System.Nullable`1[int]](byref):ubyte:this (FullOpts) -79 (-75.96 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[System.Numerics.Vector`1[float]](byref):ubyte:this (FullOpts) -76 (-82.61 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[short](byref):ubyte:this (FullOpts) -76 (-84.44 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[ubyte](byref):ubyte:this (FullOpts) -75 (-84.27 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[double](byref):ubyte:this (FullOpts) -75 (-84.27 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[long](byref):ubyte:this (FullOpts) -74 (-33.48 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float]:this (FullOpts) -68 (-31.63 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[double]():double:this (FullOpts) -65 (-18.79 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:ClearItems():this (FullOpts) -65 (-30.66 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[long]():long:this (FullOpts) -65 (-30.66 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[short]():short:this (FullOpts) -65 (-24.62 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts) -65 (-30.66 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[ubyte]():ubyte:this (FullOpts) -61 (-62.24 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.Projection.Projector:Project[System.Nullable`1[int]](System.Nullable`1[int],System.Func`2[System.Nullable`1[int],System.Nullable`1[int]]):System.Nullable`1[int]:this (FullOpts) -53 (-12.77 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonNode:ConvertFromValue[System.Nullable`1[int]](System.Nullable`1[int],System.Nullable`1[System.Text.Json.Nodes.JsonNodeOptions]):System.Text.Json.Nodes.JsonNode (FullOpts) -48 (-11.57 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) -48 (-11.51 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) -43 (-45.74 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1+<>c__DisplayClass10_0`1[int,System.Nullable`1[int]]:b__0(System.Nullable`1[int]):System.Object:this (FullOpts) -43 (-45.74 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1+<>c__DisplayClass10_0`1[int,System.Nullable`1[int]]:b__1(System.Nullable`1[int]):System.Object:this (FullOpts) -40 (-9.22 % of base) : System.Threading.Tasks.Dataflow.dasm - System.Threading.Tasks.Dataflow.Internal.Common:StoreDataflowMessageValueIntoExceptionData[System.Nullable`1[int]](System.Exception,System.Nullable`1[int],ubyte) (FullOpts) -27 (-12.74 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[System.Nullable`1[int]](System.Nullable`1[int][],System.Nullable`1[int][]):ubyte (FullOpts) -27 (-12.74 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[System.Nullable`1[int]](System.Nullable`1[int][],System.Nullable`1[int][]):ubyte (FullOpts) -27 (-12.05 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.ListBase`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int]):int:this (FullOpts) -23 (-3.04 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:Child_PropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this (FullOpts) -22 (-11.22 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.CacheDict`2[System.Nullable`1[int],System.Nullable`1[int]]:TryGetValue(System.Nullable`1[int],byref):ubyte:this (FullOpts) -19 (-7.06 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[System.Nullable`1[int]](System.Collections.Generic.IList`1[System.Nullable`1[int]],System.Collections.Generic.IList`1[System.Nullable`1[int]]):ubyte (FullOpts) -19 (-15.45 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts) -19 (-7.57 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.CacheDict`2[System.Nullable`1[int],System.Nullable`1[int]]:Add(System.Nullable`1[int],System.Nullable`1[int]):this (FullOpts) -19 (-12.50 % of base) : System.Linq.Parallel.dasm - System.Linq.Parallel.HashLookup`2[System.Nullable`1[int],System.Nullable`1[int]]:AreKeysEqual(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts) -18 (-6.90 % of base) : System.Data.Common.dasm - System.Data.RBTree`1[System.Nullable`1[int]]:GetNodeByKey(System.Nullable`1[int]):System.Data.RBTree`1+NodePath[System.Nullable`1[int]]:this (FullOpts) Top method regressions (percentages): 169 (Infinity of base) : System.Net.Sockets.dasm - 324 (109.46 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts) 436 (103.56 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) 276 (101.47 % of base) : System.Private.CoreLib.dasm - System.Text.StringBuilder+AppendInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts) 339 (99.41 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendSpanFormattable[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) 369 (91.79 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts) 373 (91.65 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) 378 (91.08 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):this (FullOpts) 308 (78.57 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):this (FullOpts) 300 (77.32 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int]):ubyte:this (FullOpts) 348 (70.02 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:g__GrowAndAppendFormatted|20_0[System.Nullable`1[int]](byref,System.Nullable`1[int],int,byref,System.String):ubyte (FullOpts) 10 (3.42 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Nullable`1[int],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (3.18 % of base) : System.Private.CoreLib.dasm - System.Tuple`1[System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.85 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.__Canon,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.71 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[int,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.70 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[long,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[short,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.69 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[ubyte,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.49 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[double,System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) 5 (1.48 % of base) : System.Private.CoreLib.dasm - System.Tuple`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:ToString(System.Text.StringBuilder):System.String:this (FullOpts) Top method improvements (percentages): -169 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine:TryRegisterSocket(long,System.Net.Sockets.SocketAsyncContext,byref,byref):ubyte (FullOpts) (1 base, 0 diff methods) -153 (-96.23 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:HookPropertyChanged(System.Nullable`1[int]):this (FullOpts) -200 (-95.24 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.ActivityCreationOptions`1[System.Nullable`1[int]]:get_TraceId():System.Diagnostics.ActivityTraceId:this (FullOpts) -84 (-93.33 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:UnhookPropertyChanged(System.Nullable`1[int]):this (FullOpts) -732 (-86.52 % of base) : Microsoft.Extensions.Logging.Abstractions.dasm - Microsoft.Extensions.Logging.LogValuesFormatter:TryFormatArgumentIfNullOrEnumerable[System.Nullable`1[int]](System.Nullable`1[int],byref):ubyte (FullOpts) -76 (-84.44 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[ubyte](byref):ubyte:this (FullOpts) -75 (-84.27 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[double](byref):ubyte:this (FullOpts) -75 (-84.27 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[long](byref):ubyte:this (FullOpts) -76 (-82.61 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[short](byref):ubyte:this (FullOpts) -79 (-75.96 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[System.Numerics.Vector`1[float]](byref):ubyte:this (FullOpts) -61 (-62.24 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.Projection.Projector:Project[System.Nullable`1[int]](System.Nullable`1[int],System.Func`2[System.Nullable`1[int],System.Nullable`1[int]]):System.Nullable`1[int]:this (FullOpts) -101 (-58.05 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[int](byref):ubyte:this (FullOpts) -79 (-47.02 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[System.Nullable`1[int]](byref):ubyte:this (FullOpts) -43 (-45.74 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1+<>c__DisplayClass10_0`1[int,System.Nullable`1[int]]:b__0(System.Nullable`1[int]):System.Object:this (FullOpts) -43 (-45.74 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1+<>c__DisplayClass10_0`1[int,System.Nullable`1[int]]:b__1(System.Nullable`1[int]):System.Object:this (FullOpts) -122 (-40.40 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:TryGetValue[System.__Canon](byref):ubyte:this (FullOpts) -146 (-36.87 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.ActivityCreationOptions`1[System.Nullable`1[int]]:.ctor(System.Diagnostics.ActivitySource,System.String,System.Nullable`1[int],int,System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.String,System.Object]],System.Collections.Generic.IEnumerable`1[System.Diagnostics.ActivityLink],int):this (FullOpts) -74 (-33.48 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float]:this (FullOpts) -89 (-32.60 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[int]():int:this (FullOpts) -68 (-31.63 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[double]():double:this (FullOpts) -65 (-30.66 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[long]():long:this (FullOpts) -65 (-30.66 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[short]():short:this (FullOpts) -65 (-30.66 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[ubyte]():ubyte:this (FullOpts) -97 (-25.46 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[System.__Canon]():System.__Canon:this (FullOpts) -65 (-24.62 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.Nullable`1[int]]:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts) -65 (-18.79 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:ClearItems():this (FullOpts) -19 (-15.45 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts) -53 (-12.77 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonNode:ConvertFromValue[System.Nullable`1[int]](System.Nullable`1[int],System.Nullable`1[System.Text.Json.Nodes.JsonNodeOptions]):System.Text.Json.Nodes.JsonNode (FullOpts) -27 (-12.74 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsArrayEqual[System.Nullable`1[int]](System.Nullable`1[int][],System.Nullable`1[int][]):ubyte (FullOpts) -27 (-12.74 % of base) : System.Reflection.Context.dasm - System.Reflection.Context.CollectionServices:CompareArrays[System.Nullable`1[int]](System.Nullable`1[int][],System.Nullable`1[int][]):ubyte (FullOpts) -19 (-12.50 % of base) : System.Linq.Parallel.dasm - System.Linq.Parallel.HashLookup`2[System.Nullable`1[int],System.Nullable`1[int]]:AreKeysEqual(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts) -27 (-12.05 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.ListBase`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int]):int:this (FullOpts) -48 (-11.57 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) -48 (-11.51 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) -22 (-11.22 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.CacheDict`2[System.Nullable`1[int],System.Nullable`1[int]]:TryGetValue(System.Nullable`1[int],byref):ubyte:this (FullOpts) -40 (-9.22 % of base) : System.Threading.Tasks.Dataflow.dasm - System.Threading.Tasks.Dataflow.Internal.Common:StoreDataflowMessageValueIntoExceptionData[System.Nullable`1[int]](System.Exception,System.Nullable`1[int],ubyte) (FullOpts) -236 (-7.93 % of base) : Microsoft.Extensions.Logging.Console.dasm - Microsoft.Extensions.Logging.Console.JsonConsoleFormatter:Write[System.Nullable`1[int]](byref,Microsoft.Extensions.Logging.IExternalScopeProvider,System.IO.TextWriter):this (FullOpts) -19 (-7.57 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.CacheDict`2[System.Nullable`1[int],System.Nullable`1[int]]:Add(System.Nullable`1[int],System.Nullable`1[int]):this (FullOpts) -19 (-7.06 % of base) : System.ComponentModel.Composition.dasm - Microsoft.Internal.Collections.CollectionServices:IsCollectionEqual[System.Nullable`1[int]](System.Collections.Generic.IList`1[System.Nullable`1[int]],System.Collections.Generic.IList`1[System.Nullable`1[int]]):ubyte (FullOpts) -18 (-6.90 % of base) : System.Data.Common.dasm - System.Data.RBTree`1[System.Nullable`1[int]]:GetNodeByKey(System.Nullable`1[int]):System.Data.RBTree`1+NodePath[System.Nullable`1[int]]:this (FullOpts) -23 (-3.04 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:Child_PropertyChanged(System.Object,System.ComponentModel.PropertyChangedEventArgs):this (FullOpts) 61 total methods with Code Size differences (41 improved, 20 regressed), 236029 unchanged. -------------------------------------------------------------------------------- ```

Artifacts:

MihuBot commented 11 months ago

Top method regressions

436 (103.56 % of base) - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this ```diff ; Assembly listing for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame -; partially interruptible +; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 10 single block inlinees; 6 inlinees without PGO data +; 0 inlinees with PGO data; 29 single block inlinees; 19 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T00] ( 15, 9 ) byref -> rbx this single-def -; V01 arg1 [V01 ] ( 6, 4 ) struct ( 8) [rbp-0x18] do-not-enreg[XSF] addr-exposed ld-addr-op single-def -; V02 arg2 [V02,T01] ( 6, 4 ) ref -> r15 class-hnd single-def -; V03 loc0 [V03,T08] ( 4, 2 ) ref -> r15 class-hnd -; V04 loc1 [V04 ] ( 2, 1 ) int -> [rbp-0x20] do-not-enreg[X] addr-exposed ld-addr-op -; V05 loc2 [V05 ] ( 5, 2.50) struct ( 8) [rbp-0x28] do-not-enreg[XS] addr-exposed ld-addr-op -; V06 OutArgs [V06 ] ( 1, 1 ) struct ( 8) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V07 tmp1 [V07,T07] ( 5, 2.50) byref -> rdi -; V08 tmp2 [V08,T20] ( 3, 1.50) ref -> r15 +; V00 this [V00,T03] ( 15, 9 ) byref -> rbx this single-def +; V01 arg1 [V01 ] ( 6, 4 ) struct ( 8) [rbp-0x30] do-not-enreg[XSF] addr-exposed ld-addr-op single-def +; V02 arg2 [V02,T07] ( 6, 4 ) ref -> r15 class-hnd single-def +; V03 loc0 [V03,T21] ( 4, 2 ) ref -> r15 class-hnd +; V04 loc1 [V04 ] ( 5, 2.50) int -> [rbp-0x38] do-not-enreg[X] addr-exposed ld-addr-op +; V05 loc2 [V05 ] ( 5, 2.50) struct ( 8) [rbp-0x40] do-not-enreg[XS] addr-exposed ld-addr-op +; V06 OutArgs [V06 ] ( 1, 1 ) struct (16) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" +; V07 tmp1 [V07,T19] ( 5, 2.50) byref -> rdi +; V08 tmp2 [V08,T36] ( 3, 1.50) ref -> r15 ;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V10 tmp4 [V10,T09] ( 2, 2 ) ref -> rdi class-hnd single-def "impAppendStmt" -;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" +; V10 tmp4 [V10,T25] ( 2, 2 ) ref -> rax class-hnd exact single-def "impAppendStmt" +;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" ;* V12 tmp6 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V13 tmp7 [V13,T02] ( 4, 4 ) int -> r9 "Inlining Arg" -; V14 tmp8 [V14,T04] ( 3, 3 ) byref -> r8 single-def "Inlining Arg" -;* V15 tmp9 [V15 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -; V16 tmp10 [V16,T10] ( 2, 2 ) byref -> rsi single-def "Inlining Arg" -; V17 tmp11 [V17,T16] ( 2, 2 ) int -> rdx "Inlining Arg" +; V13 tmp7 [V13,T11] ( 4, 4 ) int -> rcx "Inlining Arg" +; V14 tmp8 [V14,T15] ( 3, 3 ) byref -> rdi single-def "Inlining Arg" +;* V15 tmp9 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V16 tmp10 [V16,T09] ( 5, 5 ) byref -> rsi single-def "Inlining Arg" +; V17 tmp11 [V17,T12] ( 4, 4 ) int -> rdx "Inlining Arg" ;* V18 tmp12 [V18 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "Inline return value spill temp" ;* V19 tmp13 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V20 tmp14 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" -; V21 tmp15 [V21,T11] ( 2, 2 ) byref -> r8 single-def "Inlining Arg" -; V22 tmp16 [V22,T17] ( 2, 2 ) int -> r9 "Inlining Arg" -; V23 tmp17 [V23,T21] ( 3, 1.50) ref -> r15 class-hnd "Inline return value spill temp" -;* V24 tmp18 [V24 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V25 tmp19 [V25 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "Inline return value spill temp" -;* V26 tmp20 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V27 tmp21 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" -; V28 tmp22 [V28,T12] ( 2, 2 ) byref -> rsi single-def "Inlining Arg" -; V29 tmp23 [V29,T18] ( 2, 2 ) int -> rdx "Inlining Arg" -; V30 tmp24 [V30,T24] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" -; V31 tmp25 [V31,T13] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" -; V32 tmp26 [V32 ] ( 2, 1 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp" +; V21 tmp15 [V21,T26] ( 2, 2 ) byref -> r8 single-def "Inlining Arg" +; V22 tmp16 [V22,T32] ( 2, 2 ) int -> r9 "Inlining Arg" +; V23 tmp17 [V23,T27] ( 2, 2 ) byref -> rax single-def "Inlining Arg" +; V24 tmp18 [V24,T10] ( 4, 4 ) ref -> r10 class-hnd single-def "Inlining Arg" +; V25 tmp19 [V25,T22] ( 4, 2 ) ubyte -> rax "Inline return value spill temp" +;* V26 tmp20 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V27 tmp21 [V27,T06] ( 7, 7 ) int -> r15 "Inlining Arg" +;* V28 tmp22 [V28 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +; V29 tmp23 [V29,T20] ( 5, 2.50) ref -> r14 class-hnd "Inline return value spill temp" +;* V30 tmp24 [V30 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" +; V31 tmp25 [V31,T28] ( 2, 2 ) ref -> rax class-hnd single-def "dup spill" +; V32 tmp26 [V32,T14] ( 6, 3 ) ref -> rax ;* V33 tmp27 [V33 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V34 tmp28 [V34,T03] ( 4, 4 ) int -> r8 "Inlining Arg" -; V35 tmp29 [V35,T05] ( 3, 3 ) byref -> rcx single-def "Inlining Arg" -;* V36 tmp30 [V36 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -; V37 tmp31 [V37,T14] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" -; V38 tmp32 [V38,T19] ( 2, 2 ) int -> r8 "Inlining Arg" -; V39 tmp33 [V39,T06] ( 3, 3 ) int -> rax "Single return block return value" -; V40 tmp34 [V40 ] ( 5, 2.50) ubyte -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V05.hasValue (fldOffset=0x0)" P-DEP -; V41 tmp35 [V41 ] ( 3, 1.50) int -> [rbp-0x24] do-not-enreg[X] addr-exposed "field V05.value (fldOffset=0x4)" P-DEP -;* V42 tmp36 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP -;* V43 tmp37 [V43 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP -;* V44 tmp38 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP -;* V45 tmp39 [V45 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP -;* V46 tmp40 [V46 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP -;* V47 tmp41 [V47 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP -; V48 tmp42 [V48,T29] ( 2, 1 ) byref -> rsi single-def "field V15._reference (fldOffset=0x0)" P-INDEP -; V49 tmp43 [V49,T33] ( 2, 1 ) int -> rdx "field V15._length (fldOffset=0x8)" P-INDEP -; V50 tmp44 [V50,T22] ( 3, 1.50) byref -> r8 "field V18._reference (fldOffset=0x0)" P-INDEP -; V51 tmp45 [V51,T25] ( 3, 1.50) int -> r9 "field V18._length (fldOffset=0x8)" P-INDEP -; V52 tmp46 [V52,T30] ( 2, 1 ) byref -> r8 single-def "field V19._reference (fldOffset=0x0)" P-INDEP -; V53 tmp47 [V53,T34] ( 2, 1 ) int -> r9 "field V19._length (fldOffset=0x8)" P-INDEP -;* V54 tmp48 [V54 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP -;* V55 tmp49 [V55 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP -; V56 tmp50 [V56,T23] ( 3, 1.50) byref -> rsi "field V25._reference (fldOffset=0x0)" P-INDEP -; V57 tmp51 [V57,T26] ( 3, 1.50) int -> rdx "field V25._length (fldOffset=0x8)" P-INDEP -; V58 tmp52 [V58,T31] ( 2, 1 ) byref -> rsi single-def "field V26._reference (fldOffset=0x0)" P-INDEP -; V59 tmp53 [V59,T35] ( 2, 1 ) int -> rdx "field V26._length (fldOffset=0x8)" P-INDEP -;* V60 tmp54 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V27._reference (fldOffset=0x0)" P-INDEP -;* V61 tmp55 [V61 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP -;* V62 tmp56 [V62 ] ( 0, 0 ) byref -> zero-ref "field V33._reference (fldOffset=0x0)" P-INDEP -;* V63 tmp57 [V63 ] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP -; V64 tmp58 [V64,T32] ( 2, 1 ) byref -> rcx single-def "field V36._reference (fldOffset=0x0)" P-INDEP -; V65 tmp59 [V65,T36] ( 2, 1 ) int -> r8 "field V36._length (fldOffset=0x8)" P-INDEP -;* V66 tmp60 [V66 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -;* V67 tmp61 [V67 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -; V68 tmp62 [V68,T15] ( 2, 2 ) ref -> rsi single-def "argument with side effect" -; V69 cse0 [V69,T27] ( 3, 1.50) int -> rdx "CSE - moderate" -; V70 cse1 [V70,T28] ( 3, 1.50) int -> r9 "CSE - moderate" -; V71 cse2 [V71,T37] ( 2, 1 ) long -> rsi "CSE - moderate" -; V72 cse3 [V72,T38] ( 2, 1 ) long -> rdi "CSE - moderate" +;* V34 tmp28 [V34 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +; V35 tmp29 [V35,T16] ( 3, 3 ) ref -> r13 class-hnd single-def "dup spill" +;* V36 tmp30 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" +;* V37 tmp31 [V37 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V38 tmp32 [V38 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V39 tmp33 [V39 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V40 tmp34 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V41 tmp35 [V41 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V42 tmp36 [V42 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V43 tmp37 [V43,T55] ( 2, 1 ) int -> rcx "Inline stloc first use temp" +;* V44 tmp38 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V45 tmp39 [V45 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V46 tmp40 [V46 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V47 tmp41 [V47 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +;* V48 tmp42 [V48 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +;* V49 tmp43 [V49 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V50 tmp44 [V50,T41] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" +; V51 tmp45 [V51,T23] ( 4, 2 ) int -> rax "Inline stloc first use temp" +;* V52 tmp46 [V52 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V53 tmp47 [V53 ] ( 3, 1.50) byref -> [rbp-0x48] must-init pinned "Inline stloc first use temp" +;* V54 tmp48 [V54 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +;* V55 tmp49 [V55 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +;* V56 tmp50 [V56 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" +;* V57 tmp51 [V57 ] ( 0, 0 ) struct (16) zero-ref "Inline stloc first use temp" +;* V58 tmp52 [V58 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" +;* V59 tmp53 [V59 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +;* V60 tmp54 [V60 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V61 tmp55 [V61 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V62 tmp56 [V62 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V63 tmp57 [V63 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V64 tmp58 [V64 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp" +; V65 tmp59 [V65,T00] ( 10, 38 ) int -> registers "Inlining Arg" +; V66 tmp60 [V66,T01] ( 6, 27 ) long -> rdx "Inlining Arg" +;* V67 tmp61 [V67 ] ( 0, 0 ) long -> zero-ref "dup spill" +;* V68 tmp62 [V68 ] ( 0, 0 ) struct ( 8) zero-ref "dup spill" +;* V69 tmp63 [V69 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V70 tmp64 [V70,T02] ( 3, 12 ) int -> r9 "Inline stloc first use temp" +;* V71 tmp65 [V71 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" +;* V72 tmp66 [V72 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V73 tmp67 [V73 ] ( 0, 0 ) long -> zero-ref +;* V74 tmp68 [V74 ] ( 0, 0 ) long -> zero-ref +; V75 tmp69 [V75,T04] ( 2, 8 ) ref -> rdi +;* V76 tmp70 [V76 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V77 tmp71 [V77 ] ( 0, 0 ) long -> zero-ref +; V78 tmp72 [V78,T56] ( 2, 1 ) long -> rdx +; V79 tmp73 [V79,T47] ( 2, 1 ) ref -> rcx single-def +;* V80 tmp74 [V80 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V81 tmp75 [V81 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V82 tmp76 [V82 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +;* V83 tmp77 [V83 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" +;* V84 tmp78 [V84 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" +;* V85 tmp79 [V85 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V86 tmp80 [V86 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V87 tmp81 [V87 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" +; V88 tmp82 [V88,T37] ( 3, 1.50) ref -> r15 class-hnd "Inline return value spill temp" +;* V89 tmp83 [V89 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V90 tmp84 [V90 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "Inline return value spill temp" +;* V91 tmp85 [V91 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V92 tmp86 [V92 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" +; V93 tmp87 [V93,T29] ( 2, 2 ) byref -> rsi single-def "Inlining Arg" +; V94 tmp88 [V94,T33] ( 2, 2 ) int -> rdx "Inlining Arg" +; V95 tmp89 [V95,T42] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" +; V96 tmp90 [V96,T30] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" +; V97 tmp91 [V97 ] ( 2, 1 ) int -> [rbp-0x50] do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp" +;* V98 tmp92 [V98 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +; V99 tmp93 [V99,T13] ( 4, 4 ) int -> r8 "Inlining Arg" +; V100 tmp94 [V100,T17] ( 3, 3 ) byref -> rcx single-def "Inlining Arg" +;* V101 tmp95 [V101 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +; V102 tmp96 [V102,T31] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" +; V103 tmp97 [V103,T34] ( 2, 2 ) int -> r8 "Inlining Arg" +; V104 tmp98 [V104,T18] ( 3, 3 ) int -> rax "Single return block return value" +; V105 tmp99 [V105 ] ( 5, 2.50) ubyte -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V05.hasValue (fldOffset=0x0)" P-DEP +; V106 tmp100 [V106 ] ( 3, 1.50) int -> [rbp-0x3C] do-not-enreg[X] addr-exposed "field V05.value (fldOffset=0x4)" P-DEP +;* V107 tmp101 [V107 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP +;* V108 tmp102 [V108 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP +; V109 tmp103 [V109,T48] ( 2, 1 ) byref -> r12 single-def "field V11._reference (fldOffset=0x0)" P-INDEP +; V110 tmp104 [V110,T57] ( 2, 1 ) int -> [rbp-0x54] spill-single-def "field V11._length (fldOffset=0x8)" P-INDEP +;* V111 tmp105 [V111 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP +;* V112 tmp106 [V112 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP +; V113 tmp107 [V113,T49] ( 2, 1 ) byref -> r14 single-def "field V15._reference (fldOffset=0x0)" P-INDEP +; V114 tmp108 [V114,T58] ( 2, 1 ) int -> r13 "field V15._length (fldOffset=0x8)" P-INDEP +; V115 tmp109 [V115,T38] ( 3, 1.50) byref -> r8 "field V18._reference (fldOffset=0x0)" P-INDEP +; V116 tmp110 [V116,T24] ( 4, 2 ) int -> r9 "field V18._length (fldOffset=0x8)" P-INDEP +; V117 tmp111 [V117,T50] ( 2, 1 ) byref -> r8 single-def "field V19._reference (fldOffset=0x0)" P-INDEP +; V118 tmp112 [V118,T59] ( 2, 1 ) int -> r9 "field V19._length (fldOffset=0x8)" P-INDEP +;* V119 tmp113 [V119 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP +;* V120 tmp114 [V120 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP +;* V121 tmp115 [V121 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP +;* V122 tmp116 [V122 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP +;* V123 tmp117 [V123 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP +;* V124 tmp118 [V124 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x8)" P-INDEP +;* V125 tmp119 [V125 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP +;* V126 tmp120 [V126 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP +;* V127 tmp121 [V127 ] ( 0, 0 ) byref -> zero-ref "field V33._reference (fldOffset=0x0)" P-INDEP +;* V128 tmp122 [V128 ] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP +;* V129 tmp123 [V129 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP +;* V130 tmp124 [V130 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x8)" P-INDEP +; V131 tmp125 [V131,T39] ( 3, 1.50) byref -> rdx "field V37._reference (fldOffset=0x0)" P-INDEP +; V132 tmp126 [V132,T43] ( 3, 1.50) int -> rcx "field V37._length (fldOffset=0x8)" P-INDEP +; V133 tmp127 [V133,T51] ( 2, 1 ) byref -> rdx single-def "field V40._reference (fldOffset=0x0)" P-INDEP +;* V134 tmp128 [V134 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP +;* V135 tmp129 [V135 ] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP +;* V136 tmp130 [V136 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP +;* V137 tmp131 [V137 ] ( 0, 0 ) byref -> zero-ref single-def "field V46._reference (fldOffset=0x0)" P-INDEP +;* V138 tmp132 [V138 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x8)" P-INDEP +; V139 tmp133 [V139,T52] ( 2, 1 ) byref -> rdx single-def "field V47._reference (fldOffset=0x0)" P-INDEP +; V140 tmp134 [V140,T60] ( 2, 1 ) int -> rcx "field V47._length (fldOffset=0x8)" P-INDEP +;* V141 tmp135 [V141 ] ( 0, 0 ) byref -> zero-ref single-def "field V52._reference (fldOffset=0x0)" P-INDEP +;* V142 tmp136 [V142 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x8)" P-INDEP +;* V143 tmp137 [V143 ] ( 0, 0 ) byref -> zero-ref single-def "field V56._reference (fldOffset=0x0)" P-INDEP +;* V144 tmp138 [V144 ] ( 0, 0 ) int -> zero-ref "field V56._length (fldOffset=0x8)" P-INDEP +;* V145 tmp139 [V145 ] ( 0, 0 ) byref -> zero-ref "field V57._reference (fldOffset=0x0)" P-INDEP +;* V146 tmp140 [V146 ] ( 0, 0 ) int -> zero-ref "field V57._length (fldOffset=0x8)" P-INDEP +;* V147 tmp141 [V147 ] ( 0, 0 ) byref -> zero-ref single-def "field V60._reference (fldOffset=0x0)" P-INDEP +;* V148 tmp142 [V148 ] ( 0, 0 ) int -> zero-ref "field V60._length (fldOffset=0x8)" P-INDEP +;* V149 tmp143 [V149 ] ( 0, 0 ) byref -> zero-ref single-def "field V63._reference (fldOffset=0x0)" P-INDEP +;* V150 tmp144 [V150 ] ( 0, 0 ) int -> zero-ref "field V63._length (fldOffset=0x8)" P-INDEP +;* V151 tmp145 [V151 ] ( 0, 0 ) int -> zero-ref "field V68.Item1 (fldOffset=0x0)" P-INDEP +;* V152 tmp146 [V152 ] ( 0, 0 ) int -> zero-ref "field V68.Item2 (fldOffset=0x4)" P-INDEP +;* V153 tmp147 [V153 ] ( 0, 0 ) int -> zero-ref "field V71.Item1 (fldOffset=0x0)" P-INDEP +; V154 tmp148 [V154,T05] ( 2, 8 ) int -> r15 "field V71.Item2 (fldOffset=0x4)" P-INDEP +; V155 tmp149 [V155,T40] ( 3, 1.50) byref -> rsi "field V90._reference (fldOffset=0x0)" P-INDEP +; V156 tmp150 [V156,T44] ( 3, 1.50) int -> rdx "field V90._length (fldOffset=0x8)" P-INDEP +; V157 tmp151 [V157,T53] ( 2, 1 ) byref -> rsi single-def "field V91._reference (fldOffset=0x0)" P-INDEP +; V158 tmp152 [V158,T61] ( 2, 1 ) int -> rdx "field V91._length (fldOffset=0x8)" P-INDEP +;* V159 tmp153 [V159 ] ( 0, 0 ) byref -> zero-ref single-def "field V92._reference (fldOffset=0x0)" P-INDEP +;* V160 tmp154 [V160 ] ( 0, 0 ) int -> zero-ref "field V92._length (fldOffset=0x8)" P-INDEP +;* V161 tmp155 [V161 ] ( 0, 0 ) byref -> zero-ref "field V98._reference (fldOffset=0x0)" P-INDEP +;* V162 tmp156 [V162 ] ( 0, 0 ) int -> zero-ref "field V98._length (fldOffset=0x8)" P-INDEP +; V163 tmp157 [V163,T54] ( 2, 1 ) byref -> rcx single-def "field V101._reference (fldOffset=0x0)" P-INDEP +; V164 tmp158 [V164,T62] ( 2, 1 ) int -> r8 "field V101._length (fldOffset=0x8)" P-INDEP +; V165 tmp159 [V165,T35] ( 2, 2 ) long -> rsi "Cast away GC" +; V166 cse0 [V166,T08] ( 4, 5.50) ref -> rcx hoist multi-def "CSE - moderate" +; V167 cse1 [V167,T45] ( 3, 1.50) int -> rdx "CSE - conservative" +; V168 cse2 [V168,T46] ( 3, 1.50) int -> r9 "CSE - conservative" ; -; Lcl frame size = 48 +; Lcl frame size = 72 G_M11269_IG01: push rbp push r15 + push r14 + push r13 + push r12 push rbx - sub rsp, 48 - lea rbp, [rsp+0x40] - mov qword ptr [rbp-0x18], rsi + sub rsp, 72 + lea rbp, [rsp+0x70] + xor eax, eax + mov qword ptr [rbp-0x48], rax + mov qword ptr [rbp-0x30], rsi mov rbx, rdi mov r15, rdx - ;; size=23 bbWeight=1 PerfScore 5.25 + ;; size=35 bbWeight=1 PerfScore 9.50 G_M11269_IG02: cmp byte ptr [rbx+0x0D], 0 je SHORT G_M11269_IG04 ;; size=6 bbWeight=1 PerfScore 4.00 G_M11269_IG03: mov rdi, rbx - mov rsi, qword ptr [rbp-0x18] + mov rsi, qword ptr [rbp-0x30] mov rdx, r15 mov rax, 0xD1FFAB1E ; code for System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendCustomFormatter[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this call [rax]System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendCustomFormatter[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this - jmp G_M11269_IG17 + jmp G_M11269_IG34 + align [0 bytes for IG13] ;; size=27 bbWeight=0.50 PerfScore 3.38 G_M11269_IG04: - cmp byte ptr [rbp-0x18], 0 - je G_M11269_IG10 - lea rsi, [rbp-0x18] + cmp byte ptr [rbp-0x30], 0 + je G_M11269_IG27 + lea rsi, [rbp-0x30] mov rdi, 0xD1FFAB1E ; System.Nullable`1[int] call CORINFO_HELP_BOX_NULLABLE - mov rsi, rax - mov rdi, 0xD1FFAB1E ; System.IUtf8SpanFormattable - call CORINFO_HELP_CHKCASTINTERFACE - mov rdi, rax - lea r8, bword ptr [rbx+0x10] - mov r9d, dword ptr [rbx+0x08] - mov edx, dword ptr [r8+0x08] - cmp r9d, edx - ja G_M11269_IG19 - mov esi, r9d - add rsi, bword ptr [r8] - sub edx, r9d + lea rdi, bword ptr [rbx+0x10] + mov ecx, dword ptr [rbx+0x08] + mov edx, dword ptr [rdi+0x08] + cmp ecx, edx + ja G_M11269_IG36 + mov esi, ecx + add rsi, bword ptr [rdi] + sub edx, ecx + mov r14, rsi + mov r13d, edx + mov r12, rsi + mov dword ptr [rbp-0x54], edx test r15, r15 jne SHORT G_M11269_IG05 xor r8, r8 xor r9d, r9d jmp SHORT G_M11269_IG06 - ;; size=93 bbWeight=0.50 PerfScore 9.75 + ;; size=79 bbWeight=0.50 PerfScore 9.75 G_M11269_IG05: lea r8, bword ptr [r15+0x0C] mov r9d, dword ptr [r15+0x08] ;; size=8 bbWeight=0.50 PerfScore 1.25 G_M11269_IG06: - mov rcx, gword ptr [rbx] - mov gword ptr [rsp], rcx - lea rcx, [rbp-0x20] - mov r11, 0xD1FFAB1E ; code for System.IUtf8SpanFormattable:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this - call [r11]System.IUtf8SpanFormattable:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this + add rax, 8 + mov r10, gword ptr [rbx] + mov r15d, dword ptr [rax] + test r9d, r9d + jne G_M11269_IG22 + test r15d, r15d + jge G_M11269_IG12 + test r10, r10 + je SHORT G_M11269_IG07 + mov rdi, r10 + mov rax, 0xD1FFAB1E ; code for System.Globalization.NumberFormatInfo:g__GetProviderNonNull|59_0(System.IFormatProvider):System.Globalization.NumberFormatInfo + call [rax]System.Globalization.NumberFormatInfo:g__GetProviderNonNull|59_0(System.IFormatProvider):System.Globalization.NumberFormatInfo + mov r14, rax + jmp SHORT G_M11269_IG08 + ;; size=53 bbWeight=0.50 PerfScore 6.88 +G_M11269_IG07: + mov rax, 0xD1FFAB1E ; code for System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo + call [rax]System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo + mov r14, rax + ;; size=15 bbWeight=0.50 PerfScore 1.75 +G_M11269_IG08: + mov rax, gword ptr [r14+0x98] + test rax, rax + jne SHORT G_M11269_IG09 + mov rsi, gword ptr [r14+0x28] + mov rdi, 0xD1FFAB1E ; const ptr + mov rdi, gword ptr [rdi] + mov rax, 0xD1FFAB1E ; code for System.Text.UTF8Encoding+UTF8EncodingSealed:GetBytes(System.String):ubyte[]:this + call [rax]System.Text.UTF8Encoding+UTF8EncodingSealed:GetBytes(System.String):ubyte[]:this + mov r13, rax + lea rdi, bword ptr [r14+0x98] + mov rsi, r13 + call CORINFO_HELP_ASSIGN_REF + mov rax, r13 + ;; size=62 bbWeight=0.50 PerfScore 6.50 +G_M11269_IG09: + test rax, rax + jne SHORT G_M11269_IG10 + xor rdx, rdx + xor ecx, ecx + jmp SHORT G_M11269_IG11 + ;; size=11 bbWeight=0.50 PerfScore 1.88 +G_M11269_IG10: + lea rdx, bword ptr [rax+0x10] + mov ecx, dword ptr [rax+0x08] + ;; size=7 bbWeight=0.50 PerfScore 1.25 +G_M11269_IG11: + lea r8, [rbp-0x38] + mov qword ptr [rsp], r8 + mov r8, r12 + mov r9d, dword ptr [rbp-0x54] + mov edi, r15d + mov esi, -1 + mov rax, 0xD1FFAB1E ; code for System.Number:TryNegativeInt32ToDecStr[ubyte](int,int,System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte + call [rax]System.Number:TryNegativeInt32ToDecStr[ubyte](int,int,System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte + jmp G_M11269_IG23 + ;; size=40 bbWeight=0.50 PerfScore 4.25 +G_M11269_IG12: + mov eax, r15d + mov ecx, r15d + or ecx, 1 + lzcnt ecx, ecx + xor ecx, 31 + mov r9, 0xD1FFAB1E ; static handle + add rax, qword ptr [r9+8*rcx] + sar rax, 32 + cmp eax, edx + jg G_M11269_IG20 + mov dword ptr [rbp-0x38], eax + mov bword ptr [rbp-0x48], rsi + movsxd rdx, eax + add rdx, rsi + cmp r15d, 10 + jb SHORT G_M11269_IG18 + cmp r15d, 100 + jb SHORT G_M11269_IG17 + mov rcx, 0xD1FFAB1E ; const ptr + mov rcx, gword ptr [rcx] + ;; size=80 bbWeight=0.50 PerfScore 7.62 +G_M11269_IG13: + add rdx, -2 + mov r9d, r15d + imul r9, r9, 0xD1FFAB1E + shr r9, 37 + imul edi, r9d, 100 + sub r15d, edi + mov rdi, rcx + add r15d, r15d + mov r8d, r15d + mov di, word ptr [rdi+r8+0x10] + mov word ptr [rdx], di + cmp r9d, 100 + jae SHORT G_M11269_IG16 + ;; size=49 bbWeight=4 PerfScore 41.00 +G_M11269_IG14: + cmp r9d, 10 + jb SHORT G_M11269_IG15 + add rdx, -2 + mov rcx, 0xD1FFAB1E ; const ptr + mov rcx, gword ptr [rcx] + add r9d, r9d + mov cx, word ptr [rcx+r9+0x10] + mov word ptr [rdx], cx + jmp SHORT G_M11269_IG19 + ;; size=37 bbWeight=0.50 PerfScore 4.50 +G_M11269_IG15: + mov r15d, r9d + jmp SHORT G_M11269_IG18 + ;; size=5 bbWeight=0.25 PerfScore 0.56 +G_M11269_IG16: + mov r15d, r9d + jmp SHORT G_M11269_IG13 + ;; size=5 bbWeight=2 PerfScore 4.50 +G_M11269_IG17: + mov r9d, r15d + jmp SHORT G_M11269_IG14 + ;; size=5 bbWeight=0.25 PerfScore 0.56 +G_M11269_IG18: + lea ecx, [r15+0x30] + mov byte ptr [rdx-0x01], cl + ;; size=7 bbWeight=0.50 PerfScore 0.75 +G_M11269_IG19: + xor edx, edx + mov bword ptr [rbp-0x48], rdx + mov eax, 1 + jmp SHORT G_M11269_IG21 + ;; size=13 bbWeight=0.50 PerfScore 1.75 +G_M11269_IG20: + xor eax, eax + mov dword ptr [rbp-0x38], eax + ;; size=5 bbWeight=0.50 PerfScore 0.62 +G_M11269_IG21: + xor rdx, rdx + mov bword ptr [rbp-0x48], rdx + jmp SHORT G_M11269_IG23 + ;; size=8 bbWeight=0.50 PerfScore 1.62 +G_M11269_IG22: + mov bword ptr [rsp], r14 + mov dword ptr [rsp+0x08], r13d + mov rdx, r8 + mov ecx, r9d + lea r9, [rbp-0x38] + mov edi, r15d + mov r8, r10 + mov esi, -1 + mov rax, 0xD1FFAB1E ; code for System.Number:g__TryFormatInt32Slow|42_0[ubyte](int,int,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ubyte],byref):ubyte + call [rax]System.Number:g__TryFormatInt32Slow|42_0[ubyte](int,int,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ubyte],byref):ubyte + ;; size=42 bbWeight=0.50 PerfScore 3.50 +G_M11269_IG23: test eax, eax - je SHORT G_M11269_IG08 - mov eax, dword ptr [rbp-0x20] + je SHORT G_M11269_IG25 + mov eax, dword ptr [rbp-0x38] add dword ptr [rbx+0x08], eax mov eax, 1 - ;; size=39 bbWeight=0.50 PerfScore 6.12 -G_M11269_IG07: - add rsp, 48 + ;; size=15 bbWeight=0.50 PerfScore 2.75 +G_M11269_IG24: + add rsp, 72 pop rbx + pop r12 + pop r13 + pop r14 pop r15 pop rbp ret - ;; size=9 bbWeight=0.50 PerfScore 1.38 -G_M11269_IG08: + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M11269_IG25: mov byte ptr [rbx+0x0C], 0 xor eax, eax ;; size=6 bbWeight=0.50 PerfScore 0.62 -G_M11269_IG09: - add rsp, 48 +G_M11269_IG26: + add rsp, 72 pop rbx + pop r12 + pop r13 + pop r14 pop r15 pop rbp ret - ;; size=9 bbWeight=0.50 PerfScore 1.38 -G_M11269_IG10: + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M11269_IG27: xor edi, edi - mov qword ptr [rbp-0x28], rdi - lea rdi, bword ptr [rbp-0x18] - cmp byte ptr [rbp-0x28], 0 - jne SHORT G_M11269_IG11 + mov qword ptr [rbp-0x40], rdi + lea rdi, bword ptr [rbp-0x30] + cmp byte ptr [rbp-0x40], 0 + jne SHORT G_M11269_IG28 mov rdi, qword ptr [rdi] - mov qword ptr [rbp-0x28], rdi - lea rdi, bword ptr [rbp-0x28] - cmp byte ptr [rbp-0x28], 0 - jne SHORT G_M11269_IG11 + mov qword ptr [rbp-0x40], rdi + lea rdi, bword ptr [rbp-0x40] + cmp byte ptr [rbp-0x40], 0 + jne SHORT G_M11269_IG28 xor r15, r15 - jmp SHORT G_M11269_IG13 + jmp SHORT G_M11269_IG30 ;; size=38 bbWeight=0.50 PerfScore 6.75 -G_M11269_IG11: +G_M11269_IG28: cmp byte ptr [rdi], 0 - jne SHORT G_M11269_IG12 + jne SHORT G_M11269_IG29 mov r15, 0xD1FFAB1E ; '' - jmp SHORT G_M11269_IG13 + jmp SHORT G_M11269_IG30 ;; size=17 bbWeight=0.50 PerfScore 3.12 -G_M11269_IG12: +G_M11269_IG29: mov edi, dword ptr [rdi+0x04] mov rax, 0xD1FFAB1E ; code for System.Number:Int32ToDecStr(int):System.String call [rax]System.Number:Int32ToDecStr(int):System.String mov r15, rax ;; size=18 bbWeight=0.50 PerfScore 2.75 -G_M11269_IG13: +G_M11269_IG30: test r15, r15 - jne SHORT G_M11269_IG14 + jne SHORT G_M11269_IG31 xor rsi, rsi xor edx, edx - jmp SHORT G_M11269_IG15 + jmp SHORT G_M11269_IG32 ;; size=11 bbWeight=0.50 PerfScore 1.88 -G_M11269_IG14: +G_M11269_IG31: lea rsi, bword ptr [r15+0x0C] mov edx, dword ptr [r15+0x08] ;; size=8 bbWeight=0.50 PerfScore 1.25 -G_M11269_IG15: +G_M11269_IG32: mov rcx, 0xD1FFAB1E ; const ptr mov rdi, gword ptr [rcx] lea rcx, bword ptr [rbx+0x10] mov r8d, dword ptr [rbx+0x08] mov r9d, dword ptr [rcx+0x08] cmp r8d, r9d - ja SHORT G_M11269_IG19 + ja SHORT G_M11269_IG36 mov eax, r8d add rax, bword ptr [rcx] mov rcx, rax sub r9d, r8d mov r8d, r9d - lea r9, [rbp-0x30] + lea r9, [rbp-0x50] mov rax, 0xD1FFAB1E ; code for System.Text.UTF8Encoding+UTF8EncodingSealed:TryGetBytes(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte],byref):ubyte:this call [rax]System.Text.UTF8Encoding+UTF8EncodingSealed:TryGetBytes(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte],byref):ubyte:this test eax, eax - je SHORT G_M11269_IG16 - mov eax, dword ptr [rbp-0x30] + je SHORT G_M11269_IG33 + mov eax, dword ptr [rbp-0x50] add dword ptr [rbx+0x08], eax mov eax, 1 - jmp SHORT G_M11269_IG17 + jmp SHORT G_M11269_IG34 ;; size=78 bbWeight=0.50 PerfScore 11.62 -G_M11269_IG16: +G_M11269_IG33: mov byte ptr [rbx+0x0C], 0 xor eax, eax ;; size=6 bbWeight=0.50 PerfScore 0.62 -G_M11269_IG17: +G_M11269_IG34: movzx rax, al ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M11269_IG18: - add rsp, 48 +G_M11269_IG35: + add rsp, 72 pop rbx + pop r12 + pop r13 + pop r14 pop r15 pop rbp ret - ;; size=9 bbWeight=0.50 PerfScore 1.38 -G_M11269_IG19: + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M11269_IG36: 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 421, prolog size 13, PerfScore 104.73, instruction count 121, allocated bytes for code 421 (MethodHash=e386d3fa) for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) +; Total bytes of code 857, prolog size 35, PerfScore 240.95, instruction count 246, allocated bytes for code 857 (MethodHash=e386d3fa) for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendFormatted[System.Nullable`1[int]](System.Nullable`1[int],System.String):ubyte:this (FullOpts) ```

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

MihuBot commented 11 months ago

Top method improvements

-48 (-11.57 % of base) - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this ```diff ; Assembly listing for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int: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; 0 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def -; V01 arg1 [V01,T03] ( 14, 14.08) ref -> rbx class-hnd single-def +; V01 arg1 [V01,T02] ( 14, 14.08) ref -> rbx class-hnd single-def ; V02 arg2 [V02 ] ( 5, 5 ) struct ( 8) [rbp-0x30] do-not-enreg[XSF] addr-exposed single-def -; V03 arg3 [V03,T10] ( 5, 4 ) int -> rcx single-def -; V04 arg4 [V04,T12] ( 3, 3 ) int -> r8 single-def -; V05 loc0 [V05,T04] ( 11, 12 ) int -> r15 -; V06 loc1 [V06,T02] ( 13, 18.04) int -> rax +; V03 arg3 [V03,T08] ( 5, 4 ) int -> rcx single-def +; V04 arg4 [V04,T09] ( 3, 3 ) int -> r8 single-def +; V05 loc0 [V05,T03] ( 11, 12 ) int -> r15 +; V06 loc1 [V06,T01] ( 13, 18.04) int -> rax ; V07 loc2 [V07,T00] ( 15, 20.04) int -> r14 ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V09 tmp1 [V09,T08] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V10 tmp2 [V10,T05] ( 6, 12 ) byref -> r13 "Inlining Arg" -; V11 tmp3 [V11,T01] ( 8, 16 ) ref -> rax class-hnd "Inlining Arg" -; V12 tmp4 [V12,T09] ( 6, 6 ) ubyte -> r12 "Inline return value spill temp" -;* V13 tmp5 [V13,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" -; V14 tmp6 [V14,T06] ( 4, 8 ) byref -> r13 "Inlining Arg" -; V15 tmp7 [V15,T07] ( 4, 8 ) int -> rcx "impAppendStmt" +; V09 tmp1 [V09,T07] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" +; V10 tmp2 [V10,T04] ( 6, 12 ) byref -> r13 "Inlining Arg" +; V11 tmp3 [V11,T05] ( 6, 12 ) ref -> rax class-hnd exact "Inlining Arg" +; V12 tmp4 [V12,T10] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" +; V13 tmp5 [V13,T06] ( 4, 8 ) byref -> r13 "Inlining Arg" ; ; Lcl frame size = 8 G_M34359_IG01: push rbp push r15 push r14 push r13 push r12 push rbx push rax lea rbp, [rsp+0x30] mov qword ptr [rbp-0x30], rdx mov rbx, rsi ;; size=23 bbWeight=1 PerfScore 8.75 G_M34359_IG02: lea r15d, [rcx+r8] cmp byte ptr [rbp-0x30], 0 jne SHORT G_M34359_IG09 ;; size=10 bbWeight=1 PerfScore 3.50 G_M34359_IG03: mov eax, ecx cmp eax, r15d - jge G_M34359_IG21 + jge G_M34359_IG17 test rbx, rbx je SHORT G_M34359_IG06 mov ecx, eax or ecx, r15d jl SHORT G_M34359_IG06 cmp dword ptr [rbx+0x08], r15d jl SHORT G_M34359_IG06 align [2 bytes for IG04] ;; size=31 bbWeight=0.50 PerfScore 4.25 G_M34359_IG04: mov esi, eax cmp byte ptr [rbx+8*rsi+0x10], 0 je SHORT G_M34359_IG08 inc eax cmp eax, r15d jl SHORT G_M34359_IG04 ;; size=16 bbWeight=3.96 PerfScore 22.77 G_M34359_IG05: - jmp G_M34359_IG21 + jmp G_M34359_IG17 ;; size=5 bbWeight=0.50 PerfScore 1.00 G_M34359_IG06: cmp eax, dword ptr [rbx+0x08] - jae G_M34359_IG25 + jae G_M34359_IG21 mov esi, eax cmp byte ptr [rbx+8*rsi+0x10], 0 je SHORT G_M34359_IG08 inc eax cmp eax, r15d jl SHORT G_M34359_IG06 ;; size=25 bbWeight=0.04 PerfScore 0.39 G_M34359_IG07: - jmp G_M34359_IG21 + jmp G_M34359_IG17 ;; size=5 bbWeight=0.50 PerfScore 1.00 G_M34359_IG08: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 G_M34359_IG09: mov r14d, ecx cmp r14d, r15d - jge G_M34359_IG21 + jge G_M34359_IG17 test rbx, rbx - je SHORT G_M34359_IG16 + je SHORT G_M34359_IG14 mov esi, r14d or esi, r15d - jl SHORT G_M34359_IG16 + jl SHORT G_M34359_IG14 cmp dword ptr [rbx+0x08], r15d - jl SHORT G_M34359_IG16 + jl SHORT G_M34359_IG14 ;; size=31 bbWeight=0.50 PerfScore 4.12 G_M34359_IG10: mov esi, r14d cmp byte ptr [rbx+8*rsi+0x10], 0 - je SHORT G_M34359_IG14 + je SHORT G_M34359_IG12 ;; size=10 bbWeight=3.96 PerfScore 16.83 G_M34359_IG11: mov esi, r14d lea r13, bword ptr [rbx+8*rsi+0x10] lea rsi, [rbp-0x30] mov rdi, 0xD1FFAB1E ; System.Nullable`1[int] call CORINFO_HELP_BOX_NULLABLE cmp byte ptr [r13], r13b test rax, rax - je SHORT G_M34359_IG14 - add r13, 4 - mov rsi, 0xD1FFAB1E ; System.Int32 - cmp qword ptr [rax], rsi je SHORT G_M34359_IG12 + add r13, 4 + mov esi, dword ptr [r13] xor r12d, r12d - jmp SHORT G_M34359_IG13 - ;; size=60 bbWeight=1.98 PerfScore 27.72 -G_M34359_IG12: - mov ecx, dword ptr [r13] - xor r12d, r12d - cmp ecx, dword ptr [rax+0x08] + cmp esi, dword ptr [rax+0x08] sete r12b - ;; size=14 bbWeight=1.98 PerfScore 12.38 -G_M34359_IG13: test r12d, r12d - jne G_M34359_IG23 - ;; size=9 bbWeight=1.98 PerfScore 2.48 -G_M34359_IG14: + jne SHORT G_M34359_IG19 + ;; size=59 bbWeight=1.98 PerfScore 29.70 +G_M34359_IG12: inc r14d cmp r14d, r15d jl SHORT G_M34359_IG10 ;; size=8 bbWeight=3.96 PerfScore 5.94 -G_M34359_IG15: - jmp SHORT G_M34359_IG21 +G_M34359_IG13: + jmp SHORT G_M34359_IG17 ;; size=2 bbWeight=0.50 PerfScore 1.00 -G_M34359_IG16: +G_M34359_IG14: cmp r14d, dword ptr [rbx+0x08] - jae G_M34359_IG25 + jae SHORT G_M34359_IG21 mov esi, r14d cmp byte ptr [rbx+8*rsi+0x10], 0 - je SHORT G_M34359_IG20 - ;; size=20 bbWeight=0.04 PerfScore 0.33 -G_M34359_IG17: + je SHORT G_M34359_IG16 + ;; size=16 bbWeight=0.04 PerfScore 0.33 +G_M34359_IG15: mov esi, r14d lea r13, bword ptr [rbx+8*rsi+0x10] lea rsi, [rbp-0x30] mov rdi, 0xD1FFAB1E ; System.Nullable`1[int] call CORINFO_HELP_BOX_NULLABLE cmp byte ptr [r13], r13b test rax, rax - je SHORT G_M34359_IG20 + je SHORT G_M34359_IG16 add r13, 4 - mov rcx, 0xD1FFAB1E ; System.Int32 - cmp qword ptr [rax], rcx - je SHORT G_M34359_IG18 - xor r12d, r12d - jmp SHORT G_M34359_IG19 - ;; size=60 bbWeight=0.02 PerfScore 0.28 -G_M34359_IG18: mov ecx, dword ptr [r13] xor r12d, r12d cmp ecx, dword ptr [rax+0x08] sete r12b - ;; size=14 bbWeight=0.02 PerfScore 0.13 -G_M34359_IG19: test r12d, r12d - jne SHORT G_M34359_IG23 - ;; size=5 bbWeight=0.02 PerfScore 0.03 -G_M34359_IG20: + jne SHORT G_M34359_IG19 + ;; size=59 bbWeight=0.02 PerfScore 0.30 +G_M34359_IG16: inc r14d cmp r14d, r15d - jl SHORT G_M34359_IG16 + jl SHORT G_M34359_IG14 ;; size=8 bbWeight=0.04 PerfScore 0.06 -G_M34359_IG21: +G_M34359_IG17: mov eax, -1 ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M34359_IG22: +G_M34359_IG18: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M34359_IG23: +G_M34359_IG19: mov eax, r14d ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M34359_IG24: +G_M34359_IG20: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M34359_IG25: +G_M34359_IG21: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 415, prolog size 23, PerfScore 161.07, instruction count 133, allocated bytes for code 415 (MethodHash=b54f79c8) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) +; Total bytes of code 367, prolog size 23, PerfScore 143.27, instruction count 123, allocated bytes for code 367 (MethodHash=b54f79c8) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:IndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) ```
-48 (-11.51 % of base) - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this ```diff ; Assembly listing for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int: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; 0 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def -; V01 arg1 [V01,T03] ( 14, 14.08) ref -> rbx class-hnd single-def +; V01 arg1 [V01,T02] ( 14, 14.08) ref -> rbx class-hnd single-def ; V02 arg2 [V02 ] ( 5, 5 ) struct ( 8) [rbp-0x30] do-not-enreg[XSF] addr-exposed single-def -; V03 arg3 [V03,T10] ( 5, 4 ) int -> rcx single-def -; V04 arg4 [V04,T12] ( 3, 3 ) int -> r8 single-def +; V03 arg3 [V03,T08] ( 5, 4 ) int -> rcx single-def +; V04 arg4 [V04,T09] ( 3, 3 ) int -> r8 single-def ; V05 loc0 [V05,T05] ( 9, 11 ) int -> r15 -; V06 loc1 [V06,T02] ( 14, 18.54) int -> rax +; V06 loc1 [V06,T01] ( 14, 18.54) int -> rax ; V07 loc2 [V07,T00] ( 16, 20.54) int -> r14 ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V09 tmp1 [V09,T08] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" -; V10 tmp2 [V10,T04] ( 6, 12 ) byref -> r13 "Inlining Arg" -; V11 tmp3 [V11,T01] ( 8, 16 ) ref -> rax class-hnd "Inlining Arg" -; V12 tmp4 [V12,T09] ( 6, 6 ) ubyte -> r12 "Inline return value spill temp" -;* V13 tmp5 [V13,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" -; V14 tmp6 [V14,T06] ( 4, 8 ) byref -> r13 "Inlining Arg" -; V15 tmp7 [V15,T07] ( 4, 8 ) int -> rcx "impAppendStmt" +; V09 tmp1 [V09,T07] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" +; V10 tmp2 [V10,T03] ( 6, 12 ) byref -> r13 "Inlining Arg" +; V11 tmp3 [V11,T04] ( 6, 12 ) ref -> rax class-hnd exact "Inlining Arg" +; V12 tmp4 [V12,T10] ( 4, 4 ) ubyte -> r12 "Inline return value spill temp" +; V13 tmp5 [V13,T06] ( 4, 8 ) byref -> r13 "Inlining Arg" ; ; Lcl frame size = 8 G_M8829_IG01: push rbp push r15 push r14 push r13 push r12 push rbx push rax lea rbp, [rsp+0x30] mov qword ptr [rbp-0x30], rdx mov rbx, rsi ;; size=23 bbWeight=1 PerfScore 8.75 G_M8829_IG02: mov r15d, ecx sub r15d, r8d inc r15d cmp byte ptr [rbp-0x30], 0 jne SHORT G_M8829_IG09 ;; size=15 bbWeight=1 PerfScore 3.75 G_M8829_IG03: mov eax, ecx cmp eax, r15d - jl G_M8829_IG21 + jl G_M8829_IG17 test rbx, rbx je SHORT G_M8829_IG06 mov ecx, eax or ecx, r15d jl SHORT G_M8829_IG06 cmp dword ptr [rbx+0x08], eax jle SHORT G_M8829_IG06 align [0 bytes for IG04] ;; size=28 bbWeight=0.50 PerfScore 4.12 G_M8829_IG04: mov esi, eax cmp byte ptr [rbx+8*rsi+0x10], 0 je SHORT G_M8829_IG08 dec eax cmp eax, r15d jge SHORT G_M8829_IG04 ;; size=16 bbWeight=3.96 PerfScore 22.77 G_M8829_IG05: - jmp G_M8829_IG21 + jmp G_M8829_IG17 ;; size=5 bbWeight=0.50 PerfScore 1.00 G_M8829_IG06: cmp eax, dword ptr [rbx+0x08] - jae G_M8829_IG25 + jae G_M8829_IG21 mov esi, eax cmp byte ptr [rbx+8*rsi+0x10], 0 je SHORT G_M8829_IG08 dec eax cmp eax, r15d jge SHORT G_M8829_IG06 ;; size=25 bbWeight=0.04 PerfScore 0.39 G_M8829_IG07: - jmp G_M8829_IG21 + jmp G_M8829_IG17 ;; size=5 bbWeight=0.50 PerfScore 1.00 G_M8829_IG08: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 G_M8829_IG09: mov r14d, ecx cmp r14d, r15d - jl G_M8829_IG21 + jl G_M8829_IG17 test rbx, rbx - je SHORT G_M8829_IG16 + je SHORT G_M8829_IG14 mov esi, r14d or esi, r15d - jl SHORT G_M8829_IG16 + jl SHORT G_M8829_IG14 cmp dword ptr [rbx+0x08], r14d - jle SHORT G_M8829_IG16 + jle SHORT G_M8829_IG14 ;; size=31 bbWeight=0.50 PerfScore 4.12 G_M8829_IG10: mov esi, r14d cmp byte ptr [rbx+8*rsi+0x10], 0 - je SHORT G_M8829_IG14 + je SHORT G_M8829_IG12 ;; size=10 bbWeight=3.96 PerfScore 16.83 G_M8829_IG11: mov esi, r14d lea r13, bword ptr [rbx+8*rsi+0x10] lea rsi, [rbp-0x30] mov rdi, 0xD1FFAB1E ; System.Nullable`1[int] call CORINFO_HELP_BOX_NULLABLE cmp byte ptr [r13], r13b test rax, rax - je SHORT G_M8829_IG14 - add r13, 4 - mov rsi, 0xD1FFAB1E ; System.Int32 - cmp qword ptr [rax], rsi je SHORT G_M8829_IG12 + add r13, 4 + mov esi, dword ptr [r13] xor r12d, r12d - jmp SHORT G_M8829_IG13 - ;; size=60 bbWeight=1.98 PerfScore 27.72 -G_M8829_IG12: - mov ecx, dword ptr [r13] - xor r12d, r12d - cmp ecx, dword ptr [rax+0x08] + cmp esi, dword ptr [rax+0x08] sete r12b - ;; size=14 bbWeight=1.98 PerfScore 12.38 -G_M8829_IG13: test r12d, r12d - jne G_M8829_IG23 - ;; size=9 bbWeight=1.98 PerfScore 2.48 -G_M8829_IG14: + jne SHORT G_M8829_IG19 + ;; size=59 bbWeight=1.98 PerfScore 29.70 +G_M8829_IG12: dec r14d cmp r14d, r15d jge SHORT G_M8829_IG10 ;; size=8 bbWeight=3.96 PerfScore 5.94 -G_M8829_IG15: - jmp SHORT G_M8829_IG21 +G_M8829_IG13: + jmp SHORT G_M8829_IG17 ;; size=2 bbWeight=0.50 PerfScore 1.00 -G_M8829_IG16: +G_M8829_IG14: cmp r14d, dword ptr [rbx+0x08] - jae G_M8829_IG25 + jae SHORT G_M8829_IG21 mov esi, r14d cmp byte ptr [rbx+8*rsi+0x10], 0 - je SHORT G_M8829_IG20 - ;; size=20 bbWeight=0.04 PerfScore 0.33 -G_M8829_IG17: + je SHORT G_M8829_IG16 + ;; size=16 bbWeight=0.04 PerfScore 0.33 +G_M8829_IG15: mov esi, r14d lea r13, bword ptr [rbx+8*rsi+0x10] lea rsi, [rbp-0x30] mov rdi, 0xD1FFAB1E ; System.Nullable`1[int] call CORINFO_HELP_BOX_NULLABLE cmp byte ptr [r13], r13b test rax, rax - je SHORT G_M8829_IG20 + je SHORT G_M8829_IG16 add r13, 4 - mov rcx, 0xD1FFAB1E ; System.Int32 - cmp qword ptr [rax], rcx - je SHORT G_M8829_IG18 - xor r12d, r12d - jmp SHORT G_M8829_IG19 - ;; size=60 bbWeight=0.02 PerfScore 0.28 -G_M8829_IG18: mov ecx, dword ptr [r13] xor r12d, r12d cmp ecx, dword ptr [rax+0x08] sete r12b - ;; size=14 bbWeight=0.02 PerfScore 0.13 -G_M8829_IG19: test r12d, r12d - jne SHORT G_M8829_IG23 - ;; size=5 bbWeight=0.02 PerfScore 0.03 -G_M8829_IG20: + jne SHORT G_M8829_IG19 + ;; size=59 bbWeight=0.02 PerfScore 0.30 +G_M8829_IG16: dec r14d cmp r14d, r15d - jge SHORT G_M8829_IG16 + jge SHORT G_M8829_IG14 ;; size=8 bbWeight=0.04 PerfScore 0.06 -G_M8829_IG21: +G_M8829_IG17: mov eax, -1 ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M8829_IG22: +G_M8829_IG18: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M8829_IG23: +G_M8829_IG19: mov eax, r14d ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M8829_IG24: +G_M8829_IG20: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M8829_IG25: +G_M8829_IG21: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 417, prolog size 23, PerfScore 161.40, instruction count 135, allocated bytes for code 417 (MethodHash=4defdd82) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) +; Total bytes of code 369, prolog size 23, PerfScore 143.60, instruction count 125, allocated bytes for code 369 (MethodHash=4defdd82) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:LastIndexOf(System.Nullable`1[int][],System.Nullable`1[int],int,int):int:this (FullOpts) ```
-19 (-15.45 % of base) - System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this ```diff ; Assembly listing for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 0 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def ; V01 arg1 [V01,T00] ( 4, 3.50) struct ( 8) [rbp-0x08] do-not-enreg[SF] ld-addr-op single-def ; V02 arg2 [V02 ] ( 5, 3.50) struct ( 8) [rbp-0x10] do-not-enreg[XSF] addr-exposed single-def ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V04 tmp1 [V04,T04] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" -; V05 tmp2 [V05,T01] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" -; V06 tmp3 [V06,T05] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" -;* V07 tmp4 [V07,T06] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" -; V08 tmp5 [V08,T02] ( 2, 2 ) int -> rcx "impAppendStmt" -; V09 tmp6 [V09,T03] ( 2, 2 ) ubyte -> rsi "V01.[000..001)" +; V04 tmp1 [V04,T03] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" +; V05 tmp2 [V05,T01] ( 3, 3 ) ref -> rax class-hnd exact single-def "Inlining Arg" +; V06 tmp3 [V06,T04] ( 2, 1 ) ubyte -> rax "Inline return value spill temp" +; V07 tmp4 [V07,T02] ( 2, 2 ) ubyte -> rsi "V01.[000..001)" ; ; Lcl frame size = 16 G_M33973_IG01: push rbp sub rsp, 16 lea rbp, [rsp+0x10] mov qword ptr [rbp-0x08], rsi mov qword ptr [rbp-0x10], rdx ;; size=18 bbWeight=1 PerfScore 3.75 G_M33973_IG02: movzx rsi, byte ptr [rbp-0x08] test esi, esi - je SHORT G_M33973_IG09 + je SHORT G_M33973_IG08 ;; size=9 bbWeight=1 PerfScore 2.25 G_M33973_IG03: cmp byte ptr [rbp-0x10], 0 - je SHORT G_M33973_IG07 + je SHORT G_M33973_IG06 lea rsi, [rbp-0x10] mov rdi, 0xD1FFAB1E ; System.Nullable`1[int] call CORINFO_HELP_BOX_NULLABLE test rax, rax jne SHORT G_M33973_IG04 xor eax, eax - jmp SHORT G_M33973_IG06 + jmp SHORT G_M33973_IG05 ;; size=34 bbWeight=0.50 PerfScore 4.12 G_M33973_IG04: - mov rcx, 0xD1FFAB1E ; System.Int32 - cmp qword ptr [rax], rcx - je SHORT G_M33973_IG05 - xor eax, eax - jmp SHORT G_M33973_IG06 - ;; size=19 bbWeight=0.50 PerfScore 3.25 -G_M33973_IG05: mov ecx, dword ptr [rbp-0x04] cmp ecx, dword ptr [rax+0x08] sete al movzx rax, al ;; size=12 bbWeight=0.50 PerfScore 2.62 -G_M33973_IG06: +G_M33973_IG05: add rsp, 16 pop rbp ret ;; size=6 bbWeight=0.50 PerfScore 0.88 -G_M33973_IG07: +G_M33973_IG06: xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M33973_IG08: +G_M33973_IG07: add rsp, 16 pop rbp ret ;; size=6 bbWeight=0.50 PerfScore 0.88 -G_M33973_IG09: +G_M33973_IG08: cmp byte ptr [rbp-0x10], 0 - jne SHORT G_M33973_IG07 + jne SHORT G_M33973_IG06 mov eax, 1 ;; size=11 bbWeight=0.50 PerfScore 1.62 -G_M33973_IG10: +G_M33973_IG09: add rsp, 16 pop rbp ret ;; size=6 bbWeight=0.50 PerfScore 0.88 -; Total bytes of code 123, prolog size 10, PerfScore 32.68, instruction count 39, allocated bytes for code 123 (MethodHash=2cd27b4a) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts) +; Total bytes of code 104, prolog size 10, PerfScore 27.53, instruction count 34, allocated bytes for code 104 (MethodHash=2cd27b4a) for method System.Collections.Generic.ObjectEqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this (FullOpts) ```
MihuBot commented 11 months ago

@EgorBo