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

Import cgt.un(op, 0) as NE(op, 0) #54539

Merged
merged 3 commits into from
Jul 13, 2021

Conversation

SingleAccretion
Copy link
Contributor

@SingleAccretion SingleAccretion commented Jun 22, 2021

This is a pretty common IL idiom (e. g. for comparing against null). Today, morph transforms it into the equivalent "not equal" form, but doing it earlier in the importer, apparently, has CQ benefits.

In addition to the optimization this PR:
1) Cleans up some importation code.
2) And solves most of the regressions by being a bit smarter in morph.

There is also a TODO left in importer, for me, not to forget to unify the handling of upcasts - the way it is done currently has issues (like the fact redundant IR is created for constants).

This change will help avoid regressions for my next changes in morph, for post-order NE/EQ processing - there is a lot of questionable code there and correctness issues, so I want the refactoring and fixes to be zero-diff.

Diffs:

Windows x64
Running asm diffs of benchmarks.run.windows.x64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 57001
Total bytes of diff: 56493
Total bytes of delta: -508 (-0.89% of base)
Total relative delta: -2.16
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          72 ( 3.71% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceOrdinaryMethodSymbol:CheckModifiers(bool,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 1.15% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           2 ( 0.25% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiChar_Sse2(long,long):long

Top method improvements (bytes):
         -49 (-24.62% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
         -41 (-1.06% of base) - System.Uri:ReCreateParts(int,ushort,int):System.String:this
         -40 (-16.39% of base) - System.Threading.Tasks.UnwrapPromise`1[VoidTaskResult][System.Threading.Tasks.VoidTaskResult]:.ctor(System.Threading.Tasks.Task,bool):this
         -38 (-0.31% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
         -32 (-2.75% of base) - System.Uri:PrivateParseMinimal():int:this
         -25 (-0.91% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
         -24 (-2.28% of base) - System.Uri:CreateUriInfo(long):this
         -19 (-2.78% of base) - System.Buffer:Memmove(byref,byref,long)
         -17 (-2.41% of base) - System.Uri:CreateHostString():this
         -15 (-0.57% of base) - System.Uri:GetCanonicalPath(byref,int):this
         -15 (-1.61% of base) - System.Uri:InitializeUri(int,int,byref):this
         -14 (-2.35% of base) - System.Net.Security.SafeDeleteContext:MustRunInitializeSecurityContext(byref,bool,long,int,int,long,System.Net.Security.SafeDeleteContext,byref,byref,System.Net.Security.SafeFreeContextBuffer):int
         -14 (-2.44% of base) - System.Net.Security.SafeDeleteContext:MustRunAcceptSecurityContext_SECURITY(byref,bool,long,int,int,System.Net.Security.SafeDeleteContext,byref,byref,System.Net.Security.SafeFreeContextBuffer):int
         -12 (-2.04% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -10 (-1.47% of base) - System.Uri:get_IdnHost():System.String:this
          -9 (-0.94% of base) - System.Text.RegularExpressions.RegexCharClass:ToStringClass(byref):this
          -8 (-1.70% of base) - Microsoft.CodeAnalysis.CSharp.ControlFlowPass:Analyze(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.BoundBlock,Microsoft.CodeAnalysis.DiagnosticBag):bool
          -8 (-2.04% of base) - System.Drawing.Graphics:Dispose(bool):this
          -8 (-1.64% of base) - Microsoft.Extensions.Internal.ParameterDefaultValue:TryGetDefaultValue(System.Reflection.ParameterInfo,byref):bool
          -8 (-1.87% of base) - System.Net.Sockets.NetworkStream:Read(System.Span`1[Byte]):int:this

Top method regressions (percentages):
          72 ( 3.71% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceOrdinaryMethodSymbol:CheckModifiers(bool,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 1.15% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           2 ( 0.25% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiChar_Sse2(long,long):long

Top method improvements (percentages):
         -49 (-24.62% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol:get_IsAbstract():bool:this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:get_IsAbstract():bool:this
          -4 (-17.39% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
         -40 (-16.39% of base) - System.Threading.Tasks.UnwrapPromise`1[VoidTaskResult][System.Threading.Tasks.VoidTaskResult]:.ctor(System.Threading.Tasks.Task,bool):this
          -2 (-11.76% of base) - System.Uri:EnsureParseRemaining():this
          -1 (-6.67% of base) - System.Uri:get_UserDrivenParsing():bool:this
          -1 (-6.67% of base) - System.Uri:get_IsUncOrDosPath():bool:this
          -1 (-6.67% of base) - System.Uri:get_IsImplicitFile():bool:this
          -1 (-6.67% of base) - System.Uri:get_IsDosPath():bool:this
          -8 (-5.48% of base) - System.Text.Json.Utf8JsonWriter:ValidateEnd(ubyte):this
          -2 (-5.00% of base) - System.Uri:EnsureUriInfo():UriInfo:this
          -6 (-3.64% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
         -19 (-2.78% of base) - System.Buffer:Memmove(byref,byref,long)
         -32 (-2.75% of base) - System.Uri:PrivateParseMinimal():int:this
         -14 (-2.44% of base) - System.Net.Security.SafeDeleteContext:MustRunAcceptSecurityContext_SECURITY(byref,bool,long,int,int,System.Net.Security.SafeDeleteContext,byref,byref,System.Net.Security.SafeFreeContextBuffer):int
         -17 (-2.41% of base) - System.Uri:CreateHostString():this
         -14 (-2.35% of base) - System.Net.Security.SafeDeleteContext:MustRunInitializeSecurityContext(byref,bool,long,int,int,long,System.Net.Security.SafeDeleteContext,byref,byref,System.Net.Security.SafeFreeContextBuffer):int
          -8 (-2.30% of base) - System.Drawing.Pen:Dispose(bool):this
         -24 (-2.28% of base) - System.Uri:CreateUriInfo(long):this

63 total methods with Code Size differences (60 improved, 3 regressed), 4 unchanged.

Running asm diffs of coreclr_tests.pmi.windows.x64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 3304059
Total bytes of diff: 3304183
Total bytes of delta: 124 (0.00% of base)
Total relative delta: -0.16
    diff is a regression.
    relative diff is an improvement.


Top method regressions (bytes):
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0011()
           2 ( 0.01% of base) - Program:TestCase0016()
           2 ( 0.01% of base) - Program:TestCase0006()
           2 ( 0.02% of base) - Program:TestCase0015()
           2 ( 0.02% of base) - Program:TestCase0016()
           2 ( 0.02% of base) - Program:TestCase0031()
           2 ( 0.02% of base) - Program:TestCase0011()
           2 ( 0.02% of base) - Program:TestCase0012()
           2 ( 0.02% of base) - Program:TestCase0027()
           2 ( 0.02% of base) - Program:TestCase0028()
           2 ( 0.01% of base) - Program:TestCase0006()
           2 ( 0.01% of base) - Program:TestCase0013()
           2 ( 0.01% of base) - Program:TestCase0003()

Top method improvements (bytes):
          -9 (-0.94% of base) - System.Text.RegularExpressions.RegexCharClass:ToStringClass(byref):this
          -8 (-3.90% of base) - PInvokeTest.Test:FromFilter():bool
          -8 (-3.59% of base) - C:Test1Inner():int
          -8 (-4.21% of base) - C:Test5(int):int
          -8 (-3.98% of base) - C:Test6(int):int
          -2 (-0.02% of base) - Program:TestCase0032()
          -1 (-0.01% of base) - TestApp:Main():int
          -1 (-0.01% of base) - TestApp:Main():int
          -1 (-0.01% of base) - TestApp:Main():int
          -1 (-0.01% of base) - TestApp:Main():int
          -1 (-1.11% of base) - Internal.IL.EcmaMethodIL:GetObject(int,int):System.Object:this

Top method regressions (percentages):
           2 ( 0.06% of base) - Program:TestCase0003()
           2 ( 0.06% of base) - Program:TestCase0003()
           2 ( 0.03% of base) - Program:TestCase0002()
           2 ( 0.03% of base) - Program:TestCase0002()
           2 ( 0.03% of base) - Program:TestCase0005()
           2 ( 0.03% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0005()
           2 ( 0.02% of base) - Program:TestCase0003()
           2 ( 0.02% of base) - Program:TestCase0014()
           2 ( 0.02% of base) - Program:TestCase0007()
           2 ( 0.02% of base) - Program:TestCase0027()
           2 ( 0.02% of base) - Program:TestCase0006()
           2 ( 0.02% of base) - Program:TestCase0026()

Top method improvements (percentages):
          -8 (-4.21% of base) - C:Test5(int):int
          -8 (-3.98% of base) - C:Test6(int):int
          -8 (-3.90% of base) - PInvokeTest.Test:FromFilter():bool
          -8 (-3.59% of base) - C:Test1Inner():int
          -1 (-1.11% of base) - Internal.IL.EcmaMethodIL:GetObject(int,int):System.Object:this
          -9 (-0.94% of base) - System.Text.RegularExpressions.RegexCharClass:ToStringClass(byref):this
          -2 (-0.02% of base) - Program:TestCase0032()
          -1 (-0.01% of base) - TestApp:Main():int
          -1 (-0.01% of base) - TestApp:Main():int
          -1 (-0.01% of base) - TestApp:Main():int
          -1 (-0.01% of base) - TestApp:Main():int

89 total methods with Code Size differences (11 improved, 78 regressed), 146 unchanged.

Running asm diffs of libraries.crossgen.windows.x64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 134332
Total bytes of diff: 131778
Total bytes of delta: -2554 (-1.90% of base)
Total relative delta: -9.58
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          12 ( 1.22% of base) - System.Text.Latin1Utility:GetIndexOfFirstNonLatin1Char_Sse2(long,long):long
          11 ( 4.33% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           5 ( 0.51% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiChar_Sse2(long,long):long
           3 ( 2.68% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           1 ( 0.16% of base) - MethodDataEnumerator:.ctor(System.Management.ManagementObject):this
           1 ( 0.41% of base) - System.Management.MethodData:RefreshMethodInfo():this
           1 ( 0.23% of base) - System.Management.MethodDataCollection:Add(System.String,System.Management.ManagementBaseObject,System.Management.ManagementBaseObject):this
           1 ( 0.37% of base) - System.Management.MethodDataCollection:Remove(System.String):this
           1 ( 0.18% of base) - System.Management.MethodDataCollection:get_Count():int:this

Top method improvements (bytes):
        -153 (-6.49% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
         -77 (-24.29% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -77 (-24.76% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -77 (-24.29% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:OnCompleted(System.Action):this
         -77 (-24.76% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -58 (-22.48% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -54 (-4.66% of base) - <WriteAsyncInternal>d__61:MoveNext():this
         -50 (-2.82% of base) - <WriteAsyncInternal>d__65:MoveNext():this
         -48 (-11.51% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:OnCompleted(System.Action):this
         -48 (-9.11% of base) - <OutputTabsAsync>d__22:MoveNext():this
         -48 (-11.79% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -47 (-17.67% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FlushWriteBuffer(bool):this
         -43 (-22.05% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
         -41 (-19.81% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -40 (-38.83% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -39 (-13.09% of base) - System.IO.Stream:EndWrite(System.IAsyncResult):this
         -38 (-13.33% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:UnsafeOnCompleted(System.Action):this
         -38 (-13.06% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:OnCompleted(System.Action):this
         -38 (-28.36% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -38 (-0.31% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this

Top method regressions (percentages):
          11 ( 4.33% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 2.68% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
          12 ( 1.22% of base) - System.Text.Latin1Utility:GetIndexOfFirstNonLatin1Char_Sse2(long,long):long
           5 ( 0.51% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiChar_Sse2(long,long):long
           1 ( 0.41% of base) - System.Management.MethodData:RefreshMethodInfo():this
           1 ( 0.37% of base) - System.Management.MethodDataCollection:Remove(System.String):this
           1 ( 0.23% of base) - System.Management.MethodDataCollection:Add(System.String,System.Management.ManagementBaseObject,System.Management.ManagementBaseObject):this
           1 ( 0.18% of base) - System.Management.MethodDataCollection:get_Count():int:this
           1 ( 0.16% of base) - MethodDataEnumerator:.ctor(System.Management.ManagementObject):this

Top method improvements (percentages):
         -40 (-38.83% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -38 (-28.36% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -31 (-26.96% of base) - System.Buffers.MemoryManager`1[__Canon][System.__Canon]:get_Memory():System.Memory`1[__Canon]:this
         -31 (-26.96% of base) - System.Buffers.MemoryManager`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -77 (-24.76% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -77 (-24.76% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -77 (-24.29% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -77 (-24.29% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:OnCompleted(System.Action):this
         -58 (-22.48% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol:get_IsAbstract():bool:this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:get_IsAbstract():bool:this
          -4 (-22.22% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
         -43 (-22.05% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
         -41 (-19.81% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -47 (-17.67% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FlushWriteBuffer(bool):this
          -4 (-17.39% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
          -4 (-17.39% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
          -4 (-17.39% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -37 (-16.74% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FillReadBufferForReadByte():int:this
         -35 (-14.40% of base) - System.Threading.Tasks.UnwrapPromise`1[__Canon][System.__Canon]:.ctor(System.Threading.Tasks.Task,bool):this

212 total methods with Code Size differences (203 improved, 9 regressed), 2 unchanged.

Running asm diffs of libraries.crossgen2.windows.x64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 130417
Total bytes of diff: 128244
Total bytes of delta: -2173 (-1.67% of base)
Total relative delta: -7.97
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          69 ( 4.41% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
          11 ( 1.38% of base) - System.Text.Latin1Utility:GetIndexOfFirstNonLatin1Char_Sse2(long,long):long
           7 ( 2.21% of base) - System.Text.Encodings.Web.OptimizedInboxTextEncoder:GetIndexOfFirstByteToEncodeSsse3(long,long):long:this
           7 ( 0.87% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           4 ( 0.50% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiChar_Sse2(long,long):long
           3 ( 1.24% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 0.25% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceCustomEventAccessorSymbol:.ctor(Microsoft.CodeAnalysis.CSharp.Symbols.SourceEventSymbol,Microsoft.CodeAnalysis.CSharp.Syntax.AccessorDeclarationSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.EventSymbol,System.String,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 0.88% of base) - System.Text.Encodings.Web.OptimizedInboxTextEncoder:GetIndexOfFirstCharToEncodeSsse3(long,long):long:this
           3 ( 2.68% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           1 ( 0.16% of base) - MethodDataEnumerator:.ctor(System.Management.ManagementObject):this
           1 ( 0.23% of base) - System.Management.MethodDataCollection:Add(System.String,System.Management.ManagementBaseObject,System.Management.ManagementBaseObject):this
           1 ( 0.41% of base) - System.Management.MethodData:RefreshMethodInfo():this
           1 ( 0.19% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.37% of base) - System.Management.MethodDataCollection:Remove(System.String):this
           1 ( 0.18% of base) - System.Management.MethodDataCollection:get_Count():int:this

Top method improvements (bytes):
        -153 (-6.49% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
         -77 (-24.29% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -77 (-24.76% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -58 (-22.48% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -54 (-4.65% of base) - <WriteAsyncInternal>d__61:MoveNext():this
         -50 (-2.81% of base) - <WriteAsyncInternal>d__65:MoveNext():this
         -48 (-9.07% of base) - <OutputTabsAsync>d__22:MoveNext():this
         -48 (-11.79% of base) - ConfiguredValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -48 (-11.51% of base) - ConfiguredValueTaskAwaiter:OnCompleted(System.Action):this
         -47 (-17.67% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FlushWriteBuffer(bool):this
         -43 (-22.05% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
         -41 (-19.81% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -40 (-38.83% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -39 (-13.09% of base) - System.IO.Stream:EndWrite(System.IAsyncResult):this
         -38 (-0.31% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
         -38 (-13.06% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:OnCompleted(System.Action):this
         -38 (-30.16% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -38 (-13.33% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:UnsafeOnCompleted(System.Action):this
         -37 (-16.74% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FillReadBufferForReadByte():int:this
         -37 (-6.68% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Read(System.Byte[],int,int):int:this

Top method regressions (percentages):
          69 ( 4.41% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 2.68% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           7 ( 2.21% of base) - System.Text.Encodings.Web.OptimizedInboxTextEncoder:GetIndexOfFirstByteToEncodeSsse3(long,long):long:this
          11 ( 1.38% of base) - System.Text.Latin1Utility:GetIndexOfFirstNonLatin1Char_Sse2(long,long):long
           3 ( 1.24% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 0.88% of base) - System.Text.Encodings.Web.OptimizedInboxTextEncoder:GetIndexOfFirstCharToEncodeSsse3(long,long):long:this
           7 ( 0.87% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           4 ( 0.50% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiChar_Sse2(long,long):long
           1 ( 0.41% of base) - System.Management.MethodData:RefreshMethodInfo():this
           1 ( 0.37% of base) - System.Management.MethodDataCollection:Remove(System.String):this
           3 ( 0.25% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceCustomEventAccessorSymbol:.ctor(Microsoft.CodeAnalysis.CSharp.Symbols.SourceEventSymbol,Microsoft.CodeAnalysis.CSharp.Syntax.AccessorDeclarationSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.EventSymbol,System.String,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.23% of base) - System.Management.MethodDataCollection:Add(System.String,System.Management.ManagementBaseObject,System.Management.ManagementBaseObject):this
           1 ( 0.19% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.18% of base) - System.Management.MethodDataCollection:get_Count():int:this
           1 ( 0.16% of base) - MethodDataEnumerator:.ctor(System.Management.ManagementObject):this

Top method improvements (percentages):
         -40 (-38.83% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -38 (-30.16% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -31 (-25.83% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.__Canon]:this
         -31 (-25.83% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.Char]:this
         -77 (-24.76% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -77 (-24.29% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -58 (-22.48% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:get_IsAbstract():bool:this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol:get_IsAbstract():bool:this
          -4 (-22.22% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
         -43 (-22.05% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
         -41 (-19.81% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -47 (-17.67% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FlushWriteBuffer(bool):this
          -4 (-17.39% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
          -4 (-17.39% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
          -4 (-17.39% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -37 (-16.74% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FillReadBufferForReadByte():int:this
         -35 (-14.40% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this
         -35 (-14.40% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this
          -2 (-13.33% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool

192 total methods with Code Size differences (177 improved, 15 regressed), 3 unchanged.

Running asm diffs of libraries.pmi.windows.x64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 161905
Total bytes of diff: 159918
Total bytes of delta: -1987 (-1.23% of base)
Total relative delta: -7.99
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          69 ( 4.34% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           7 ( 0.84% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           4 ( 0.74% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiByte_Default(long,long):long
           3 ( 1.15% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 0.37% of base) - System.Uri:GetHostViaCustomSyntax():this
           3 ( 2.48% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           2 ( 0.37% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.40% of base) - System.Management.MethodData:RefreshMethodInfo():this
           1 ( 0.17% of base) - System.Management.MethodDataCollection:get_Count():int:this
           1 ( 0.09% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceCustomEventAccessorSymbol:.ctor(Microsoft.CodeAnalysis.CSharp.Symbols.SourceEventSymbol,Microsoft.CodeAnalysis.CSharp.Syntax.AccessorDeclarationSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.EventSymbol,System.String,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.24% of base) - System.Management.MethodDataCollection:Add(System.String,System.Management.ManagementBaseObject,System.Management.ManagementBaseObject):this
           1 ( 0.35% of base) - System.Management.MethodDataCollection:Remove(System.String):this
           1 ( 0.14% of base) - MethodDataEnumerator:.ctor(System.Management.ManagementObject):this

Top method improvements (bytes):
        -166 (-30.63% of base) - Internal.JitInterface.InstructionSetFlags:Set64BitInstructionSetVariants(int):this
         -54 (-4.32% of base) - Internal.JitInterface.InstructionSetFlags:ExpandInstructionSetByImplicationHelper(int,Internal.JitInterface.InstructionSetFlags):Internal.JitInterface.InstructionSetFlags
         -48 (-14.41% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this
         -48 (-14.68% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -47 (-9.87% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:OnCompleted(System.Action):this
         -47 (-10.09% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -43 (-30.71% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):ubyte
         -43 (-30.50% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):short
         -43 (-30.50% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):double
         -43 (-31.16% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):long
         -41 (-1.06% of base) - System.Uri:ReCreateParts(int,ushort,int):System.String:this
         -40 (-15.04% of base) - System.Threading.Tasks.UnwrapPromise`1[Byte][System.Byte]:.ctor(System.Threading.Tasks.Task,bool):this
         -38 (-0.31% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
         -37 (-18.05% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):System.Numerics.Vector`1[Single]
         -33 (-3.72% of base) - Internal.JitInterface.InstructionSetFlags:ExpandInstructionSetByReverseImplicationHelper(int,Internal.JitInterface.InstructionSetFlags):Internal.JitInterface.InstructionSetFlags
         -32 (-2.75% of base) - System.Uri:PrivateParseMinimal():int:this
         -30 (-26.79% of base) - System.Buffers.MemoryManager`1[Int16][System.Int16]:get_Memory():System.Memory`1[Int16]:this
         -24 (-2.28% of base) - System.Uri:CreateUriInfo(long):this
         -17 (-2.41% of base) - System.Uri:CreateHostString():this
         -16 (-1.13% of base) - System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest:ProcessResponse(System.ReadOnlyMemory`1[Byte],byref,byref,byref,bool):bool:this

Top method regressions (percentages):
          69 ( 4.34% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           3 ( 2.48% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           3 ( 1.15% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           7 ( 0.84% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           4 ( 0.74% of base) - System.Text.ASCIIUtility:GetIndexOfFirstNonAsciiByte_Default(long,long):long
           1 ( 0.40% of base) - System.Management.MethodData:RefreshMethodInfo():this
           3 ( 0.37% of base) - System.Uri:GetHostViaCustomSyntax():this
           2 ( 0.37% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.35% of base) - System.Management.MethodDataCollection:Remove(System.String):this
           1 ( 0.24% of base) - System.Management.MethodDataCollection:Add(System.String,System.Management.ManagementBaseObject,System.Management.ManagementBaseObject):this
           1 ( 0.17% of base) - System.Management.MethodDataCollection:get_Count():int:this
           1 ( 0.14% of base) - MethodDataEnumerator:.ctor(System.Management.ManagementObject):this
           1 ( 0.09% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceCustomEventAccessorSymbol:.ctor(Microsoft.CodeAnalysis.CSharp.Symbols.SourceEventSymbol,Microsoft.CodeAnalysis.CSharp.Syntax.AccessorDeclarationSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.EventSymbol,System.String,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (percentages):
         -43 (-31.16% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):long
         -43 (-30.71% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):ubyte
        -166 (-30.63% of base) - Internal.JitInterface.InstructionSetFlags:Set64BitInstructionSetVariants(int):this
         -43 (-30.50% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):short
         -43 (-30.50% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):double
         -30 (-26.79% of base) - System.Buffers.MemoryManager`1[Int16][System.Int16]:get_Memory():System.Memory`1[Int16]:this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:get_IsAbstract():bool:this
          -4 (-22.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol:get_IsAbstract():bool:this
          -4 (-22.22% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
         -37 (-18.05% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):System.Numerics.Vector`1[Single]
          -4 (-17.39% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
          -4 (-17.39% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
          -4 (-17.39% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -40 (-15.04% of base) - System.Threading.Tasks.UnwrapPromise`1[Byte][System.Byte]:.ctor(System.Threading.Tasks.Task,bool):this
         -48 (-14.68% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -48 (-14.41% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this
          -2 (-13.33% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool
          -8 (-11.94% of base) - System.Text.Json.BitStack:Pop():bool:this
          -2 (-11.76% of base) - System.Uri:EnsureParseRemaining():this
          -2 (-11.76% of base) - System.Data.SqlTypes.SqlInt32:SameSignInt(int,int):bool

226 total methods with Code Size differences (213 improved, 13 regressed), 7 unchanged.

Running asm diffs of libraries_tests.pmi.windows.x64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 54733
Total bytes of diff: 53602
Total bytes of delta: -1131 (-2.07% of base)
Total relative delta: -8.80
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
         -68 : 202990.dasm (-4.45% of base)
         -66 : 202992.dasm (-4.31% of base)
         -57 : 263241.dasm (-98.28% of base)
         -40 : 188191.dasm (-9.05% of base)
         -35 : 321604.dasm (-38.46% of base)
         -33 : 177496.dasm (-1.68% of base)
         -33 : 173229.dasm (-1.68% of base)
         -30 : 189174.dasm (-65.22% of base)
         -30 : 173235.dasm (-1.33% of base)
         -30 : 189171.dasm (-65.22% of base)
         -30 : 177502.dasm (-1.33% of base)
         -30 : 187657.dasm (-8.20% of base)
         -30 : 189173.dasm (-65.22% of base)
         -30 : 189172.dasm (-65.22% of base)
         -28 : 321623.dasm (-31.11% of base)
         -28 : 65553.dasm (-32.56% of base)
         -28 : 47804.dasm (-32.56% of base)
         -28 : 200813.dasm (-32.56% of base)
         -28 : 171937.dasm (-32.56% of base)
         -28 : 173823.dasm (-31.11% of base)

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

Top method improvements (bytes):
         -68 (-4.45% of base) - <ReceiveAsync>d__2:MoveNext():this
         -66 (-4.31% of base) - <SendAsync>d__3:MoveNext():this
         -57 (-98.28% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -40 (-9.05% of base) - System.SpanTests.SpanTests:SequenceCompareToNoMatch_Bool()
         -35 (-38.46% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -33 (-1.68% of base) - <ReadAsyncMemory_WrapsNative_DelegatesToReadAsyncArrayWithPool_Success>d__3:MoveNext():this
         -33 (-1.68% of base) - <ReadAsyncMemory_WrapsNative_DelegatesToReadAsyncArrayWithPool_Success>d__3:MoveNext():this
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this
         -30 (-1.33% of base) - <WriteAsyncMemory_WrapsNative_DelegatesToWrite_Success>d__5:MoveNext():this
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__4():System.Object:this
         -30 (-1.33% of base) - <WriteAsyncMemory_WrapsNative_DelegatesToWrite_Success>d__5:MoveNext():this
         -30 (-8.20% of base) - System.SpanTests.ReadOnlySpanTests:SequenceCompareToNoMatch_Bool()
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__6():System.Object:this
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__5():System.Object:this
         -28 (-31.11% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-31.11% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this

Top method improvements (percentages):
         -57 (-98.28% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__4():System.Object:this
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__6():System.Object:this
         -30 (-65.22% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__5():System.Object:this
          -9 (-47.37% of base) - <>c:<Find>b__102_2(int):bool:this
         -35 (-38.46% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
          -5 (-33.33% of base) - Microsoft.CodeAnalysis.VisualBasic.Utilities.ModifierCollectionFacts:CouldApplyToOneOf(int):bool:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-32.56% of base) - NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-31.11% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -28 (-31.11% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this
          -4 (-22.22% of base) - Microsoft.Diagnostics.Runtime.Utilities.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
          -8 (-11.94% of base) - System.Text.Json.BitStack:Pop():bool:this
          -2 (-9.52% of base) - System.IO.Win32Marshal:MakeHRFromErrorCode(int):int
         -40 (-9.05% of base) - System.SpanTests.SpanTests:SequenceCompareToNoMatch_Bool()

67 total methods with Code Size differences (67 improved, 0 regressed), 3 unchanged.
Windows x86
Running asm diffs of benchmarks.run.windows.x86.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 60939
Total bytes of diff: 58799
Total bytes of delta: -2140 (-3.51% of base)
Total relative delta: -6.27
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          59 ( 4.27% of base) - System.Threading.Tasks.Task:RunContinuations(System.Object):this
          28 ( 1.74% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceOrdinaryMethodSymbol:CheckModifiers(bool,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (bytes):
        -338 (-18.74% of base) - ProtoBuf.ProtoReader:TryReadUInt64VariantWithoutMoving(byref):int:this
        -272 (-7.68% of base) - System.Uri:ReCreateParts(int,ushort,int):System.String:this
        -234 (-7.02% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
        -201 (-7.65% of base) - System.Uri:GetCanonicalPath(byref,int):this
        -181 (-1.19% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
        -135 (-5.55% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
        -107 (-6.82% of base) - System.Uri:PrivateParseMinimal():int:this
         -46 (-7.31% of base) - System.Uri:ResolveHelper(System.Uri,System.Uri,byref,byref):System.Uri
         -32 (-18.60% of base) - System.Text.Json.Utf8JsonWriter:ValidateEnd(ubyte):this
         -32 (-2.89% of base) - System.Uri:CreateUriInfo(long):this
         -31 (-14.22% of base) - System.Uri:GetEscapedParts(int):System.String:this
         -30 (-20.69% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
         -30 (-3.31% of base) - System.Uri:InitializeUri(int,int,byref):this
         -29 (-14.80% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
         -28 (-10.29% of base) - System.Text.Json.Utf8JsonReader:EndArray():this
         -28 (-4.46% of base) - System.Convert:TryDecodeFromUtf16(System.ReadOnlySpan`1[Char],System.Span`1[Byte],byref,byref):bool
         -28 (-10.29% of base) - System.Text.Json.Utf8JsonReader:EndObject():this
         -26 (-13.90% of base) - System.Threading.Tasks.UnwrapPromise`1[VoidTaskResult][System.Threading.Tasks.VoidTaskResult]:.ctor(System.Threading.Tasks.Task,bool):this
         -24 (-4.15% of base) - System.Uri:get_IdnHost():System.String:this
         -20 (-4.71% of base) - System.Net.Security.SafeDeleteContext:MustRunInitializeSecurityContext(byref,bool,int,int,int,int,System.Net.Security.SafeDeleteContext,byref,byref,System.Net.Security.SafeFreeContextBuffer):int

Top method regressions (percentages):
          59 ( 4.27% of base) - System.Threading.Tasks.Task:RunContinuations(System.Object):this
          28 ( 1.74% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceOrdinaryMethodSymbol:CheckModifiers(bool,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (percentages):
         -15 (-51.72% of base) - System.Uri:get_IsImplicitFile():bool:this
         -15 (-51.72% of base) - System.Uri:get_UserDrivenParsing():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsDosPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsUncOrDosPath():bool:this
         -14 (-42.42% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
          -8 (-34.78% of base) - System.Uri:EnsureParseRemaining():this
          -4 (-23.53% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:get_IsAbstract():bool:this
          -4 (-23.53% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol:get_IsAbstract():bool:this
         -15 (-23.08% of base) - System.Uri:EnsureHostString(bool):this
         -30 (-20.69% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
        -338 (-18.74% of base) - ProtoBuf.ProtoReader:TryReadUInt64VariantWithoutMoving(byref):int:this
         -32 (-18.60% of base) - System.Text.Json.Utf8JsonWriter:ValidateEnd(ubyte):this
         -29 (-14.80% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
         -31 (-14.22% of base) - System.Uri:GetEscapedParts(int):System.String:this
         -26 (-13.90% of base) - System.Threading.Tasks.UnwrapPromise`1[VoidTaskResult][System.Threading.Tasks.VoidTaskResult]:.ctor(System.Threading.Tasks.Task,bool):this
         -16 (-11.85% of base) - System.Uri:get_Port():int:this
         -28 (-10.29% of base) - System.Text.Json.Utf8JsonReader:EndArray():this
         -28 (-10.29% of base) - System.Text.Json.Utf8JsonReader:EndObject():this
          -3 (-8.57% of base) - System.Uri:EnsureUriInfo():UriInfo:this
        -272 (-7.68% of base) - System.Uri:ReCreateParts(int,ushort,int):System.String:this

63 total methods with Code Size differences (61 improved, 2 regressed), 3 unchanged.

Running asm diffs of coreclr_tests.pmi.windows.x86.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2991323
Total bytes of diff: 2991294
Total bytes of delta: -29 (-0.00% of base)
Total relative delta: -0.53
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0011()
           2 ( 0.01% of base) - Program:TestCase0013()
           2 ( 0.01% of base) - Program:TestCase0003()
           2 ( 0.01% of base) - Program:TestCase0013()
           2 ( 0.02% of base) - Program:TestCase0036()
           2 ( 0.02% of base) - Program:TestCase0011()
           2 ( 0.02% of base) - Program:TestCase0012()
           2 ( 0.02% of base) - Program:TestCase0026()
           2 ( 0.02% of base) - Program:TestCase0005()
           2 ( 0.02% of base) - Program:TestCase0006()
           2 ( 0.01% of base) - Program:TestCase0015()
           2 ( 0.01% of base) - Program:TestCase0016()
           2 ( 0.02% of base) - Program:TestCase0013()

Top method improvements (bytes):
         -32 (-0.08% of base) - longMDArrTest:Main():int
         -32 (-0.07% of base) - ulongMDArrTest:Main():int
         -10 (-0.75% of base) - AA:Static5(System.Double[],byref,byref,ushort,System.Boolean[][],byref,System.UInt32[][,,],long):System.SByte[,][]
          -8 (-5.88% of base) - PInvokeTest.Test:FromFilter():bool
          -8 (-5.76% of base) - C:Test1Inner():int
          -8 (-7.34% of base) - C:Test5(int):int
          -8 (-6.67% of base) - C:Test6(int):int
          -8 (-0.93% of base) - Threading.Tests.OSThreadId:Main(System.String[]):int
          -6 (-0.05% of base) - TestApp:Main():int
          -6 (-0.05% of base) - TestApp:Main():int
          -6 (-0.05% of base) - TestApp:Main():int
          -6 (-0.05% of base) - TestApp:Main():int
          -5 (-6.02% of base) - Internal.IL.EcmaMethodIL:GetObject(int,int):System.Object:this
          -4 (-7.02% of base) - Program:I8_BT_reg_reg(long,int):bool
          -4 (-6.56% of base) - Program:I8_BT_mem_reg(byref,int):bool
          -4 (-1.64% of base) - ILGEN_CLASS:ILGEN_METHOD(ubyte,long,int):long
          -4 (-1.57% of base) - Threading.Tests.OSThreadId:ThreadProc(System.Object)
          -4 (-3.25% of base) - TestUnsafeCasts:PrimFromLPrim2()
          -2 (-0.02% of base) - Program:TestCase0019()
          -2 (-0.02% of base) - Program:TestCase0028()

Top method regressions (percentages):
           2 ( 0.04% of base) - Program:TestCase0002()
           2 ( 0.04% of base) - Program:TestCase0002()
           2 ( 0.04% of base) - Program:TestCase0005()
           2 ( 0.04% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0011()
           2 ( 0.02% of base) - Program:TestCase0014()
           2 ( 0.02% of base) - Program:TestCase0006()
           2 ( 0.02% of base) - Program:TestCase0007()
           2 ( 0.02% of base) - Program:TestCase0003()
           2 ( 0.02% of base) - Program:TestCase0012()
           2 ( 0.02% of base) - Program:TestCase0006()
           2 ( 0.02% of base) - Program:TestCase0014()
           2 ( 0.02% of base) - Program:TestCase0003()

Top method improvements (percentages):
          -8 (-7.34% of base) - C:Test5(int):int
          -4 (-7.02% of base) - Program:I8_BT_reg_reg(long,int):bool
          -8 (-6.67% of base) - C:Test6(int):int
          -4 (-6.56% of base) - Program:I8_BT_mem_reg(byref,int):bool
          -5 (-6.02% of base) - Internal.IL.EcmaMethodIL:GetObject(int,int):System.Object:this
          -8 (-5.88% of base) - PInvokeTest.Test:FromFilter():bool
          -8 (-5.76% of base) - C:Test1Inner():int
          -4 (-3.25% of base) - TestUnsafeCasts:PrimFromLPrim2()
          -4 (-1.64% of base) - ILGEN_CLASS:ILGEN_METHOD(ubyte,long,int):long
          -4 (-1.57% of base) - Threading.Tests.OSThreadId:ThreadProc(System.Object)
          -8 (-0.93% of base) - Threading.Tests.OSThreadId:Main(System.String[]):int
         -10 (-0.75% of base) - AA:Static5(System.Double[],byref,byref,ushort,System.Boolean[][],byref,System.UInt32[][,,],long):System.SByte[,][]
         -32 (-0.08% of base) - longMDArrTest:Main():int
         -32 (-0.07% of base) - ulongMDArrTest:Main():int
          -2 (-0.07% of base) - Program:TestCase0003()
          -2 (-0.07% of base) - Program:TestCase0003()
          -6 (-0.05% of base) - TestApp:Main():int
          -6 (-0.05% of base) - TestApp:Main():int
          -6 (-0.05% of base) - TestApp:Main():int
          -6 (-0.05% of base) - TestApp:Main():int

95 total methods with Code Size differences (27 improved, 68 regressed), 194 unchanged.

Running asm diffs of libraries.crossgen.windows.x86.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 147326
Total bytes of diff: 142764
Total bytes of delta: -4562 (-3.10% of base)
Total relative delta: -24.97
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          13 ( 7.03% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           9 ( 4.71% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
           5 ( 4.81% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]

Top method improvements (bytes):
        -241 (-13.12% of base) - <WriteAsyncInternal>d__65:MoveNext():this
        -235 (-6.98% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
        -207 (-10.14% of base) - System.Uri:GetCanonicalPath(byref,int):this
        -181 (-1.21% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
        -135 (-7.39% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
         -89 (-4.51% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:OnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -52 (-24.53% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -47 (-20.43% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -46 (-7.12% of base) - System.Uri:ResolveHelper(System.Uri,System.Uri,byref,byref):System.Uri
         -39 (-2.23% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:ReadAsyncInternal(System.Memory`1[Byte],System.Threading.CancellationToken,byref):System.Threading.Tasks.Task`1[Int32]:this
         -38 (-17.67% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FlushWriteBuffer(bool):this
         -37 (-22.42% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -37 (-10.88% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:OnCompleted(System.Action):this
         -37 (-10.98% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -36 (-14.52% of base) - System.IO.Stream:EndWrite(System.IAsyncResult):this
         -35 (-39.77% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)

Top method regressions (percentages):
          13 ( 7.03% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           5 ( 4.81% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           9 ( 4.71% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this

Top method improvements (percentages):
         -15 (-51.72% of base) - System.Uri:get_IsImplicitFile():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsUncOrDosPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_UserDrivenParsing():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsDosPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsUncPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_UserEscaped():bool:this
         -14 (-42.42% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
         -14 (-42.42% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
         -14 (-42.42% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -35 (-39.77% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
          -8 (-38.10% of base) - System.Diagnostics.SharedPerformanceCounter:IsMisaligned(int):bool
          -8 (-33.33% of base) - System.Uri:EnsureParseRemaining():this
          -6 (-31.58% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:OnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -29 (-30.21% of base) - System.Buffers.MemoryManager`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -29 (-30.21% of base) - System.Buffers.MemoryManager`1[__Canon][System.__Canon]:get_Memory():System.Memory`1[__Canon]:this
          -6 (-30.00% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this

298 total methods with Code Size differences (295 improved, 3 regressed), 0 unchanged.

Running asm diffs of libraries.crossgen2.windows.x86.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 148483
Total bytes of diff: 144222
Total bytes of delta: -4261 (-2.87% of base)
Total relative delta: -23.69
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          35 ( 5.80% of base) - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:BindNameInsideCrefReferenceInLegacyMode(Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeSyntax,bool,byref):System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.Symbol]:this
          28 ( 2.08% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           9 ( 4.69% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
           5 ( 4.81% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           2 ( 0.32% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           1 ( 0.23% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (bytes):
        -235 (-6.97% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
        -230 (-10.55% of base) - System.Uri:GetCanonicalPath(byref,int):this
        -217 (-11.97% of base) - <WriteAsyncInternal>d__65:MoveNext():this
        -181 (-1.21% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
        -135 (-7.39% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
         -89 (-4.50% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -52 (-24.53% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -47 (-20.43% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -46 (-7.11% of base) - System.Uri:ResolveHelper(System.Uri,System.Uri,byref,byref):System.Uri
         -39 (-2.23% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:ReadAsyncInternal(System.Memory`1[System.Byte],System.Threading.CancellationToken,byref):System.Threading.Tasks.Task`1[System.Int32]:this
         -38 (-17.67% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:FlushWriteBuffer(bool):this
         -37 (-10.88% of base) - ConfiguredValueTaskAwaiter:OnCompleted(System.Action):this
         -37 (-10.98% of base) - ConfiguredValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -37 (-22.42% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -36 (-14.52% of base) - System.IO.Stream:EndWrite(System.IAsyncResult):this
         -35 (-39.77% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -35 (-22.73% of base) - System.IO.Strategies.AsyncWindowsFileStreamStrategy:Write(System.Byte[],int,int):this
         -34 (-3.37% of base) - <WriteAsyncInternal>d__61:MoveNext():this

Top method regressions (percentages):
          35 ( 5.80% of base) - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:BindNameInsideCrefReferenceInLegacyMode(Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeSyntax,bool,byref):System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.Symbol]:this
           5 ( 4.81% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           9 ( 4.69% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
          28 ( 2.08% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           2 ( 0.32% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           1 ( 0.23% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (percentages):
         -15 (-51.72% of base) - System.Uri:get_IsDosPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsUncOrDosPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsImplicitFile():bool:this
         -15 (-51.72% of base) - System.Uri:get_UserDrivenParsing():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsUncPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_UserEscaped():bool:this
         -14 (-42.42% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -14 (-42.42% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
         -14 (-42.42% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
         -35 (-39.77% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
          -8 (-38.10% of base) - System.Diagnostics.SharedPerformanceCounter:IsMisaligned(int):bool
          -8 (-33.33% of base) - System.Uri:EnsureParseRemaining():this
          -6 (-31.58% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -80 (-31.37% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -29 (-30.21% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.__Canon]:this
         -29 (-30.21% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.Char]:this
          -6 (-30.00% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
         -31 (-28.70% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
          -6 (-28.57% of base) - System.Data.SqlTypes.SqlInt32:SameSignInt(int,int):bool

301 total methods with Code Size differences (295 improved, 6 regressed), 3 unchanged.

Running asm diffs of libraries.pmi.windows.x86.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 209849
Total bytes of diff: 205305
Total bytes of delta: -4544 (-2.17% of base)
Total relative delta: -23.84
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          28 ( 2.12% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           9 ( 4.52% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
           5 ( 4.63% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           2 ( 0.30% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           1 ( 0.10% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceCustomEventAccessorSymbol:.ctor(Microsoft.CodeAnalysis.CSharp.Symbols.SourceEventSymbol,Microsoft.CodeAnalysis.CSharp.Syntax.AccessorDeclarationSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.EventSymbol,System.String,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (bytes):
        -278 (-7.77% of base) - System.Uri:ReCreateParts(int,ushort,int):System.String:this
        -234 (-7.02% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
        -195 (-7.32% of base) - System.Uri:GetCanonicalPath(byref,int):this
        -181 (-1.19% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
        -143 (-13.31% of base) - System.Uri:InternalIsWellFormedOriginalString():bool:this
        -135 (-5.50% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
        -107 (-6.82% of base) - System.Uri:PrivateParseMinimal():int:this
         -85 (-31.72% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this
         -85 (-31.72% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -46 (-7.31% of base) - System.Uri:ResolveHelper(System.Uri,System.Uri,byref,byref):System.Uri
         -38 (-4.36% of base) - System.Uri:GetLocalPath():System.String:this
         -32 (-2.89% of base) - System.Uri:CreateUriInfo(long):this
         -32 (-9.36% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -32 (-3.60% of base) - System.Uri:Equals(System.Object):bool:this
         -32 (-18.60% of base) - System.Text.Json.Utf8JsonWriter:ValidateEnd(ubyte):this
         -32 (-9.28% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:OnCompleted(System.Action):this
         -31 (-14.22% of base) - System.Uri:GetEscapedParts(int):System.String:this
         -30 (-3.31% of base) - System.Uri:InitializeUri(int,int,byref):this
         -28 (-10.29% of base) - System.Text.Json.Utf8JsonReader:EndObject():this
         -28 (-10.29% of base) - System.Text.Json.Utf8JsonReader:EndArray():this

Top method regressions (percentages):
           5 ( 4.63% of base) - System.Net.HttpResponseStreamAsyncResult:GetChunkHeader(int,byref):System.Byte[]
           9 ( 4.52% of base) - System.Reflection.Metadata.MetadataReader:ComputeCodedTokenSize(int,System.Int32[],long):int:this
          28 ( 2.12% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           2 ( 0.30% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           1 ( 0.22% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourcePropertyAccessorSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,bool,Microsoft.CodeAnalysis.DiagnosticBag):this
           1 ( 0.10% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceCustomEventAccessorSymbol:.ctor(Microsoft.CodeAnalysis.CSharp.Symbols.SourceEventSymbol,Microsoft.CodeAnalysis.CSharp.Syntax.AccessorDeclarationSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.EventSymbol,System.String,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (percentages):
         -15 (-51.72% of base) - System.Uri:get_UserDrivenParsing():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsDosPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsUncPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsImplicitFile():bool:this
         -15 (-51.72% of base) - System.Uri:get_IsUncOrDosPath():bool:this
         -15 (-51.72% of base) - System.Uri:get_UserEscaped():bool:this
         -14 (-42.42% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -14 (-42.42% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
         -14 (-42.42% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
          -8 (-38.10% of base) - System.Diagnostics.SharedPerformanceCounter:IsMisaligned(int):bool
          -8 (-34.78% of base) - System.Uri:EnsureParseRemaining():this
         -85 (-31.72% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this
         -85 (-31.72% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
          -6 (-31.58% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool
          -6 (-30.00% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
          -6 (-28.57% of base) - System.Data.SqlTypes.SqlInt32:SameSignInt(int,int):bool
         -28 (-28.57% of base) - System.Text.Json.BitStack:Pop():bool:this
         -24 (-26.97% of base) - System.Buffers.MemoryManager`1[Int16][System.Int16]:get_Memory():System.Memory`1[Int16]:this
          -4 (-25.00% of base) - Microsoft.Extensions.Internal.ValueStopwatch:get_IsActive():bool:this
          -4 (-25.00% of base) - System.Threading.Tasks.Dataflow.DataflowMessageHeader:get_IsValid():bool:this

403 total methods with Code Size differences (397 improved, 6 regressed), 3 unchanged.

Running asm diffs of libraries_tests.pmi.windows.x86.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 63630
Total bytes of diff: 62153
Total bytes of delta: -1477 (-2.32% of base)
Total relative delta: -11.95
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
        -112 : 92215.dasm (-11.24% of base)
         -72 : 92217.dasm (-5.07% of base)
         -70 : 202041.dasm (-5.98% of base)
         -58 : 202043.dasm (-4.85% of base)
         -39 : 262123.dasm (-88.64% of base)
         -29 : 176571.dasm (-2.00% of base)
         -29 : 172307.dasm (-2.00% of base)
         -28 : 171016.dasm (-43.08% of base)
         -28 : 65114.dasm (-43.08% of base)
         -28 : 92216.dasm (-3.36% of base)
         -28 : 172901.dasm (-41.18% of base)
         -28 : 47380.dasm (-43.08% of base)
         -28 : 187759.dasm (-43.08% of base)
         -28 : 199864.dasm (-43.08% of base)
         -28 : 271037.dasm (-43.08% of base)
         -28 : 320350.dasm (-41.18% of base)
         -28 : 87751.dasm (-28.57% of base)
         -26 : 320331.dasm (-37.68% of base)
         -24 : 93113.dasm (-1.04% of base)
         -22 : 188228.dasm (-61.11% of base)

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

Top method improvements (bytes):
        -112 (-11.24% of base) - System.Text.Json.Tests.BitStackTests:SetResetFirstBit()
         -72 (-5.07% of base) - System.Text.Json.Tests.BitStackTests:BitStackPushPopLarge(int)
         -70 (-5.98% of base) - <ReceiveAsync>d__2:MoveNext():this
         -58 (-4.85% of base) - <SendAsync>d__3:MoveNext():this
         -39 (-88.64% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -29 (-2.00% of base) - <ReadAsyncMemory_WrapsNative_DelegatesToReadAsyncArrayWithPool_Success>d__3:MoveNext():this
         -29 (-2.00% of base) - <ReadAsyncMemory_WrapsNative_DelegatesToReadAsyncArrayWithPool_Success>d__3:MoveNext():this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-3.36% of base) - System.Text.Json.Tests.BitStackTests:BitStackPushPop(int)
         -28 (-41.18% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-41.18% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -28 (-28.57% of base) - System.Text.Json.BitStack:Pop():bool:this
         -26 (-37.68% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -24 (-1.04% of base) - System.Text.Json.Tests.Utf8JsonWriterTests:ResetChangeOutputMode(bool,bool):this
         -22 (-61.11% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this

Top method improvements (percentages):
         -39 (-88.64% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -22 (-61.11% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this
         -22 (-61.11% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__6():System.Object:this
         -22 (-61.11% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__5():System.Object:this
         -22 (-61.11% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__4():System.Object:this
          -9 (-47.37% of base) - <>c:<Find>b__102_2(int):bool:this
          -8 (-44.44% of base) - Microsoft.CodeAnalysis.VisualBasic.Utilities.ModifierCollectionFacts:CouldApplyToOneOf(int):bool:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-43.08% of base) - NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-41.18% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -28 (-41.18% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -26 (-37.68% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
          -6 (-30.00% of base) - Microsoft.Diagnostics.Runtime.Utilities.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
         -28 (-28.57% of base) - System.Text.Json.BitStack:Pop():bool:this
          -6 (-24.00% of base) - System.IO.Win32Marshal:MakeHRFromErrorCode(int):int
          -4 (-21.05% of base) - <>c:<get_UInt64TestDivisions>b__105_2(<>f__AnonymousType0`2[UInt64,UInt64]):bool:this

104 total methods with Code Size differences (104 improved, 0 regressed), 4 unchanged.
Linux ARM64
Running asm diffs of coreclr_tests.pmi.Linux.arm64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 3338328
Total bytes of diff: 3338284
Total bytes of delta: -44 (-0.00% of base)
Total relative delta: -0.18
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
          -8 : 245840.dasm (-3.23% of base)
          -8 : 245854.dasm (-3.70% of base)
          -8 : 245857.dasm (-3.45% of base)
          -8 : 248962.dasm (-3.51% of base)
          -8 : 83747.dasm (-0.42% of base)
          -4 : 158844.dasm (-3.70% of base)

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

Top method improvements (bytes):
          -8 (-3.23% of base) - C:Test1Inner():int
          -8 (-3.70% of base) - C:Test5(int):int
          -8 (-3.45% of base) - C:Test6(int):int
          -8 (-3.51% of base) - PInvokeTest.Test:FromFilter():bool
          -8 (-0.42% of base) - System.Net.Sockets.Socket:Dispose(bool):this
          -4 (-3.70% of base) - Internal.IL.EcmaMethodIL:GetObject(int,int):System.Object:this

Top method improvements (percentages):
          -8 (-3.70% of base) - C:Test5(int):int
          -4 (-3.70% of base) - Internal.IL.EcmaMethodIL:GetObject(int,int):System.Object:this
          -8 (-3.51% of base) - PInvokeTest.Test:FromFilter():bool
          -8 (-3.45% of base) - C:Test6(int):int
          -8 (-3.23% of base) - C:Test1Inner():int
          -8 (-0.42% of base) - System.Net.Sockets.Socket:Dispose(bool):this

6 total methods with Code Size differences (6 improved, 0 regressed), 230 unchanged.

Running asm diffs of libraries.crossgen.Linux.arm64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 134364
Total bytes of diff: 131628
Total bytes of delta: -2736 (-2.04% of base)
Total relative delta: -6.89
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
           8 ( 3.45% of base) - System.Uri:CreateThisFromUri(System.Uri):this
           4 ( 1.09% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.13% of base) - System.Uri:CheckAuthorityHelper(long,int,int,byref,byref,System.UriParser,byref):int:this
           4 ( 1.85% of base) - System.Uri:get_DnsSafeHost():System.String:this

Top method improvements (bytes):
        -156 (-5.02% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:OnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:UnsafeOnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -88 (-3.75% of base) - <WriteAsyncInternal>d__65:MoveNext():this
         -80 (-18.87% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -68 (-5.15% of base) - <<WriteLineAsync>g__WriteLineAsyncCore|66_0>d:MoveNext():this
         -68 (-4.24% of base) - <InternalWriteAllTextAsync>d__82:MoveNext():this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:OnCompleted(System.Action):this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:UnsafeOnCompleted(System.Action):this
         -64 (-34.78% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -64 (-21.05% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -64 (-16.67% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -60 (-11.28% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -60 (-25.42% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -60 (-11.19% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:OnCompleted(System.Action):this
         -60 (-4.70% of base) - <<ReadAsync>g__FinishReadAsync|44_0>d:MoveNext():this
         -60 (-8.72% of base) - <OutputTabsAsync>d__22:MoveNext():this
         -56 (-3.49% of base) - <InternalWriteAllLinesAsync>d__81:MoveNext():this

Top method regressions (percentages):
           8 ( 3.45% of base) - System.Uri:CreateThisFromUri(System.Uri):this
           4 ( 1.85% of base) - System.Uri:get_DnsSafeHost():System.String:this
           4 ( 1.09% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.13% of base) - System.Uri:CheckAuthorityHelper(long,int,int,byref,byref,System.UriParser,byref):int:this

Top method improvements (percentages):
         -64 (-34.78% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -48 (-30.77% of base) - System.Buffers.MemoryManager`1[Char][System.Char]:get_Memory():System.Memory`1[Char]:this
         -48 (-30.77% of base) - System.Buffers.MemoryManager`1[__Canon][System.__Canon]:get_Memory():System.Memory`1[__Canon]:this
         -60 (-25.42% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:OnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:UnsafeOnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -64 (-21.05% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -80 (-18.87% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -64 (-16.67% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:OnCompleted(System.Action):this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:UnsafeOnCompleted(System.Action):this
          -4 (-14.29% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool
         -56 (-13.21% of base) - System.Threading.Tasks.UnwrapPromise`1[VoidTaskResult][System.Threading.Tasks.VoidTaskResult]:.ctor(System.Threading.Tasks.Task,bool):this
         -56 (-13.21% of base) - System.Threading.Tasks.UnwrapPromise`1[__Canon][System.__Canon]:.ctor(System.Threading.Tasks.Task,bool):this
          -4 (-12.50% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
          -4 (-12.50% of base) - System.Data.SqlTypes.SqlInt32:SameSignInt(int,int):bool
         -52 (-11.82% of base) - System.IO.Stream:EndWrite(System.IAsyncResult):this
         -60 (-11.28% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this

153 total methods with Code Size differences (149 improved, 4 regressed), 23 unchanged.

Running asm diffs of libraries.crossgen2.Linux.arm64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 150168
Total bytes of diff: 147580
Total bytes of delta: -2588 (-1.72% of base)
Total relative delta: -6.51
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          16 ( 0.72% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           8 ( 3.28% of base) - System.Uri:CreateThisFromUri(System.Uri):this
           4 ( 0.13% of base) - System.Uri:CheckAuthorityHelper(long,int,int,byref,byref,System.UriParser,byref):int:this
           4 ( 1.69% of base) - System.Uri:get_DnsSafeHost():System.String:this

Top method improvements (bytes):
        -156 (-4.99% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -88 (-3.74% of base) - <WriteAsyncInternal>d__65:MoveNext():this
         -80 (-18.87% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -68 (-4.21% of base) - <InternalWriteAllLinesAsync>d__81:MoveNext():this
         -68 (-4.16% of base) - <InternalWriteAllTextAsync>d__82:MoveNext():this
         -68 (-5.14% of base) - <<WriteLineAsync>g__WriteLineAsyncCore|66_0>d:MoveNext():this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:UnsafeOnCompleted(System.Action):this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:OnCompleted(System.Action):this
         -64 (-16.67% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -64 (-34.78% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -64 (-21.05% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -60 (-8.72% of base) - <OutputTabsAsync>d__22:MoveNext():this
         -60 (-11.28% of base) - ConfiguredValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -60 (-26.79% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -60 (-4.66% of base) - <<ReadAsync>g__FinishReadAsync|44_0>d:MoveNext():this
         -60 (-11.19% of base) - ConfiguredValueTaskAwaiter:OnCompleted(System.Action):this
         -56 (-13.21% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this
         -56 (-13.21% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this

Top method regressions (percentages):
           8 ( 3.28% of base) - System.Uri:CreateThisFromUri(System.Uri):this
           4 ( 1.69% of base) - System.Uri:get_DnsSafeHost():System.String:this
          16 ( 0.72% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.13% of base) - System.Uri:CheckAuthorityHelper(long,int,int,byref,byref,System.UriParser,byref):int:this

Top method improvements (percentages):
         -64 (-34.78% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -48 (-30.00% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.__Canon]:this
         -48 (-30.00% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.Char]:this
         -60 (-26.79% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
        -116 (-24.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -64 (-21.05% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -80 (-18.87% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -64 (-16.67% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:UnsafeOnCompleted(System.Action):this
         -64 (-15.09% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:OnCompleted(System.Action):this
          -4 (-14.29% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool
         -56 (-13.21% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this
         -56 (-13.21% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this
          -4 (-12.50% of base) - System.Data.SqlTypes.SqlInt32:SameSignInt(int,int):bool
          -4 (-12.50% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
         -52 (-11.82% of base) - System.IO.Stream:EndWrite(System.IAsyncResult):this
         -60 (-11.28% of base) - ConfiguredValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -60 (-11.19% of base) - ConfiguredValueTaskAwaiter:OnCompleted(System.Action):this
          -4 (-11.11% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol:get_IsAbstract():bool:this

161 total methods with Code Size differences (157 improved, 4 regressed), 29 unchanged.

Running asm diffs of libraries.pmi.Linux.arm64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 126180
Total bytes of diff: 124864
Total bytes of delta: -1316 (-1.04% of base)
Total relative delta: -5.19
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          16 ( 1.69% of base) - System.Uri:InitializeUri(int,int,byref):this
          16 ( 0.98% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           8 ( 4.08% of base) - System.Uri:CreateThisFromUri(System.Uri):this
           4 ( 2.27% of base) - System.Uri:get_DnsSafeHost():System.String:this
           4 ( 0.27% of base) - System.Uri:PrivateParseMinimal():int:this
           4 ( 0.15% of base) - System.Uri:CheckAuthorityHelper(long,int,int,byref,byref,System.UriParser,byref):int:this
           4 ( 0.37% of base) - System.Uri:InternalIsWellFormedOriginalString():bool:this
           4 ( 0.59% of base) - System.Uri:get_IdnHost():System.String:this

Top method improvements (bytes):
         -60 (-15.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this
         -60 (-15.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -56 (-11.57% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -56 (-11.48% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:OnCompleted(System.Action):this
         -48 (-27.91% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):long
         -48 (-27.91% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):double
         -48 (-27.27% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):ubyte
         -48 (-27.27% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):short
         -44 (-12.64% of base) - System.Threading.Tasks.UnwrapPromise`1[Byte][System.Byte]:.ctor(System.Threading.Tasks.Task,bool):this
         -40 (-17.24% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):System.Numerics.Vector`1[Single]
         -32 (-25.81% of base) - System.Buffers.MemoryManager`1[Int16][System.Int16]:get_Memory():System.Memory`1[Int16]:this
         -28 (-2.46% of base) - System.Uri:CreateUriInfo(long):this
         -16 (-1.45% of base) - System.IO.Ports.SerialStream:.ctor(System.String,int,int,int,int,int,int,int,bool,bool,bool,ubyte):this
         -16 (-1.16% of base) - System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest:ProcessResponse(System.ReadOnlyMemory`1[Byte],byref,byref,byref,bool):bool:this
         -12 (-0.41% of base) - System.Uri:GetCanonicalPath(byref,int):this
          -8 (-4.17% of base) - System.Drawing.Region:Dispose(bool):this
          -8 (-4.26% of base) - System.Drawing.Text.PrivateFontCollection:Dispose(bool):this
          -8 (-0.08% of base) - <ReceiveAsyncPrivate>d__68`1[Byte][System.Byte]:MoveNext():this
          -8 (-1.34% of base) - System.Net.WebClient:DownloadFileAsync(System.Uri,System.String,System.Object):this
          -8 (-1.15% of base) - System.Net.WebClient:UploadStringAsync(System.Uri,System.String,System.String,System.Object):this

Top method regressions (percentages):
           8 ( 4.08% of base) - System.Uri:CreateThisFromUri(System.Uri):this
           4 ( 2.27% of base) - System.Uri:get_DnsSafeHost():System.String:this
          16 ( 1.69% of base) - System.Uri:InitializeUri(int,int,byref):this
          16 ( 0.98% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.59% of base) - System.Uri:get_IdnHost():System.String:this
           4 ( 0.37% of base) - System.Uri:InternalIsWellFormedOriginalString():bool:this
           4 ( 0.27% of base) - System.Uri:PrivateParseMinimal():int:this
           4 ( 0.15% of base) - System.Uri:CheckAuthorityHelper(long,int,int,byref,byref,System.UriParser,byref):int:this

Top method improvements (percentages):
         -48 (-27.91% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):long
         -48 (-27.91% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):double
         -48 (-27.27% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):ubyte
         -48 (-27.27% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):short
         -32 (-25.81% of base) - System.Buffers.MemoryManager`1[Int16][System.Int16]:get_Memory():System.Memory`1[Int16]:this
         -40 (-17.24% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):System.Numerics.Vector`1[Single]
         -60 (-15.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this
         -60 (-15.79% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
          -4 (-14.29% of base) - System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId(int):bool
         -44 (-12.64% of base) - System.Threading.Tasks.UnwrapPromise`1[Byte][System.Byte]:.ctor(System.Threading.Tasks.Task,bool):this
          -4 (-12.50% of base) - PEFile.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
          -4 (-12.50% of base) - System.Data.SqlTypes.SqlInt32:SameSignInt(int,int):bool
         -56 (-11.57% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -56 (-11.48% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:OnCompleted(System.Action):this
          -4 (-11.11% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol:get_IsAbstract():bool:this
          -4 (-11.11% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:get_IsAbstract():bool:this
          -4 (-10.00% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
          -4 (-9.09% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
          -4 (-9.09% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
          -4 (-7.69% of base) - System.Uri:EnsureUriInfo():UriInfo:this

136 total methods with Code Size differences (128 improved, 8 regressed), 35 unchanged.

Running asm diffs of libraries_tests.pmi.Linux.arm64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 49836
Total bytes of diff: 49060
Total bytes of delta: -776 (-1.56% of base)
Total relative delta: -7.38
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          56 ( 2.53% of base) - <WriteAsyncMemory_WrapsNative_DelegatesToWrite_Success>d__5:MoveNext():this
          20 ( 0.99% of base) - <ReadAsyncMemory_WrapsNative_DelegatesToReadAsyncArrayWithPool_Success>d__3:MoveNext():this
          16 ( 1.55% of base) - System.Text.Json.Tests.BitStackTests:SetResetFirstBit()
           8 ( 0.52% of base) - System.Text.Json.Tests.BitStackTests:BitStackPushPopLarge(int)
           4 ( 0.39% of base) - System.Text.Json.Tests.BitStackTests:BitStackPushPop(int)

Top method improvements (bytes):
         -56 (-77.78% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-39.29% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-39.29% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -40 (-35.71% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -40 (-38.46% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__4():System.Object:this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__6():System.Object:this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__5():System.Object:this
         -16 (-0.96% of base) - <ReceiveAsync>d__2:MoveNext():this
         -12 (-1.73% of base) - System.Net.Security.SafeDeleteContext:MustRunInitializeSecurityContext(byref,bool,long,int,int,long,System.Net.Security.SafeDeleteContext,byref,byref,System.Net.Security.SafeFreeContextBuffer):int
         -12 (-1.82% of base) - System.Net.Security.SafeDeleteContext:MustRunAcceptSecurityContext_SECURITY(byref,bool,long,int,int,System.Net.Security.SafeDeleteContext,byref,byref,System.Net.Security.SafeFreeContextBuffer):int
         -12 (-0.73% of base) - <SendAsync>d__3:MoveNext():this
          -8 (-1.65% of base) - Microsoft.VisualBasic.CompilerServices.Conversions:ParseDecimal(System.String,System.Globalization.NumberFormatInfo):System.Decimal
          -8 (-1.92% of base) - Microsoft.VisualBasic.CompilerServices.Conversions:ParseDouble(System.String):double

Top method regressions (percentages):
          56 ( 2.53% of base) - <WriteAsyncMemory_WrapsNative_DelegatesToWrite_Success>d__5:MoveNext():this
          16 ( 1.55% of base) - System.Text.Json.Tests.BitStackTests:SetResetFirstBit()
          20 ( 0.99% of base) - <ReadAsyncMemory_WrapsNative_DelegatesToReadAsyncArrayWithPool_Success>d__3:MoveNext():this
           8 ( 0.52% of base) - System.Text.Json.Tests.BitStackTests:BitStackPushPopLarge(int)
           4 ( 0.39% of base) - System.Text.Json.Tests.BitStackTests:BitStackPushPop(int)

Top method improvements (percentages):
         -56 (-77.78% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__4():System.Object:this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__6():System.Object:this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this
         -32 (-57.14% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__5():System.Object:this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-40.74% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -44 (-39.29% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -44 (-39.29% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -40 (-38.46% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -40 (-35.71% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
          -8 (-22.22% of base) - Microsoft.CodeAnalysis.VisualBasic.Utilities.ModifierCollectionFacts:CouldApplyToOneOf(int):bool:this
          -4 (-12.50% of base) - Microsoft.Diagnostics.Runtime.Utilities.IMAGE_RESOURCE_DIRECTORY_ENTRY:get_IsLeaf():bool:this
          -8 (-4.65% of base) - <>c__DisplayClass74_0:<ExecuteSubmission>b__0():this
          -8 (-3.28% of base) - System.IO.Tests.File_ReadWriteAllBytes:ProcFs_EqualsReadAllText(System.String):this
          -8 (-2.33% of base) - <>c__DisplayClass73_0:<ExecuteSubmission>b__0():this
          -4 (-2.22% of base) - Roslyn.Utilities.DecimalUtilities:GetBits(System.Decimal,byref,byref,byref,byref,byref)

58 total methods with Code Size differences (53 improved, 5 regressed), 4 unchanged.
Linux ARM
Running asm diffs of coreclr_tests.pmi.Linux.arm.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 3870988
Total bytes of diff: 3870698
Total bytes of delta: -290 (-0.01% of base)
Total relative delta: -2.06
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0017()
           2 ( 0.02% of base) - Program:TestCase0036()
           2 ( 0.02% of base) - Program:TestCase0007()
           2 ( 0.02% of base) - Program:TestCase0015()
           2 ( 0.02% of base) - Program:TestCase0022()
           2 ( 0.01% of base) - Program:TestCase0006()
           2 ( 0.01% of base) - Program:TestCase0007()
           2 ( 0.03% of base) - Program:TestCase0005()
           2 ( 0.03% of base) - Program:TestCase0002()
           2 ( 0.02% of base) - Program:TestCase0016()
           2 ( 0.02% of base) - Program:TestCase0017()
           2 ( 0.02% of base) - Program:TestCase0018()
           2 ( 0.02% of base) - Program:TestCase0002()

Top method improvements (bytes):
         -32 (-0.08% of base) - longMDArrTest:Main():int
         -32 (-0.08% of base) - ulongMDArrTest:Main():int
         -12 (-1.00% of base) - Threading.Tests.OSThreadId:Main(System.String[]):int
         -10 (-5.21% of base) - C:Test6(int):int
         -10 (-4.55% of base) - PInvokeTest.Test:FromFilter():bool
         -10 (-0.69% of base) - AA:Static5(System.Double[],byref,byref,ushort,System.Boolean[][],byref,System.UInt32[][,,],long):System.SByte[,][]
         -10 (-4.31% of base) - C:Test1Inner():int
         -10 (-5.56% of base) - C:Test5(int):int
         -10 (-0.56% of base) - System.Net.Sockets.Socket:Dispose(bool):this
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.19% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[Int64,Boolean]
          -6 (-3.19% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[Int64,Boolean]
          -6 (-3.19% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[Int64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.19% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[Int64,Boolean]
          -6 (-3.19% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[Int64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.19% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[Int64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]

Top method regressions (percentages):
           2 ( 0.05% of base) - Program:TestCase0002()
           2 ( 0.05% of base) - Program:TestCase0002()
           2 ( 0.03% of base) - Program:TestCase0002()
           2 ( 0.03% of base) - Program:TestCase0005()
           2 ( 0.03% of base) - Program:TestCase0005()
           2 ( 0.03% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0011()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0017()
           4 ( 0.02% of base) - Program:TestCase0005()
           4 ( 0.02% of base) - Program:TestCase0002()
           4 ( 0.02% of base) - Program:TestCase0011()
           2 ( 0.02% of base) - Program:TestCase0007()
           2 ( 0.02% of base) - Program:TestCase0015()
           2 ( 0.02% of base) - Program:TestCase0022()
           2 ( 0.02% of base) - Program:TestCase0014()
           2 ( 0.02% of base) - Program:TestCase0021()
           2 ( 0.02% of base) - Program:TestCase0003()

Top method improvements (percentages):
          -6 (-9.68% of base) - Program:I8_BT_mem_reg(byref,int):bool
          -6 (-8.57% of base) - Program:I8_BT_reg_reg(long,int):bool
         -10 (-5.56% of base) - C:Test5(int):int
         -10 (-5.21% of base) - C:Test6(int):int
         -10 (-4.55% of base) - PInvokeTest.Test:FromFilter():bool
          -4 (-4.44% of base) - Internal.IL.EcmaMethodIL:GetObject(int,int):System.Object:this
         -10 (-4.31% of base) - C:Test1Inner():int
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]
          -6 (-3.66% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftOvf(long,int):System.ValueTuple`2[UInt64,Boolean]

158 total methods with Code Size differences (74 improved, 84 regressed), 132 unchanged.

Running asm diffs of libraries.crossgen.Linux.arm.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 135192
Total bytes of diff: 131546
Total bytes of delta: -3646 (-2.70% of base)
Total relative delta: -16.77
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          22 ( 0.79% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
           6 ( 1.97% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (bytes):
        -186 (-1.49% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
        -154 (-6.56% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
        -146 (-5.55% of base) - System.Uri:GetCanonicalPath(byref,int):this
        -120 (-6.04% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:OnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:UnsafeOnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -78 (-4.52% of base) - <WriteAsyncInternal>d__65:MoveNext():this
         -54 (-12.80% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:OnCompleted(System.Action):this
         -54 (-12.92% of base) - ConfiguredValueTaskAwaiter[Int32][System.Int32]:UnsafeOnCompleted(System.Action):this
         -54 (-18.12% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -52 (-18.44% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -52 (-38.81% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -50 (-15.53% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:OnCompleted(System.Action):this
         -50 (-29.41% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -50 (-15.53% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[__Canon][System.__Canon]:UnsafeOnCompleted(System.Action):this
         -50 (-5.52% of base) - <<ReadAsync>g__FinishReadAsync|44_0>d:MoveNext():this
         -50 (-21.01% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -48 (-14.91% of base) - System.Threading.Tasks.UnwrapPromise`1[VoidTaskResult][System.Threading.Tasks.VoidTaskResult]:.ctor(System.Threading.Tasks.Task,bool):this

Top method regressions (percentages):
           6 ( 1.97% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
          22 ( 0.79% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this

Top method improvements (percentages):
         -52 (-38.81% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -12 (-37.50% of base) - System.Uri:get_IsUncOrDosPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsDosPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_UserDrivenParsing():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsImplicitFile():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsUncPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_UserEscaped():bool:this
         -40 (-33.33% of base) - System.Buffers.MemoryManager`1[__Canon][System.__Canon]:get_Memory():System.Memory`1[__Canon]:this
         -40 (-33.33% of base) - System.Buffers.MemoryManager`1[Char][System.Char]:get_Memory():System.Memory`1[Char]:this
         -50 (-29.41% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -12 (-28.57% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
         -10 (-27.78% of base) - Microsoft.FSharp.Text.StructuredPrintfImpl.LayoutTag:GetHashCode():int:this
         -10 (-27.78% of base) - ShowMode:GetHashCode():int:this
         -10 (-27.78% of base) - TupleType:GetHashCode():int:this
         -12 (-26.09% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
         -12 (-26.09% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:OnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Boolean][System.Boolean]:UnsafeOnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this

237 total methods with Code Size differences (235 improved, 2 regressed), 3 unchanged.

Running asm diffs of libraries.crossgen2.Linux.arm.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 147094
Total bytes of diff: 143538
Total bytes of delta: -3556 (-2.42% of base)
Total relative delta: -16.39
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          22 ( 0.79% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
           8 ( 0.42% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.45% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           2 ( 0.66% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (bytes):
        -186 (-1.49% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
        -154 (-6.56% of base) - <WaitUntilCountOrTimeoutAsync>d__31:MoveNext():this
        -146 (-5.38% of base) - System.Uri:GetCanonicalPath(byref,int):this
        -120 (-6.01% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -78 (-4.49% of base) - <WriteAsyncInternal>d__65:MoveNext():this
         -54 (-18.12% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Write(System.Byte[],int,int):this
         -54 (-12.92% of base) - ConfiguredValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
         -54 (-12.80% of base) - ConfiguredValueTaskAwaiter:OnCompleted(System.Action):this
         -52 (-38.81% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -52 (-18.44% of base) - System.IO.Stream:EndRead(System.IAsyncResult):int:this
         -50 (-5.34% of base) - <<ReadAsync>g__FinishReadAsync|44_0>d:MoveNext():this
         -50 (-21.01% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this
         -50 (-15.53% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:UnsafeOnCompleted(System.Action):this
         -50 (-30.12% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -50 (-15.53% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1:OnCompleted(System.Action):this
         -50 (-6.72% of base) - <<WriteAsync>g__WriteAsyncCore|60_0>d:MoveNext():this
         -48 (-14.91% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this
         -48 (-14.91% of base) - System.Threading.Tasks.UnwrapPromise`1:.ctor(System.Threading.Tasks.Task,bool):this

Top method regressions (percentages):
          22 ( 0.79% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
           2 ( 0.66% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMethodSymbol:CheckModifiersForBody(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.45% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this
           8 ( 0.42% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this

Top method improvements (percentages):
         -52 (-38.81% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult)
         -12 (-37.50% of base) - System.Uri:get_IsUncPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsDosPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsUncOrDosPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsImplicitFile():bool:this
         -12 (-37.50% of base) - System.Uri:get_UserDrivenParsing():bool:this
         -12 (-37.50% of base) - System.Uri:get_UserEscaped():bool:this
         -50 (-30.12% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):int
         -12 (-28.57% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
         -36 (-28.12% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.Char]:this
         -36 (-28.12% of base) - System.Buffers.MemoryManager`1:get_Memory():System.Memory`1[System.__Canon]:this
         -10 (-27.78% of base) - ShowMode:GetHashCode():int:this
         -10 (-27.78% of base) - TupleType:GetHashCode():int:this
         -10 (-27.78% of base) - Microsoft.FSharp.Text.StructuredPrintfImpl.LayoutTag:GetHashCode():int:this
         -12 (-26.09% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
         -12 (-26.09% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:OnCompleted(System.Action):this
         -88 (-25.73% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter:UnsafeOnCompleted(System.Action):this
          -8 (-22.22% of base) - System.Uri:EnsureParseRemaining():this
         -50 (-21.01% of base) - System.IO.Strategies.Net5CompatFileStreamStrategy:Read(System.Byte[],int,int):int:this

247 total methods with Code Size differences (243 improved, 4 regressed), 7 unchanged.

Running asm diffs of libraries.pmi.Linux.arm.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 194692
Total bytes of diff: 191160
Total bytes of delta: -3532 (-1.81% of base)
Total relative delta: -16.81
    diff is an improvement.
    relative diff is an improvement.


Top method regressions (bytes):
          60 ( 2.25% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
          20 ( 1.26% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.50% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this

Top method improvements (bytes):
        -186 (-1.62% of base) - System.Reflection.Metadata.MetadataReader:InitializeTableReaders(System.Reflection.Internal.MemoryBlock,ubyte,System.Int32[],System.Int32[]):this
        -184 (-4.81% of base) - System.Uri:ReCreateParts(int,ushort,int):System.String:this
        -168 (-5.35% of base) - System.Uri:GetCanonicalPath(byref,int):this
        -120 (-4.71% of base) - System.Uri:GetUriPartsFromUserString(int):System.String:this
        -100 (-10.57% of base) - System.Uri:InternalIsWellFormedOriginalString():bool:this
         -66 (-20.62% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this
         -66 (-20.62% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -42 (-5.95% of base) - System.Uri:ResolveHelper(System.Uri,System.Uri,byref,byref):System.Uri
         -42 (-2.94% of base) - System.Uri:PrivateParseMinimal():int:this
         -38 (-25.68% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):short
         -38 (-26.03% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):double
         -38 (-24.68% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):long
         -38 (-25.68% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):ubyte
         -38 (-3.81% of base) - System.Uri:CreateUriInfo(long):this
         -36 (-9.18% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:OnCompleted(System.Action):this
         -36 (-9.28% of base) - ConfiguredValueTaskAwaiter[Byte][System.Byte]:UnsafeOnCompleted(System.Action):this
         -36 (-4.04% of base) - System.Uri:GetLocalPath():System.String:this
         -36 (-24.00% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):System.Numerics.Vector`1[Single]
         -36 (-12.59% of base) - System.Threading.Tasks.UnwrapPromise`1[Byte][System.Byte]:.ctor(System.Threading.Tasks.Task,bool):this
         -32 (-31.37% of base) - System.Buffers.MemoryManager`1[Int16][System.Int16]:get_Memory():System.Memory`1[Int16]:this

Top method regressions (percentages):
          60 ( 2.25% of base) - System.Uri:CheckAuthorityHelper(int,int,int,byref,byref,System.UriParser,byref):int:this
          20 ( 1.26% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberMethodSymbol:CheckModifiers(Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.DiagnosticBag):this
           4 ( 0.50% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.SourceUserDefinedOperatorSymbolBase:.ctor(int,System.String,Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxReference,Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.DiagnosticBag,bool):this

Top method improvements (percentages):
         -12 (-37.50% of base) - System.Uri:get_IsImplicitFile():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsUncOrDosPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_UserDrivenParsing():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsDosPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_IsUncPath():bool:this
         -12 (-37.50% of base) - System.Uri:get_UserEscaped():bool:this
         -32 (-31.37% of base) - System.Buffers.MemoryManager`1[Int16][System.Int16]:get_Memory():System.Memory`1[Int16]:this
         -12 (-28.57% of base) - System.Xml.XmlReader:IsTextualNode(int):bool
         -12 (-26.09% of base) - System.Xml.XmlReader:CanReadContentAs(int):bool
         -12 (-26.09% of base) - System.Xml.XmlReader:HasValueInternal(int):bool
         -38 (-26.03% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):double
         -38 (-25.68% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):short
         -38 (-25.68% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):ubyte
          -8 (-25.00% of base) - System.Uri:EnsureParseRemaining():this
         -10 (-25.00% of base) - Microsoft.FSharp.Text.StructuredPrintfImpl.LayoutTag:GetHashCode():int:this
         -10 (-25.00% of base) - ShowMode:GetHashCode():int:this
         -10 (-25.00% of base) - TupleType:GetHashCode():int:this
         -38 (-24.68% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):long
         -36 (-24.00% of base) - System.Threading.Tasks.TaskToApm:End(System.IAsyncResult):System.Numerics.Vector`1[Single]
         -66 (-20.62% of base) - System.Runtime.CompilerServices.ValueTaskAwaiter`1[Byte][System.Byte]:OnCompleted(System.Action):this

342 total methods with Code Size differences (339 improved, 3 regressed), 5 unchanged.

Running asm diffs of libraries_tests.pmi.Linux.arm.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 60060
Total bytes of diff: 58786
Total bytes of delta: -1274 (-2.12% of base)
Total relative delta: -8.88
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
         -96 : 18767.dasm (-7.91% of base)
         -56 : 158520.dasm (-4.06% of base)
         -56 : 304735.dasm (-84.85% of base)
         -48 : 18769.dasm (-3.19% of base)
         -46 : 158522.dasm (-3.43% of base)
         -28 : 115176.dasm (-56.00% of base)
         -28 : 115175.dasm (-56.00% of base)
         -28 : 115178.dasm (-56.00% of base)
         -28 : 115177.dasm (-56.00% of base)
         -26 : 114684.dasm (-31.71% of base)
         -26 : 188212.dasm (-31.71% of base)
         -26 : 189299.dasm (-1.47% of base)
         -26 : 234063.dasm (-31.71% of base)
         -26 : 156336.dasm (-31.71% of base)
         -26 : 7378.dasm (-31.71% of base)
         -26 : 222123.dasm (-30.95% of base)
         -26 : 247975.dasm (-31.71% of base)
         -26 : 277039.dasm (-30.95% of base)
         -24 : 277020.dasm (-28.57% of base)
         -24 : 19681.dasm (-0.99% of base)

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

Top method improvements (bytes):
         -96 (-7.91% of base) - System.Text.Json.Tests.BitStackTests:SetResetFirstBit()
         -56 (-4.06% of base) - <ReceiveAsync>d__2:MoveNext():this
         -56 (-84.85% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -48 (-3.19% of base) - System.Text.Json.Tests.BitStackTests:BitStackPushPopLarge(int)
         -46 (-3.43% of base) - <SendAsync>d__3:MoveNext():this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__5():System.Object:this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__4():System.Object:this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__6():System.Object:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-1.47% of base) - <ReadAsyncMemory_WrapsNative_DelegatesToReadAsyncArrayWithPool_Success>d__3:MoveNext():this
         -26 (-31.71% of base) - NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-30.95% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-30.95% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -24 (-28.57% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -24 (-0.99% of base) - System.Text.Json.Tests.Utf8JsonWriterTests:ResetChangeOutputMode(bool,bool):this

Top method improvements (percentages):
         -56 (-84.85% of base) - Microsoft.Extensions.Primitives.StringSegmentTest:StringSegment_Value_Invalid():this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__5():System.Object:this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__4():System.Object:this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__7():System.Object:this
         -28 (-56.00% of base) - <>c__DisplayClass78_0:<MemoryManagerMemoryCtorInvalid>b__6():System.Object:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-31.71% of base) - System.Buffers.NativeMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-30.95% of base) - DisposeTrackingMemoryManager:get_Memory():System.Memory`1[Byte]:this
         -26 (-30.95% of base) - BoundedMemoryManager[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
          -8 (-30.77% of base) - Microsoft.CodeAnalysis.VisualBasic.Utilities.ModifierCollectionFacts:CouldApplyToOneOf(int):bool:this
         -24 (-28.57% of base) - WindowsImplementation`1[Byte][System.Byte]:get_Memory():System.Memory`1[Byte]:this
         -20 (-17.86% of base) - System.Text.Json.BitStack:Pop():bool:this
          -4 (-15.38% of base) - <>c:<get_UInt64TestDivisions>b__105_2(<>f__AnonymousType0`2[UInt64,UInt64]):bool:this
          -6 (-15.00% of base) - HashBucket[Byte,Nullable`1][System.Byte,System.Nullable`1[System.Int32]]:IsInUse(int):bool:this
          -6 (-15.00% of base) - HashBucket[__Canon,Nullable`1][System.__Canon,System.Nullable`1[System.Int32]]:IsInUse(int):bool:this
          -4 (-13.33% of base) - <>c__DisplayClass0_0:<InvalidArgs_Throws>b__1():System.Object:this

86 total methods with Code Size differences (86 improved, 0 regressed), 2 unchanged.

Almost all regressions are caused by now missing CSEs as morph changes more trees. The small tests regressions are because of slightly different register allocation. I think, given the overall positive impact, the regressions are acceptable.

I still need to drill down into what's causing such CQ improvements.
Done, see below.

@dotnet-issue-labeler dotnet-issue-labeler bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Jun 22, 2021
Use "genActualType" directly as it is now a templated method.

Don't create casts to TYP_ULONG - they are identical to casts
to TYP_LONG. TYP_ULONG is only relevant for checked casts.

Add a TODO on addressing the duplicated logic that upcasts to
native int from int32 on 64 bit.

Use modern comments.

Zero diffs.
Normalizing this idiom helps downstream optimizations.
In morph, when narrowing the AND operand, only
insert casts if necessary - prefer to use "optNarrowTree".
Otherwise we end up with redundant register shuffling.
@SingleAccretion
Copy link
Contributor Author

SingleAccretion commented Jun 22, 2021

Case 1: Internal.JitInterface.InstructionSetFlags:Set64BitInstructionSetVariants - questionable behavior being masked.

The whole method consists of repeated sequences:

------------ BB13 [06A..073) -> BB15 (cond), preds={BB11,BB12} succs={BB14,BB15}

***** BB13
STMT00062 (IL   ???...  ???)
N007 (  9,  8)              [000207] ---XG-------              *  JTRUE     void  
N006 (  7,  6)              [000377] N--XG--N----              \--*  EQ        int    <l:$416, c:$415>
N004 (  5,  4)              [000374] ---XG-------                 +--*  AND       long   <l:$469, c:$468>
N002 (  3,  2) CSE #06 (def)[000367] *--XG-------                 |  +--*  IND       long   <l:$465, c:$464>
N001 (  1,  1)              [000201] ------------                 |  |  \--*  LCL_VAR   byref  V00 this         u:1 Zero Fseq[hackishFieldName] $80
N003 (  1,  1)              [000373] ------------                 |  \--*  CNS_INT   long   64 $2cb
N005 (  1,  1)              [000376] ------------                 \--*  CNS_INT   long   0 $2c1

------------ BB14 [073..07B), preds={BB13} succs={BB15}

***** BB14
STMT00081 (IL 0x073...  ???)
N007 (  9, 10)              [000389] -A-XG---R---              *  ASG       long   $VN.Void
N006 (  3,  2)              [000388] *--XG--N----              +--*  IND       long   <l:$46c, c:$46b>
N005 (  1,  1)              [000229] ------------              |  \--*  LCL_VAR   byref  V00 this         u:1 Zero Fseq[hackishFieldName] $80
N004 (  5,  7)              [000387] ---XG-------              \--*  OR        long   <l:$46e, c:$46d>
N002 (  3,  2) CSE #06 (use)[000380] *--XG-------                 +--*  IND       long   <l:$465, c:$46a>
N001 (  1,  1)              [000379] ------------                 |  \--*  LCL_VAR   byref  V00 this         u:1 Zero Fseq[hackishFieldName] $80
N003 (  1,  4)              [000386] ------------                 \--*  CNS_INT   long   0x40000 $2e2

As one can see, there is a CSE opportunity here - and it is taken.

Eventually this leads to the following codegen:

G_M53887_IG08:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref, isz
       mov      rax, qword ptr [rcx]
       mov      edx, eax
       test     dl, 32
       je       SHORT G_M53887_IG09
       or       rax, 0x20000
       mov      qword ptr [rcx], rax
						;; bbWeight=0.50 PerfScore 2.38
G_M53887_IG09:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref, isz
       mov      rax, qword ptr [rcx]
       mov      edx, eax
       test     dl, 64
       je       SHORT G_M53887_IG10
       or       rax, 0xD1FFAB1E
       mov      qword ptr [rcx], rax
						;; bbWeight=0.50 PerfScore 2.38
G_M53887_IG10:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref, isz
       mov      rax, qword ptr [rcx]
       mov      edx, eax
       test     dl, 128
       je       SHORT G_M53887_IG11
       or       rax, 0xD1FFAB1E
       mov      qword ptr [rcx], rax
						;; bbWeight=0.50 PerfScore 2.38
G_M53887_IG11:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref

After this change, there are no CSEs because the AND tree is narrowed to int:

***** BB13
STMT00062 (IL   ???...  ???)
N007 (  9,  8)              [000207] ---XG-------              *  JTRUE     void  
N006 (  7,  6)              [000377] J--XG--N----              \--*  EQ        int    <l:$4d7, c:$4d6>
N004 (  5,  4)              [000374] ---XG-------                 +--*  AND       int    <l:$4d3, c:$4d2>
N002 (  3,  2)              [000367] *--XG-------                 |  +--*  IND       int    <l:$4cf, c:$4ce>
N001 (  1,  1)              [000201] ------------                 |  |  \--*  LCL_VAR   byref  V00 this         u:1 Zero Fseq[hackishFieldName] $80
N003 (  1,  1)              [000373] ------------                 |  \--*  CNS_INT   int    64 $51
N005 (  1,  1)              [000376] ------------                 \--*  CNS_INT   int    0 $40

------------ BB14 [073..07B), preds={BB13} succs={BB15}

***** BB14
STMT00081 (IL 0x073...  ???)
N007 (  9, 10)              [000389] -A-XG---R---              *  ASG       long   $VN.Void
N006 (  3,  2)              [000388] *--XG--N----              +--*  IND       long   <l:$500, c:$47f>
N005 (  1,  1)              [000229] ------------              |  \--*  LCL_VAR   byref  V00 this         u:1 Zero Fseq[hackishFieldName] $80
N004 (  5,  7)              [000387] ---XG-------              \--*  OR        long   <l:$502, c:$501>
N002 (  3,  2)              [000380] *--XG-------                 +--*  IND       long   <l:$47e, c:$47d>
N001 (  1,  1)              [000379] ------------                 |  \--*  LCL_VAR   byref  V00 this         u:1 Zero Fseq[hackishFieldName] $80
N003 (  1,  4)              [000386] ------------                 \--*  CNS_INT   long   0x40000 $356

And the codegen is more compact:

G_M53887_IG08:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref, isz
       test     byte  ptr [rcx], 32
       je       SHORT G_M53887_IG09
       or       qword ptr [rcx], 0x20000
						;; bbWeight=0.50 PerfScore 4.00
G_M53887_IG09:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref, isz
       test     byte  ptr [rcx], 64
       je       SHORT G_M53887_IG10
       or       qword ptr [rcx], 0xD1FFAB1E
						;; bbWeight=0.50 PerfScore 4.00
G_M53887_IG10:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref, isz
       test     byte  ptr [rcx], 128
       je       SHORT G_M53887_IG11
       or       qword ptr [rcx], 0xD1FFAB1E
						;; bbWeight=0.50 PerfScore 4.00
G_M53887_IG11:        ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref

@SingleAccretion
Copy link
Contributor Author

SingleAccretion commented Jun 22, 2021

Case 2: System.Runtime.CompilerServices.ValueTaskAwaiter1[Byte][System.Byte]:OnCompleted: null check is propagated early by local assertion prop.

In short:

GenTreeNode creates assertion:
               [000113] ---X--------              *  NULLCHECK byte  
In BB10 New Local Constant Assertion: V03 != null index=#01, mask=0000000000000001

@@ -4594,19 +4594,20 @@ fgMorphTree BB10, STMT00032 (before)
                [000134] -A----------              *  ASG       bool
                [000133] D------N----              +--*  LCL_VAR   bool   V12 tmp6
                [000126] ------------              \--*  CAST      int <- bool <- int
-               [000116] N--------U--                 \--*  GT        int
+               [000116] ------------                 \--*  NE        int
                [000060] ------------                    +--*  LCL_VAR   ref    V03 loc1
                [000115] ------------                    \--*  CNS_INT   ref    null
+
+Assertion prop for index #01 in BB10:
+               [000116] ------------              *  NE        int
 GenTreeNode creates assertion:
                [000134] -A----------              *  ASG       bool
-In BB10 New Local Subrange Assertion: V12 in [0..1] index=#02, mask=0000000000000002
+In BB10 New Local Constant Assertion: V12 == 1 index=#02, mask=0000000000000002

 fgMorphTree BB10, STMT00032 (after)
                [000134] -A---+------              *  ASG       bool
                [000133] D----+-N----              +--*  LCL_VAR   int    V12 tmp6
-               [000116] N----+------              \--*  NE        int
-               [000060] -----+------                 +--*  LCL_VAR   ref    V03 loc1
-               [000115] -----+------                 \--*  CNS_INT   ref    null
+               [000115] -----+------              \--*  CNS_INT   int    1

 fgMorphTree BB10, STMT00035 (before)
                [000144] -A--G-------              *  ASG       ref
@@ -4620,6 +4621,21 @@ fgMorphTree BB10, STMT00033 (before)
                [000136] ------------                 +--*  LCL_VAR   int    V12 tmp6
                [000137] ------------                 \--*  CNS_INT   int    0

+Assertion prop for index #02 in BB10:
+               [000138] J------N----              *  NE        int
+
+fgMorphTree BB10, STMT00033 (after)
+               [000139] -----+------              *  JTRUE     void
+               [000137] -----+------              \--*  CNS_INT   int    1
+
+removing useless STMT00033 (IL 0x032...  ???)
+               [000139] -----+------              *  JTRUE     void
+               [000137] -----+------              \--*  CNS_INT   int    1
+ from BB10
+
+Conditional folded at BB10
+BB10 becomes a BBJ_ALWAYS to BB13

I suppose this is the intended effect of this PR, though we could of course just teach assertion prop to recognize this particular form instead of the generic "relop implies [0..1]".

Similar pattern is eliminated in System.Threading.Tasks.TaskToApm:End methods and System.Buffers.MemoryManager1[Int16][System.Int16]:get_Memory():System.Memory[Int16].

@SingleAccretion
Copy link
Contributor Author

SingleAccretion commented Jun 22, 2021

Case 3: System.Text.Json.BitStack:Pop(): more thorough narrowing helps containment.

In this method, the new code manages to narrow the tree to int:

@@ -834,7 +834,7 @@ Morphing BB04 of 'System.Text.Json.BitStack:Pop():bool:this'
 fgMorphTree BB04, STMT00006 (before)
                [000035] -A-XG-------              *  ASG       int
                [000034] D------N----              +--*  LCL_VAR   int    V01 loc0
-               [000033] N--XG----U--              \--*  GT        int
+               [000033] ---XG-------              \--*  NE        int
                [000030] ---XG-------                 +--*  AND       long
                [000027] ---XG-------                 |  +--*  FIELD     long   hackishFieldName
                [000026] ------------                 |  |  \--*  LCL_VAR   byref  V00 this
@@ -853,14 +853,14 @@ In BB04 New Local Subrange Assertion: V01 in [0..1] index=#01, mask=000000000000
 fgMorphTree BB04, STMT00006 (after)
                [000035] -A-XG+------              *  ASG       int
                [000034] D----+-N----              +--*  LCL_VAR   int    V01 loc0
-               [000033] N--XG+------              \--*  NE        int
-               [000030] ---XG+------                 +--*  AND       long
-               [000027] *--XG+------                 |  +--*  IND       long
+               [000033] ---XG+------              \--*  NE        int
+               [000030] ---XG+------                 +--*  AND       int
+               [000027] *--XG+------                 |  +--*  IND       int
                [000071] -----+------                 |  |  \--*  ADD       byref
                [000026] -----+------                 |  |     +--*  LCL_VAR   byref  V00 this
                [000070] -----+------                 |  |     \--*  CNS_INT   long   8 field offset Fseq[hackishFieldName]
-               [000029] -----+------                 |  \--*  CNS_INT   long   1
-               [000032] -----+------                 \--*  CNS_INT   long   0
+               [000029] -----+------                 |  \--*  CNS_INT   int    1
+               [000032] -----+------                 \--*  CNS_INT   int    0

This eventually lets lowering narrow things even further:

     N001 (  1,  1) [000043] ------------              *  LCL_VAR   byref  V00 this         u:1 (last use) $80
@@ -4068,30 +4041,26 @@ N001 (  1,  1) [000043] ------------        t43 =    LCL_VAR   byref  V00 this
                                                   /--*  t43    byref
 N003 (  2,  2) [000067] -c----------        t67 = *  LEA(b+8)  byref
                                                   /--*  t67    byref
-N004 (  4,  4) [000044] *---GO------        t44 = *  IND       long   <l:$38c, c:$38b>
-                                                  /--*  t44    long
-N005 (  5,  6) [000085] ----GO------        t85 = *  CAST      int <- long
-N006 (  1,  1) [000046] -c----------        t46 =    CNS_INT   int    1
-                                                  /--*  t85    int
-                                                  +--*  t46    int
-N009 ( 12, 10) [000050] N---GO------        t50 = *  TEST_NE   int    <l:$258, c:$257>
+N004 (  4,  4) [000044] *c--GO------        t44 = *  IND       ubyte  <l:$25c, c:$25b>
+N005 (  1,  1) [000046] -c----------        t46 =    CNS_INT   ubyte  1 $44
+                                                  /--*  t44    ubyte
+                                                  +--*  t46    ubyte
+N008 ( 11,  8) [000050] ----GO---U--        t50 = *  TEST_NE   int    <l:$264, c:$263>
                                                   /--*  t50    int
-N011 ( 12, 10) [000052] DA--GO------              *  STORE_LCL_VAR int    V01 loc0         d:4
+N010 ( 11,  8) [000052] DA--GO------              *  STORE_LCL_VAR int    V01 loc0         d:4

Similar improvements in System.Data.SqlTypes.SqlInt32:SameSignInt, System.Uri:CreateUriInfo, System.Uri:EnsureParseRemaining, System.Reflection.Metadata.Ecma335.TokenTypeIds:IsValidRowId and System.Xml.XmlReader methods.

@huoyaoyuan
Copy link
Member

Hopefully this can resolve #47920

@SingleAccretion
Copy link
Contributor Author

SingleAccretion commented Jun 22, 2021

Hopefully this can resolve #47920

I checked, it will not. At the point when the optimizer will reason about the branches, all of the cgt.uns will have been normalized already, so doing it earlier is not expected to have effect (it affects local prop, which does not reason about flow).

@@ -13064,27 +13064,36 @@ void Compiler::impImportBlockCode(BasicBlock* block)
op2 = impPopStack().val;
op1 = impPopStack().val;

// Recognize the IL idiom of CGT_UN(op1, 0) and normalize
// it so that downstream optimizations don't have to.
if ((opcode == CEE_CGT_UN) && op2->IsIntegralConst(0))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you please check the case where op1 is zero (reversed) here - does it produce any diffs?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that's necessary: cgt.un(0, op) is always false, and op1 = gtFoldExpr(op1) below takes care of that.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@SingleAccretion no, I meant clt.un(0, op) the same pattern but reversed. Also, cle.un(op, 0) -- the same transformation in morph does that https://github.com/dotnet/runtime/blob/main/src/coreclr/jit/morph.cpp#L13917-L13918

Copy link
Contributor Author

@SingleAccretion SingleAccretion Jun 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, thank you for the clarification.

So I did add the clt.un(0, op) handling here, and the diffs were in about 10 methods across all collections, mostly positive as one would expect (amounting to ~150 bytes), but there was was one regression that got me thinking a bit. The regression is because GT_UN(x, 0) (reversed from LT(0, x)) allows assertion prop to eliminate a range check against zero, while NE(x, 0) doesn't have the same effect. Perhaps we should not be normalizing this idiom after all...

I will say that if it is ok, I would prefer to leave the case here as is. The long-term plan (well, plan for the PR after the next one) is to just fix the ordering problem in morph.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually tried exactly the same opt (to recognize GT_NE early in the importer) a long time ago but there were lots of range-checks regressions and I gave up so I guess those were fixed since then (by you? 🙂)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By @nathan-moore's #40180 would be my guess :).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea, that should handle ==,!= 0 in range check. It's wierd that you saw regressions though since it got changed to != in morph before anything that should remove bound checks ran. ¯\_(ツ)_/¯

@SingleAccretion
Copy link
Contributor Author

CI failures look like #54589, so switching as ready-for-review.

@SingleAccretion SingleAccretion marked this pull request as ready for review June 23, 2021 04:57
@kunalspathak
Copy link
Member

@dotnet/jit-contrib , @EgorBo - let us try to review and merge today before we snap the release.

@EgorBo
Copy link
Member

EgorBo commented Jul 13, 2021

Ah, I forgot to "Apporve", LGTM, Thanks!

@kunalspathak kunalspathak merged commit 1c3d401 into dotnet:main Jul 13, 2021
@SingleAccretion SingleAccretion deleted the Import-CgtUn-0-As-NE-0 branch July 13, 2021 16:48
@ghost ghost locked as resolved and limited conversation to collaborators Aug 12, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants