Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JitDiff X64] [EgorBo] Expand unboxing for Nullable<> in JIT #540

Open
MihuBot opened this issue Jul 18, 2024 · 3 comments
Open

[JitDiff X64] [EgorBo] Expand unboxing for Nullable<> in JIT #540

MihuBot opened this issue Jul 18, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jul 18, 2024

Job completed in 15 minutes.
dotnet/runtime#105073

Diffs

Diffs
Found 292 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39210714
Total bytes of diff: 39219620
Total bytes of delta: 8906 (0.02 % of base)
Total relative delta: Infinity
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
        1418 : System.Private.DataContractSerialization.dasm (0.14 % of base)
        1227 : System.Data.Common.dasm (0.07 % of base)
        1174 : System.Linq.Expressions.dasm (0.13 % of base)
        1174 : System.Text.Json.dasm (0.09 % of base)
         506 : System.Private.Xml.dasm (0.01 % of base)
         440 : System.Composition.Hosting.dasm (0.42 % of base)
         314 : Microsoft.Extensions.DependencyInjection.Abstractions.dasm (0.45 % of base)
         282 : System.ServiceModel.Syndication.dasm (0.17 % of base)
         256 : System.Reflection.Emit.dasm (0.21 % of base)
         219 : System.Linq.dasm (0.02 % of base)
         183 : System.Composition.Runtime.dasm (1.00 % of base)
         173 : System.ComponentModel.Composition.dasm (0.04 % of base)
         153 : System.Linq.Parallel.dasm (0.01 % of base)
         144 : System.ComponentModel.TypeConverter.dasm (0.05 % of base)
         137 : Microsoft.Extensions.Caching.Abstractions.dasm (0.51 % of base)
         128 : System.DirectoryServices.Protocols.dasm (0.09 % of base)
         107 : System.IO.Packaging.dasm (0.10 % of base)
          96 : Microsoft.Extensions.Configuration.Binder.dasm (0.44 % of base)
          95 : System.Runtime.InteropServices.dasm (0.40 % of base)
          90 : System.Diagnostics.DiagnosticSource.dasm (0.04 % of base)
          83 : System.Net.Http.dasm (0.01 % of base)
          79 : Microsoft.VisualBasic.Core.dasm (0.01 % of base)
          50 : System.Collections.Immutable.dasm (0.00 % of base)
          48 : System.Configuration.ConfigurationManager.dasm (0.01 % of base)
          48 : Microsoft.Extensions.Hosting.dasm (0.07 % of base)
          44 : Microsoft.Extensions.Logging.Configuration.dasm (0.59 % of base)
          42 : Microsoft.CSharp.dasm (0.01 % of base)
          42 : System.Text.RegularExpressions.dasm (0.01 % of base)
          40 : System.Security.Cryptography.dasm (0.00 % of base)
          39 : System.Private.CoreLib.dasm (0.00 % of base)
          38 : System.Formats.Nrbf.dasm (0.08 % of base)
          37 : System.Threading.RateLimiting.dasm (0.02 % of base)

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

