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

Eliminate chained casts to small types #52561

Merged
merged 1 commit into from
Jun 25, 2021

Conversation

SingleAccretion
Copy link
Contributor

@SingleAccretion SingleAccretion commented May 10, 2021

We can take advantage of the implicit zero/sign-extension for small integer types and eliminate some casts.

Diffs as of first commit. Regressions are caused by losing some CSEs
Using JIT/EE Version from jiteeversionguid.h: 12234eca-dfc2-48bc-a320-6155cf25ce17

aspnet.run.windows.x64.checked.mch: 8 total methods with Code Size differences (8 improved, 0 regressed), 2 unchanged
benchmarks.run.windows.x64.checked.mch: 7 total methods with Code Size differences (6 improved, 1 regressed), 2 unchanged
libraries.crossgen.windows.x64.checked.mch: 118 total files with Code Size differences (102 improved, 16 regressed), 15 unchanged
libraries.crossgen2.windows.x64.checked.mch: 134 total files with Code Size differences (118 improved, 16 regressed), 15 unchanged
libraries.pmi.windows.x64.checked.mch: 70 total methods with Code Size differences (64 improved, 6 regressed), 3 unchanged
tests.pmi.windows.x64.checked.mch: 727 total methods with Code Size differences (725 improved, 2 regressed), 50 unchanged
tests_libraries.pmi.windows.x64.checked.mch: 86 total files with Code Size differences (84 improved, 2 regressed), 8 unchanged

Draft until:
1) Formatter is happy.
2) Regular CI is happy.
3) Investigation into special-casing local variables normalized on load to avoid regressions is complete. - most of the improvements are coming from this, so it is a trade-off.
4) Investigation into generalizing this for larger types and/or checked casts is complete - I will be refactoring fgMorphCast some more in the (hopefully near) future, so out of scope for now.

@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 May 10, 2021
@SingleAccretion SingleAccretion force-pushed the Eliminate-Some-Casts branch 3 times, most recently from 00bc131 to 2d887bc Compare May 10, 2021 20:31
We can take advantage of the implicit zero/sign-extension for
small integer types and eliminate some casts.
@SingleAccretion
Copy link
Contributor Author

SingleAccretion commented May 15, 2021

Marking as ready for review. Final diffs:

SPMI Windows x64
Running asm diffs of aspnet.run.windows.x64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 398
Total bytes of diff: 364
Total bytes of delta: -34 (-8.54% of base)
    diff is an improvement.


Top file improvements (bytes):
          -7 : 14721.dasm (-36.84% of base)
          -4 : 5040.dasm (-17.39% of base)
          -4 : 5077.dasm (-36.36% of base)
          -4 : 19600.dasm (-12.90% of base)
          -4 : 5382.dasm (-17.39% of base)
          -4 : 4992.dasm (-7.41% of base)
          -4 : 5041.dasm (-12.90% of base)
          -3 : 25952.dasm (-3.00% of base)

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

Top method improvements (bytes):
          -7 (-36.84% of base) - BinaryPrimitives:ReverseEndianness(short):short
          -4 (-17.39% of base) - ThreadCounts:set_NumProcessingWork(short):this
          -4 (-36.36% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
          -4 (-12.90% of base) - ThreadCounts:set_NumThreadsGoal(short):this
          -4 (-17.39% of base) - HttpVersionAndMethod:set_Version(byte):this
          -4 (-7.41% of base) - ThreadCounts:SetInt16Value(short,ubyte):this
          -4 (-12.90% of base) - ThreadCounts:set_NumExistingThreads(short):this
          -3 (-3.00% of base) - ILGenerator:Emit(OpCode,byte):this

Top method improvements (percentages):
          -7 (-36.84% of base) - BinaryPrimitives:ReverseEndianness(short):short
          -4 (-36.36% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
          -4 (-17.39% of base) - ThreadCounts:set_NumProcessingWork(short):this
          -4 (-17.39% of base) - HttpVersionAndMethod:set_Version(byte):this
          -4 (-12.90% of base) - ThreadCounts:set_NumThreadsGoal(short):this
          -4 (-12.90% of base) - ThreadCounts:set_NumExistingThreads(short):this
          -4 (-7.41% of base) - ThreadCounts:SetInt16Value(short,ubyte):this
          -3 (-3.00% of base) - ILGenerator:Emit(OpCode,byte):this

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

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 3393
Total bytes of diff: 3377
Total bytes of delta: -16 (-0.47% of base)
    diff is an improvement.


Top method regressions (bytes):
           2 ( 0.35% of base) - Sigil.Emit`1[__Canon][System.__Canon]:LoadArgument(ushort):Sigil.Emit`1[__Canon]:this

Top method improvements (bytes):
          -4 (-10.53% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:Microsoft.Cci.ITypeDefinition.get_Alignment():ushort:this
          -4 (-0.33% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidCore(System.ReadOnlySpan`1[Byte],byref,byref,int):bool
          -3 (-0.50% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[Char],byref)
          -3 (-3.00% of base) - System.Reflection.Emit.ILGenerator:Emit(System.Reflection.Emit.OpCode,byte):this
          -3 (-37.50% of base) - <>c:<SetupIndexOfShort>b__43_0(ushort):short:this
          -1 (-0.41% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(System.Reflection.Metadata.BlobBuilder,ushort)

Top method regressions (percentages):
           2 ( 0.35% of base) - Sigil.Emit`1[__Canon][System.__Canon]:LoadArgument(ushort):Sigil.Emit`1[__Canon]:this

Top method improvements (percentages):
          -3 (-37.50% of base) - <>c:<SetupIndexOfShort>b__43_0(ushort):short:this
          -4 (-10.53% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:Microsoft.Cci.ITypeDefinition.get_Alignment():ushort:this
          -3 (-3.00% of base) - System.Reflection.Emit.ILGenerator:Emit(System.Reflection.Emit.OpCode,byte):this
          -3 (-0.50% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[Char],byref)
          -1 (-0.41% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(System.Reflection.Metadata.BlobBuilder,ushort)
          -4 (-0.33% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidCore(System.ReadOnlySpan`1[Byte],byref,byref,int):bool

7 total methods with Code Size differences (6 improved, 1 regressed), 2 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 67276
Total bytes of diff: 66853
Total bytes of delta: -423 (-0.63% of base)
    diff is an improvement.


Top method regressions (bytes):
          14 ( 5.28% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           9 ( 1.32% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[Char],byref)
           9 ( 4.92% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           6 ( 5.83% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           6 ( 6.52% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           3 ( 2.78% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           3 ( 1.04% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           2 ( 1.82% of base) - System.Half:op_LessThan(System.Half,System.Half):bool
           2 ( 2.50% of base) - ThreadCounts:set_NumThreadsGoal(short):this
           2 ( 1.77% of base) - System.Half:op_LessThanOrEqual(System.Half,System.Half):bool
           1 ( 0.67% of base) - System.Uri:HexEscape(ushort):System.String
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte
           1 ( 2.70% of base) - System.Convert:ToByte(byte):ubyte
           1 ( 1.49% of base) - System.Buffers.StandardFormat:.ctor(ushort,ubyte):this
           1 ( 2.50% of base) - System.Convert:ToByte(short):ubyte
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte

Top method improvements (bytes):
         -16 (-0.44% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
         -16 (-0.61% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -16 (-0.56% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -16 (-0.69% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -15 (-1.94% of base) - System.Net.WebUtility:GetEncodedBytes(System.Byte[],int,int,System.Byte[])
         -11 (-3.15% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -8 (-0.70% of base) - System.Net.HttpListener:AddPrefix(System.String):this
          -8 (-5.63% of base) - System.Diagnostics.EventLogEntry:get_Source():System.String:this
          -8 (-0.37% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -8 (-4.49% of base) - System.Net.Quic.Implementations.MsQuic.Internal.MsQuicAddressHelpers:INetToIPEndPoint(byref):System.Net.IPEndPoint
          -8 (-0.36% of base) - Microsoft.Diagnostics.Tracing.Etlx.TraceLog:FastSerialization.IFastSerializable.ToStream(FastSerialization.Serializer):this
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -7 (-1.19% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:CopyCodeAndFixupBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this
          -7 (-36.84% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -6 (-1.45% of base) - System.Net.WebClient:UrlEncodeBytesToBytesInternal(System.Byte[],int,int,bool):System.Byte[]
          -6 (-0.41% of base) - System.Xml.XmlUTF8TextReader:ReadAttributes():this
          -6 (-1.19% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -5 (-2.92% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -4 (-0.28% of base) - System.Buffers.Text.Utf8Formatter:TryFormat(int,System.Span`1[Byte],byref,System.Buffers.StandardFormat):bool

Top method regressions (percentages):
           6 ( 6.52% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           6 ( 5.83% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
          14 ( 5.28% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           9 ( 4.92% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           3 ( 2.78% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           1 ( 2.70% of base) - System.Convert:ToByte(byte):ubyte
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte
           2 ( 2.50% of base) - ThreadCounts:set_NumThreadsGoal(short):this
           1 ( 2.50% of base) - System.Convert:ToByte(short):ubyte
           2 ( 1.82% of base) - System.Half:op_LessThan(System.Half,System.Half):bool
           2 ( 1.77% of base) - System.Half:op_LessThanOrEqual(System.Half,System.Half):bool
           1 ( 1.49% of base) - System.Buffers.StandardFormat:.ctor(ushort,ubyte):this
           9 ( 1.32% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[Char],byref)
           3 ( 1.04% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           1 ( 0.67% of base) - System.Uri:HexEscape(ushort):System.String

Top method improvements (percentages):
          -7 (-36.84% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -3 (-27.27% of base) - System.Half:IsNegative(System.Half):bool
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -4 (-22.22% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(short):System.Runtime.Intrinsics.Vector128`1[Int16]
          -4 (-22.22% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(byte):System.Runtime.Intrinsics.Vector128`1[SByte]
          -4 (-18.18% of base) - System.BitConverter:ToChar(System.Byte[],int):ushort
          -4 (-18.18% of base) - System.Diagnostics.EventLogEntry:CharFrom(System.Byte[],int):ushort:this
          -4 (-18.18% of base) - System.IO.UnmanagedMemoryAccessor:ReadUInt16(long):ushort:this
          -4 (-18.18% of base) - System.BitConverter:ToUInt16(System.Byte[],int):ushort
          -4 (-18.18% of base) - System.IO.UnmanagedMemoryAccessor:ReadChar(long):ushort:this
          -4 (-16.67% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(long,int,ushort)
          -4 (-16.67% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this
          -4 (-16.67% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,byte):this
          -4 (-16.67% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(System.Object,int,ushort)
          -4 (-16.67% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this
          -4 (-15.38% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(long,ushort)
          -4 (-14.81% of base) - System.Convert:ToInt16(ubyte):short
          -3 (-13.64% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -3 (-13.64% of base) - System.IO.UnmanagedMemoryAccessor:ReadSByte(long):byte:this

118 total methods with Code Size differences (102 improved, 16 regressed), 14 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 76959
Total bytes of diff: 76451
Total bytes of delta: -508 (-0.66% of base)
    diff is an improvement.


Top method regressions (bytes):
           9 ( 4.92% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           9 ( 1.35% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[System.Char],byref)
           6 ( 6.52% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           6 ( 5.83% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           3 ( 1.80% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           2 ( 0.52% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           2 ( 2.50% of base) - ThreadCounts:set_NumThreadsGoal(short):this
           2 ( 1.82% of base) - System.Half:op_LessThan(System.Half,System.Half):bool
           2 ( 1.77% of base) - System.Half:op_LessThanOrEqual(System.Half,System.Half):bool
           1 ( 0.68% of base) - System.Uri:HexEscape(ushort):System.String
           1 ( 0.70% of base) - Internal.Text.Utf8StringBuilder:Append(ushort):Internal.Text.Utf8StringBuilder:this
           1 ( 2.04% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte
           1 ( 2.50% of base) - System.Convert:ToByte(short):ubyte
           1 ( 2.70% of base) - System.Convert:ToByte(byte):ubyte
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte

Top method improvements (bytes):
         -16 (-0.61% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -16 (-0.54% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -16 (-0.69% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -16 (-0.44% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
         -15 (-1.94% of base) - System.Net.WebUtility:GetEncodedBytes(System.Byte[],int,int,System.Byte[])
         -11 (-3.14% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -8 (-0.70% of base) - System.Net.HttpListener:AddPrefix(System.String):this
          -8 (-0.73% of base) - System.Data.Odbc.OdbcCommandBuilder:DeriveParametersFromStoredProcedure(System.Data.Odbc.OdbcConnection,System.Data.Odbc.OdbcCommand):System.Data.Odbc.OdbcParameter[]
          -8 (-5.63% of base) - System.Diagnostics.EventLogEntry:get_Source():System.String:this
          -8 (-0.19% of base) - System.Data.OleDb.OleDbCommandBuilder:DeriveParametersFromStoredProcedure(System.Data.OleDb.OleDbConnection,System.Data.OleDb.OleDbCommand):System.Data.OleDb.OleDbParameter[]
          -8 (-4.49% of base) - System.Net.Quic.Implementations.MsQuic.Internal.MsQuicAddressHelpers:INetToIPEndPoint(byref):System.Net.IPEndPoint
          -8 (-0.36% of base) - Microsoft.Diagnostics.Tracing.Etlx.TraceLog:FastSerialization.IFastSerializable.ToStream(FastSerialization.Serializer):this
          -8 (-0.37% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -8 (-3.00% of base) - ILCompiler.IBC.ReaderExtensions:ReadEncodedString(System.IO.BinaryReader,int):System.String
          -7 (-36.84% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -7 (-0.97% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:CopyCodeAndFixupBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -6 (-1.44% of base) - System.Net.WebClient:UrlEncodeBytesToBytesInternal(System.Byte[],int,int,bool):System.Byte[]
          -6 (-0.41% of base) - System.Xml.XmlUTF8TextReader:ReadAttributes():this

Top method regressions (percentages):
           6 ( 6.52% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           6 ( 5.83% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           9 ( 4.92% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           1 ( 2.70% of base) - System.Convert:ToByte(byte):ubyte
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte
           1 ( 2.56% of base) - System.Convert:ToByte(ushort):ubyte
           2 ( 2.50% of base) - ThreadCounts:set_NumThreadsGoal(short):this
           1 ( 2.50% of base) - System.Convert:ToByte(short):ubyte
           1 ( 2.04% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           2 ( 1.82% of base) - System.Half:op_LessThan(System.Half,System.Half):bool
           3 ( 1.80% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           2 ( 1.77% of base) - System.Half:op_LessThanOrEqual(System.Half,System.Half):bool
           9 ( 1.35% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[System.Char],byref)
           1 ( 0.70% of base) - Internal.Text.Utf8StringBuilder:Append(ushort):Internal.Text.Utf8StringBuilder:this
           1 ( 0.68% of base) - System.Uri:HexEscape(ushort):System.String
           2 ( 0.52% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this

Top method improvements (percentages):
          -4 (-50.00% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCUShort(short):ushort
          -4 (-50.00% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(byte):ubyte
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(ushort):ubyte
          -3 (-37.50% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCShort(ushort):short
          -3 (-37.50% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCSByte(ubyte):byte
          -7 (-36.84% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -3 (-27.27% of base) - System.Half:IsNegative(System.Half):bool
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -7 (-23.33% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -4 (-22.22% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(byte):System.Runtime.Intrinsics.Vector128`1[System.SByte]
          -4 (-22.22% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(short):System.Runtime.Intrinsics.Vector128`1[System.Int16]
          -4 (-18.18% of base) - System.BitConverter:ToChar(System.Byte[],int):ushort
          -4 (-18.18% of base) - System.IO.UnmanagedMemoryAccessor:ReadUInt16(long):ushort:this
          -4 (-18.18% of base) - System.BitConverter:ToUInt16(System.Byte[],int):ushort
          -4 (-18.18% of base) - System.Diagnostics.EventLogEntry:CharFrom(System.Byte[],int):ushort:this
          -4 (-18.18% of base) - System.IO.UnmanagedMemoryAccessor:ReadChar(long):ushort:this
          -4 (-16.67% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this
          -4 (-16.67% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(System.Object,int,ushort)
          -4 (-16.67% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(long,int,ushort)
          -4 (-16.67% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this

134 total methods with Code Size differences (118 improved, 16 regressed), 15 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 35658
Total bytes of diff: 35354
Total bytes of delta: -304 (-0.85% of base)
    diff is an improvement.


Top method regressions (bytes):
           3 ( 1.86% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           2 ( 0.88% of base) - System.Uri:HexEscape(ushort):System.String
           2 ( 1.20% of base) - ILCompiler.DependencyAnalysis.ObjectDataBuilder:EmitUShort(ushort):this
           2 ( 0.53% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           2 ( 1.19% of base) - ILCompiler.DependencyAnalysis.ObjectDataBuilder:EmitShort(short):this
           1 ( 2.22% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this

Top method improvements (bytes):
         -16 (-0.52% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -16 (-0.40% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
         -16 (-0.65% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -16 (-0.57% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -11 (-3.06% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -8 (-3.70% of base) - ILCompiler.DependencyAnalysis.X86.X86Emitter:EmitADD(byref,byte):this
          -8 (-0.33% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -8 (-3.70% of base) - ILCompiler.DependencyAnalysis.X64.X64Emitter:EmitADD(byref,byte):this
          -8 (-3.65% of base) - ILCompiler.DependencyAnalysis.X86.X86Emitter:EmitCMP(byref,byte):this
          -8 (-3.65% of base) - ILCompiler.DependencyAnalysis.X64.X64Emitter:EmitCMP(byref,byte):this
          -7 (-36.84% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -7 (-36.84% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -6 (-1.16% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -6 (-1.42% of base) - System.Net.WebClient:UrlEncodeBytesToBytesInternal(System.Byte[],int,int,bool):System.Byte[]
          -5 (-3.14% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -4 (-5.63% of base) - System.Reflection.Metadata.BlobWriter:WriteSByte(byte):this
          -4 (-10.53% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.NamedTypeSymbol:get_ITypeDefinitionAlignment():ushort:this
          -4 (-0.18% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AndObject(System.Object,System.Object):System.Object
          -4 (-6.56% of base) - System.Reflection.Metadata.BlobWriter:WriteInt16(short):this
          -4 (-1.78% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:EmitInt8(byte):this

Top method regressions (percentages):
           1 ( 2.22% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           3 ( 1.86% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           2 ( 1.20% of base) - ILCompiler.DependencyAnalysis.ObjectDataBuilder:EmitUShort(ushort):this
           2 ( 1.19% of base) - ILCompiler.DependencyAnalysis.ObjectDataBuilder:EmitShort(short):this
           2 ( 0.88% of base) - System.Uri:HexEscape(ushort):System.String
           2 ( 0.53% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this

Top method improvements (percentages):
          -4 (-50.00% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCUShort(short):ushort
          -4 (-50.00% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(byte):ubyte
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(ushort):ubyte
          -3 (-37.50% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCSByte(ubyte):byte
          -3 (-37.50% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCShort(ushort):short
          -7 (-36.84% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -7 (-36.84% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -3 (-27.27% of base) - System.Xml.XmlStreamNodeWriter:WriteByteAsync(ushort):System.Threading.Tasks.Task:this
          -4 (-16.00% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryFormatterWriter:WriteSByte(byte):this
          -3 (-13.64% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -4 (-10.81% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:Microsoft.Cci.ITypeDefinition.get_Alignment():ushort:this
          -4 (-10.53% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.NamedTypeSymbol:get_ITypeDefinitionAlignment():ushort:this
          -4 (-6.56% of base) - System.Reflection.Metadata.BlobWriter:WriteInt16(short):this
          -4 (-6.56% of base) - System.Reflection.Metadata.BlobWriter:WriteInt16BE(short):this
          -4 (-6.06% of base) - System.Data.OleDb.ColumnBinding:Value_UI2(ushort):this
          -4 (-6.06% of base) - System.Data.OleDb.ColumnBinding:Value_I1(byte):this
          -4 (-5.71% of base) - System.Diagnostics.Eventing.Reader.EventLogRecord:get_Opcode():System.Nullable`1[Int16]:this
          -4 (-5.63% of base) - System.Reflection.Metadata.BlobWriter:WriteSByte(byte):this
          -4 (-5.63% of base) - Microsoft.Cci.BlobWriter:WriteSByte(byte):this
          -4 (-5.13% of base) - System.Reflection.Metadata.BlobBuilder:WriteInt16(short):this

70 total methods with Code Size differences (64 improved, 6 regressed), 3 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 88185
Total bytes of diff: 84869
Total bytes of delta: -3316 (-3.76% of base)
    diff is an improvement.


Top method regressions (bytes):
           3 ( 0.58% of base) - CTest:TestLocals2(short,double,ubyte,double)
           1 ( 0.16% of base) - ILGEN_0x65088b5c:Method_0x5ad2583a(long,ushort,int,ubyte,byte,short,ubyte):long

Top method improvements (bytes):
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -8 (-11.11% of base) - JIT.HardwareIntrinsics.Arm.Helpers:SaturateHigh(short,bool):byte
          -8 (-11.11% of base) - JIT.HardwareIntrinsics.Arm.Helpers:SaturateHigh(short,bool):byte
          -8 (-20.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(short,ubyte):ushort
          -8 (-11.11% of base) - JIT.HardwareIntrinsics.Arm.Helpers:SaturateHigh(short,bool):byte

Top method regressions (percentages):
           3 ( 0.58% of base) - CTest:TestLocals2(short,double,ubyte,double)
           1 ( 0.16% of base) - ILGEN_0x65088b5c:Method_0x5ad2583a(long,ushort,int,ubyte,byte,short,ubyte):long

Top method improvements (percentages):
          -4 (-50.00% of base) - BringUpTest:IntConv(short):ubyte
          -4 (-44.44% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ExtractNarrowing(short):byte
          -3 (-42.86% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ExtractNarrowing(ushort):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -3 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ZeroExtendWidening(byte):short
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -11 (-25.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte

727 total methods with Code Size differences (725 improved, 2 regressed), 50 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 28706
Total bytes of diff: 28434
Total bytes of delta: -272 (-0.95% of base)
    diff is an improvement.


Top method regressions (bytes):
           4 ( 1.63% of base) - System.Buffers.Binary.Tests.ReverseEndianessUnitTests:ReverseEndianness_Int16AndUInt16(ushort,ushort):this
           1 ( 1.92% of base) - XmlCoreTest.Common.CustomMemoryStream:WriteChar(ushort):this

Top method improvements (bytes):
          -5 (-3.14% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -4 (-21.05% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__50(long,ushort):this
          -4 (-1.15% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToChar(short,bool)
          -4 (-1.31% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedNullableSByteToNullableShort(System.Nullable`1[SByte],bool)
          -4 (-1.73% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToChar(short,bool)
          -4 (-1.45% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToNullableChar(short,bool)
          -4 (-21.05% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__34(long,ushort):this
          -4 (-1.02% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToNullableChar(short,bool)
          -4 (-1.00% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedSByteToNullableByte(byte,bool)
          -4 (-1.72% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToSByte(short,bool)
          -4 (-1.41% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToNullableSByte(short,bool)
          -4 (-21.05% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__46(long,byte):this
          -4 (-1.15% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedSByteToByte(byte,bool)
          -4 (-1.29% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableShortToNullableSByte(System.Nullable`1[Int16],bool)
          -4 (-1.32% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableShortToNullableChar(System.Nullable`1[Int16],bool)
          -4 (-1.41% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifySByteToNullableByte(byte,bool)
          -4 (-1.15% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToUShort(short,bool)
          -4 (-1.15% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedByteToSByte(ubyte,bool)
          -4 (-1.32% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableShortToNullableUShort(System.Nullable`1[Int16],bool)
          -4 (-1.72% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToByte(short,bool)

Top method regressions (percentages):
           1 ( 1.92% of base) - XmlCoreTest.Common.CustomMemoryStream:WriteChar(ushort):this
           4 ( 1.63% of base) - System.Buffers.Binary.Tests.ReverseEndianessUnitTests:ReverseEndianness_Int16AndUInt16(ushort,ushort):this

Top method improvements (percentages):
          -3 (-42.86% of base) - <>c:<Read_ReadsExpectedData>b__33_0(ushort):ubyte:this
          -3 (-37.50% of base) - System.Tests.HalfTests:UInt16BitsToHalf(ushort):System.Half
          -3 (-25.00% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -3 (-25.00% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -4 (-21.05% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__50(long,ushort):this
          -4 (-21.05% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__34(long,ushort):this
          -4 (-21.05% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__46(long,byte):this
          -3 (-8.11% of base) - <>c:<JsonWithSingleLineCommentWithRegularLineEndingMultiSegment>b__181_0(ushort):System.String:this
          -3 (-4.17% of base) - System.Tests.HalfTests:IsNegative(System.Half,bool)
          -5 (-3.14% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -2 (-2.02% of base) - <>c:<Encode_InvalidChars_WithCustomReplacementFallback>b__7_0(ushort):System.Collections.Generic.IEnumerable`1[Byte]:this
          -3 (-2.00% of base) - System.Buffers.Text.Tests.StandardFormatTests:StandardFormatOpImplicitFromChar(ushort)
          -4 (-1.73% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToChar(short,bool)
          -4 (-1.73% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToUShort(short,bool)
          -4 (-1.72% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToSByte(short,bool)
          -4 (-1.72% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToByte(short,bool)
          -4 (-1.72% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifySByteToByte(byte,bool)
          -4 (-1.72% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyByteToSByte(ubyte,bool)
          -4 (-1.45% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToNullableChar(short,bool)
          -4 (-1.45% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToNullableUShort(short,bool)

86 total methods with Code Size differences (84 improved, 2 regressed), 8 unchanged.
SPMI Windows x86
Running asm diffs of benchmarks.run.windows.x86.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1209002
Total bytes of diff: 1208971
Total bytes of delta: -31 (-0.00% of base)
    diff is an improvement.


Top method regressions (bytes):
           8 ( 1.58% of base) - Sigil.Emit`1[__Canon][System.__Canon]:LoadArgument(ushort):Sigil.Emit`1[__Canon]:this
           3 ( 1.35% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(System.Reflection.Metadata.BlobBuilder,ushort)

Top method improvements (bytes):
         -15 (-1.13% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidCore(System.ReadOnlySpan`1[Byte],byref,byref,int):bool
          -9 (-0.34% of base) - System.Runtime.Serialization.Json.XmlJsonReader:Read():bool:this
          -6 (-9.52% of base) - System.Buffers.StandardFormat:.ctor(ushort,ubyte):this
          -3 (-3.19% of base) - System.Reflection.Emit.ILGenerator:Emit(System.Reflection.Emit.OpCode,byte):this
          -3 (-42.86% of base) - <>c:<SetupIndexOfShort>b__43_0(ushort):short:this
          -3 (-7.32% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:Microsoft.Cci.ITypeDefinition.get_Alignment():ushort:this
          -3 (-0.61% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[Char],byref)

Top method regressions (percentages):
           8 ( 1.58% of base) - Sigil.Emit`1[__Canon][System.__Canon]:LoadArgument(ushort):Sigil.Emit`1[__Canon]:this
           3 ( 1.35% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(System.Reflection.Metadata.BlobBuilder,ushort)

Top method improvements (percentages):
          -3 (-42.86% of base) - <>c:<SetupIndexOfShort>b__43_0(ushort):short:this
          -6 (-9.52% of base) - System.Buffers.StandardFormat:.ctor(ushort,ubyte):this
          -3 (-7.32% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:Microsoft.Cci.ITypeDefinition.get_Alignment():ushort:this
          -3 (-3.19% of base) - System.Reflection.Emit.ILGenerator:Emit(System.Reflection.Emit.OpCode,byte):this
         -15 (-1.13% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidCore(System.ReadOnlySpan`1[Byte],byref,byref,int):bool
          -3 (-0.61% of base) - System.Text.Json.JsonWriterHelper:EscapeNextChars(ushort,System.Span`1[Char],byref)
          -9 (-0.34% of base) - System.Runtime.Serialization.Json.XmlJsonReader:Read():bool:this

9 total methods with Code Size differences (7 improved, 2 regressed), 1767 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 3600156
Total bytes of diff: 3599725
Total bytes of delta: -431 (-0.01% of base)
    diff is an improvement.


Top method regressions (bytes):
          12 (13.33% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           8 ( 4.73% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           3 ( 2.86% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           3 ( 2.42% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           1 ( 0.83% of base) - System.Uri:HexEscape(ushort):System.String

Top method improvements (bytes):
         -18 (-7.35% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
         -15 (-1.06% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidCore(System.ReadOnlySpan`1[Byte],byref,byref,int):bool
         -12 (-0.37% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -12 (-0.40% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -12 (-0.38% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -11 (-1.37% of base) - System.Net.WebUtility:GetEncodedBytes(System.Byte[],int,int,System.Byte[])
         -10 (-0.22% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
          -9 (-1.41% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidN(System.ReadOnlySpan`1[Byte],byref,byref):bool
          -8 (-1.67% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -6 (-1.13% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:CopyCodeAndFixupBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this
          -6 (-0.18% of base) - System.Data.OleDb.OleDbCommandBuilder:DeriveParametersFromStoredProcedure(System.Data.OleDb.OleDbConnection,System.Data.OleDb.OleDbCommand):System.Data.OleDb.OleDbParameter[]
          -6 (-5.17% of base) - System.Diagnostics.EventLogEntry:get_Source():System.String:this
          -6 (-35.29% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -6 (-0.40% of base) - System.Xml.XmlUTF8TextReader:ReadAttributes():this
          -6 (-3.90% of base) - System.Half:op_LessThan(System.Half,System.Half):bool
          -6 (-3.82% of base) - System.Half:op_LessThanOrEqual(System.Half,System.Half):bool
          -6 (-3.97% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -6 (-0.25% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object

Top method regressions (percentages):
          12 (13.33% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           8 ( 4.73% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           3 ( 2.86% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           3 ( 2.42% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           1 ( 0.83% of base) - System.Uri:HexEscape(ushort):System.String

Top method improvements (percentages):
          -6 (-35.29% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -3 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteByteAsync(ushort):System.Threading.Tasks.Task:this
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -3 (-23.08% of base) - System.BitConverter:ToChar(System.Byte[],int):ushort
          -3 (-23.08% of base) - System.BitConverter:ToUInt16(System.Byte[],int):ushort
          -3 (-21.43% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(short):System.Runtime.Intrinsics.Vector128`1[Int16]
          -3 (-21.43% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(byte):System.Runtime.Intrinsics.Vector128`1[SByte]
          -3 (-18.75% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(int,ushort)
          -3 (-18.75% of base) - System.Half:IsNegative(System.Half):bool
          -3 (-17.65% of base) - System.Convert:ToInt16(ubyte):short
          -3 (-15.79% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -3 (-15.00% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(int,int,ushort)
          -3 (-15.00% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(System.Object,int,ushort)
          -3 (-15.00% of base) - System.Diagnostics.EventLogEntry:CharFrom(System.Byte[],int):ushort:this
          -3 (-14.29% of base) - System.IO.BinaryWriter:Write(byte):this
          -3 (-13.64% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryFormatterWriter:WriteSByte(byte):this
          -3 (-13.64% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryParser:ReadSByte():byte:this
          -3 (-13.04% of base) - System.IO.UnmanagedMemoryAccessor:ReadChar(long):ushort:this
          -3 (-13.04% of base) - System.IO.UnmanagedMemoryAccessor:ReadSByte(long):byte:this

118 total methods with Code Size differences (113 improved, 5 regressed), 6388 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 3918858
Total bytes of diff: 3918383
Total bytes of delta: -475 (-0.01% of base)
    diff is an improvement.


Top method regressions (bytes):
           9 ( 6.00% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           8 ( 4.73% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           6 (15.38% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           3 ( 2.42% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           3 ( 2.86% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           3 ( 1.32% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           1 ( 0.85% of base) - System.Uri:HexEscape(ushort):System.String

Top method improvements (bytes):
         -16 (-4.44% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
         -15 (-1.06% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidCore(System.ReadOnlySpan`1[System.Byte],byref,byref,int):bool
         -12 (-0.38% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -12 (-0.40% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -12 (-0.37% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -11 (-1.37% of base) - System.Net.WebUtility:GetEncodedBytes(System.Byte[],int,int,System.Byte[])
         -10 (-0.22% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
          -9 (-1.41% of base) - System.Buffers.Text.Utf8Parser:TryParseGuidN(System.ReadOnlySpan`1[System.Byte],byref,byref):bool
          -8 (-1.67% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -7 (-1.21% of base) - System.Xml.XmlUTF8TextReader:ReadEndElement():this
          -6 (-0.41% of base) - System.Xml.XmlUTF8TextReader:ReadAttributes():this
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -6 (-4.00% of base) - System.Net.Quic.Implementations.MsQuic.Internal.MsQuicAddressHelpers:INetToIPEndPoint(byref):System.Net.IPEndPoint
          -6 (-0.90% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:CopyCodeAndFixupBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this
          -6 (-0.25% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -6 (-1.98% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -6 (-3.97% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -6 (-35.29% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -6 (-9.23% of base) - System.Buffers.StandardFormat:.ctor(ushort,ubyte):this

Top method regressions (percentages):
           6 (15.38% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           9 ( 6.00% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           8 ( 4.73% of base) - System.Diagnostics.EventLogEntry:get_MachineName():System.String:this
           3 ( 2.86% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           3 ( 2.42% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           3 ( 1.32% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           1 ( 0.85% of base) - System.Uri:HexEscape(ushort):System.String

Top method improvements (percentages):
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCSByte(ubyte):byte
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(ushort):ubyte
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(byte):ubyte
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCUShort(short):ushort
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCShort(ushort):short
          -6 (-35.29% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -3 (-23.08% of base) - System.BitConverter:ToUInt16(System.Byte[],int):ushort
          -3 (-23.08% of base) - System.BitConverter:ToChar(System.Byte[],int):ushort
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -6 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -3 (-23.08% of base) - System.Xml.XmlStreamNodeWriter:WriteByteAsync(ushort):System.Threading.Tasks.Task:this
          -3 (-21.43% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(byte):System.Runtime.Intrinsics.Vector128`1[System.SByte]
          -3 (-21.43% of base) - System.Runtime.Intrinsics.Vector128:CreateScalar(short):System.Runtime.Intrinsics.Vector128`1[System.Int16]
          -3 (-18.75% of base) - System.Half:IsNegative(System.Half):bool
          -3 (-18.75% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(int,ushort)
          -3 (-17.65% of base) - System.Convert:ToInt16(ubyte):short
          -3 (-15.79% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -3 (-15.00% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(System.Object,int,ushort)
          -3 (-15.00% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(int,int,ushort)
          -3 (-15.00% of base) - System.Diagnostics.EventLogEntry:CharFrom(System.Byte[],int):ushort:this

134 total methods with Code Size differences (127 improved, 7 regressed), 7015 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 5217186
Total bytes of diff: 5216957
Total bytes of delta: -229 (-0.00% of base)
    diff is an improvement.


Top method regressions (bytes):
           9 ( 6.16% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           6 (16.22% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           3 ( 1.35% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)

Top method improvements (bytes):
         -16 (-4.57% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
         -12 (-0.37% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -12 (-0.38% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -12 (-0.40% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -10 (-0.22% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
          -9 (-0.34% of base) - System.Runtime.Serialization.Json.XmlJsonReader:Read():bool:this
          -8 (-1.65% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -6 (-0.24% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -6 (-24.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -6 (-24.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -6 (-4.14% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -6 (-1.96% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -6 (-1.41% of base) - System.Net.WebClient:UrlEncodeBytesToBytesInternal(System.Byte[],int,int,bool):System.Byte[]
          -3 (-0.71% of base) - System.Diagnostics.EventLogInternal:WriteEntry(System.String,int,int,short,System.Byte[]):this
          -3 (-5.56% of base) - System.Diagnostics.Eventing.Reader.EventLogRecord:get_Opcode():System.Nullable`1[Int16]:this
          -3 (-2.63% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:AddBranch(int,System.Reflection.Metadata.Ecma335.LabelHandle,ushort):this
          -3 (-0.43% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:CopyCodeAndFixupBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this
          -3 (-4.35% of base) - System.Reflection.Metadata.Ecma335.DeclSecurityTableReader:GetAction(int):short:this
          -3 (-0.61% of base) - System.Reflection.Metadata.Ecma335.ImplMapTableReader:GetImport(int):System.Reflection.Metadata.MethodImport:this
          -3 (-1.19% of base) - Microsoft.CodeAnalysis.PEModule:GetDllImportData(System.Reflection.Metadata.MethodDefinitionHandle):Microsoft.CodeAnalysis.DllImportData:this

Top method regressions (percentages):
           6 (16.22% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           9 ( 6.16% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           3 ( 1.35% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)

Top method improvements (percentages):
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCShort(ushort):short
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCUShort(short):ushort
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(byte):ubyte
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(ushort):ubyte
          -3 (-42.86% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCSByte(ubyte):byte
          -3 (-25.00% of base) - System.Xml.XmlStreamNodeWriter:WriteByteAsync(ushort):System.Threading.Tasks.Task:this
          -6 (-24.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -6 (-24.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -3 (-15.79% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -3 (-13.64% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryFormatterWriter:WriteSByte(byte):this
          -3 (-7.50% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:Microsoft.Cci.ITypeDefinition.get_Alignment():ushort:this
          -3 (-7.32% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.NamedTypeSymbol:get_ITypeDefinitionAlignment():ushort:this
          -2 (-5.71% of base) - Xunit.Sdk.Pack:UInt16_To_BE(ushort,System.Byte[])
          -3 (-5.66% of base) - System.Reflection.Metadata.BlobWriter:WriteInt16(short):this
          -3 (-5.66% of base) - System.Reflection.Metadata.BlobWriter:WriteInt16BE(short):this
          -3 (-5.56% of base) - System.Diagnostics.Eventing.Reader.EventLogRecord:get_Opcode():System.Nullable`1[Int16]:this
          -3 (-5.26% of base) - System.Data.OleDb.ColumnBinding:Value_I1(byte):this
          -3 (-5.26% of base) - System.Data.OleDb.ColumnBinding:Value_UI2(ushort):this
          -3 (-5.17% of base) - Microsoft.Cci.BlobWriter:WriteSByte(byte):this
          -3 (-5.17% of base) - System.Reflection.Metadata.BlobWriter:WriteSByte(byte):this

61 total methods with Code Size differences (58 improved, 3 regressed), 8559 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 29144249
Total bytes of diff: 29141571
Total bytes of delta: -2678 (-0.01% of base)
    diff is an improvement.


Top method regressions (bytes):
           8 ( 1.66% of base) - CTest:TestLocals2(short,double,ubyte,double)
           2 ( 5.71% of base) - NativeVarargTest.VarArg:TestShortInByteOutNoVararg(short):bool

Top method improvements (bytes):
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -6 (-3.57% of base) - JIT.HardwareIntrinsics.Arm.Helpers:SignedShift(short,short,bool,bool):short
          -6 (-24.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogical(byte,ubyte):byte
          -6 (-10.17% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftRightLogicalRoundedNarrowingSaturate(short,ubyte):byte
          -6 (-24.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(short,ubyte):ushort

Top method regressions (percentages):
           2 ( 5.71% of base) - NativeVarargTest.VarArg:TestShortInByteOutNoVararg(short):bool
           8 ( 1.66% of base) - CTest:TestLocals2(short,double,ubyte,double)

Top method improvements (percentages):
          -3 (-42.86% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ExtractNarrowing(ushort):ubyte
          -3 (-42.86% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ExtractNarrowing(short):byte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -9 (-32.14% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -3 (-30.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ZeroExtendWidening(byte):short
          -3 (-27.27% of base) - BringUpTest:IntConv(short):ubyte

728 total methods with Code Size differences (726 improved, 2 regressed), 19258 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 15721003
Total bytes of diff: 15720795
Total bytes of delta: -208 (-0.00% of base)
    diff is an improvement.


Top method regressions (bytes):
           4 (10.53% of base) - XmlCoreTest.Common.CustomMemoryStream:WriteChar(ushort):this
           3 ( 0.07% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_1Byte(byte)
           3 ( 0.07% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_2Bytes(short)
           2 ( 0.73% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToSByte(short,bool)
           2 ( 0.62% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToNullableSByte(short,bool)
           2 ( 0.73% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToByte(short,bool)
           2 ( 0.62% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToNullableByte(short,bool)
           2 ( 0.73% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedCharToSByte(ushort,bool)

Top method improvements (bytes):
         -11 (-1.69% of base) - System.Security.AccessControl.Tests.CompoundAce_Tests:CompoundAce_CreateTestData(int,int,int,System.String,int):System.Object[]
          -8 (-3.57% of base) - System.Buffers.Binary.Tests.ReverseEndianessUnitTests:ReverseEndianness_Int16AndUInt16(ushort,ushort):this
          -6 (-4.14% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -3 (-0.98% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedByteToNullableSByte(ubyte,bool)
          -3 (-1.21% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableUShortToNullableSByte(System.Nullable`1[UInt16],bool)
          -3 (-1.30% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableUShortToNullableShort(System.Nullable`1[UInt16],bool)
          -3 (-1.79% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToShort(ushort,bool)
          -3 (-1.40% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToNullableShort(ushort,bool)
          -3 (-2.00% of base) - <>c:<SByteEnumSelfSubtraction>b__15_1(byte,byte):System.Object[]:this
          -3 (-0.55% of base) - System.Reflection.Metadata.Ecma335.Tests.MethodBodyStreamEncoderTests:WriteFakeILWithBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.ControlFlowBuilder,int)
          -3 (-0.24% of base) - System.Reflection.Metadata.Ecma335.Tests.MethodBodyStreamEncoderTests:TinyBody():this
          -3 (-0.25% of base) - System.Reflection.Metadata.Ecma335.Tests.MethodBodyStreamEncoderTests:FatBody():this
          -3 (-15.79% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -3 (-42.86% of base) - System.Tests.HalfTests:UInt16BitsToHalf(ushort):System.Half
          -3 (-4.62% of base) - System.Tests.HalfTests:IsNegative(System.Half,bool)
          -3 (-4.17% of base) - <>c:<Encode_InvalidChars_WithCustomReplacementFallback>b__7_0(ushort):System.Collections.Generic.IEnumerable`1[Byte]:this
          -3 (-15.79% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -3 (-11.11% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__34(long,ushort):this
          -3 (-11.11% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__46(long,byte):this
          -3 (-11.11% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__50(long,ushort):this

Top method regressions (percentages):
           4 (10.53% of base) - XmlCoreTest.Common.CustomMemoryStream:WriteChar(ushort):this
           2 ( 0.73% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToByte(short,bool)
           2 ( 0.73% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToSByte(short,bool)
           2 ( 0.73% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedCharToSByte(ushort,bool)
           2 ( 0.62% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToNullableByte(short,bool)
           2 ( 0.62% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedShortToNullableSByte(short,bool)
           3 ( 0.07% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_2Bytes(short)
           3 ( 0.07% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_1Byte(byte)

Top method improvements (percentages):
          -3 (-42.86% of base) - System.Tests.HalfTests:UInt16BitsToHalf(ushort):System.Half
          -3 (-42.86% of base) - <>c:<Read_ReadsExpectedData>b__33_0(ushort):ubyte:this
          -3 (-15.79% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -3 (-15.79% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -3 (-12.50% of base) - <>c:<JsonWithSingleLineCommentWithRegularLineEndingMultiSegment>b__181_0(ushort):System.String:this
          -3 (-11.11% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__34(long,ushort):this
          -3 (-11.11% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__46(long,byte):this
          -3 (-11.11% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__50(long,ushort):this
          -3 (-4.62% of base) - System.Tests.HalfTests:IsNegative(System.Half,bool)
          -3 (-4.17% of base) - <>c:<Encode_InvalidChars_WithCustomReplacementFallback>b__7_0(ushort):System.Collections.Generic.IEnumerable`1[Byte]:this
          -6 (-4.14% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -8 (-3.57% of base) - System.Buffers.Binary.Tests.ReverseEndianessUnitTests:ReverseEndianness_Int16AndUInt16(ushort,ushort):this
          -3 (-2.07% of base) - <>c:<Int16EnumSelfSubtraction>b__23_1(short,short):System.Object[]:this
          -3 (-2.07% of base) - <>c:<UInt16EnumSelfSubtraction>b__31_1(ushort,ushort):System.Object[]:this
          -3 (-2.00% of base) - <>c:<SByteEnumSelfSubtraction>b__15_1(byte,byte):System.Object[]:this
          -3 (-1.79% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToShort(ushort,bool)
          -3 (-1.79% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToUShort(short,bool)
          -3 (-1.79% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToChar(short,bool)
          -3 (-1.79% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyCharToShort(ushort,bool)
          -3 (-1.71% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifySByteToByte(byte,bool)

94 total methods with Code Size differences (86 improved, 8 regressed), 14783 unchanged.
SPMI Linux ARM64
Running asm diffs of libraries.crossgen.Linux.arm64.checked.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 88932
Total bytes of diff: 88532
Total bytes of delta: -400 (-0.45% of base)
    diff is an improvement.


Top method regressions (bytes):
          20 ( 4.59% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           8 ( 2.00% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           4 ( 2.44% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           4 ( 3.57% of base) - ThreadCounts:set_NumProcessingWork(short):this
           4 ( 2.27% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           4 ( 1.69% of base) - System.Uri:HexEscape(ushort):System.String
           4 ( 2.22% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           4 ( 3.45% of base) - ThreadCounts:set_NumExistingThreads(short):this
           4 ( 3.45% of base) - ThreadCounts:set_NumThreadsGoal(short):this

Top method improvements (bytes):
         -16 (-0.28% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
         -16 (-1.57% of base) - System.Net.WebUtility:GetEncodedBytes(System.Byte[],int,int,System.Byte[])
         -16 (-0.41% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -16 (-0.33% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -16 (-0.37% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
          -8 (-2.33% of base) - System.Net.Quic.Implementations.MsQuic.Internal.MsQuicAddressHelpers:INetToIPEndPoint(byref):System.Net.IPEndPoint
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -8 (-0.37% of base) - System.Xml.XmlUTF8TextReader:ReadAttributes():this
          -8 (-0.96% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:CopyCodeAndFixupBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this
          -8 (-0.23% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -8 (-22.22% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -8 (-1.08% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -8 (-0.26% of base) - Microsoft.Diagnostics.Tracing.Etlx.TraceLog:FastSerialization.IFastSerializable.ToStream(FastSerialization.Serializer):this
          -8 (-1.36% of base) - System.Net.WebClient:UrlEncodeBytesToBytesInternal(System.Byte[],int,int,bool):System.Byte[]
          -8 (-1.79% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -8 (-2.82% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -4 (-10.00% of base) - System.BitConverter:ToChar(System.Byte[],int):ushort
          -4 (-1.33% of base) - System.Half:RoundPackToHalf(bool,short,ushort):ushort
          -4 (-0.33% of base) - System.Buffers.Text.Utf8Formatter:TryFormat(ushort,System.Span`1[Byte],byref,System.Buffers.StandardFormat):bool

Top method regressions (percentages):
          20 ( 4.59% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           4 ( 3.57% of base) - ThreadCounts:set_NumProcessingWork(short):this
           4 ( 3.45% of base) - ThreadCounts:set_NumExistingThreads(short):this
           4 ( 3.45% of base) - ThreadCounts:set_NumThreadsGoal(short):this
           4 ( 2.44% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           4 ( 2.27% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           4 ( 2.22% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           8 ( 2.00% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           4 ( 1.69% of base) - System.Uri:HexEscape(ushort):System.String

Top method improvements (percentages):
          -8 (-22.22% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -4 (-12.50% of base) - System.Half:IsNegative(System.Half):bool
          -4 (-11.11% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -4 (-10.00% of base) - System.BitConverter:ToChar(System.Byte[],int):ushort
          -4 (-10.00% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(long,int,ushort)
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,byte):this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:ReadSByte(long):byte:this
          -4 (-10.00% of base) - System.BitConverter:ToUInt16(System.Byte[],int):ushort
          -4 (-10.00% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(System.Object,int,ushort)
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:ReadUInt16(long):ushort:this
          -4 (-10.00% of base) - System.Xml.XmlStreamNodeWriter:WriteByteAsync(ushort):System.Threading.Tasks.Task:this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:ReadChar(long):ushort:this
          -4 (-9.09% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(long,ushort)
          -4 (-9.09% of base) - System.IO.BinaryWriter:Write(byte):this
          -4 (-8.33% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryFormatterWriter:WriteSByte(byte):this
          -4 (-8.33% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryParser:ReadSByte():byte:this

96 total methods with Code Size differences (87 improved, 9 regressed), 24 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 92848
Total bytes of diff: 92384
Total bytes of delta: -464 (-0.50% of base)
    diff is an improvement.


Top method regressions (bytes):
           4 ( 1.03% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           4 ( 1.59% of base) - System.Uri:HexEscape(ushort):System.String
           4 ( 1.43% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           4 ( 3.45% of base) - ThreadCounts:set_NumThreadsGoal(short):this
           4 ( 4.76% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           4 ( 0.65% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           4 ( 2.27% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           4 ( 3.45% of base) - ThreadCounts:set_NumExistingThreads(short):this
           4 ( 2.44% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           4 ( 3.57% of base) - ThreadCounts:set_NumProcessingWork(short):this

Top method improvements (bytes):
         -16 (-0.28% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
         -16 (-0.41% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -16 (-0.37% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -16 (-0.33% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -16 (-1.55% of base) - System.Net.WebUtility:GetEncodedBytes(System.Byte[],int,int,System.Byte[])
          -8 (-1.74% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -8 (-2.33% of base) - System.Net.Quic.Implementations.MsQuic.Internal.MsQuicAddressHelpers:INetToIPEndPoint(byref):System.Net.IPEndPoint
          -8 (-0.37% of base) - System.Xml.XmlUTF8TextReader:ReadAttributes():this
          -8 (-0.56% of base) - System.Data.Odbc.OdbcCommandBuilder:DeriveParametersFromStoredProcedure(System.Data.Odbc.OdbcConnection,System.Data.Odbc.OdbcCommand):System.Data.Odbc.OdbcParameter[]
          -8 (-0.26% of base) - Microsoft.Diagnostics.Tracing.Etlx.TraceLog:FastSerialization.IFastSerializable.ToStream(FastSerialization.Serializer):this
          -8 (-1.06% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -8 (-1.33% of base) - System.Net.WebClient:UrlEncodeBytesToBytesInternal(System.Byte[],int,int,bool):System.Byte[]
          -8 (-0.80% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:CopyCodeAndFixupBranches(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -8 (-0.23% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -8 (-2.82% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -8 (-22.22% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -4 (-8.33% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryParser:ReadSByte():byte:this
          -4 (-0.62% of base) - System.Xml.XmlUTF8TextReader:ReadStartElement():this

Top method regressions (percentages):
           4 ( 4.76% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           4 ( 3.57% of base) - ThreadCounts:set_NumProcessingWork(short):this
           4 ( 3.45% of base) - ThreadCounts:set_NumThreadsGoal(short):this
           4 ( 3.45% of base) - ThreadCounts:set_NumExistingThreads(short):this
           4 ( 2.44% of base) - ThreadCounts:SubtractNumProcessingWork(short):this
           4 ( 2.27% of base) - ThreadCounts:SubtractNumExistingThreads(short):this
           4 ( 1.59% of base) - System.Uri:HexEscape(ushort):System.String
           4 ( 1.43% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           4 ( 1.03% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           4 ( 0.65% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this

Top method improvements (percentages):
          -8 (-22.22% of base) - System.Buffers.Binary.BinaryPrimitives:ReverseEndianness(short):short
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCUShort(short):ushort
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCShort(ushort):short
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCSByte(ubyte):byte
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -8 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(ushort):ubyte
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(byte):ubyte
          -4 (-12.50% of base) - System.Half:IsNegative(System.Half):bool
          -4 (-11.11% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,byte):this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:Write(long,ushort):this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:ReadUInt16(long):ushort:this
          -4 (-10.00% of base) - System.Xml.XmlStreamNodeWriter:WriteByteAsync(ushort):System.Threading.Tasks.Task:this
          -4 (-10.00% of base) - System.BitConverter:ToUInt16(System.Byte[],int):ushort
          -4 (-10.00% of base) - System.BitConverter:ToChar(System.Byte[],int):ushort
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:ReadSByte(long):byte:this
          -4 (-10.00% of base) - System.IO.UnmanagedMemoryAccessor:ReadChar(long):ushort:this
          -4 (-10.00% of base) - System.Runtime.InteropServices.Marshal:WriteInt16(System.Object,int,ushort)

108 total methods with Code Size differences (98 improved, 10 regressed), 20 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40348
Total bytes of diff: 40092
Total bytes of delta: -256 (-0.63% of base)
    diff is an improvement.


Top method regressions (bytes):
           4 ( 1.18% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           4 ( 1.82% of base) - System.Uri:HexEscape(ushort):System.String
           4 ( 0.81% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this
           4 ( 1.75% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           4 ( 7.14% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this

Top method improvements (bytes):
         -16 (-0.56% of base) - Microsoft.VisualBasic.CompilerServices.Operators:SubtractObject(System.Object,System.Object):System.Object
         -16 (-0.50% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AddObject(System.Object,System.Object):System.Object
         -16 (-0.59% of base) - Microsoft.VisualBasic.CompilerServices.Operators:IntDivideObject(System.Object,System.Object):System.Object
         -16 (-0.39% of base) - Microsoft.VisualBasic.CompilerServices.Operators:ModObject(System.Object,System.Object):System.Object
         -12 (-0.32% of base) - System.Runtime.Serialization.Json.XmlJsonReader:Read():bool:this
          -8 (-25.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -8 (-25.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -8 (-1.79% of base) - System.Web.Util.HttpEncoder:UrlEncodeNonAscii(System.Byte[],int,int):System.Byte[]
          -8 (-1.44% of base) - System.Net.WebClient:UrlEncodeBytesToBytesInternal(System.Byte[],int,int,bool):System.Byte[]
          -8 (-1.17% of base) - System.Web.Util.HttpEncoder:UrlEncode(System.Byte[],int,int):System.Byte[]
          -8 (-0.32% of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyObject(System.Object,System.Object):System.Object
          -8 (-4.08% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -4 (-1.61% of base) - System.Xml.Xsl.Runtime.XmlQueryDataReader:ReadSByte(byte,byte):byte:this
          -4 (-2.17% of base) - System.Reflection.Metadata.Ecma335.ControlFlowBuilder:AddBranch(int,System.Reflection.Metadata.Ecma335.LabelHandle,ushort):this
          -4 (-0.16% of base) - Microsoft.Diagnostics.Tracing.Etlx.TraceLog:FastSerialization.IFastSerializable.ToStream(FastSerialization.Serializer):this
          -4 (-10.00% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryFormatterWriter:WriteSByte(byte):this
          -4 (-3.57% of base) - Microsoft.Cci.BlobWriter:WriteSByte(byte):this
          -4 (-0.17% of base) - Microsoft.VisualBasic.CompilerServices.Operators:AndObject(System.Object,System.Object):System.Object
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCShort(ushort):short
          -4 (-2.63% of base) - Microsoft.Cci.BlobBuilder:WriteInt16(short):this

Top method regressions (percentages):
           4 ( 7.14% of base) - Internal.IL.Stubs.ILCodeStream:EmitUInt16(ushort):this
           4 ( 1.82% of base) - System.Uri:HexEscape(ushort):System.String
           4 ( 1.75% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:OpCode(ushort):this
           4 ( 1.18% of base) - Microsoft.CodeAnalysis.CodeGen.ILBuilder:WriteOpCode(Microsoft.Cci.BlobBuilder,ushort)
           4 ( 0.81% of base) - System.Reflection.Metadata.Ecma335.InstructionEncoder:Branch(ushort,System.Reflection.Metadata.Ecma335.LabelHandle):this

Top method improvements (percentages):
          -8 (-25.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytesAsync(ushort,ushort):System.Threading.Tasks.Task:this
          -8 (-25.00% of base) - System.Xml.XmlStreamNodeWriter:WriteBytes(ushort,ushort):this
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCShort(ushort):short
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCUShort(short):ushort
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCSByte(ubyte):byte
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(ushort):ubyte
          -4 (-16.67% of base) - System.Xml.XmlStreamNodeWriter:WriteByteAsync(ushort):System.Threading.Tasks.Task:this
          -4 (-16.67% of base) - Microsoft.CodeAnalysis.VisualBasic.CompileTimeCalculations:UncheckedCByte(byte):ubyte
          -4 (-11.11% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:get_TypeKind():ubyte:this
          -4 (-10.00% of base) - System.Runtime.Serialization.Formatters.Binary.BinaryFormatterWriter:WriteSByte(byte):this
          -4 (-8.33% of base) - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:Microsoft.Cci.ITypeDefinition.get_Alignment():ushort:this
          -4 (-8.33% of base) - Microsoft.CodeAnalysis.VisualBasic.Symbols.NamedTypeSymbol:get_ITypeDefinitionAlignment():ushort:this
          -4 (-4.55% of base) - System.Reflection.Metadata.BlobWriter:WriteInt16(short):this
          -4 (-4.55% of base) - System.Reflection.Metadata.BlobWriter:WriteInt16BE(short):this
          -8 (-4.08% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -4 (-4.00% of base) - System.Reflection.Metadata.BlobBuilder:WriteInt16BE(short):this
          -4 (-4.00% of base) - System.Reflection.Metadata.BlobBuilder:WriteInt16(short):this
          -4 (-3.57% of base) - Microsoft.Cci.BlobWriter:WriteSByte(byte):this
          -4 (-3.57% of base) - System.Reflection.Metadata.BlobWriter:WriteSByte(byte):this
          -4 (-3.57% of base) - System.Reflection.Metadata.Ecma335.DeclSecurityTableReader:GetAction(int):short:this

53 total methods with Code Size differences (48 improved, 5 regressed), 7 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 95568
Total bytes of diff: 91976
Total bytes of delta: -3592 (-3.76% of base)
    diff is an improvement.


Top file improvements (bytes):
         -12 : 176166.dasm (-23.08% of base)
         -12 : 195285.dasm (-23.08% of base)
         -12 : 131612.dasm (-23.08% of base)
         -12 : 9049.dasm (-23.08% of base)
         -12 : 122186.dasm (-23.08% of base)
         -12 : 139576.dasm (-23.08% of base)
         -12 : 189425.dasm (-23.08% of base)
         -12 : 192433.dasm (-23.08% of base)
         -12 : 208316.dasm (-23.08% of base)
         -12 : 55157.dasm (-23.08% of base)
         -12 : 120516.dasm (-23.08% of base)
         -12 : 133387.dasm (-23.08% of base)
         -12 : 170649.dasm (-23.08% of base)
         -12 : 207193.dasm (-23.08% of base)
         -12 : 108402.dasm (-23.08% of base)
         -12 : 151588.dasm (-23.08% of base)
          -8 : 108511.dasm (-14.29% of base)
          -8 : 120631.dasm (-10.00% of base)
          -8 : 122182.dasm (-16.67% of base)
          -8 : 131526.dasm (-3.51% of base)

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

Top method improvements (bytes):
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -8 (-14.29% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftRightLogicalNarrowing(short,ubyte):byte
          -8 (-10.00% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftRightLogicalRoundedNarrowingSaturate(short,ubyte):byte
          -8 (-16.67% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogical(byte,ubyte):byte
          -8 (-3.51% of base) - JIT.HardwareIntrinsics.Arm.Helpers:SignedShift(short,short,bool,bool):short

Top method improvements (percentages):
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
         -12 (-23.08% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(byte,ubyte):ubyte
          -8 (-16.67% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogical(byte,ubyte):byte
          -8 (-16.67% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(short,ubyte):ushort
          -8 (-16.67% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogical(byte,ubyte):byte
          -8 (-16.67% of base) - JIT.HardwareIntrinsics.Arm.Helpers:ShiftLeftLogicalSaturateUnsigned(short,ubyte):ushort

726 total methods with Code Size differences (726 improved, 0 regressed), 50 unchanged.

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

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 44368
Total bytes of diff: 44016
Total bytes of delta: -352 (-0.79% of base)
    diff is an improvement.


Top method regressions (bytes):
           4 ( 5.00% of base) - XmlCoreTest.Common.CustomMemoryStream:WriteChar(ushort):this
           4 ( 0.10% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_1Byte(byte)
           4 ( 0.10% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_2Bytes(short)

Top method improvements (bytes):
          -8 (-4.08% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -4 (-0.93% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedSByteToNullableByte(byte,bool)
          -4 (-0.93% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedByteToNullableSByte(ubyte,bool)
          -4 (-1.18% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableUShortToNullableShort(System.Nullable`1[UInt16],bool)
          -4 (-1.30% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToNullableShort(ushort,bool)
          -4 (-1.18% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableShortToNullableByte(System.Nullable`1[Int16],bool)
          -4 (-1.18% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableCharToNullableSByte(System.Nullable`1[Char],bool)
          -4 (-1.18% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableByteToNullableShort(System.Nullable`1[Byte],bool)
          -4 (-0.93% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedUShortToNullableByte(ushort,bool)
          -4 (-0.93% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedCharToNullableSByte(ushort,bool)
          -4 (-0.93% of base) - System.Linq.Expressions.Tests.ConvertCheckedTests:VerifyCheckedCharToNullableByte(ushort,bool)
          -4 (-4.17% of base) - System.Tests.HalfTests:IsNegative(System.Half,bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToSByte(ushort,bool)
          -4 (-1.18% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableShortToNullableUShort(System.Nullable`1[Int16],bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToByte(short,bool)
          -4 (-1.18% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableCharToNullableShort(System.Nullable`1[Char],bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyCharToSByte(ushort,bool)
          -4 (-1.30% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyByteToNullableSByte(ubyte,bool)
          -4 (-1.20% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyNullableByteToNullableChar(System.Nullable`1[Byte],bool)
          -4 (-1.35% of base) - System.Buffers.Text.Tests.StandardFormatTests:StandardFormatTryParse(System.String,ushort,ubyte,bool)

Top method regressions (percentages):
           4 ( 5.00% of base) - XmlCoreTest.Common.CustomMemoryStream:WriteChar(ushort):this
           4 ( 0.10% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_2Bytes(short)
           4 ( 0.10% of base) - System.Text.Json.Tests.JsonDocumentTests:ReadNumber_1Byte(byte)

Top method improvements (percentages):
          -4 (-16.67% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -4 (-16.67% of base) - System.Tests.HalfTests:UInt16BitsToHalf(ushort):System.Half
          -4 (-16.67% of base) - <>c:<TryGetKnownHeader_Known_Found>b__0_1(ushort):ubyte:this
          -4 (-16.67% of base) - System.Data.SqlClient.TdsParser:WriteUnsignedShort(ushort,System.Data.SqlClient.TdsParserStateObject):this
          -4 (-12.50% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__34(long,ushort):this
          -4 (-12.50% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__46(long,byte):this
          -4 (-12.50% of base) - <>c__DisplayClass6_0:<AssertWritesReads>b__50(long,ushort):this
          -4 (-8.33% of base) - <>c:<JsonWithSingleLineCommentWithRegularLineEndingMultiSegment>b__181_0(ushort):System.String:this
          -4 (-4.17% of base) - System.Tests.HalfTests:IsNegative(System.Half,bool)
          -8 (-4.08% of base) - System.Net.Mime.QEncoder:ApppendEncodedByte(ubyte):this
          -4 (-3.03% of base) - <>c:<Encode_InvalidChars_WithCustomReplacementFallback>b__7_0(ushort):System.Collections.Generic.IEnumerable`1[Byte]:this
          -4 (-2.44% of base) - System.Buffers.Text.Tests.StandardFormatTests:StandardFormatOpImplicitFromChar(ushort)
          -4 (-1.67% of base) - System.Buffers.Text.Tests.StandardFormatTests:StandardFormatParseSpan(System.String,ushort,ubyte)
          -4 (-1.67% of base) - System.Buffers.Text.Tests.StandardFormatTests:StandardFormatParseString(System.String,ushort,ubyte)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToSByte(ushort,bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyShortToByte(short,bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyCharToSByte(ushort,bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToByte(ushort,bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyUShortToShort(ushort,bool)
          -4 (-1.47% of base) - System.Linq.Expressions.Tests.ConvertTests:VerifyByteToSByte(ubyte,bool)

93 total methods with Code Size differences (90 improved, 3 regressed), 9 unchanged.

Sample improvement:

G_M38819_IG02:
-       movzx    r8, r8w
        movzx    r8, r8b
-       movzx    rdx, dx
        movzx    rdx, dl
G_M38819_IG03:
        jmp      System.Xml.XmlStreamNodeWriter:WriteBytes(ubyte,ubyte):this

Regressions are coming from lost CSE opportunities, where previosly we had X CAST(Small LCL_VAR) and now some amount less because some of the expressions were actually CAST(CAST(Small LCL_VAR)) and the inner cast got eliminated. I experimented with what would happen if I only left the "remove the outer cast" optimization, but it regressed the diff greatly (libraries.pmi.windows.x64 went to just (11 improved, 0 regressed)), so I decided it is worth it to have both.

@SingleAccretion SingleAccretion marked this pull request as ready for review May 15, 2021 21:33
@SingleAccretion
Copy link
Contributor Author

cc @sandreenko as this is a morph change.

@sandreenko
Copy link
Contributor

PTAL @dotnet/jit-contrib

@SingleAccretion
Copy link
Contributor Author

Ping to keep the bot happy.

Copy link
Contributor

@sandreenko sandreenko left a comment

Choose a reason for hiding this comment

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

LGTM, sorry for the long wait!

{
goto REMOVE_CAST;
}
// We can take advantage of the implicit zero/sign-extension for
// small integer types and eliminate some casts.
if (opts.OptimizationEnabled() && !oper->gtOverflow() && !gtIsActiveCSE_Candidate(oper) &&
Copy link
Contributor

Choose a reason for hiding this comment

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

I had a question about why we don't do it for not small type but you already addressed it in the header :-)

@sandreenko sandreenko merged commit ec42090 into dotnet:main Jun 25, 2021
@SingleAccretion SingleAccretion deleted the Eliminate-Some-Casts branch June 25, 2021 09:32
@ghost ghost locked as resolved and limited conversation to collaborators Jul 25, 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.

2 participants