Top method regressions (bytes):
         337 (4.02 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.Nullable`1[int]]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         230 (15.93 % of base) : System.Reflection.Emit.dasm - System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) (FullOpts)
         191 (4.70 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.Nullable`1[int]]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         128 (Infinity of base) : System.DirectoryServices.Protocols.dasm - System.DirectoryServices.Protocols.PartialResultsRetriever:ThreadRoutine():this (FullOpts)
         109 (8.89 % of base) : System.Text.Json.dasm - System.Text.Json.JsonException:.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext):this (FullOpts)
         105 (6.29 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.JsonCollectionConverter`2[System.Nullable`1[int],System.Nullable`1[int]]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         104 (48.83 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider:GetMetadataValue[System.Nullable`1[int]](System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String,System.ComponentModel.DefaultValueAttribute):System.Nullable`1[int] (FullOpts)
         102 (32.80 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[System.Nullable`1[int],System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
         101 (74.26 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_0`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateSetterInternal>b__0(byref,System.Object):this (FullOpts)
         100 (13.39 % of base) : System.Private.Xml.dasm - System.Xml.Schema.XmlListConverter:ToArray[System.Nullable`1[int]](System.Object,System.Xml.IXmlNamespaceResolver):System.Nullable`1[int][]:this (FullOpts)
          98 (32.03 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__0(System.Data.DataRow):ubyte:this (FullOpts)
          97 (28.53 % of base) : System.ServiceModel.Syndication.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.Nullable`1[int]](System.Runtime.Serialization.XmlObjectSerializer):System.Nullable`1[int]:this (FullOpts)
          97 (22.77 % of base) : System.ServiceModel.Syndication.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.Nullable`1[int]](System.Xml.Serialization.XmlSerializer):System.Nullable`1[int]:this (FullOpts)
          95 (53.98 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__4(System.Data.DataRow,System.Data.DataRow):int:this (FullOpts)
          95 (53.98 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__7(System.Data.DataRow,System.Data.DataRow):int:this (FullOpts)
          95 (32.53 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Expression`1[System.Nullable`1[int]]:Compile():System.Nullable`1[int]:this (FullOpts)
          85 (4.03 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewProvider:GetMetadataView[System.Nullable`1[int]](System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.Nullable`1[int] (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[double,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[int,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[long,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[short,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[System.__Canon,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[System.Nullable`1[int],System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[System.Numerics.Vector`1[float],System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[ubyte,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (22.34 % of base) : System.Linq.dasm - System.Linq.Enumerable+CastICollectionIterator`1[System.Nullable`1[int]]:TryGetLast(byref):System.Nullable`1[int]:this (FullOpts)
          83 (66.94 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          83 (66.94 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.Nullable`1[int],System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          53 (46.90 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.CastInstruction+CastInstructionT`1[System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          53 (68.83 % of base) : System.Runtime.InteropServices.dasm - System.Runtime.InteropServices.Marshalling.ComInterfaceMarshaller`1[System.Nullable`1[int]]:ConvertToManaged(ulong):System.Nullable`1[int] (FullOpts)
          52 (17.45 % of base) : Microsoft.Extensions.Caching.Abstractions.dasm - Microsoft.Extensions.Caching.Memory.CacheExtensions:GetOrCreate[System.Nullable`1[int]](Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,System.Func`2[Microsoft.Extensions.Caching.Memory.ICacheEntry,System.Nullable`1[int]],Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions):System.Nullable`1[int] (FullOpts)
          52 (4.99 % of base) : Microsoft.Extensions.Caching.Abstractions.dasm - Microsoft.Extensions.Caching.Memory.CacheExtensions+<GetOrCreateAsync>d__11`1[System.Nullable`1[int]]:MoveNext():this (FullOpts)
          52 (91.23 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.Nullable`1[int]](System.IServiceProvider,System.Object[]):System.Nullable`1[int] (FullOpts)
          52 (120.93 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities+<>c__DisplayClass8_0`1[System.Nullable`1[int]]:<CreateFactory>b__0(System.IServiceProvider,System.Object[]):System.Nullable`1[int]:this (FullOpts)
          52 (88.14 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.Conversion:CTypeDynamic[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
          52 (36.36 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:TryGetExport[System.Nullable`1[int]](byref):ubyte:this (FullOpts)
          52 (29.55 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:TryGetExport[System.Nullable`1[int]](System.String,byref):ubyte:this (FullOpts)
          52 (92.86 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Lazy.LazyExportDescriptorProvider+<>c__DisplayClass2_3`1[System.Nullable`1[int]]:<GetLazyDefinitions>b__4():System.Nullable`1[int]:this (FullOpts)
          52 (92.86 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Lazy.LazyWithMetadataExportDescriptorProvider+<>c__DisplayClass2_3`2[System.Nullable`1[int],System.Nullable`1[int]]:<GetLazyDefinitions>b__4():System.Nullable`1[int]:this (FullOpts)
          52 (162.50 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.Nullable`1[int]]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.Nullable`1[int]:this (FullOpts)
          52 (94.55 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk[System.Nullable`1[int]](System.Func`2[System.Object[],System.Object]):System.Nullable`1[int] (FullOpts)
          52 (162.50 % of base) : System.Linq.Parallel.dasm - System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.Nullable`1[int]]:<Cast>b__1_0(System.__Canon):System.Nullable`1[int]:this (FullOpts)
          52 (162.50 % of base) : System.Linq.Parallel.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.Nullable`1[int]]:<OfType>b__2_1(System.__Canon):System.Nullable`1[int]:this (FullOpts)
          52 (162.50 % of base) : System.Text.Json.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
          52 (120.93 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass9_1[System.Nullable`1[int]]:<SetGetter>b__1(System.Object):System.Nullable`1[int]:this (FullOpts)
          52 (120.93 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1+<>c__DisplayClass34_0[System.Nullable`1[int]]:<SetCreateObject>b__0():System.Nullable`1[int]:this (FullOpts)
          52 (22.22 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.ReflectionMemberAccessor+<>c__DisplayClass2_0`1[System.Nullable`1[int]]:<CreateParameterizedConstructor>b__0(System.Object[]):System.Nullable`1[int]:this (FullOpts)
          51 (44.35 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[System.Numerics.Vector`1[float],System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],System.Numerics.Vector`1[float]):System.Nullable`1[int] (FullOpts)
          50 (29.94 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__2(System.Data.DataRow):ubyte:this (FullOpts)
          50 (19.16 % of base) : System.Formats.Nrbf.dasm - System.Formats.Nrbf.RectangularArrayRecord:<Deserialize>g__CopyTo|16_0[System.Nullable`1[int]](System.Collections.Generic.ICollection`1[System.Object],System.Array) (FullOpts)
          50 (21.46 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`1[System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          49 (8.93 % of base) : System.Linq.Parallel.dasm - System.Linq.ParallelEnumerable:PerformSequentialAggregation[System.__Canon,System.Nullable`1[int]](System.Linq.ParallelQuery`1[System.__Canon],System.Nullable`1[int],ubyte,System.Func`3[System.Nullable`1[int],System.__Canon,System.Nullable`1[int]]):System.Nullable`1[int] (FullOpts)
          48 (72.73 % of base) : Microsoft.Extensions.Hosting.dasm - Microsoft.Extensions.Hosting.HostApplicationBuilder+<>c__DisplayClass30_0`1[System.Nullable`1[int]]:<ConfigureContainer>b__1(System.Object):this (FullOpts)
          48 (25.00 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.ExportServices:CastExportedValue[System.Nullable`1[int]](System.ComponentModel.Composition.Primitives.ICompositionElement,System.Object):System.Nullable`1[int] (FullOpts)
          48 (21.33 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.ExportFactory.ExportFactoryExportDescriptorProvider+<>c__DisplayClass2_3`1[System.Nullable`1[int]]:<GetExportFactoryDescriptors>b__4():System.Tuple`2[System.Nullable`1[int],System.Action]:this (FullOpts)
          48 (20.17 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.ExportFactory.ExportFactoryWithMetadataExportDescriptorProvider+<>c__DisplayClass2_3`2[System.Nullable`1[int],System.Nullable`1[int]]:<GetExportFactoryDescriptors>b__4():System.Tuple`2[System.Nullable`1[int],System.Action]:this (FullOpts)
          48 (19.43 % of base) : System.Configuration.ConfigurationManager.dasm - System.Configuration.TypeUtil:CreateInstance[System.Nullable`1[int]](System.String):System.Nullable`1[int] (FullOpts)
          48 (4.33 % of base) : System.Private.CoreLib.dasm - System.Globalization.CultureNotFoundException:.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext):this (FullOpts)
          48 (38.71 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.IntSwitchInstruction`1[System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          48 (28.24 % of base) : System.Text.Json.dasm - System.Text.Json.JsonSerializer:ResolveReferenceId[System.Nullable`1[int]](byref):System.Nullable`1[int] (FullOpts)
          48 (41.74 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[int,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          48 (41.03 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[long,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          48 (41.03 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[short,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          48 (41.38 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[ubyte,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          47 (41.23 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[System.Nullable`1[int],System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],System.Nullable`1[int]):System.Nullable`1[int] (FullOpts)
          47 (40.17 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[int,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          47 (40.17 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[long,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          47 (39.83 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[short,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          47 (39.83 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[ubyte,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          47 (27.98 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.ReflectionReader+<>c__DisplayClass41_1`1[System.Nullable`1[int]]:<GetCollectionSetItemDelegate>b__2(System.Object,System.Object,int):System.Object:this (FullOpts)
          46 (21.00 % of base) : System.Collections.Immutable.dasm - System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]]:System.Collections.IList.Contains(System.Object):ubyte:this (FullOpts)
          46 (21.10 % of base) : System.Collections.Immutable.dasm - System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]]:System.Collections.IList.IndexOf(System.Object):int:this (FullOpts)
          46 (13.57 % of base) : System.Linq.dasm - System.Linq.Enumerable+CastICollectionIterator`1[System.Nullable`1[int]]:ToArray():System.Nullable`1[int][]:this (FullOpts)
          46 (15.38 % of base) : System.Linq.dasm - System.Linq.Enumerable+CastICollectionIterator`1[System.Nullable`1[int]]:TryGetElementAt(int,byref):System.Nullable`1[int]:this (FullOpts)
          46 (15.49 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.FuncCallInstruction`2[System.Nullable`1[int],System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          46 (24.08 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HttpRequestHeaders:GetSpecializedCollection[System.Nullable`1[int]](int,System.Func`2[System.Net.Http.Headers.HttpRequestHeaders,System.Nullable`1[int]]):System.Nullable`1[int]:this (FullOpts)
          46 (24.21 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.HttpResponseHeaders:GetSpecializedCollection[System.Nullable`1[int]](int,System.Func`2[System.Net.Http.Headers.HttpResponseHeaders,System.Nullable`1[int]]):System.Nullable`1[int]:this (FullOpts)
          46 (68.66 % of base) : System.Private.CoreLib.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.Nullable`1[int]]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
          46 (71.88 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.Nullable`1[int]]:<SetSetter>b__0(System.Object,System.Object):this (FullOpts)
          46 (71.88 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.Nullable`1[int]]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (FullOpts)
          45 (56.25 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.DiagnosticSourceEventSource+TransformSpec+PropertySpec+PropertyFetch+RefTypedFetchProperty`2[System.Nullable`1[int],System.Nullable`1[int]]:Fetch(System.Object):System.Object:this (FullOpts)
          45 (51.72 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.DiagnosticSourceEventSource+TransformSpec+PropertySpec+PropertyFetch+ValueTypedFetchProperty`2[System.Nullable`1[int],System.Nullable`1[int]]:Fetch(System.Object):System.Object:this (FullOpts)
          45 (36.59 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[double,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],double):System.Nullable`1[int] (FullOpts)
          45 (11.94 % of base) : System.Linq.dasm - System.Linq.Enumerable+CastICollectionIterator`1[System.Nullable`1[int]]:ToList():System.Collections.Generic.List`1[System.Nullable`1[int]]:this (FullOpts)
          45 (14.24 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[double,System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          45 (14.66 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[int,System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          45 (14.66 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[long,System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          45 (14.61 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[short,System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          45 (14.06 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[System.__Canon,System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          45 (13.76 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          45 (14.61 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[ubyte,System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          45 (51.72 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass11_0`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateGetterInternal>b__0(System.Object):System.Object:this (FullOpts)
          45 (56.25 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass11_1`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateGetterInternal>b__1(System.Object):System.Object:this (FullOpts)
          45 (26.79 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_0`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:<CreateSetterInternal>b__0(byref,System.Object):this (FullOpts)
          45 (35.16 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[double,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          44 (33.08 % of base) : Microsoft.Extensions.Logging.Configuration.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.<BindingExtensions_g>FC942D78CC7227974EDAA51F75C3EEF92CA22964DAC31D1350ACD0C7CF2278090__BindingExtensions:GetValue[System.Nullable`1[int]](Microsoft.Extensions.Configuration.IConfiguration,System.String,System.Nullable`1[int]):System.Nullable`1[int] (FullOpts)
          44 (23.91 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataViewGenerator:CreateMetadataView[System.Nullable`1[int]](System.ComponentModel.Composition.MetadataViewGenerator+MetadataViewFactory,System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.Nullable`1[int] (FullOpts)
          44 (44.44 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:GetExport[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
          44 (36.36 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:GetExport[System.Nullable`1[int]](System.String):System.Nullable`1[int]:this (FullOpts)
          44 (37.61 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[int,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],int):System.Nullable`1[int] (FullOpts)

Top method improvements (bytes):
         -63 (-28.77 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts)
         -63 (-29.58 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -46 (-3.49 % of base) : System.Private.CoreLib.dasm - System.GC:RefreshMemoryLimit() (FullOpts)
         -27 (-5.93 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:TryGetLast(byref):System.Nullable`1[int]:this (FullOpts)
         -21 (-15.00 % of base) : System.Collections.Immutable.dasm - System.Collections.Frozen.FrozenDictionary`2[System.Nullable`1[int],System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -21 (-12.28 % of base) : System.Collections.Immutable.dasm - System.Collections.Frozen.FrozenDictionary`2[System.Nullable`1[int],System.Nullable`1[int]]:System.Collections.IDictionary.get_Item(System.Object):System.Object:this (FullOpts)
         -21 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.GetHashCode(System.Object):int:this (FullOpts)
         -19 (-11.52 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.NumericConvertInstruction:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
         -16 (-4.85 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:TryGetElementAt(int,byref):System.Nullable`1[int]:this (FullOpts)
         -15 (-17.24 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ConvertHelper:ToInt32NoNull(System.Object):int (FullOpts)
         -15 (-14.42 % of base) : System.Text.Json.dasm - System.Text.Json.JsonSerializer:UnboxOnRead[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
         -14 (-1.84 % of base) : System.IO.Packaging.dasm - System.IO.Packaging.PartBasedPackageProperties:SerializeDirtyProperties():this (FullOpts)
         -13 (-2.36 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:ToList():System.Collections.Generic.List`1[System.Nullable`1[int]]:this (FullOpts)
         -12 (-8.76 % of base) : System.Data.Common.dasm - System.Data.Common.DbDataReaderExtensions+DataRowDbColumn:GetDbColumnValue[System.Nullable`1[int]](System.String):System.Nullable`1[int]:this (FullOpts)
         -12 (-4.21 % of base) : System.Formats.Nrbf.dasm - System.Formats.Nrbf.ClassRecord:GetMember[System.Nullable`1[int]](System.String):System.Nullable`1[int]:this (FullOpts)
         -12 (-5.71 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:MoveNext():ubyte:this (FullOpts)
         -12 (-4.12 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:TryGetFirst(byref):System.Nullable`1[int]:this (FullOpts)
         -12 (-8.76 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.__Canon]:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
         -12 (-14.12 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.__Canon]:TryGetValue[System.Nullable`1[int]](byref):ubyte:this (FullOpts)
         -11 (-0.53 % of base) : System.Data.Common.dasm - System.Data.Common.DbDataReaderExtensions+DataRowDbColumn:PopulateFields():this (FullOpts)
         -11 (-18.33 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[int]:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
         -11 (-15.28 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[int]:TryGetValue[System.Nullable`1[int]](byref):ubyte:this (FullOpts)
          -9 (-6.52 % of base) : Microsoft.Extensions.Caching.Abstractions.dasm - Microsoft.Extensions.Caching.Memory.CacheExtensions:TryGetValue[System.Nullable`1[int]](Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,byref):ubyte (FullOpts)
          -9 (-6.21 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataServices:GetValue[System.Nullable`1[int]](System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String):System.Nullable`1[int] (FullOpts)
          -9 (-1.52 % of base) : System.Composition.Runtime.dasm - System.Composition.Hosting.Core.CompositionContract:TryUnwrapMetadataConstraint[System.Nullable`1[int]](System.String,byref,byref):ubyte:this (FullOpts)
          -9 (-8.33 % of base) : System.Net.Http.dasm - System.Net.Http.HttpRequestOptions:TryGetValue[System.Nullable`1[int]](System.Net.Http.HttpRequestOptionsKey`1[System.Nullable`1[int]],byref):ubyte:this (FullOpts)
          -6 (-0.60 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:ToArray():System.Nullable`1[int][]:this (FullOpts)

Top method regressions (percentages):
         128 (Infinity of base) : System.DirectoryServices.Protocols.dasm - System.DirectoryServices.Protocols.PartialResultsRetriever:ThreadRoutine():this (FullOpts)
          52 (162.50 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.Nullable`1[int]]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.Nullable`1[int]:this (FullOpts)
          52 (162.50 % of base) : System.Linq.Parallel.dasm - System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.Nullable`1[int]]:<Cast>b__1_0(System.__Canon):System.Nullable`1[int]:this (FullOpts)
          52 (162.50 % of base) : System.Linq.Parallel.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.Nullable`1[int]]:<OfType>b__2_1(System.__Canon):System.Nullable`1[int]:this (FullOpts)
          52 (162.50 % of base) : System.Text.Json.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
          52 (120.93 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities+<>c__DisplayClass8_0`1[System.Nullable`1[int]]:<CreateFactory>b__0(System.IServiceProvider,System.Object[]):System.Nullable`1[int]:this (FullOpts)
          52 (120.93 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass9_1[System.Nullable`1[int]]:<SetGetter>b__1(System.Object):System.Nullable`1[int]:this (FullOpts)
          52 (120.93 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1+<>c__DisplayClass34_0[System.Nullable`1[int]]:<SetCreateObject>b__0():System.Nullable`1[int]:this (FullOpts)
          44 (102.33 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[System.__Canon,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          44 (97.78 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[System.Nullable`1[int],System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Key(System.Object):this (FullOpts)
          44 (95.65 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[double,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          44 (95.65 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[int,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          44 (95.65 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[long,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          44 (95.65 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[short,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          44 (95.65 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[System.Nullable`1[int],System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          44 (95.65 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          44 (95.65 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.KeyValue`2[ubyte,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
          52 (94.55 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk[System.Nullable`1[int]](System.Func`2[System.Object[],System.Object]):System.Nullable`1[int] (FullOpts)
          52 (92.86 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Lazy.LazyExportDescriptorProvider+<>c__DisplayClass2_3`1[System.Nullable`1[int]]:<GetLazyDefinitions>b__4():System.Nullable`1[int]:this (FullOpts)
          52 (92.86 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Lazy.LazyWithMetadataExportDescriptorProvider+<>c__DisplayClass2_3`2[System.Nullable`1[int],System.Nullable`1[int]]:<GetLazyDefinitions>b__4():System.Nullable`1[int]:this (FullOpts)
          52 (91.23 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.Nullable`1[int]](System.IServiceProvider,System.Object[]):System.Nullable`1[int] (FullOpts)
          52 (88.14 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.Conversion:CTypeDynamic[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
          42 (80.77 % of base) : System.Data.Common.dasm - System.Data.Common.DbDataReader:GetFieldValue[System.Nullable`1[int]](int):System.Nullable`1[int]:this (FullOpts)
          42 (76.36 % of base) : System.ComponentModel.TypeConverter.dasm - System.ComponentModel.BindingList`1[System.Nullable`1[int]]:AddNew():System.Nullable`1[int]:this (FullOpts)
          42 (76.36 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.ReflectionMemberAccessor+<>c__DisplayClass9_0`1[System.Nullable`1[int]]:<CreateFieldGetter>b__0(System.Object):System.Nullable`1[int]:this (FullOpts)
         101 (74.26 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_0`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateSetterInternal>b__0(byref,System.Object):this (FullOpts)
          48 (72.73 % of base) : Microsoft.Extensions.Hosting.dasm - Microsoft.Extensions.Hosting.HostApplicationBuilder+<>c__DisplayClass30_0`1[System.Nullable`1[int]]:<ConfigureContainer>b__1(System.Object):this (FullOpts)
          46 (71.88 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.Nullable`1[int]]:<SetSetter>b__0(System.Object,System.Object):this (FullOpts)
          46 (71.88 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.Nullable`1[int]]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (FullOpts)
          53 (68.83 % of base) : System.Runtime.InteropServices.dasm - System.Runtime.InteropServices.Marshalling.ComInterfaceMarshaller`1[System.Nullable`1[int]]:ConvertToManaged(ulong):System.Nullable`1[int] (FullOpts)
          46 (68.66 % of base) : System.Private.CoreLib.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.Nullable`1[int]]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
          42 (67.74 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Util.MethodInfoExtensions:CreateStaticDelegate[System.Nullable`1[int]](System.Reflection.MethodInfo):System.Nullable`1[int] (FullOpts)
          83 (66.94 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          83 (66.94 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.Nullable`1[int],System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          42 (63.64 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.ReflectionMemberAccessor+<>c__DisplayClass7_0`1[System.Nullable`1[int]]:<CreatePropertyGetter>b__0(System.Object):System.Nullable`1[int]:this (FullOpts)
          42 (58.33 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.ImportMany.ImportManyExportDescriptorProvider+<>c__DisplayClass3_2`1[System.Nullable`1[int]]:<GetImportManyDescriptor>b__4(System.Composition.Hosting.Core.ExportDescriptor):System.Nullable`1[int]:this (FullOpts)
          45 (56.25 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.DiagnosticSourceEventSource+TransformSpec+PropertySpec+PropertyFetch+RefTypedFetchProperty`2[System.Nullable`1[int],System.Nullable`1[int]]:Fetch(System.Object):System.Object:this (FullOpts)
          45 (56.25 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass11_1`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateGetterInternal>b__1(System.Object):System.Object:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[double,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[int,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[long,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[short,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[System.__Canon,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[System.Nullable`1[int],System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[System.Numerics.Vector`1[float],System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          84 (54.90 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass19_0`1[ubyte,System.Nullable`1[int]]:<AddSortExpression>b__1(System.Object,System.Object):int:this (FullOpts)
          95 (53.98 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__4(System.Data.DataRow,System.Data.DataRow):int:this (FullOpts)
          95 (53.98 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__7(System.Data.DataRow,System.Data.DataRow):int:this (FullOpts)
          45 (51.72 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Diagnostics.DiagnosticSourceEventSource+TransformSpec+PropertySpec+PropertyFetch+ValueTypedFetchProperty`2[System.Nullable`1[int],System.Nullable`1[int]]:Fetch(System.Object):System.Object:this (FullOpts)
          45 (51.72 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass11_0`2[System.Nullable`1[int],System.Nullable`1[int]]:<CreateGetterInternal>b__0(System.Object):System.Object:this (FullOpts)
          34 (50.00 % of base) : System.IO.Packaging.dasm - System.IO.Packaging.PartBasedPackageProperties:GetDateTimePropertyValue(int):System.Nullable`1[System.DateTime]:this (FullOpts)
         104 (48.83 % of base) : System.Composition.Hosting.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider:GetMetadataValue[System.Nullable`1[int]](System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String,System.ComponentModel.DefaultValueAttribute):System.Nullable`1[int] (FullOpts)
          53 (46.90 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.CastInstruction+CastInstructionT`1[System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          44 (44.90 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[System.__Canon,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],System.__Canon):System.Nullable`1[int] (FullOpts)
          44 (44.44 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:GetExport[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
          51 (44.35 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[System.Numerics.Vector`1[float],System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],System.Numerics.Vector`1[float]):System.Nullable`1[int] (FullOpts)
          43 (42.16 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.ReflectionReader+<>c__41`1[System.Nullable`1[int]]:<GetCollectionSetItemDelegate>b__41_5(System.Object,System.Object,int):System.Object:this (FullOpts)
          42 (42.00 % of base) : System.Data.Common.dasm - System.Data.DataRowExtensions+UnboxT`1[System.Nullable`1[int]]:NonNullableField(System.Object):System.Nullable`1[int] (FullOpts)
          48 (41.74 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[int,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          48 (41.38 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[ubyte,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          47 (41.23 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[System.Nullable`1[int],System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],System.Nullable`1[int]):System.Nullable`1[int] (FullOpts)
          48 (41.03 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[long,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          48 (41.03 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[short,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          47 (40.17 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[int,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          47 (40.17 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[long,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          42 (40.00 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetRequiredService[System.Nullable`1[int]](System.IServiceProvider):System.Nullable`1[int] (FullOpts)
          47 (39.83 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[short,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          47 (39.83 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[ubyte,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          42 (39.62 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetService[System.Nullable`1[int]](System.IServiceProvider):System.Nullable`1[int] (FullOpts)
          27 (39.13 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
          42 (38.89 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderKeyedServiceExtensions:GetRequiredKeyedService[System.Nullable`1[int]](System.IServiceProvider,System.Object):System.Nullable`1[int] (FullOpts)
          40 (38.83 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.FindPal:ConfirmedCast[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
          48 (38.71 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.IntSwitchInstruction`1[System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          42 (38.53 % of base) : Microsoft.Extensions.Caching.Abstractions.dasm - Microsoft.Extensions.Caching.Memory.CacheExtensions:Get[System.Nullable`1[int]](Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object):System.Nullable`1[int] (FullOpts)
          42 (38.18 % of base) : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ConstVal:SpecialUnbox[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
          44 (37.61 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[int,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],int):System.Nullable`1[int] (FullOpts)
          44 (37.61 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[long,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],long):System.Nullable`1[int] (FullOpts)
          44 (37.61 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[ubyte,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],ubyte):System.Nullable`1[int] (FullOpts)
          44 (37.29 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[short,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],short):System.Nullable`1[int] (FullOpts)
          45 (36.59 % of base) : System.Linq.Expressions.dasm - System.Dynamic.Utils.DelegateHelpers:FuncThunk1[double,System.Nullable`1[int]](System.Func`2[System.Object[],System.Object],double):System.Nullable`1[int] (FullOpts)
          44 (36.36 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:GetExport[System.Nullable`1[int]](System.String):System.Nullable`1[int]:this (FullOpts)
          52 (36.36 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:TryGetExport[System.Nullable`1[int]](byref):ubyte:this (FullOpts)
          45 (35.16 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[double,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          42 (34.43 % of base) : System.Text.RegularExpressions.dasm - System.Collections.HashtableExtensions:TryGetValue[System.Nullable`1[int]](System.Collections.Hashtable,System.Object,byref):ubyte (FullOpts)
          44 (34.11 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[double,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          42 (33.60 % of base) : System.Private.CoreLib.dasm - System.Progress`1[System.Nullable`1[int]]:InvokeHandlers(System.Object):this (FullOpts)
          42 (33.60 % of base) : System.Runtime.InteropServices.dasm - System.Runtime.InteropServices.Marshalling.UniqueComInterfaceMarshaller`1[System.Nullable`1[int]]:ConvertToManaged(ulong):System.Nullable`1[int] (FullOpts)
          43 (33.59 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          44 (33.08 % of base) : Microsoft.Extensions.Logging.Configuration.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.<BindingExtensions_g>FC942D78CC7227974EDAA51F75C3EEF92CA22964DAC31D1350ACD0C7CF2278090__BindingExtensions:GetValue[System.Nullable`1[int]](Microsoft.Extensions.Configuration.IConfiguration,System.String,System.Nullable`1[int]):System.Nullable`1[int] (FullOpts)
          43 (32.82 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[System.__Canon,System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
         102 (32.80 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`2[System.Nullable`1[int],System.Nullable`1[int]]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
          95 (32.53 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Expression`1[System.Nullable`1[int]]:Compile():System.Nullable`1[int]:this (FullOpts)
          98 (32.03 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__0(System.Data.DataRow):ubyte:this (FullOpts)
          43 (30.50 % of base) : System.Private.Xml.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
          50 (29.94 % of base) : System.Data.Common.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.Nullable`1[int]]:<GetLinqDataView>b__2(System.Data.DataRow):ubyte:this (FullOpts)
          42 (29.58 % of base) : System.Private.DataContractSerialization.dasm - System.Runtime.Serialization.FastInvokerBuilder+<>c__DisplayClass12_1`2[System.Numerics.Vector`1[float],System.Nullable`1[int]]:<CreateSetterInternal>b__1(byref,System.Object):this (FullOpts)
          52 (29.55 % of base) : System.Composition.Runtime.dasm - System.Composition.CompositionContext:TryGetExport[System.Nullable`1[int]](System.String,byref):ubyte:this (FullOpts)
          97 (28.53 % of base) : System.ServiceModel.Syndication.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.Nullable`1[int]](System.Runtime.Serialization.XmlObjectSerializer):System.Nullable`1[int]:this (FullOpts)
          42 (28.38 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:GetServiceOrCreateInstance[System.Nullable`1[int]](System.IServiceProvider):System.Nullable`1[int] (FullOpts)
          37 (28.24 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.RateLimitLease:TryGetMetadata[System.Nullable`1[int]](System.Threading.RateLimiting.MetadataName`1[System.Nullable`1[int]],byref):ubyte:this (FullOpts)

Top method improvements (percentages):
         -63 (-29.58 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -63 (-28.77 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts)
         -21 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.GetHashCode(System.Object):int:this (FullOpts)
         -11 (-18.33 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[int]:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
         -15 (-17.24 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.ConvertHelper:ToInt32NoNull(System.Object):int (FullOpts)
         -11 (-15.28 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[int]:TryGetValue[System.Nullable`1[int]](byref):ubyte:this (FullOpts)
         -21 (-15.00 % of base) : System.Collections.Immutable.dasm - System.Collections.Frozen.FrozenDictionary`2[System.Nullable`1[int],System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -15 (-14.42 % of base) : System.Text.Json.dasm - System.Text.Json.JsonSerializer:UnboxOnRead[System.Nullable`1[int]](System.Object):System.Nullable`1[int] (FullOpts)
         -12 (-14.12 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.__Canon]:TryGetValue[System.Nullable`1[int]](byref):ubyte:this (FullOpts)
         -21 (-12.28 % of base) : System.Collections.Immutable.dasm - System.Collections.Frozen.FrozenDictionary`2[System.Nullable`1[int],System.Nullable`1[int]]:System.Collections.IDictionary.get_Item(System.Object):System.Object:this (FullOpts)
         -19 (-11.52 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.NumericConvertInstruction:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
         -12 (-8.76 % of base) : System.Data.Common.dasm - System.Data.Common.DbDataReaderExtensions+DataRowDbColumn:GetDbColumnValue[System.Nullable`1[int]](System.String):System.Nullable`1[int]:this (FullOpts)
         -12 (-8.76 % of base) : System.Text.Json.dasm - System.Text.Json.Nodes.JsonValue`1[System.__Canon]:GetValue[System.Nullable`1[int]]():System.Nullable`1[int]:this (FullOpts)
          -9 (-8.33 % of base) : System.Net.Http.dasm - System.Net.Http.HttpRequestOptions:TryGetValue[System.Nullable`1[int]](System.Net.Http.HttpRequestOptionsKey`1[System.Nullable`1[int]],byref):ubyte:this (FullOpts)
          -9 (-6.52 % of base) : Microsoft.Extensions.Caching.Abstractions.dasm - Microsoft.Extensions.Caching.Memory.CacheExtensions:TryGetValue[System.Nullable`1[int]](Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,byref):ubyte (FullOpts)
          -9 (-6.21 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.MetadataServices:GetValue[System.Nullable`1[int]](System.Collections.Generic.IDictionary`2[System.String,System.Object],System.String):System.Nullable`1[int] (FullOpts)
         -27 (-5.93 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:TryGetLast(byref):System.Nullable`1[int]:this (FullOpts)
         -12 (-5.71 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:MoveNext():ubyte:this (FullOpts)
         -16 (-4.85 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:TryGetElementAt(int,byref):System.Nullable`1[int]:this (FullOpts)
         -12 (-4.21 % of base) : System.Formats.Nrbf.dasm - System.Formats.Nrbf.ClassRecord:GetMember[System.Nullable`1[int]](System.String):System.Nullable`1[int]:this (FullOpts)
         -12 (-4.12 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:TryGetFirst(byref):System.Nullable`1[int]:this (FullOpts)
         -46 (-3.49 % of base) : System.Private.CoreLib.dasm - System.GC:RefreshMemoryLimit() (FullOpts)
         -13 (-2.36 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:ToList():System.Collections.Generic.List`1[System.Nullable`1[int]]:this (FullOpts)
         -14 (-1.84 % of base) : System.IO.Packaging.dasm - System.IO.Packaging.PartBasedPackageProperties:SerializeDirtyProperties():this (FullOpts)
          -9 (-1.52 % of base) : System.Composition.Runtime.dasm - System.Composition.Hosting.Core.CompositionContract:TryUnwrapMetadataConstraint[System.Nullable`1[int]](System.String,byref,byref):ubyte:this (FullOpts)
          -6 (-0.60 % of base) : System.Linq.dasm - System.Linq.Enumerable+OfTypeIterator`1[System.Nullable`1[int]]:ToArray():System.Nullable`1[int][]:this (FullOpts)
         -11 (-0.53 % of base) : System.Data.Common.dasm - System.Data.Common.DbDataReaderExtensions+DataRowDbColumn:PopulateFields():this (FullOpts)

200 total methods with Code Size differences (27 improved, 173 regressed), 230512 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 18, 2024

Top method regressions

230 (15.93 % of base) - System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData)
 ; Assembly listing for method System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 7 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T06] (  6,  7   )     ref  ->  r15         class-hnd single-def <System.String[]>
-;  V01 arg1         [V01,T05] ( 13, 14.62)     ref  ->  rbx         class-hnd single-def <System.Object[]>
-;  V02 arg2         [V02,T19] (  3,  3   )   ubyte  ->  rdx         single-def
-;  V03 arg3         [V03,T12] (  6,  4   )     ref  ->  [rbp-0x78]  class-hnd single-def <System.Reflection.Emit.MarshallingData>
+;  V00 arg0         [V00,T08] (  6,  7   )     ref  ->  r15         class-hnd single-def <System.String[]>
+;  V01 arg1         [V01,T07] ( 13, 14.62)     ref  ->  rbx         class-hnd single-def <System.Object[]>
+;  V02 arg2         [V02,T21] (  3,  3   )   ubyte  ->  rdx         single-def
+;  V03 arg3         [V03,T14] (  6,  4   )     ref  ->  [rbp-0x78]  class-hnd single-def <System.Reflection.Emit.MarshallingData>
 ;* V04 loc0         [V04    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op <System.Nullable`1[int]>
 ;* V05 loc1         [V05    ] (  0,  0   )  struct ( 8) zero-ref    <System.Nullable`1[int]>
 ;* V06 loc2         [V06    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op <System.Nullable`1[short]>
 ;* V07 loc3         [V07    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op <System.Nullable`1[int]>
 ;  V08 loc4         [V08,T00] ( 16, 53.24)     int  ->  [rbp-0x2C] 
 ;  V09 loc5         [V09,T01] ( 32, 32   )     ref  ->  rsi         class-hnd exact <System.String>
 ;# V10 OutArgs      [V10    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V11 tmp1         [V11    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.Nullable`1[int]>
 ;* V12 tmp2         [V12    ] (  0,  0   )  struct ( 8) zero-ref    <System.Nullable`1[int]>
 ;  V13 tmp3         [V13,T02] (  8, 26   )     ref  ->  r13         "inline UNBOX clone1"
-;  V14 tmp4         [V14    ] (  6, 24   )  struct ( 8) [rbp-0x38]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
-;  V15 tmp5         [V15,T38] (  2,  0   )     ref  ->  rbx        
-;  V16 tmp6         [V16,T39] (  2,  0   )     ref  ->  r15        
-;* V17 tmp7         [V17    ] (  0,  0   )     ref  ->  zero-ref   
+;  V14 tmp4         [V14    ] ( 12, 22   )  struct ( 8) [rbp-0x38]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+;  V15 tmp5         [V15,T03] ( 10, 20   )     ref  ->  rdx         "op1 spilled for Nullable unbox"
+;  V16 tmp6         [V16,T40] (  2,  0   )     ref  ->  rbx        
+;  V17 tmp7         [V17,T41] (  2,  0   )     ref  ->  r15        
 ;* V18 tmp8         [V18    ] (  0,  0   )     ref  ->  zero-ref   
-;  V19 tmp9         [V19,T40] (  2,  0   )     ref  ->  r14        
-;  V20 tmp10        [V20,T37] (  3,  0   )     ref  ->  r13         class-hnd exact "NewObj constructor temp" <System.ArgumentException>
-;  V21 tmp11        [V21    ] (  6, 24   )  struct ( 8) [rbp-0x40]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[short]>
-;* V22 tmp12        [V22    ] (  0,  0   )     ref  ->  zero-ref    "spilling varStr"
-;  V23 tmp13        [V23,T07] (  4,  8   )     int  ->  registers   "spilling unroll qmark"
+;* V19 tmp9         [V19    ] (  0,  0   )     ref  ->  zero-ref   
+;  V20 tmp10        [V20,T42] (  2,  0   )     ref  ->  r14        
+;  V21 tmp11        [V21,T39] (  3,  0   )     ref  ->  r13         class-hnd exact "NewObj constructor temp" <System.ArgumentException>
+;  V22 tmp12        [V22    ] ( 12, 22   )  struct ( 8) [rbp-0x40]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[short]>
+;  V23 tmp13        [V23,T04] ( 10, 20   )     ref  ->  [rbp-0x80]  "op1 spilled for Nullable unbox"
 ;* V24 tmp14        [V24    ] (  0,  0   )     ref  ->  zero-ref    "spilling varStr"
-;  V25 tmp15        [V25,T08] (  4,  8   )     int  ->  registers   "spilling unroll qmark"
+;  V25 tmp15        [V25,T09] (  4,  8   )     int  ->  registers   "spilling unroll qmark"
 ;* V26 tmp16        [V26    ] (  0,  0   )     ref  ->  zero-ref    "spilling varStr"
-;  V27 tmp17        [V27,T09] (  4,  8   )     int  ->  registers   "spilling unroll qmark"
+;  V27 tmp17        [V27,T10] (  4,  8   )     int  ->  registers   "spilling unroll qmark"
 ;* V28 tmp18        [V28    ] (  0,  0   )     ref  ->  zero-ref    "spilling varStr"
-;  V29 tmp19        [V29,T10] (  4,  8   )     int  ->  rsi         "spilling unroll qmark"
-;* V30 tmp20        [V30    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;* V31 tmp21        [V31    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
-;* V32 tmp22        [V32    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
-;  V33 tmp23        [V33,T25] (  2,  1   )     int  ->  r12         "Inline return value spill temp"
-;  V34 tmp24        [V34,T26] (  2,  1   )     int  ->  rdx         "Inline return value spill temp"
-;  V35 tmp25        [V35,T13] (  5,  6   )   ubyte  ->  r13         "field V04.hasValue (fldOffset=0x0)" P-INDEP
-;  V36 tmp26        [V36,T14] (  5,  6   )     int  ->  r12         "field V04.value (fldOffset=0x4)" P-INDEP
-;  V37 tmp27        [V37,T15] (  5,  6   )   ubyte  ->  [rbp-0x44]  "field V05.hasValue (fldOffset=0x0)" P-INDEP
-;  V38 tmp28        [V38,T16] (  5,  6   )     int  ->  [rbp-0x48]  "field V05.value (fldOffset=0x4)" P-INDEP
-;  V39 tmp29        [V39,T17] (  4,  5.50)   ubyte  ->  [rbp-0x4C]  "field V06.hasValue (fldOffset=0x0)" P-INDEP
-;  V40 tmp30        [V40,T18] (  4,  5.50)   short  ->  [rbp-0x50]  "field V06.value (fldOffset=0x2)" P-INDEP
-;* V41 tmp31        [V41    ] (  0,  0   )   ubyte  ->  zero-ref    "field V07.hasValue (fldOffset=0x0)" P-INDEP
-;* V42 tmp32        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V07.value (fldOffset=0x4)" P-INDEP
-;* V43 tmp33        [V43,T27] (  0,  0   )   ubyte  ->  zero-ref    "field V11.hasValue (fldOffset=0x0)" P-INDEP
-;* V44 tmp34        [V44,T28] (  0,  0   )     int  ->  zero-ref    "field V11.value (fldOffset=0x4)" P-INDEP
-;  V45 tmp35        [V45,T23] (  3,  2   )   ubyte  ->  rcx         "field V12.hasValue (fldOffset=0x0)" P-INDEP
-;  V46 tmp36        [V46,T24] (  3,  2   )     int  ->  rdx         "field V12.value (fldOffset=0x4)" P-INDEP
-;  V47 tmp37        [V47    ] (  4, 12   )   ubyte  ->  [rbp-0x38]  do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
-;  V48 tmp38        [V48    ] (  4, 12   )     int  ->  [rbp-0x34]  do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x4)" P-DEP
-;  V49 tmp39        [V49    ] (  4, 12   )   ubyte  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed "field V21.hasValue (fldOffset=0x0)" P-DEP
-;  V50 tmp40        [V50    ] (  4, 12   )   short  ->  [rbp-0x3E]  do-not-enreg[X] addr-exposed "field V21.value (fldOffset=0x2)" P-DEP
-;* V51 tmp41        [V51    ] (  0,  0   )   ubyte  ->  zero-ref    "field V31.hasValue (fldOffset=0x0)" P-INDEP
-;* V52 tmp42        [V52    ] (  0,  0   )     int  ->  zero-ref    "field V31.value (fldOffset=0x4)" P-INDEP
-;* V53 tmp43        [V53    ] (  0,  0   )   ubyte  ->  zero-ref    "field V32.hasValue (fldOffset=0x0)" P-INDEP
-;* V54 tmp44        [V54    ] (  0,  0   )     int  ->  zero-ref    "field V32.value (fldOffset=0x4)" P-INDEP
-;  V55 tmp45        [V55,T41] (  2,  0   )     ref  ->  rbx         "argument with side effect"
-;  V56 tmp46        [V56,T42] (  2,  0   )     ref  ->  rdx         "argument with side effect"
-;  V57 tmp47        [V57,T20] (  3,  3   )  struct ( 8) [rbp-0x58]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-;  V58 tmp48        [V58,T21] (  3,  3   )  struct ( 8) [rbp-0x60]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-;  V59 tmp49        [V59,T22] (  3,  3   )  struct ( 8) [rbp-0x68]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[short]>
-;  V60 cse0         [V60,T04] (  5, 18.25)     int  ->  [rbp-0x6C]  spill-single-def "CSE #01: aggressive"
-;  V61 cse1         [V61,T11] (  6,  7   )     int  ->  [rbp-0x70]  spill-single-def "CSE #07: moderate"
-;  V62 cse2         [V62,T03] (  5, 19.80)    long  ->  rdi         "CSE #04: aggressive"
-;  V63 rat0         [V63,T29] (  3, 11.88)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
-;  V64 rat1         [V64,T30] (  3, 11.88)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
-;  V65 rat2         [V65,T31] (  3, 11.88)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
-;  V66 rat3         [V66,T32] (  3, 11.88)  simd32  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
-;  V67 rat4         [V67,T33] (  3,  0.12)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
-;  V68 rat5         [V68,T34] (  3,  0.12)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
-;  V69 rat6         [V69,T35] (  3,  0.12)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
-;  V70 rat7         [V70,T36] (  3,  0.12)  simd32  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V29 tmp19        [V29,T11] (  4,  8   )     int  ->  registers   "spilling unroll qmark"
+;* V30 tmp20        [V30    ] (  0,  0   )     ref  ->  zero-ref    "spilling varStr"
+;  V31 tmp21        [V31,T12] (  4,  8   )     int  ->  rsi         "spilling unroll qmark"
+;* V32 tmp22        [V32    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
+;* V33 tmp23        [V33    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
+;* V34 tmp24        [V34    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
+;  V35 tmp25        [V35,T27] (  2,  1   )     int  ->  r12         "Inline return value spill temp"
+;  V36 tmp26        [V36,T28] (  2,  1   )     int  ->  rdx         "Inline return value spill temp"
+;  V37 tmp27        [V37,T15] (  5,  6   )   ubyte  ->  r13         "field V04.hasValue (fldOffset=0x0)" P-INDEP
+;  V38 tmp28        [V38,T16] (  5,  6   )     int  ->  r12         "field V04.value (fldOffset=0x4)" P-INDEP
+;  V39 tmp29        [V39,T17] (  5,  6   )   ubyte  ->  [rbp-0x44]  "field V05.hasValue (fldOffset=0x0)" P-INDEP
+;  V40 tmp30        [V40,T18] (  5,  6   )     int  ->  [rbp-0x48]  "field V05.value (fldOffset=0x4)" P-INDEP
+;  V41 tmp31        [V41,T19] (  4,  5.50)   ubyte  ->  [rbp-0x4C]  "field V06.hasValue (fldOffset=0x0)" P-INDEP
+;  V42 tmp32        [V42,T20] (  4,  5.50)   short  ->  [rbp-0x50]  "field V06.value (fldOffset=0x2)" P-INDEP
+;* V43 tmp33        [V43    ] (  0,  0   )   ubyte  ->  zero-ref    "field V07.hasValue (fldOffset=0x0)" P-INDEP
+;* V44 tmp34        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V07.value (fldOffset=0x4)" P-INDEP
+;* V45 tmp35        [V45,T29] (  0,  0   )   ubyte  ->  zero-ref    "field V11.hasValue (fldOffset=0x0)" P-INDEP
+;* V46 tmp36        [V46,T30] (  0,  0   )     int  ->  zero-ref    "field V11.value (fldOffset=0x4)" P-INDEP
+;  V47 tmp37        [V47,T25] (  3,  2   )   ubyte  ->  rcx         "field V12.hasValue (fldOffset=0x0)" P-INDEP
+;  V48 tmp38        [V48,T26] (  3,  2   )     int  ->  rdx         "field V12.value (fldOffset=0x4)" P-INDEP
+;  V49 tmp39        [V49    ] (  8,  7   )   ubyte  ->  [rbp-0x38]  do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
+;  V50 tmp40        [V50    ] (  8,  7   )     int  ->  [rbp-0x34]  do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x4)" P-DEP
+;  V51 tmp41        [V51    ] (  8,  7   )   ubyte  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed "field V22.hasValue (fldOffset=0x0)" P-DEP
+;  V52 tmp42        [V52    ] (  8,  7   )   short  ->  [rbp-0x3E]  do-not-enreg[X] addr-exposed "field V22.value (fldOffset=0x2)" P-DEP
+;* V53 tmp43        [V53    ] (  0,  0   )   ubyte  ->  zero-ref    "field V33.hasValue (fldOffset=0x0)" P-INDEP
+;* V54 tmp44        [V54    ] (  0,  0   )     int  ->  zero-ref    "field V33.value (fldOffset=0x4)" P-INDEP
+;* V55 tmp45        [V55    ] (  0,  0   )   ubyte  ->  zero-ref    "field V34.hasValue (fldOffset=0x0)" P-INDEP
+;* V56 tmp46        [V56    ] (  0,  0   )     int  ->  zero-ref    "field V34.value (fldOffset=0x4)" P-INDEP
+;  V57 tmp47        [V57,T43] (  2,  0   )     ref  ->  rbx         "argument with side effect"
+;  V58 tmp48        [V58,T44] (  2,  0   )     ref  ->  rdx         "argument with side effect"
+;  V59 tmp49        [V59,T22] (  3,  3   )  struct ( 8) [rbp-0x58]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+;  V60 tmp50        [V60,T23] (  3,  3   )  struct ( 8) [rbp-0x60]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+;  V61 tmp51        [V61,T24] (  3,  3   )  struct ( 8) [rbp-0x68]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[short]>
+;  V62 cse0         [V62,T06] (  5, 18.25)     int  ->  [rbp-0x6C]  spill-single-def "CSE #01: aggressive"
+;  V63 cse1         [V63,T13] (  6,  7   )     int  ->  [rbp-0x70]  spill-single-def "CSE #08: moderate"
+;  V64 cse2         [V64,T05] (  5, 19.80)    long  ->  rdi         "CSE #04: aggressive"
+;  V65 rat0         [V65,T31] (  3, 11.88)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V66 rat1         [V66,T32] (  3, 11.88)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V67 rat2         [V67,T33] (  3, 11.88)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V68 rat3         [V68,T34] (  3, 11.88)  simd32  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V69 rat4         [V69,T35] (  3,  0.12)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V70 rat5         [V70,T36] (  3,  0.12)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V71 rat6         [V71,T37] (  3,  0.12)  simd16  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
+;  V72 rat7         [V72,T38] (  3,  0.12)  simd32  ->  mm0         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 88
 
 G_M2973_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 88
        lea      rbp, [rsp+0x80]
        mov      gword ptr [rbp-0x78], rcx
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=32 bbWeight=1 PerfScore 8.25
 G_M2973_IG02:
        xor      r13d, r13d
        xor      r12d, r12d
        movzx    rax, dl
        mov      dword ptr [rbp-0x70], eax
        test     eax, eax
        jne      SHORT G_M2973_IG04
 						;; size=16 bbWeight=1 PerfScore 3.00
 G_M2973_IG03:
        xor      ecx, ecx
        xor      edx, edx
        jmp      SHORT G_M2973_IG05
 						;; size=6 bbWeight=0.50 PerfScore 1.25
 G_M2973_IG04:
        mov      ecx, 1
        mov      edx, 1
 						;; size=10 bbWeight=0.50 PerfScore 0.25
 G_M2973_IG05:
        mov      byte  ptr [rbp-0x44], cl
        mov      dword ptr [rbp-0x48], edx
        mov      byte  ptr [rbp-0x4C], 0
        mov      word  ptr [rbp-0x50], 0
        xor      r10d, r10d
        mov      r11d, dword ptr [r15+0x08]
        mov      dword ptr [rbp-0x6C], r11d
        test     r11d, r11d
-       jle      G_M2973_IG27
+       jle      G_M2973_IG36
 						;; size=36 bbWeight=1 PerfScore 8.50
 G_M2973_IG06:
        test     rbx, rbx
        je       G_M2973_IG17
        cmp      dword ptr [rbx+0x08], r11d
        jl       G_M2973_IG16
 						;; size=19 bbWeight=0.25 PerfScore 1.31
 G_M2973_IG07:
        mov      dword ptr [rbp-0x2C], r10d
        mov      edi, r10d
        mov      rsi, gword ptr [r15+8*rdi+0x10]
        test     rsi, rsi
        je       G_M2973_IG18
 						;; size=21 bbWeight=3.96 PerfScore 17.82
 G_M2973_IG08:
        cmp      dword ptr [rsi+0x08], 12
        jne      G_M2973_IG18
 						;; size=10 bbWeight=0.99 PerfScore 3.96
 G_M2973_IG09:
        vmovups  xmm0, xmmword ptr [rsi+0x0C]
        vmovups  xmm1, xmmword ptr [rsi+0x14]
        vpxor    xmm1, xmm1, xmmword ptr [reloc @RWD00]
        vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD16], -34
        vptest   xmm0, xmm0
        sete     r14b
        movzx    r14, r14b
        test     r14d, r14d
        jne      G_M2973_IG21
 						;; size=51 bbWeight=1.98 PerfScore 34.65
 G_M2973_IG10:
        cmp      dword ptr [rsi+0x08], 9
        jne      G_M2973_IG19
 						;; size=10 bbWeight=0.99 PerfScore 3.96
 G_M2973_IG11:
        vmovups  xmm0, xmmword ptr [rsi+0x0C]
        vmovups  xmm1, xmmword ptr [rsi+0x0E]
        vpxor    xmm1, xmm1, xmmword ptr [reloc @RWD32]
        vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD48], -34
        vptest   xmm0, xmm0
        sete     r14b
        movzx    r14, r14b
        test     r14d, r14d
        jne      G_M2973_IG24
 						;; size=51 bbWeight=1.98 PerfScore 34.65
 G_M2973_IG12:
        cmp      dword ptr [rsi+0x08], 14
        jne      G_M2973_IG20
 						;; size=10 bbWeight=0.99 PerfScore 3.96
 G_M2973_IG13:
        vmovups  xmm0, xmmword ptr [rsi+0x0C]
        vmovups  xmm1, xmmword ptr [rsi+0x18]
        vpxor    xmm1, xmm1, xmmword ptr [reloc @RWD64]
        vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD80], -34
        vptest   xmm0, xmm0
        sete     r14b
        movzx    r14, r14b
        test     r14d, r14d
-       jne      G_M2973_IG25
+       jne      G_M2973_IG29
 						;; size=51 bbWeight=1.98 PerfScore 34.65
 G_M2973_IG14:
        cmp      dword ptr [rsi+0x08], 16
-       jne      G_M2973_IG26
+       jne      G_M2973_IG35
 						;; size=10 bbWeight=0.99 PerfScore 3.96
 G_M2973_IG15:
        vmovups  ymm0, ymmword ptr [rsi+0x0C]
        vpxor    ymm0, ymm0, ymmword ptr [reloc @RWD96]
        vptest   ymm0, ymm0
        sete     sil
        movzx    rsi, sil
        test     esi, esi
-       jne      G_M2973_IG53
-       jmp      G_M2973_IG26
+       jne      G_M2973_IG74
+       jmp      G_M2973_IG35
 						;; size=39 bbWeight=1.98 PerfScore 32.67
 G_M2973_IG16:
        mov      r11d, dword ptr [rbp-0x6C]
        mov      r14, gword ptr [rbp-0x78]
-       jmp      G_M2973_IG30
+       jmp      G_M2973_IG39
 						;; size=13 bbWeight=0.12 PerfScore 0.50
 G_M2973_IG17:
        mov      r14, gword ptr [rbp-0x78]
-       jmp      G_M2973_IG30
+       jmp      G_M2973_IG39
 						;; size=9 bbWeight=0.12 PerfScore 0.38
 G_M2973_IG18:
        test     rsi, rsi
        jne      G_M2973_IG10
 						;; size=9 bbWeight=1.98 PerfScore 2.48
 G_M2973_IG19:
        test     rsi, rsi
        jne      G_M2973_IG12
 						;; size=9 bbWeight=1.98 PerfScore 2.48
 G_M2973_IG20:
        test     rsi, rsi
-       je       G_M2973_IG26
+       je       G_M2973_IG35
        jmp      SHORT G_M2973_IG14
 						;; size=11 bbWeight=1.98 PerfScore 6.44
 G_M2973_IG21:
        mov      r13, gword ptr [rbx+8*rdi+0x10]
        mov      rsi, 0xD1FFAB1E      ; System.Runtime.InteropServices.UnmanagedType
        cmp      qword ptr [r13], rsi
        je       SHORT G_M2973_IG23
 						;; size=21 bbWeight=3.96 PerfScore 24.75
 G_M2973_IG22:
        mov      rsi, r13
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.InteropServices.UnmanagedType
        mov      r12, 0xD1FFAB1E      ; code for CORINFO_HELP_UNBOX
        call     [r12]CORINFO_HELP_UNBOX
 						;; size=27 bbWeight=0.99 PerfScore 3.71
 G_M2973_IG23:
        mov      r12d, dword ptr [r13+0x08]
        mov      r13d, 1
-       jmp      SHORT G_M2973_IG26
-						;; size=12 bbWeight=3.96 PerfScore 16.83
+       jmp      G_M2973_IG35
+						;; size=15 bbWeight=3.96 PerfScore 16.83
 G_M2973_IG24:
        mov      rdx, gword ptr [rbx+8*rdi+0x10]
-       lea      rdi, [rbp-0x38]
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       test     rdx, rdx
+       je       SHORT G_M2973_IG26
+						;; size=10 bbWeight=3.96 PerfScore 12.87
+G_M2973_IG25:
+       mov      rcx, 0xD1FFAB1E      ; System.Int32
+       cmp      qword ptr [rdx], rcx
+       je       SHORT G_M2973_IG27
+       jmp      G_M2973_IG70
+						;; size=20 bbWeight=0.99 PerfScore 6.19
+G_M2973_IG26:
+       xor      edx, edx
+       mov      qword ptr [rbp-0x38], rdx
+       jmp      SHORT G_M2973_IG28
+						;; size=8 bbWeight=0.99 PerfScore 3.22
+G_M2973_IG27:
+       mov      byte  ptr [rbp-0x38], 1
+       mov      edi, dword ptr [rdx+0x08]
+       mov      dword ptr [rbp-0x34], edi
+						;; size=10 bbWeight=0.99 PerfScore 3.96
+G_M2973_IG28:
        movzx    rcx, byte  ptr [rbp-0x38]
-       mov      byte  ptr [rbp-0x44], cl
        mov      edx, dword ptr [rbp-0x34]
-       mov      dword ptr [rbp-0x48], edx
-       jmp      SHORT G_M2973_IG26
-						;; size=39 bbWeight=3.96 PerfScore 38.61
-G_M2973_IG25:
-       cmp      dword ptr [rbp-0x70], 0
-       jne      G_M2973_IG53
-       mov      rdx, gword ptr [rbx+8*rdi+0x10]
-       lea      rdi, [rbp-0x40]
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[short]
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       mov      esi, edx
+       mov      dword ptr [rbp-0x44], ecx
+       mov      dword ptr [rbp-0x48], esi
+       jmp      SHORT G_M2973_IG35
+						;; size=17 bbWeight=3.96 PerfScore 24.75
+G_M2973_IG29:
+       mov      eax, dword ptr [rbp-0x70]
+       test     eax, eax
+       jne      SHORT G_M2973_IG31
+       mov      rdi, gword ptr [rbx+8*rdi+0x10]
+       test     rdi, rdi
+       je       SHORT G_M2973_IG32
+						;; size=17 bbWeight=3.96 PerfScore 21.78
+G_M2973_IG30:
+       mov      r8, 0xD1FFAB1E      ; System.Int16
+       cmp      qword ptr [rdi], r8
+       je       SHORT G_M2973_IG33
+       jmp      G_M2973_IG71
+						;; size=20 bbWeight=0.99 PerfScore 6.19
+G_M2973_IG31:
+       jmp      G_M2973_IG74
+						;; size=5 bbWeight=1.98 PerfScore 3.96
+G_M2973_IG32:
+       xor      edi, edi
+       mov      dword ptr [rbp-0x40], edi
+       jmp      SHORT G_M2973_IG34
+						;; size=7 bbWeight=0.99 PerfScore 3.22
+G_M2973_IG33:
+       mov      byte  ptr [rbp-0x40], 1
+       movsx    r9, word  ptr [rdi+0x08]
+       mov      word  ptr [rbp-0x3E], r9w
+						;; size=14 bbWeight=0.99 PerfScore 5.94
+G_M2973_IG34:
        movzx    r8, byte  ptr [rbp-0x40]
        mov      byte  ptr [rbp-0x4C], r8b
        movsx    r9, word  ptr [rbp-0x3E]
        mov      word  ptr [rbp-0x50], r9w
-						;; size=53 bbWeight=3.96 PerfScore 50.49
-G_M2973_IG26:
+						;; size=19 bbWeight=3.96 PerfScore 23.76
+G_M2973_IG35:
        mov      r10d, dword ptr [rbp-0x2C]
        inc      r10d
        mov      r11d, dword ptr [rbp-0x6C]
        cmp      r11d, r10d
        jg       G_M2973_IG07
 						;; size=20 bbWeight=15.84 PerfScore 55.44
-G_M2973_IG27:
+G_M2973_IG36:
        cmp      dword ptr [rbp-0x70], 0
-       je       G_M2973_IG51
+       je       G_M2973_IG68
 						;; size=10 bbWeight=1 PerfScore 3.00
-G_M2973_IG28:
+G_M2973_IG37:
        mov      r14, gword ptr [rbp-0x78]
        mov      dword ptr [r14+0x18], 30
        mov      r10d, -1
        test     r13b, r13b
        cmove    r12d, r10d
        mov      dword ptr [r14+0x1C], r12d
        cmp      byte  ptr [rbp-0x44], 0
        mov      edx, r10d
        cmovne   edx, dword ptr [rbp-0x48]
        mov      dword ptr [r14+0x20], edx
 						;; size=44 bbWeight=0.50 PerfScore 4.50
-G_M2973_IG29:
+G_M2973_IG38:
        vzeroupper 
        add      rsp, 88
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M2973_IG30:
+G_M2973_IG39:
        mov      esi, r10d
        mov      rsi, gword ptr [r15+8*rsi+0x10]
        test     rsi, rsi
-       je       G_M2973_IG43
+       je       G_M2973_IG52
 						;; size=17 bbWeight=0.04 PerfScore 0.14
-G_M2973_IG31:
+G_M2973_IG40:
        cmp      dword ptr [rsi+0x08], 12
-       jne      G_M2973_IG43
+       jne      G_M2973_IG52
 						;; size=10 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG32:
+G_M2973_IG41:
        vmovups  xmm0, xmmword ptr [rsi+0x0C]
        vmovups  xmm1, xmmword ptr [rsi+0x14]
        vpxor    xmm1, xmm1, xmmword ptr [reloc @RWD00]
        vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD16], -34
        vptest   xmm0, xmm0
        sete     dil
        movzx    rdi, dil
        test     edi, edi
-       jne      G_M2973_IG46
+       jne      G_M2973_IG55
 						;; size=50 bbWeight=0.02 PerfScore 0.35
-G_M2973_IG33:
+G_M2973_IG42:
        cmp      dword ptr [rsi+0x08], 9
-       jne      G_M2973_IG44
+       jne      G_M2973_IG53
 						;; size=10 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG34:
+G_M2973_IG43:
        vmovups  xmm0, xmmword ptr [rsi+0x0C]
        vmovups  xmm1, xmmword ptr [rsi+0x0E]
        vpxor    xmm1, xmm1, xmmword ptr [reloc @RWD32]
        vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD48], -34
        vptest   xmm0, xmm0
        sete     dil
        movzx    rdi, dil
        test     edi, edi
-       jne      G_M2973_IG48
+       jne      G_M2973_IG57
 						;; size=50 bbWeight=0.02 PerfScore 0.35
-G_M2973_IG35:
+G_M2973_IG44:
        cmp      dword ptr [rsi+0x08], 14
-       jne      G_M2973_IG45
+       jne      G_M2973_IG54
 						;; size=10 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG36:
+G_M2973_IG45:
        vmovups  xmm0, xmmword ptr [rsi+0x0C]
        vmovups  xmm1, xmmword ptr [rsi+0x18]
        vpxor    xmm1, xmm1, xmmword ptr [reloc @RWD64]
        vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD80], -34
        vptest   xmm0, xmm0
        sete     dil
        movzx    rdi, dil
        test     edi, edi
-       jne      G_M2973_IG49
+       jne      G_M2973_IG62
 						;; size=50 bbWeight=0.02 PerfScore 0.35
-G_M2973_IG37:
+G_M2973_IG46:
        cmp      dword ptr [rsi+0x08], 16
-       jne      SHORT G_M2973_IG41
+       jne      SHORT G_M2973_IG50
 						;; size=6 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG38:
+G_M2973_IG47:
        vmovups  ymm0, ymmword ptr [rsi+0x0C]
        vpxor    ymm0, ymm0, ymmword ptr [reloc @RWD96]
        vptest   ymm0, ymm0
        sete     sil
        movzx    rsi, sil
        test     esi, esi
-       je       SHORT G_M2973_IG41
+       je       SHORT G_M2973_IG50
 						;; size=30 bbWeight=0.02 PerfScore 0.29
-G_M2973_IG39:
+G_M2973_IG48:
        mov      dword ptr [rbp-0x2C], r10d
-       jmp      G_M2973_IG53
+       jmp      G_M2973_IG74
 						;; size=9 bbWeight=0.01 PerfScore 0.03
-G_M2973_IG40:
+G_M2973_IG49:
        mov      r12d, dword ptr [r13+0x08]
        mov      r13d, 1
        mov      r10d, dword ptr [rbp-0x2C]
 						;; size=14 bbWeight=0.04 PerfScore 0.13
-G_M2973_IG41:
+G_M2973_IG50:
        inc      r10d
        cmp      r11d, r10d
        mov      r11d, dword ptr [rbp-0x6C]
-       jg       G_M2973_IG30
+       jg       G_M2973_IG39
 						;; size=16 bbWeight=0.16 PerfScore 0.40
-G_M2973_IG42:
+G_M2973_IG51:
        mov      gword ptr [rbp-0x78], r14
-       jmp      G_M2973_IG27
+       jmp      G_M2973_IG36
 						;; size=9 bbWeight=0.08 PerfScore 0.24
-G_M2973_IG43:
+G_M2973_IG52:
        test     rsi, rsi
-       jne      G_M2973_IG33
+       jne      G_M2973_IG42
 						;; size=9 bbWeight=0.02 PerfScore 0.03
-G_M2973_IG44:
+G_M2973_IG53:
        test     rsi, rsi
-       jne      G_M2973_IG35
+       jne      G_M2973_IG44
 						;; size=9 bbWeight=0.02 PerfScore 0.03
-G_M2973_IG45:
+G_M2973_IG54:
        test     rsi, rsi
-       je       SHORT G_M2973_IG41
-       jmp      SHORT G_M2973_IG37
+       je       SHORT G_M2973_IG50
+       jmp      SHORT G_M2973_IG46
 						;; size=7 bbWeight=0.02 PerfScore 0.07
-G_M2973_IG46:
+G_M2973_IG55:
        cmp      r10d, dword ptr [rbx+0x08]
-       jae      G_M2973_IG54
+       jae      G_M2973_IG75
        mov      dword ptr [rbp-0x2C], r10d
        mov      esi, r10d
        mov      r13, gword ptr [rbx+8*rsi+0x10]
        mov      rsi, 0xD1FFAB1E      ; System.Runtime.InteropServices.UnmanagedType
        cmp      qword ptr [r13], rsi
-       je       SHORT G_M2973_IG40
+       je       SHORT G_M2973_IG49
 						;; size=38 bbWeight=0.04 PerfScore 0.46
-G_M2973_IG47:
+G_M2973_IG56:
        mov      rsi, r13
        mov      rdi, 0xD1FFAB1E      ; System.Runtime.InteropServices.UnmanagedType
        mov      r12, 0xD1FFAB1E      ; code for CORINFO_HELP_UNBOX
        call     [r12]CORINFO_HELP_UNBOX
        mov      r11d, dword ptr [rbp-0x6C]
-       jmp      G_M2973_IG40
+       jmp      G_M2973_IG49
 						;; size=36 bbWeight=0.01 PerfScore 0.07
-G_M2973_IG48:
+G_M2973_IG57:
        cmp      r10d, dword ptr [rbx+0x08]
-       jae      G_M2973_IG54
-       mov      dword ptr [rbp-0x2C], r10d
-       mov      edx, r10d
-       mov      rdx, gword ptr [rbx+8*rdx+0x10]
-       lea      rdi, [rbp-0x38]
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       jae      G_M2973_IG75
+       mov      ecx, r10d
+       mov      rdx, gword ptr [rbx+8*rcx+0x10]
+       test     rdx, rdx
+       je       SHORT G_M2973_IG59
+						;; size=23 bbWeight=0.04 PerfScore 0.30
+G_M2973_IG58:
+       mov      rsi, 0xD1FFAB1E      ; System.Int32
+       cmp      qword ptr [rdx], rsi
+       je       SHORT G_M2973_IG60
+       jmp      G_M2973_IG72
+						;; size=20 bbWeight=0.01 PerfScore 0.06
+G_M2973_IG59:
+       xor      edx, edx
+       mov      qword ptr [rbp-0x38], rdx
+       jmp      SHORT G_M2973_IG61
+						;; size=8 bbWeight=0.01 PerfScore 0.03
+G_M2973_IG60:
+       mov      byte  ptr [rbp-0x38], 1
+       mov      esi, dword ptr [rdx+0x08]
+       mov      dword ptr [rbp-0x34], esi
+						;; size=10 bbWeight=0.01 PerfScore 0.04
+G_M2973_IG61:
        movzx    rcx, byte  ptr [rbp-0x38]
-       mov      byte  ptr [rbp-0x44], cl
+       movzx    rdi, cl
        mov      edx, dword ptr [rbp-0x34]
-       mov      dword ptr [rbp-0x48], edx
-       mov      r10d, dword ptr [rbp-0x2C]
-       mov      r11d, dword ptr [rbp-0x6C]
-       jmp      G_M2973_IG41
-						;; size=67 bbWeight=0.04 PerfScore 0.68
-G_M2973_IG49:
-       cmp      dword ptr [rbp-0x70], 0
-       jne      SHORT G_M2973_IG50
+       mov      ecx, edx
+       mov      dword ptr [rbp-0x44], edi
+       mov      dword ptr [rbp-0x48], ecx
+       jmp      G_M2973_IG50
+						;; size=24 bbWeight=0.04 PerfScore 0.26
+G_M2973_IG62:
+       mov      eax, dword ptr [rbp-0x70]
+       test     eax, eax
+       jne      SHORT G_M2973_IG64
        cmp      r10d, dword ptr [rbx+0x08]
-       jae      G_M2973_IG54
+       jae      G_M2973_IG75
+       mov      r8d, r10d
+       mov      rdi, gword ptr [rbx+8*r8+0x10]
+       mov      r8, rdi
+       test     r8, r8
+       je       SHORT G_M2973_IG65
+						;; size=33 bbWeight=0.04 PerfScore 0.40
+G_M2973_IG63:
+       mov      r9, 0xD1FFAB1E      ; System.Int16
+       cmp      qword ptr [r8], r9
+       je       SHORT G_M2973_IG66
+       jmp      G_M2973_IG73
+						;; size=20 bbWeight=0.01 PerfScore 0.06
+G_M2973_IG64:
        mov      dword ptr [rbp-0x2C], r10d
-       mov      edi, r10d
-       mov      rdx, gword ptr [rbx+8*rdi+0x10]
-       lea      rdi, [rbp-0x40]
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[short]
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       jmp      G_M2973_IG74
+						;; size=9 bbWeight=0.02 PerfScore 0.06
+G_M2973_IG65:
+       xor      r8d, r8d
+       mov      dword ptr [rbp-0x40], r8d
+       jmp      SHORT G_M2973_IG67
+						;; size=9 bbWeight=0.01 PerfScore 0.03
+G_M2973_IG66:
+       mov      byte  ptr [rbp-0x40], 1
+       movsx    rsi, word  ptr [r8+0x08]
+       mov      word  ptr [rbp-0x3E], si
+						;; size=13 bbWeight=0.01 PerfScore 0.06
+G_M2973_IG67:
        movzx    r8, byte  ptr [rbp-0x40]
-       movzx    rsi, r8b
        movsx    r9, word  ptr [rbp-0x3E]
-       movsx    rdx, r9w
-       mov      dword ptr [rbp-0x4C], esi
-       mov      dword ptr [rbp-0x50], edx
-       mov      r10d, dword ptr [rbp-0x2C]
-       mov      r11d, dword ptr [rbp-0x6C]
-       jmp      G_M2973_IG41
-						;; size=84 bbWeight=0.04 PerfScore 0.90
-G_M2973_IG50:
-       mov      dword ptr [rbp-0x2C], r10d
-       jmp      SHORT G_M2973_IG53
-						;; size=6 bbWeight=0.02 PerfScore 0.06
-G_M2973_IG51:
+       mov      dword ptr [rbp-0x4C], r8d
+       mov      dword ptr [rbp-0x50], r9d
+       jmp      G_M2973_IG50
+						;; size=23 bbWeight=0.04 PerfScore 0.32
+G_M2973_IG68:
        mov      r14, gword ptr [rbp-0x78]
        mov      byte  ptr [rbp-0x58], r13b
        mov      dword ptr [rbp-0x54], r12d
        movzx    rcx, byte  ptr [rbp-0x44]
        mov      byte  ptr [rbp-0x60], cl
        mov      edx, dword ptr [rbp-0x48]
        mov      dword ptr [rbp-0x5C], edx
        movzx    r8, byte  ptr [rbp-0x4C]
        mov      byte  ptr [rbp-0x68], r8b
        movsx    r9, word  ptr [rbp-0x50]
        mov      word  ptr [rbp-0x66], r9w
        mov      rsi, qword ptr [rbp-0x58]
        mov      rdx, qword ptr [rbp-0x60]
        mov      ecx, dword ptr [rbp-0x68]
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Reflection.Emit.MarshallingData:SetMarshalAsArray(System.Nullable`1[int],System.Nullable`1[int],System.Nullable`1[short]):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Reflection.Emit.MarshallingData:SetMarshalAsArray(System.Nullable`1[int],System.Nullable`1[int],System.Nullable`1[short]):this
        nop      
 						;; size=73 bbWeight=0.50 PerfScore 11.38
-G_M2973_IG52:
+G_M2973_IG69:
        vzeroupper 
        add      rsp, 88
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M2973_IG53:
+G_M2973_IG70:
+       lea      rdi, [rbp-0x38]
+       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
+       call     CORINFO_HELP_UNBOX_NULLABLE
+       jmp      G_M2973_IG28
+						;; size=24 bbWeight=0 PerfScore 0.00
+G_M2973_IG71:
+       mov      gword ptr [rbp-0x80], rdi
+       lea      rdi, [rbp-0x40]
+       mov      rdx, gword ptr [rbp-0x80]
+       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[short]
+       call     CORINFO_HELP_UNBOX_NULLABLE
+       mov      eax, dword ptr [rbp-0x70]
+       jmp      G_M2973_IG34
+						;; size=35 bbWeight=0 PerfScore 0.00
+G_M2973_IG72:
+       mov      dword ptr [rbp-0x2C], r10d
+       lea      rdi, [rbp-0x38]
+       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
+       call     CORINFO_HELP_UNBOX_NULLABLE
+       mov      r10d, dword ptr [rbp-0x2C]
+       mov      r11d, dword ptr [rbp-0x6C]
+       jmp      G_M2973_IG61
+						;; size=36 bbWeight=0 PerfScore 0.00
+G_M2973_IG73:
+       mov      dword ptr [rbp-0x2C], r10d
+       lea      rdi, [rbp-0x40]
+       mov      rdx, r8
+       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[short]
+       call     CORINFO_HELP_UNBOX_NULLABLE
+       mov      eax, dword ptr [rbp-0x70]
+       mov      r10d, dword ptr [rbp-0x2C]
+       mov      r11d, dword ptr [rbp-0x6C]
+       jmp      G_M2973_IG67
+						;; size=42 bbWeight=0 PerfScore 0.00
+G_M2973_IG74:
        mov      rcx, 0xD1FFAB1E      ; code for System.SR:get_Argument_InvalidParameterForUnmanagedType():System.String
        call     [rcx]System.SR:get_Argument_InvalidParameterForUnmanagedType():System.String
        mov      rbx, rax
        mov      edi, dword ptr [rbp-0x2C]
        mov      r15, gword ptr [r15+8*rdi+0x10]
        mov      r14, 0xD1FFAB1E      ; 'ByValArray'
        mov      rdi, 0xD1FFAB1E      ; 'LPArray'
        cmp      dword ptr [rbp-0x70], 0
        cmove    r14, rdi
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentException
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      rdi, rbx
        mov      rsi, r15
        mov      rdx, r14
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object,System.Object):System.String
        mov      rbx, rax
        mov      edi, 0x1057
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdx, rax
        mov      rsi, rbx
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentException:.ctor(System.String,System.String):this
        mov      rdi, r13
        call     CORINFO_HELP_THROW
        int3     
 						;; size=143 bbWeight=0 PerfScore 0.00
-G_M2973_IG54:
+G_M2973_IG75:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 RWD00  	dq	0062007500530079h, 0065007000790054h
 RWD16  	dq	0061007200720041h, 0062007500530079h
 RWD32  	dq	00430065007A0069h, 00740073006E006Fh
 RWD48  	dq	0065007A00690053h, 0073006E006F0043h
 RWD64  	dq	0049006D00610072h, 007800650064006Eh
 RWD80  	dq	0065007A00690053h, 0061007200610050h
 RWD96  	dq	0065006600610053h, 0061007200720041h, 0062007500530079h, 0065007000790054h
 
 
-; Total bytes of code 1444, prolog size 32, PerfScore 423.78, instruction count 324, allocated bytes for code 1444 (MethodHash=a7f5f462) for method System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) (FullOpts)
+; Total bytes of code 1674, prolog size 32, PerfScore 450.50, instruction count 386, allocated bytes for code 1674 (MethodHash=a7f5f462) for method System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) (FullOpts)

Note: some changes were skipped as they were too large to fit into a comment.

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 18, 2024

Top method improvements

-63 (-28.77 % of base) - System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this
 ; Assembly listing for method System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  4,  3   )     ref  ->  r15         this class-hnd single-def <System.Collections.Generic.Comparer`1[System.Nullable`1[int]]>
+;  V00 this         [V00,T02] (  4,  3   )     ref  ->  rdi         this class-hnd single-def <System.Collections.Generic.Comparer`1[System.Nullable`1[int]]>
 ;  V01 arg1         [V01,T01] (  5,  4   )     ref  ->  rsi         class-hnd single-def <System.Object>
-;  V02 arg2         [V02,T00] (  6,  4   )     ref  ->  rbx         class-hnd single-def <System.Object>
+;  V02 arg2         [V02,T00] (  6,  4   )     ref  ->  rdx         class-hnd single-def <System.Object>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V05 tmp2         [V05    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
-;  V06 tmp3         [V06    ] (  3,  3   )  struct ( 8) [rbp-0x28]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
-;  V07 tmp4         [V07    ] (  2,  2   )  struct ( 8) [rbp-0x30]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+;  V06 tmp3         [V06    ] (  4,  4   )  struct ( 8) [rbp-0x08]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+;  V07 tmp4         [V07    ] (  3,  3   )  struct ( 8) [rbp-0x10]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct ( 8) zero-ref    "impAppendStmt" <System.Nullable`1[int]>
 ;  V09 tmp6         [V09,T04] (  2,  2   )     int  ->  rax         "Single return block return value"
-;  V10 tmp7         [V10    ] (  2,  1.50)   ubyte  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
-;  V11 tmp8         [V11    ] (  2,  1.50)     int  ->  [rbp-0x24]  do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
-;  V12 tmp9         [V12    ] (  2,  2   )   ubyte  ->  [rbp-0x30]  do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
-;  V13 tmp10        [V13    ] (  2,  2   )     int  ->  [rbp-0x2C]  do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
-;  V14 tmp11        [V14,T07] (  2,  1   )   ubyte  ->  r14         "field V08.hasValue (fldOffset=0x0)" P-INDEP
-;  V15 tmp12        [V15,T08] (  2,  1   )     int  ->  r13         "field V08.value (fldOffset=0x4)" P-INDEP
-;  V16 tmp13        [V16,T03] (  3,  3   )  struct ( 8) [rbp-0x38]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-;  V17 tmp14        [V17,T05] (  2,  2   )  struct ( 8) [rbp-0x40]  do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
-;  V18 cse0         [V18,T06] (  3,  1.50)    long  ->  rdi         "CSE #01: moderate"
+;  V10 tmp7         [V10    ] (  2,  1   )   ubyte  ->  [rbp-0x08]  do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
+;  V11 tmp8         [V11    ] (  2,  1   )     int  ->  [rbp-0x04]  do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
+;  V12 tmp9         [V12    ] (  2,  1.50)   ubyte  ->  [rbp-0x10]  do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
+;  V13 tmp10        [V13    ] (  2,  1.50)     int  ->  [rbp-0x0C]  do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
+;  V14 tmp11        [V14,T07] (  2,  1   )   ubyte  ->  rsi         "field V08.hasValue (fldOffset=0x0)" P-INDEP
+;  V15 tmp12        [V15,T08] (  2,  1   )     int  ->  rax         "field V08.value (fldOffset=0x4)" P-INDEP
+;  V16 tmp13        [V16,T03] (  3,  3   )  struct ( 8) [rbp-0x18]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+;  V17 tmp14        [V17,T05] (  2,  2   )  struct ( 8) [rbp-0x20]  do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
+;  V18 cse0         [V18,T06] (  3,  1.50)    long  ->  rax         "CSE #01: moderate"
 ;
 ; Lcl frame size = 32
 
 G_M52206_IG01:
        push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     rbx
        sub      rsp, 32
-       lea      rbp, [rsp+0x40]
-       mov      r15, rdi
-       mov      rbx, rdx
-						;; size=23 bbWeight=1 PerfScore 6.25
+       lea      rbp, [rsp+0x20]
+						;; size=10 bbWeight=1 PerfScore 1.75
 G_M52206_IG02:
        test     rsi, rsi
        jne      SHORT G_M52206_IG05
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M52206_IG03:
        xor      eax, eax
        mov      esi, -1
-       test     rbx, rbx
+       test     rdx, rdx
        cmovne   eax, esi
 						;; size=13 bbWeight=0.50 PerfScore 0.50
 G_M52206_IG04:
        add      rsp, 32
-       pop      rbx
-       pop      r13
-       pop      r14
-       pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.50 PerfScore 1.88
+						;; size=6 bbWeight=0.50 PerfScore 0.88
 G_M52206_IG05:
-       test     rbx, rbx
+       test     rdx, rdx
        jne      SHORT G_M52206_IG07
        mov      eax, 1
 						;; size=10 bbWeight=0.50 PerfScore 0.75
 G_M52206_IG06:
        add      rsp, 32
-       pop      rbx
-       pop      r13
-       pop      r14
-       pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.50 PerfScore 1.88
+						;; size=6 bbWeight=0.50 PerfScore 0.88
 G_M52206_IG07:
-       mov      rdi, 0xD1FFAB1E      ; System.Int32
-       cmp      qword ptr [rsi], rdi
+       mov      rax, 0xD1FFAB1E      ; System.Int32
+       cmp      qword ptr [rsi], rax
        jne      SHORT G_M52206_IG09
-       cmp      qword ptr [rbx], rdi
+       cmp      qword ptr [rdx], rax
        jne      SHORT G_M52206_IG09
-       lea      rdi, [rbp-0x28]
-       mov      rdx, rsi
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       movzx    r14, byte  ptr [rbp-0x28]
-       mov      r13d, dword ptr [rbp-0x24]
-       lea      rdi, [rbp-0x30]
-       mov      rdx, rbx
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       mov      byte  ptr [rbp-0x38], r14b
-       mov      dword ptr [rbp-0x34], r13d
-       mov      rsi, qword ptr [rbp-0x30]
-       mov      qword ptr [rbp-0x40], rsi
-       mov      rsi, qword ptr [rbp-0x38]
-       mov      rdx, qword ptr [rbp-0x40]
-       mov      rdi, r15
-       mov      rax, qword ptr [r15]
+       mov      byte  ptr [rbp-0x08], 1
+       mov      esi, dword ptr [rsi+0x08]
+       mov      dword ptr [rbp-0x04], esi
+       movzx    rsi, byte  ptr [rbp-0x08]
+       mov      eax, dword ptr [rbp-0x04]
+       mov      byte  ptr [rbp-0x10], 1
+       mov      edx, dword ptr [rdx+0x08]
+       mov      dword ptr [rbp-0x0C], edx
+       mov      byte  ptr [rbp-0x18], sil
+       mov      dword ptr [rbp-0x14], eax
+       mov      rsi, qword ptr [rbp-0x10]
+       mov      qword ptr [rbp-0x20], rsi
+       mov      rsi, qword ptr [rbp-0x18]
+       mov      rdx, qword ptr [rbp-0x20]
+       mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:Compare(System.Nullable`1[int],System.Nullable`1[int]):int:this
        nop      
-						;; size=111 bbWeight=0.50 PerfScore 13.88
+						;; size=82 bbWeight=0.50 PerfScore 15.75
 G_M52206_IG08:
        add      rsp, 32
-       pop      rbx
-       pop      r13
-       pop      r14
-       pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.50 PerfScore 1.88
+						;; size=6 bbWeight=0.50 PerfScore 0.88
 G_M52206_IG09:
        mov      edi, 55
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 219, prolog size 17, PerfScore 28.25, instruction count 69, allocated bytes for code 219 (MethodHash=18db3411) for method System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts)
+; Total bytes of code 156, prolog size 10, PerfScore 22.62, instruction count 48, allocated bytes for code 156 (MethodHash=18db3411) for method System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts)
-63 (-29.58 % of base) - System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this
 ; Assembly listing for method System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T02] (  4,  3   )     ref  ->  r15         this class-hnd single-def <System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]>
+;  V00 this         [V00,T02] (  4,  3   )     ref  ->  rdi         this class-hnd single-def <System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]>
 ;  V01 arg1         [V01,T00] (  6,  4.50)     ref  ->  rsi         class-hnd single-def <System.Object>
-;  V02 arg2         [V02,T01] (  6,  4.50)     ref  ->  rbx         class-hnd single-def <System.Object>
+;  V02 arg2         [V02,T01] (  6,  4.50)     ref  ->  rdx         class-hnd single-def <System.Object>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V05 tmp2         [V05    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
-;  V06 tmp3         [V06    ] (  3,  3   )  struct ( 8) [rbp-0x28]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
-;  V07 tmp4         [V07    ] (  2,  2   )  struct ( 8) [rbp-0x30]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+;  V06 tmp3         [V06    ] (  4,  4   )  struct ( 8) [rbp-0x08]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+;  V07 tmp4         [V07    ] (  3,  3   )  struct ( 8) [rbp-0x10]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
 ;* V08 tmp5         [V08    ] (  0,  0   )  struct ( 8) zero-ref    "impAppendStmt" <System.Nullable`1[int]>
-;  V09 tmp6         [V09    ] (  2,  1.50)   ubyte  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
-;  V10 tmp7         [V10    ] (  2,  1.50)     int  ->  [rbp-0x24]  do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
-;  V11 tmp8         [V11    ] (  2,  2   )   ubyte  ->  [rbp-0x30]  do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
-;  V12 tmp9         [V12    ] (  2,  2   )     int  ->  [rbp-0x2C]  do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
-;  V13 tmp10        [V13,T06] (  2,  1   )   ubyte  ->  r14         "field V08.hasValue (fldOffset=0x0)" P-INDEP
-;  V14 tmp11        [V14,T07] (  2,  1   )     int  ->  r13         "field V08.value (fldOffset=0x4)" P-INDEP
-;  V15 tmp12        [V15,T03] (  3,  3   )  struct ( 8) [rbp-0x38]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-;  V16 tmp13        [V16,T04] (  2,  2   )  struct ( 8) [rbp-0x40]  do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
-;  V17 cse0         [V17,T05] (  3,  1.50)    long  ->  rdi         "CSE #01: moderate"
+;  V09 tmp6         [V09    ] (  2,  1   )   ubyte  ->  [rbp-0x08]  do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
+;  V10 tmp7         [V10    ] (  2,  1   )     int  ->  [rbp-0x04]  do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
+;  V11 tmp8         [V11    ] (  2,  1.50)   ubyte  ->  [rbp-0x10]  do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
+;  V12 tmp9         [V12    ] (  2,  1.50)     int  ->  [rbp-0x0C]  do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
+;  V13 tmp10        [V13,T06] (  2,  1   )   ubyte  ->  rsi         "field V08.hasValue (fldOffset=0x0)" P-INDEP
+;  V14 tmp11        [V14,T07] (  2,  1   )     int  ->  rax         "field V08.value (fldOffset=0x4)" P-INDEP
+;  V15 tmp12        [V15,T03] (  3,  3   )  struct ( 8) [rbp-0x18]  do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+;  V16 tmp13        [V16,T04] (  2,  2   )  struct ( 8) [rbp-0x20]  do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
+;  V17 cse0         [V17,T05] (  3,  1.50)    long  ->  rax         "CSE #01: moderate"
 ;
 ; Lcl frame size = 32
 
 G_M56570_IG01:
        push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     rbx
        sub      rsp, 32
-       lea      rbp, [rsp+0x40]
-       mov      r15, rdi
-       mov      rbx, rdx
-						;; size=23 bbWeight=1 PerfScore 6.25
+       lea      rbp, [rsp+0x20]
+						;; size=10 bbWeight=1 PerfScore 1.75
 G_M56570_IG02:
-       cmp      rsi, rbx
+       cmp      rsi, rdx
        jne      SHORT G_M56570_IG05
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M56570_IG03:
        mov      eax, 1
 						;; size=5 bbWeight=0.50 PerfScore 0.12
 G_M56570_IG04:
        add      rsp, 32
-       pop      rbx
-       pop      r13
-       pop      r14
-       pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.50 PerfScore 1.88
+						;; size=6 bbWeight=0.50 PerfScore 0.88
 G_M56570_IG05:
        test     rsi, rsi
        je       SHORT G_M56570_IG06
-       test     rbx, rbx
+       test     rdx, rdx
        jne      SHORT G_M56570_IG08
 						;; size=10 bbWeight=0.50 PerfScore 1.25
 G_M56570_IG06:
        xor      eax, eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M56570_IG07:
        add      rsp, 32
-       pop      rbx
-       pop      r13
-       pop      r14
-       pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.50 PerfScore 1.88
+						;; size=6 bbWeight=0.50 PerfScore 0.88
 G_M56570_IG08:
-       mov      rdi, 0xD1FFAB1E      ; System.Int32
-       cmp      qword ptr [rsi], rdi
+       mov      rax, 0xD1FFAB1E      ; System.Int32
+       cmp      qword ptr [rsi], rax
        jne      SHORT G_M56570_IG10
-       cmp      qword ptr [rbx], rdi
+       cmp      qword ptr [rdx], rax
        jne      SHORT G_M56570_IG10
-       lea      rdi, [rbp-0x28]
-       mov      rdx, rsi
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       movzx    r14, byte  ptr [rbp-0x28]
-       mov      r13d, dword ptr [rbp-0x24]
-       lea      rdi, [rbp-0x30]
-       mov      rdx, rbx
-       mov      rsi, 0xD1FFAB1E      ; System.Nullable`1[int]
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       mov      byte  ptr [rbp-0x38], r14b
-       mov      dword ptr [rbp-0x34], r13d
-       mov      rsi, qword ptr [rbp-0x30]
-       mov      qword ptr [rbp-0x40], rsi
-       mov      rsi, qword ptr [rbp-0x38]
-       mov      rdx, qword ptr [rbp-0x40]
-       mov      rdi, r15
-       mov      rax, qword ptr [r15]
+       mov      byte  ptr [rbp-0x08], 1
+       mov      esi, dword ptr [rsi+0x08]
+       mov      dword ptr [rbp-0x04], esi
+       movzx    rsi, byte  ptr [rbp-0x08]
+       mov      eax, dword ptr [rbp-0x04]
+       mov      byte  ptr [rbp-0x10], 1
+       mov      edx, dword ptr [rdx+0x08]
+       mov      dword ptr [rbp-0x0C], edx
+       mov      byte  ptr [rbp-0x18], sil
+       mov      dword ptr [rbp-0x14], eax
+       mov      rsi, qword ptr [rbp-0x10]
+       mov      qword ptr [rbp-0x20], rsi
+       mov      rsi, qword ptr [rbp-0x18]
+       mov      rdx, qword ptr [rbp-0x20]
+       mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this
        nop      
-						;; size=111 bbWeight=0.50 PerfScore 13.88
+						;; size=82 bbWeight=0.50 PerfScore 15.75
 G_M56570_IG09:
        add      rsp, 32
-       pop      rbx
-       pop      r13
-       pop      r14
-       pop      r15
        pop      rbp
        ret      
-						;; size=13 bbWeight=0.50 PerfScore 1.88
+						;; size=6 bbWeight=0.50 PerfScore 0.88
 G_M56570_IG10:
        mov      edi, 55
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 213, prolog size 17, PerfScore 28.50, instruction count 68, allocated bytes for code 213 (MethodHash=21832305) for method System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
+; Total bytes of code 150, prolog size 10, PerfScore 22.88, instruction count 47, allocated bytes for code 150 (MethodHash=21832305) for method System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
-46 (-3.49 % of base) - System.GC:RefreshMemoryLimit()
 ; Assembly listing for method System.GC:RefreshMemoryLimit() (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 0 single block inlinees; 8 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;* V00 loc0         [V00    ] (  0,  0   )    long  ->  zero-ref   
 ;* V01 loc1         [V01    ] (  0,  0   )    long  ->  zero-ref   
 ;* V02 loc2         [V02    ] (  0,  0   )    long  ->  zero-ref   
 ;* V03 loc3         [V03    ] (  0,  0   )    long  ->  zero-ref   
 ;* V04 loc4         [V04    ] (  0,  0   )    long  ->  zero-ref   
 ;* V05 loc5         [V05    ] (  0,  0   )    long  ->  zero-ref   
 ;* V06 loc6         [V06    ] (  0,  0   )    long  ->  zero-ref   
 ;* V07 loc7         [V07    ] (  0,  0   )    long  ->  zero-ref   
-;  V08 loc8         [V08,T13] (  3,  3   )     int  ->  rax        
+;  V08 loc8         [V08,T12] (  3,  3   )     int  ->  rax        
 ;* V09 loc9         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Nullable`1[ulong]>
 ;  V10 loc10        [V10,T02] ( 10, 10   )  struct (64) [rbp-0x68]  do-not-enreg[SF] ld-addr-op <System.GC+GCHeapHardLimitInfo>
 ;  V11 OutArgs      [V11    ] (  1,  1   )  struct (64) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V12 tmp1         [V12,T05] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V13 tmp2         [V13,T14] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V14 tmp3         [V14    ] (  3,  6   )  struct (16) [rbp-0x78]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V15 tmp4         [V15,T06] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V16 tmp5         [V16,T15] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V17 tmp6         [V17    ] (  3,  6   )  struct (16) [rbp-0x88]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V18 tmp7         [V18,T07] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V19 tmp8         [V19,T16] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V20 tmp9         [V20    ] (  3,  6   )  struct (16) [rbp-0x98]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V21 tmp10        [V21,T08] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V22 tmp11        [V22,T17] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V23 tmp12        [V23    ] (  3,  6   )  struct (16) [rbp-0xA8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V24 tmp13        [V24,T09] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V25 tmp14        [V25,T18] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V26 tmp15        [V26    ] (  3,  6   )  struct (16) [rbp-0xB8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V27 tmp16        [V27,T10] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V28 tmp17        [V28,T19] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V29 tmp18        [V29    ] (  3,  6   )  struct (16) [rbp-0xC8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V30 tmp19        [V30,T11] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V31 tmp20        [V31,T20] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V32 tmp21        [V32    ] (  3,  6   )  struct (16) [rbp-0xD8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V33 tmp22        [V33,T12] (  4,  4.75)     ref  ->  rdx         single-def "ISINST eval op1"
-;  V34 tmp23        [V34,T21] (  3,  2.75)     ref  ->  rdx         class-hnd "spilling qmarkNull" <System.UInt64>
-;  V35 tmp24        [V35    ] (  3,  6   )  struct (16) [rbp-0xE8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-;  V36 tmp25        [V36,T30] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
-;  V37 tmp26        [V37,T31] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
-;  V38 tmp27        [V38,T22] (  2,  2   )    long  ->  r13         "Inline return value spill temp"
-;  V39 tmp28        [V39,T23] (  2,  2   )    long  ->  r12         "Inline return value spill temp"
-;  V40 tmp29        [V40,T24] (  2,  2   )    long  ->  r14         "Inline return value spill temp"
-;  V41 tmp30        [V41,T25] (  2,  2   )    long  ->  [rbp-0xF0]  spill-single-def "Inline return value spill temp"
-;  V42 tmp31        [V42,T26] (  2,  2   )    long  ->  [rbp-0xF8]  spill-single-def "Inline return value spill temp"
-;  V43 tmp32        [V43,T27] (  2,  2   )    long  ->  [rbp-0x100]  spill-single-def "Inline return value spill temp"
-;  V44 tmp33        [V44,T28] (  2,  2   )    long  ->  [rbp-0x108]  spill-single-def "Inline return value spill temp"
-;  V45 tmp34        [V45,T29] (  2,  2   )    long  ->  rax         "Inline return value spill temp"
-;  V46 FramesRoot   [V46,T04] (  6,  6   )    long  ->  rbx         "Pinvoke FrameListRoot"
-;  V47 PInvokeFrame [V47    ] (  8,  8   )  struct (64) [rbp-0x148]  do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
+;  V12 tmp1         [V12,T04] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V13 tmp2         [V13,T21] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V14 tmp3         [V14    ] (  5,  5.50)  struct (16) [rbp-0x78]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V15 tmp4         [V15,T05] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V16 tmp5         [V16,T22] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V17 tmp6         [V17    ] (  5,  5.50)  struct (16) [rbp-0x88]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V18 tmp7         [V18,T06] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V19 tmp8         [V19,T23] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V20 tmp9         [V20    ] (  5,  5.50)  struct (16) [rbp-0x98]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V21 tmp10        [V21,T07] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V22 tmp11        [V22,T24] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V23 tmp12        [V23    ] (  5,  5.50)  struct (16) [rbp-0xA8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V24 tmp13        [V24,T08] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V25 tmp14        [V25,T25] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V26 tmp15        [V26    ] (  5,  5.50)  struct (16) [rbp-0xB8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V27 tmp16        [V27,T09] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V28 tmp17        [V28,T26] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V29 tmp18        [V29    ] (  5,  5.50)  struct (16) [rbp-0xC8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V30 tmp19        [V30,T10] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V31 tmp20        [V31,T27] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V32 tmp21        [V32    ] (  5,  5.50)  struct (16) [rbp-0xD8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V33 tmp22        [V33,T11] (  4,  5   )     ref  ->  rax         single-def "ISINST eval op1"
+;  V34 tmp23        [V34,T28] (  2,  1   )     ref  ->  rax         class-hnd "spilling qmarkNull" <System.UInt64>
+;  V35 tmp24        [V35    ] (  5,  5.50)  struct (16) [rbp-0xE8]  do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+;  V36 tmp25        [V36,T29] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
+;  V37 tmp26        [V37,T30] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
+;  V38 tmp27        [V38,T13] (  2,  2   )    long  ->  r14         "Inline return value spill temp"
+;  V39 tmp28        [V39,T14] (  2,  2   )    long  ->  r13         "Inline return value spill temp"
+;  V40 tmp29        [V40,T15] (  2,  2   )    long  ->  r12         "Inline return value spill temp"
+;  V41 tmp30        [V41,T16] (  2,  2   )    long  ->  r15         "Inline return value spill temp"
+;  V42 tmp31        [V42,T17] (  2,  2   )    long  ->  [rbp-0xF0]  spill-single-def "Inline return value spill temp"
+;  V43 tmp32        [V43,T18] (  2,  2   )    long  ->  [rbp-0xF8]  spill-single-def "Inline return value spill temp"
+;  V44 tmp33        [V44,T19] (  2,  2   )    long  ->  [rbp-0x100]  spill-single-def "Inline return value spill temp"
+;  V45 tmp34        [V45,T20] (  2,  2   )    long  ->  rax         "Inline return value spill temp"
+;  V46 FramesRoot   [V46,T03] (  6,  6   )    long  ->  rbx         "Pinvoke FrameListRoot"
+;  V47 PInvokeFrame [V47    ] (  8,  8   )  struct (64) [rbp-0x140]  do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
 ;  V48 tmp37        [V48,T00] ( 16, 16   )   ubyte  ->  registers   "field V09.hasValue (fldOffset=0x0)" P-INDEP
 ;  V49 tmp38        [V49,T01] ( 16, 16   )    long  ->  registers   "field V09.value (fldOffset=0x8)" P-INDEP
-;  V50 tmp39        [V50    ] (  2,  3   )   ubyte  ->  [rbp-0x78]  do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
-;  V51 tmp40        [V51    ] (  2,  3   )    long  ->  [rbp-0x70]  do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x8)" P-DEP
-;  V52 tmp41        [V52    ] (  2,  3   )   ubyte  ->  [rbp-0x88]  do-not-enreg[X] addr-exposed "field V17.hasValue (fldOffset=0x0)" P-DEP
-;  V53 tmp42        [V53    ] (  2,  3   )    long  ->  [rbp-0x80]  do-not-enreg[X] addr-exposed "field V17.value (fldOffset=0x8)" P-DEP
-;  V54 tmp43        [V54    ] (  2,  3   )   ubyte  ->  [rbp-0x98]  do-not-enreg[X] addr-exposed "field V20.hasValue (fldOffset=0x0)" P-DEP
-;  V55 tmp44        [V55    ] (  2,  3   )    long  ->  [rbp-0x90]  do-not-enreg[X] addr-exposed "field V20.value (fldOffset=0x8)" P-DEP
-;  V56 tmp45        [V56    ] (  2,  3   )   ubyte  ->  [rbp-0xA8]  do-not-enreg[X] addr-exposed "field V23.hasValue (fldOffset=0x0)" P-DEP
-;  V57 tmp46        [V57    ] (  2,  3   )    long  ->  [rbp-0xA0]  do-not-enreg[X] addr-exposed "field V23.value (fldOffset=0x8)" P-DEP
-;  V58 tmp47        [V58    ] (  2,  3   )   ubyte  ->  [rbp-0xB8]  do-not-enreg[X] addr-exposed "field V26.hasValue (fldOffset=0x0)" P-DEP
-;  V59 tmp48        [V59    ] (  2,  3   )    long  ->  [rbp-0xB0]  do-not-enreg[X] addr-exposed "field V26.value (fldOffset=0x8)" P-DEP
-;  V60 tmp49        [V60    ] (  2,  3   )   ubyte  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V29.hasValue (fldOffset=0x0)" P-DEP
-;  V61 tmp50        [V61    ] (  2,  3   )    long  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V29.value (fldOffset=0x8)" P-DEP
-;  V62 tmp51        [V62    ] (  2,  3   )   ubyte  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V32.hasValue (fldOffset=0x0)" P-DEP
-;  V63 tmp52        [V63    ] (  2,  3   )    long  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V32.value (fldOffset=0x8)" P-DEP
-;  V64 tmp53        [V64    ] (  2,  3   )   ubyte  ->  [rbp-0xE8]  do-not-enreg[X] addr-exposed "field V35.hasValue (fldOffset=0x0)" P-DEP
-;  V65 tmp54        [V65    ] (  2,  3   )    long  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V35.value (fldOffset=0x8)" P-DEP
-;  V66 tmp55        [V66,T32] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
-;  V67 tmp56        [V67,T33] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
-;  V68 cse0         [V68,T03] (  9,  9   )    long  ->  r15         "CSE #02: aggressive"
+;  V50 tmp39        [V50    ] (  3,  1.75)   ubyte  ->  [rbp-0x78]  do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
+;  V51 tmp40        [V51    ] (  3,  1.75)    long  ->  [rbp-0x70]  do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x8)" P-DEP
+;  V52 tmp41        [V52    ] (  3,  1.75)   ubyte  ->  [rbp-0x88]  do-not-enreg[X] addr-exposed "field V17.hasValue (fldOffset=0x0)" P-DEP
+;  V53 tmp42        [V53    ] (  3,  1.75)    long  ->  [rbp-0x80]  do-not-enreg[X] addr-exposed "field V17.value (fldOffset=0x8)" P-DEP
+;  V54 tmp43        [V54    ] (  3,  1.75)   ubyte  ->  [rbp-0x98]  do-not-enreg[X] addr-exposed "field V20.hasValue (fldOffset=0x0)" P-DEP
+;  V55 tmp44        [V55    ] (  3,  1.75)    long  ->  [rbp-0x90]  do-not-enreg[X] addr-exposed "field V20.value (fldOffset=0x8)" P-DEP
+;  V56 tmp45        [V56    ] (  3,  1.75)   ubyte  ->  [rbp-0xA8]  do-not-enreg[X] addr-exposed "field V23.hasValue (fldOffset=0x0)" P-DEP
+;  V57 tmp46        [V57    ] (  3,  1.75)    long  ->  [rbp-0xA0]  do-not-enreg[X] addr-exposed "field V23.value (fldOffset=0x8)" P-DEP
+;  V58 tmp47        [V58    ] (  3,  1.75)   ubyte  ->  [rbp-0xB8]  do-not-enreg[X] addr-exposed "field V26.hasValue (fldOffset=0x0)" P-DEP
+;  V59 tmp48        [V59    ] (  3,  1.75)    long  ->  [rbp-0xB0]  do-not-enreg[X] addr-exposed "field V26.value (fldOffset=0x8)" P-DEP
+;  V60 tmp49        [V60    ] (  3,  1.75)   ubyte  ->  [rbp-0xC8]  do-not-enreg[X] addr-exposed "field V29.hasValue (fldOffset=0x0)" P-DEP
+;  V61 tmp50        [V61    ] (  3,  1.75)    long  ->  [rbp-0xC0]  do-not-enreg[X] addr-exposed "field V29.value (fldOffset=0x8)" P-DEP
+;  V62 tmp51        [V62    ] (  3,  1.75)   ubyte  ->  [rbp-0xD8]  do-not-enreg[X] addr-exposed "field V32.hasValue (fldOffset=0x0)" P-DEP
+;  V63 tmp52        [V63    ] (  3,  1.75)    long  ->  [rbp-0xD0]  do-not-enreg[X] addr-exposed "field V32.value (fldOffset=0x8)" P-DEP
+;  V64 tmp53        [V64    ] (  3,  1.75)   ubyte  ->  [rbp-0xE8]  do-not-enreg[X] addr-exposed "field V35.hasValue (fldOffset=0x0)" P-DEP
+;  V65 tmp54        [V65    ] (  3,  1.75)    long  ->  [rbp-0xE0]  do-not-enreg[X] addr-exposed "field V35.value (fldOffset=0x8)" P-DEP
+;  V66 tmp55        [V66,T31] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
+;  V67 tmp56        [V67,T32] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;
-; Lcl frame size = 360
+; Lcl frame size = 344
 
 G_M12903_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 360
+       sub      rsp, 344
        vzeroupper 
-       lea      rbp, [rsp+0x190]
+       lea      rbp, [rsp+0x180]
 						;; size=28 bbWeight=1 PerfScore 7.75
 G_M12903_IG02:
-       lea      rdi, [rbp-0x140]
+       lea      rdi, [rbp-0x138]
        call     CORINFO_HELP_INIT_PINVOKE_FRAME
        mov      rbx, rax
        mov      rdi, rsp
-       mov      qword ptr [rbp-0x128], rdi
+       mov      qword ptr [rbp-0x120], rdi
        mov      rdi, rbp
-       mov      qword ptr [rbp-0x118], rdi
+       mov      qword ptr [rbp-0x110], rdi
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimit'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG24
-						;; size=69 bbWeight=1 PerfScore 9.25
+       test     rax, rax
+       jne      SHORT G_M12903_IG04
+						;; size=62 bbWeight=1 PerfScore 9.00
 G_M12903_IG03:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0x78], xmm0
+       jmp      SHORT G_M12903_IG05
+						;; size=11 bbWeight=0.25 PerfScore 0.83
 G_M12903_IG04:
-       lea      rdi, [rbp-0x78]
-       mov      r15, 0xD1FFAB1E      ; System.Nullable`1[ulong]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       movzx    r14, byte  ptr [rbp-0x78]
-       mov      r13, qword ptr [rbp-0x70]
+       mov      rdi, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rdi
+       jne      SHORT G_M12903_IG03
+       mov      byte  ptr [rbp-0x78], 1
+       mov      rdi, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0x70], rdi
+						;; size=27 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG05:
+       movzx    r15, byte  ptr [rbp-0x78]
+       mov      r14, qword ptr [rbp-0x70]
        mov      rdi, -1
-       test     r14b, r14b
-       cmove    r13, rdi
+       test     r15b, r15b
+       cmove    r14, rdi
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimitPercent'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG26
-						;; size=82 bbWeight=1 PerfScore 9.75
-G_M12903_IG05:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
+       test     rax, rax
+       jne      SHORT G_M12903_IG07
+						;; size=53 bbWeight=1 PerfScore 7.50
 G_M12903_IG06:
-       lea      rdi, [rbp-0x88]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       movzx    r14, byte  ptr [rbp-0x88]
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0x88], xmm0
+       jmp      SHORT G_M12903_IG08
+						;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG07:
+       mov      rdi, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rdi
+       jne      SHORT G_M12903_IG06
+       mov      byte  ptr [rbp-0x88], 1
+       mov      rdi, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0x80], rdi
+						;; size=30 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG08:
+       movzx    r15, byte  ptr [rbp-0x88]
        mov      rdi, qword ptr [rbp-0x80]
        mov      rax, -1
-       test     r14b, r14b
-       mov      r12, rax
-       cmovne   r12, rdi
+       test     r15b, r15b
+       mov      r13, rax
+       cmovne   r13, rdi
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimitSOH'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG28
-						;; size=81 bbWeight=1 PerfScore 9.75
-G_M12903_IG07:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG08:
-       lea      rdi, [rbp-0x98]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       movzx    r14, byte  ptr [rbp-0x98]
+       test     rax, rax
+       jne      SHORT G_M12903_IG10
+						;; size=59 bbWeight=1 PerfScore 7.75
+G_M12903_IG09:
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0x98], xmm0
+       jmp      SHORT G_M12903_IG11
+						;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG10:
+       mov      rdi, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rdi
+       jne      SHORT G_M12903_IG09
+       mov      byte  ptr [rbp-0x98], 1
+       mov      rdi, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0x90], rdi
+						;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG11:
+       movzx    r15, byte  ptr [rbp-0x98]
        mov      rdi, qword ptr [rbp-0x90]
        mov      rax, -1
-       test     r14b, r14b
-       mov      r14, rax
-       cmovne   r14, rdi
+       test     r15b, r15b
+       mov      r12, rax
+       cmovne   r12, rdi
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimitLOH'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG30
-						;; size=84 bbWeight=1 PerfScore 9.75
-G_M12903_IG09:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG10:
-       lea      rdi, [rbp-0xA8]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
-       movzx    rdi, byte  ptr [rbp-0xA8]
-       mov      rax, qword ptr [rbp-0xA0]
-       mov      rcx, -1
-       test     dil, dil
-       cmovne   rcx, rax
-       mov      qword ptr [rbp-0xF0], rcx
+       test     rax, rax
+       jne      SHORT G_M12903_IG13
+						;; size=62 bbWeight=1 PerfScore 7.75
+G_M12903_IG12:
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0xA8], xmm0
+       jmp      SHORT G_M12903_IG14
+						;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG13:
+       mov      rdi, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rdi
+       jne      SHORT G_M12903_IG12
+       mov      byte  ptr [rbp-0xA8], 1
+       mov      rdi, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0xA0], rdi
+						;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG14:
+       movzx    r15, byte  ptr [rbp-0xA8]
+       mov      rdi, qword ptr [rbp-0xA0]
+       mov      rax, -1
+       test     r15b, r15b
+       mov      r15, rax
+       cmovne   r15, rdi
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimitPOH'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG32
-						;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG11:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG12:
-       lea      rdi, [rbp-0xB8]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       test     rax, rax
+       jne      SHORT G_M12903_IG16
+						;; size=62 bbWeight=1 PerfScore 7.75
+G_M12903_IG15:
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0xB8], xmm0
+       jmp      SHORT G_M12903_IG17
+						;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG16:
+       mov      rdi, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rdi
+       jne      SHORT G_M12903_IG15
+       mov      byte  ptr [rbp-0xB8], 1
+       mov      rdi, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0xB0], rdi
+						;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG17:
        movzx    rdi, byte  ptr [rbp-0xB8]
        mov      rax, qword ptr [rbp-0xB0]
        mov      rcx, -1
        test     dil, dil
        cmovne   rcx, rax
-       mov      qword ptr [rbp-0xF8], rcx
+       mov      qword ptr [rbp-0xF0], rcx
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimitSOHPercent'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG34
-						;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG13:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG14:
-       lea      rdi, [rbp-0xC8]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       test     rax, rax
+       jne      SHORT G_M12903_IG19
+						;; size=66 bbWeight=1 PerfScore 8.50
+G_M12903_IG18:
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0xC8], xmm0
+       jmp      SHORT G_M12903_IG20
+						;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG19:
+       mov      rdi, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rdi
+       jne      SHORT G_M12903_IG18
+       mov      byte  ptr [rbp-0xC8], 1
+       mov      rdi, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0xC0], rdi
+						;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG20:
        movzx    rdi, byte  ptr [rbp-0xC8]
        mov      rax, qword ptr [rbp-0xC0]
        mov      rcx, -1
        test     dil, dil
        cmovne   rcx, rax
-       mov      qword ptr [rbp-0x100], rcx
+       mov      qword ptr [rbp-0xF8], rcx
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimitLOHPercent'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG36
-						;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG15:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG16:
-       lea      rdi, [rbp-0xD8]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       test     rax, rax
+       jne      SHORT G_M12903_IG22
+						;; size=66 bbWeight=1 PerfScore 8.50
+G_M12903_IG21:
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0xD8], xmm0
+       jmp      SHORT G_M12903_IG23
+						;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG22:
+       mov      rdi, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rdi
+       jne      SHORT G_M12903_IG21
+       mov      byte  ptr [rbp-0xD8], 1
+       mov      rdi, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0xD0], rdi
+						;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG23:
        movzx    rdi, byte  ptr [rbp-0xD8]
        mov      rax, qword ptr [rbp-0xD0]
        mov      rcx, -1
        test     dil, dil
        cmovne   rcx, rax
-       mov      qword ptr [rbp-0x108], rcx
+       mov      qword ptr [rbp-0x100], rcx
        mov      rdi, 0xD1FFAB1E      ; 'GCHeapHardLimitPOHPercent'
        mov      rax, 0xD1FFAB1E      ; code for System.AppContext:GetData(System.String):System.Object
        call     [rax]System.AppContext:GetData(System.String):System.Object
-       mov      rdx, rax
-       test     rdx, rdx
-       jne      G_M12903_IG38
-						;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG17:
-       xor      rdx, rdx
-						;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG18:
-       lea      rdi, [rbp-0xE8]
-       mov      rsi, r15
-       call     CORINFO_HELP_UNBOX_NULLABLE
+       test     rax, rax
+       jne      SHORT G_M12903_IG25
+						;; size=66 bbWeight=1 PerfScore 8.50
+G_M12903_IG24:
+       vxorps   xmm0, xmm0, xmm0
+       vmovups  xmmword ptr [rbp-0xE8], xmm0
+       jmp      SHORT G_M12903_IG26
+						;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG25:
+       mov      rcx, 0xD1FFAB1E      ; System.UInt64
+       cmp      qword ptr [rax], rcx
+       jne      SHORT G_M12903_IG24
+       mov      byte  ptr [rbp-0xE8], 1
+       mov      rax, qword ptr [rax+0x08]
+       mov      qword ptr [rbp-0xE0], rax
+						;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG26:
        movzx    rdi, byte  ptr [rbp-0xE8]
        mov      rax, qword ptr [rbp-0xE0]
        mov      rcx, -1
        test     dil, dil
        cmove    rax, rcx
-       vxorps   ymm2, ymm2, ymm2
-       vmovdqu32 zmmword ptr [rbp-0x68], zmm2
-       mov      qword ptr [rbp-0x68], r13
-       mov      qword ptr [rbp-0x60], r12
-       mov      qword ptr [rbp-0x58], r14
-       mov      r15, qword ptr [rbp-0xF0]
+       vxorps   ymm0, ymm0, ymm0
+       vmovdqu32 zmmword ptr [rbp-0x68], zmm0
+       mov      qword ptr [rbp-0x68], r14
+       mov      qword ptr [rbp-0x60], r13
+       mov      qword ptr [rbp-0x58], r12
        mov      qword ptr [rbp-0x50], r15
-       mov      r15, qword ptr [rbp-0xF8]
+       mov      r15, qword ptr [rbp-0xF0]
        mov      qword ptr [rbp-0x48], r15
-       mov      r15, qword ptr [rbp-0x100]
+       mov      r15, qword ptr [rbp-0xF8]
        mov      qword ptr [rbp-0x40], r15
-       mov      r15, qword ptr [rbp-0x108]
+       mov      r15, qword ptr [rbp-0x100]
        mov      qword ptr [rbp-0x38], r15
        mov      qword ptr [rbp-0x30], rax
-       vmovdqu  xmm2, xmmword ptr [rbp-0x68]
-       vmovdqu  xmmword ptr [rsp], xmm2
-       vmovdqu  xmm2, xmmword ptr [rbp-0x58]
-       vmovdqu  xmmword ptr [rsp+0x10], xmm2
-       vmovdqu  xmm2, xmmword ptr [rbp-0x48]
-       vmovdqu  xmmword ptr [rsp+0x20], xmm2
-       vmovdqu  xmm2, xmmword ptr [rbp-0x38]
-       vmovdqu  xmmword ptr [rsp+0x30], xmm2
+       vmovdqu  xmm0, xmmword ptr [rbp-0x68]
+       vmovdqu  xmmword ptr [rsp], xmm0
+       vmovdqu  xmm0, xmmword ptr [rbp-0x58]
+       vmovdqu  xmmword ptr [rsp+0x10], xmm0
+       vmovdqu  xmm0, xmmword ptr [rbp-0x48]
+       vmovdqu  xmmword ptr [rsp+0x20], xmm0
+       vmovdqu  xmm0, xmmword ptr [rbp-0x38]
+       vmovdqu  xmmword ptr [rsp+0x30], xmm0
        mov      rax, 0xD1FFAB1E      ; function address
-       mov      qword ptr [rbp-0x130], rax
-       lea      rax, G_M12903_IG21
-       mov      qword ptr [rbp-0x120], rax
-       lea      rax, [rbp-0x140]
+       mov      qword ptr [rbp-0x128], rax
+       lea      rax, G_M12903_IG29
+       mov      qword ptr [rbp-0x118], rax
+       lea      rax, [rbp-0x138]
        mov      qword ptr [rbx+0x08], rax
        mov      byte  ptr [rbx+0x04], 0
-						;; size=210 bbWeight=1 PerfScore 39.58
-G_M12903_IG19:
+						;; size=188 bbWeight=1 PerfScore 36.83
+G_M12903_IG27:
        mov      rax, 0xD1FFAB1E      ; code for System.GC:_RefreshMemoryLimit(System.GC+GCHeapHardLimitInfo):int
 						;; size=10 bbWeight=1 PerfScore 0.25
-G_M12903_IG20:
+G_M12903_IG28:
        call     [rax]System.GC:_RefreshMemoryLimit(System.GC+GCHeapHardLimitInfo):int
 						;; size=2 bbWeight=1 PerfScore 3.00
-G_M12903_IG21:
+G_M12903_IG29:
        mov      byte  ptr [rbx+0x04], 1
        mov      rcx, 0xD1FFAB1E      ; function address
        cmp      dword ptr [rcx], 0
-       je       SHORT G_M12903_IG22
+       je       SHORT G_M12903_IG30
        mov      rdi, 0xD1FFAB1E
        call     [rdi]CORINFO_HELP_STOP_FOR_GC
 						;; size=31 bbWeight=1 PerfScore 8.50
-G_M12903_IG22:
-       mov      rdi, qword ptr [rbp-0x138]
+G_M12903_IG30:
+       mov      rdi, qword ptr [rbp-0x130]
        mov      qword ptr [rbx+0x08], rdi
        cmp      eax, 1
-       je       G_M12903_IG41
+       je       SHORT G_M12903_IG33
        cmp      eax, 2
-       je       G_M12903_IG40
-						;; size=29 bbWeight=1 PerfScore 4.50
-G_M12903_IG23:
-       add      rsp, 360
+       je       SHORT G_M12903_IG32
+						;; size=21 bbWeight=1 PerfScore 4.50
+G_M12903_IG31:
+       add      rsp, 344
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=18 bbWeight=1 PerfScore 4.25
-G_M12903_IG24:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG03
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG25:
-       jmp      G_M12903_IG04
-						;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG26:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG05
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG27:
-       jmp      G_M12903_IG06
-						;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG28:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG07
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG29:
-       jmp      G_M12903_IG08
-						;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG30:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG09
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG31:
-       jmp      G_M12903_IG10
-						;; size=5 bbWeight=0.12 PerfScore 0.25
 G_M12903_IG32:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG11
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG33:
-       jmp      G_M12903_IG12
-						;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG34:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG13
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG35:
-       jmp      G_M12903_IG14
-						;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG36:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG15
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG37:
-       jmp      G_M12903_IG16
-						;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG38:
-       mov      rdi, 0xD1FFAB1E      ; System.UInt64
-       cmp      qword ptr [rdx], rdi
-       jne      G_M12903_IG17
-						;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG39:
-       jmp      G_M12903_IG18
-						;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG40:
        mov      rdi, 0xD1FFAB1E      ; System.InvalidOperationException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_InvalidOperationException_HardLimitInvalid():System.String
        call     [rax]System.SR:get_InvalidOperationException_HardLimitInvalid():System.String
        mov      rsi, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.InvalidOperationException:.ctor(System.String):this
        call     [rax]System.InvalidOperationException:.ctor(System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=57 bbWeight=0 PerfScore 0.00
-G_M12903_IG41:
+G_M12903_IG33:
        mov      rdi, 0xD1FFAB1E      ; System.InvalidOperationException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_InvalidOperationException_HardLimitTooLow():System.String
        call     [rax]System.SR:get_InvalidOperationException_HardLimitTooLow():System.String
        mov      rsi, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.InvalidOperationException:.ctor(System.String):this
        call     [rax]System.InvalidOperationException:.ctor(System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=57 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1318, prolog size 28, PerfScore 159.33, instruction count 250, allocated bytes for code 1318 (MethodHash=9341cd98) for method System.GC:RefreshMemoryLimit() (FullOpts)
+; Total bytes of code 1272, prolog size 28, PerfScore 153.50, instruction count 248, allocated bytes for code 1272 (MethodHash=9341cd98) for method System.GC:RefreshMemoryLimit() (FullOpts)

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 18, 2024

@EgorBo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant