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

[X64] [EgorBo] JIT: Optimize out write barriers for fields in ref-like structs #443

Open
MihuBot opened this issue Jun 16, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jun 16, 2024

Job completed in 15 minutes.
dotnet/runtime#103503

Diffs

Diffs
Found 277 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 41359711
Total bytes of diff: 41355830
Total bytes of delta: -3881 (-0.01 % of base)
Total relative delta: -18.97
    diff is an improvement.
    relative diff is an improvement.


Top file regressions (bytes):
           9 : System.Net.Http.dasm (0.00 % of base)

Top file improvements (bytes):
       -1190 : System.Private.CoreLib.dasm (-0.02 % of base)
        -954 : System.Memory.dasm (-0.32 % of base)
        -823 : System.Text.RegularExpressions.dasm (-0.11 % of base)
        -419 : System.Text.Json.dasm (-0.03 % of base)
        -200 : System.Runtime.Numerics.dasm (-0.17 % of base)
         -35 : System.Security.Cryptography.dasm (-0.00 % of base)
         -34 : System.Reflection.Metadata.dasm (-0.01 % of base)
         -28 : System.Diagnostics.Process.dasm (-0.03 % of base)
         -28 : System.Private.Uri.dasm (-0.03 % of base)
         -28 : Microsoft.Extensions.Logging.Abstractions.dasm (-0.04 % of base)
         -26 : System.Web.HttpUtility.dasm (-0.13 % of base)
         -25 : Microsoft.Extensions.DependencyInjection.Abstractions.dasm (-0.04 % of base)
         -20 : System.Private.Xml.dasm (-0.00 % of base)
         -20 : System.Console.dasm (-0.02 % of base)
         -20 : System.Diagnostics.DiagnosticSource.dasm (-0.01 % of base)
         -20 : System.Text.Encodings.Web.dasm (-0.08 % of base)
         -20 : System.Net.Mail.dasm (-0.01 % of base)

18 total files with Code Size differences (17 improved, 1 regressed), 240 unchanged.

Top method regressions (bytes):
          29 (1.98 % of base) : System.Net.Http.dasm - System.Net.Http.HttpConnectionPoolManager:.ctor(System.Net.Http.HttpConnectionSettings):this (FullOpts)
          17 (1.43 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts)
          10 (0.56 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:DoStrictParse(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,System.Globalization.DateTimeFormatInfo,byref):ubyte (FullOpts)

Top method improvements (bytes):
        -216 (-4.16 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts) (2 methods)
        -124 (-35.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts) (2 methods)
        -105 (-5.36 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:.ctor(System.Buffers.ReadOnlySequence`1[ubyte],ubyte,System.Text.Json.JsonReaderState):this (FullOpts)
         -90 (-6.16 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:ConsumeStringNextSegment():ubyte:this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[double]:.ctor(System.Buffers.ReadOnlySequence`1[double]):this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[int]:.ctor(System.Buffers.ReadOnlySequence`1[int]):this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[long]:.ctor(System.Buffers.ReadOnlySequence`1[long]):this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[short]:.ctor(System.Buffers.ReadOnlySequence`1[short]):this (FullOpts)
         -70 (-10.70 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[System.Numerics.Vector`1[float]]:.ctor(System.Buffers.ReadOnlySequence`1[System.Numerics.Vector`1[float]]):this (FullOpts)
         -70 (-11.04 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[ubyte]:.ctor(System.Buffers.ReadOnlySequence`1[ubyte]):this (FullOpts)
         -70 (-2.20 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:AssignNameSlots():this (FullOpts) (2 methods)
         -58 (-4.55 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:ConsumeStringAndValidateMultiSegment(System.ReadOnlySpan`1[ubyte],int):ubyte:this (FullOpts)
         -56 (-62.92 % of base) : System.Private.CoreLib.dasm - System.Reflection.MethodBase+StackAllocatedArguments:.ctor(System.Object,System.Object,System.Object,System.Object):this (FullOpts)
         -45 (-6.00 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[double]:GetNextSpan():this (FullOpts)
         -45 (-6.00 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[int]:GetNextSpan():this (FullOpts)
         -45 (-6.00 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[long]:GetNextSpan():this (FullOpts)
         -45 (-6.00 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[short]:GetNextSpan():this (FullOpts)
         -45 (-5.95 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[System.Numerics.Vector`1[float]]:GetNextSpan():this (FullOpts)
         -45 (-5.98 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[ubyte]:GetNextSpan():this (FullOpts)
         -43 (-43.88 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Regex+ValueSplitEnumerator:.ctor(System.Text.RegularExpressions.Regex,System.ReadOnlySpan`1[ushort],int,int,ubyte):this (FullOpts)
         -37 (-34.58 % of base) : System.Private.CoreLib.dasm - System.Threading.ThreadBlockingInfo+Scope:.ctor(System.Object,int,int):this (FullOpts)
         -36 (-4.78 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[double]:ResetReader():this (FullOpts)
         -36 (-4.78 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[int]:ResetReader():this (FullOpts)
         -36 (-4.78 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[long]:ResetReader():this (FullOpts)
         -36 (-4.78 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[short]:ResetReader():this (FullOpts)
         -36 (-4.74 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[System.Numerics.Vector`1[float]]:ResetReader():this (FullOpts)
         -36 (-4.77 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[ubyte]:ResetReader():this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(double[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(int[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(long[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(short[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[System.Nullable`1[int],long]:FromManaged(System.Nullable`1[int][],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[System.Numerics.Vector`1[float],long]:FromManaged(System.Numerics.Vector`1[float][],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ubyte[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[System.Numerics.Vector`1[float],long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.64 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[System.__Canon,long]:FromManaged(System.__Canon[],System.Span`1[long]):this (FullOpts)
         -33 (-17.84 % of base) : System.Text.Json.dasm - System.Text.Json.Schema.JsonSchemaExporter+GenerationState:.ctor(System.Text.Json.JsonSerializerOptions,System.Text.Json.Schema.JsonSchemaExporterOptions):this (FullOpts)
         -33 (-24.63 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexWriter:.ctor(System.Text.RegularExpressions.RegexTree,System.Span`1[int],System.Span`1[int]):this (FullOpts)
         -32 (-53.33 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Regex+ValueMatchEnumerator:.ctor(System.Text.RegularExpressions.Regex,System.ReadOnlySpan`1[ushort],int):this (FullOpts)
         -26 (-12.38 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider):this (FullOpts)
         -25 (-69.44 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities+ConstructorMatcher:.ctor(Microsoft.Extensions.DependencyInjection.ActivatorUtilities+ConstructorInfoEx,System.Span`1[System.Object]):this (FullOpts)
         -25 (-16.56 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ushort],System.IFormatProvider,byref):this (FullOpts)
         -25 (-18.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider,System.Span`1[ushort]):this (FullOpts)
         -25 (-16.56 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ubyte],System.IFormatProvider,byref):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[double]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[double]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[long]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[long]:Grow(int):this (FullOpts)
         -24 (-7.84 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[short]:Grow(int):this (FullOpts)
         -24 (-7.84 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[short]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[System.Nullable`1[int]]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[System.Nullable`1[int]]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]:Grow(int):this (FullOpts)
         -24 (-7.92 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]:Grow(int):this (FullOpts)
         -24 (-7.92 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]:Grow(int):this (FullOpts)
         -23 (-2.34 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:TryGetNumberMultiSegment(System.ReadOnlySpan`1[ubyte],byref):ubyte:this (FullOpts)
         -23 (-23.71 % of base) : System.Private.CoreLib.dasm - System.Threading.ThreadBlockingInfo+Scope:.ctor(System.Threading.Lock,int):this (FullOpts)
         -22 (-20.56 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH:RhRethrow(byref,byref) (FullOpts)
         -22 (-23.16 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:StartGroup(System.Text.RegularExpressions.RegexNode):this (FullOpts)
         -21 (-1.34 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:CheckLiteralMultiSegment(System.ReadOnlySpan`1[ubyte],System.ReadOnlySpan`1[ubyte],byref):ubyte:this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[double]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[int]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[int]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[int]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[long]:Grow(int):this (FullOpts)
         -20 (-8.06 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[short]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[System.Nullable`1[int]]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]:Grow(int):this (FullOpts)
         -20 (-7.35 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow():this (FullOpts)
         -20 (-7.35 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:Grow(int):this (FullOpts)
         -20 (-7.43 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowCore(uint):this (FullOpts)
         -20 (-6.29 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:NoteCaptureName(System.String,int):this (FullOpts)
         -20 (-10.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:PopGroup():this (FullOpts)
         -20 (-8.16 % of base) : System.Diagnostics.Process.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Web.HttpUtility.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.Uri.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Runtime.Numerics.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Net.Http.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.Xml.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Text.Json.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Console.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Text.RegularExpressions.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Text.Encodings.Web.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : Microsoft.Extensions.Logging.Abstractions.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Reflection.Metadata.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Security.Cryptography.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Net.Mail.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -18 (-35.29 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH+ExInfo:Init(System.Object,byref):this (FullOpts)
         -18 (-39.13 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH+ExInfo:Init(System.Object,ubyte):this (FullOpts)
         -18 (-72.00 % of base) : System.Private.CoreLib.dasm - System.Threading.Lock+Scope:.ctor(System.Threading.Lock,System.Threading.Lock+ThreadId):this (FullOpts)
         -17 (-1.65 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:ReadMultiSegment():ubyte:this (FullOpts)

Top method regressions (percentages):
          29 (1.98 % of base) : System.Net.Http.dasm - System.Net.Http.HttpConnectionPoolManager:.ctor(System.Net.Http.HttpConnectionSettings):this (FullOpts)
          17 (1.43 % of base) : System.Text.Json.dasm - System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts)
          10 (0.56 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:DoStrictParse(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,System.Globalization.DateTimeFormatInfo,byref):ubyte (FullOpts)

Top method improvements (percentages):
         -18 (-72.00 % of base) : System.Private.CoreLib.dasm - System.Threading.Lock+Scope:.ctor(System.Threading.Lock,System.Threading.Lock+ThreadId):this (FullOpts)
         -25 (-69.44 % of base) : Microsoft.Extensions.DependencyInjection.Abstractions.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities+ConstructorMatcher:.ctor(Microsoft.Extensions.DependencyInjection.ActivatorUtilities+ConstructorInfoEx,System.Span`1[System.Object]):this (FullOpts)
         -56 (-62.92 % of base) : System.Private.CoreLib.dasm - System.Reflection.MethodBase+StackAllocatedArguments:.ctor(System.Object,System.Object,System.Object,System.Object):this (FullOpts)
         -32 (-53.33 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Regex+ValueMatchEnumerator:.ctor(System.Text.RegularExpressions.Regex,System.ReadOnlySpan`1[ushort],int):this (FullOpts)
         -43 (-43.88 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Regex+ValueSplitEnumerator:.ctor(System.Text.RegularExpressions.Regex,System.ReadOnlySpan`1[ushort],int,int,ubyte):this (FullOpts)
         -18 (-39.13 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH+ExInfo:Init(System.Object,ubyte):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[double]:.ctor(System.ReadOnlySpan`1[double],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[double]):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[int]:.ctor(System.ReadOnlySpan`1[int],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[int]):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[long]:.ctor(System.ReadOnlySpan`1[long],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[long]):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[short]:.ctor(System.ReadOnlySpan`1[short],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[short]):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[System.__Canon]:.ctor(System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[System.Nullable`1[int]]:.ctor(System.ReadOnlySpan`1[System.Nullable`1[int]],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.Nullable`1[int]]):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[System.Numerics.Vector`1[float]]:.ctor(System.ReadOnlySpan`1[System.Numerics.Vector`1[float]],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.Numerics.Vector`1[float]]):this (FullOpts)
         -13 (-37.14 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.TextSegmentationUtility+Processor`1[ubyte]:.ctor(System.ReadOnlySpan`1[ubyte],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[ubyte]):this (FullOpts)
        -124 (-35.43 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts) (2 methods)
         -18 (-35.29 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH+ExInfo:Init(System.Object,byref):this (FullOpts)
         -37 (-34.58 % of base) : System.Private.CoreLib.dasm - System.Threading.ThreadBlockingInfo+Scope:.ctor(System.Object,int,int):this (FullOpts)
         -33 (-24.63 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexWriter:.ctor(System.Text.RegularExpressions.RegexTree,System.Span`1[int],System.Span`1[int]):this (FullOpts)
         -23 (-23.71 % of base) : System.Private.CoreLib.dasm - System.Threading.ThreadBlockingInfo+Scope:.ctor(System.Threading.Lock,int):this (FullOpts)
         -22 (-23.16 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:StartGroup(System.Text.RegularExpressions.RegexNode):this (FullOpts)
         -22 (-20.56 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH:RhRethrow(byref,byref) (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(double[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(int[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(long[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(short[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[System.Nullable`1[int],long]:FromManaged(System.Nullable`1[int][],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[System.Numerics.Vector`1[float],long]:FromManaged(System.Numerics.Vector`1[float][],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ubyte[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[System.Numerics.Vector`1[float],long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -34 (-19.21 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -25 (-18.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider,System.Span`1[ushort]):this (FullOpts)
         -33 (-18.64 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[System.__Canon,long]:FromManaged(System.__Canon[],System.Span`1[long]):this (FullOpts)
          -6 (-18.18 % of base) : System.Web.HttpUtility.dasm - System.Web.Util.HttpEncoder+UrlDecoder:.ctor(System.Span`1[ushort],System.Span`1[ubyte],System.Text.Encoding):this (FullOpts)
         -33 (-17.84 % of base) : System.Text.Json.dasm - System.Text.Json.Schema.JsonSchemaExporter+GenerationState:.ctor(System.Text.Json.JsonSerializerOptions,System.Text.Json.Schema.JsonSchemaExporterOptions):this (FullOpts)
         -16 (-16.67 % of base) : System.Private.CoreLib.dasm - System.Globalization.TimeSpanParse+TimeSpanRawInfo:Init(System.Globalization.DateTimeFormatInfo):this (FullOpts)
         -25 (-16.56 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ushort],System.IFormatProvider,byref):this (FullOpts)
         -25 (-16.56 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ubyte],System.IFormatProvider,byref):this (FullOpts)
         -26 (-12.38 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider):this (FullOpts)
          -6 (-11.11 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.TypeNameParser:.ctor(System.ReadOnlySpan`1[ushort],ubyte,System.Reflection.Metadata.TypeNameParseOptions):this (FullOpts)
         -70 (-11.04 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[ubyte]:.ctor(System.Buffers.ReadOnlySequence`1[ubyte]):this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[double]:.ctor(System.Buffers.ReadOnlySequence`1[double]):this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[int]:.ctor(System.Buffers.ReadOnlySequence`1[int]):this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[long]:.ctor(System.Buffers.ReadOnlySequence`1[long]):this (FullOpts)
         -70 (-10.99 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[short]:.ctor(System.Buffers.ReadOnlySequence`1[short]):this (FullOpts)
         -14 (-10.94 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH:RhThrowEx(System.Object,byref) (FullOpts)
         -20 (-10.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:PopGroup():this (FullOpts)
         -70 (-10.70 % of base) : System.Memory.dasm - System.Buffers.SequenceReader`1[System.Numerics.Vector`1[float]]:.ctor(System.Buffers.ReadOnlySequence`1[System.Numerics.Vector`1[float]]):this (FullOpts)
         -11 (-9.48 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this (FullOpts)
          -8 (-9.20 % of base) : System.Private.Uri.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -8 (-9.20 % of base) : System.Runtime.Numerics.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -8 (-9.20 % of base) : System.Text.Json.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -8 (-9.20 % of base) : System.Text.RegularExpressions.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -8 (-9.20 % of base) : System.Private.CoreLib.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -8 (-9.20 % of base) : Microsoft.Extensions.Logging.Abstractions.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -8 (-9.20 % of base) : System.Reflection.Metadata.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -6 (-8.70 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:PushGroup():this (FullOpts)
          -9 (-8.33 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo+PropertyHierarchyResolutionState:.ctor(System.Text.Json.JsonSerializerOptions):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Diagnostics.Process.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Web.HttpUtility.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.Uri.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Runtime.Numerics.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Net.Http.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.Xml.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Text.Json.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Console.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Diagnostics.DiagnosticSource.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Text.RegularExpressions.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Private.CoreLib.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Text.Encodings.Web.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : Microsoft.Extensions.Logging.Abstractions.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Reflection.Metadata.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Security.Cryptography.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Net.Mail.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.06 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[short]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[double]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[int]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[int]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[int]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[long]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[System.Nullable`1[int]]:Grow(int):this (FullOpts)
         -20 (-8.03 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]:Grow(int):this (FullOpts)
         -24 (-7.92 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]:Grow(int):this (FullOpts)
         -24 (-7.92 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]:Grow(int):this (FullOpts)
         -24 (-7.84 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[short]:Grow(int):this (FullOpts)
         -24 (-7.84 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[short]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[double]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[double]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[long]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[long]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[System.Nullable`1[int]]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[System.Nullable`1[int]]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]:Grow(int):this (FullOpts)
         -24 (-7.82 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]:Grow(int):this (FullOpts)
          -8 (-7.62 % of base) : System.Private.CoreLib.dasm - System.__DTString:.ctor(System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo):this (FullOpts)
         -20 (-7.43 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowCore(uint):this (FullOpts)

150 total methods with Code Size differences (147 improved, 3 regressed), 252154 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jun 17, 2024

Top method regressions

17 (1.43 % of base) - System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
 ; Assembly listing for method System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts)
 ; Emitting BLENDED_CODE for X86 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 30 single block inlinees; 13 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] ( 21, 56   )   byref  ->  rbx         this single-def
 ;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlyMemory`1[ubyte]>
 ;* V02 loc1         [V02    ] (  0,  0   )  struct (16) zero-ref    <System.SequencePosition>
 ;* V03 loc2         [V03    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlyMemory`1[ubyte]>
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V05 tmp1         [V05,T03] (  4, 28   )   byref  ->  rsi         "Inlining Arg"
 ;  V06 tmp2         [V06,T00] (  5, 68   )   byref  ->  r12         "Inlining Arg"
 ;* V07 tmp3         [V07    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.SequencePosition>
-;  V08 tmp4         [V08,T10] (  2, 16   )     int  ->  [rbp-0x2C]  spill-single-def
+;  V08 tmp4         [V08,T10] (  2, 16   )     int  ->  rdi        
 ;* V09 tmp5         [V09    ] (  0,  0   )     int  ->  zero-ref   
-;  V10 tmp6         [V10,T18] (  3, 12   )   ubyte  ->  registers   "Inline return value spill temp"
+;  V10 tmp6         [V10,T18] (  3, 12   )   ubyte  ->  rdi         "Inline return value spill temp"
 ;  V11 tmp7         [V11,T05] (  4, 20   )     ref  ->  rax         class-hnd "Inline stloc first use temp" <System.Object>
 ;  V12 tmp8         [V12,T33] (  3,  6   )     int  ->  rdi         "Inline stloc first use temp"
-;  V13 tmp9         [V13,T07] (  9, 16.50)     ref  ->  [rbp-0x68]  class-hnd spill-single-def "Inline stloc first use temp" <System.Object>
-;  V14 tmp10        [V14,T02] ( 14, 28   )     int  ->  [rbp-0x30]  spill-single-def "Inline stloc first use temp"
-;  V15 tmp11        [V15,T25] (  4,  8   )     int  ->  [rbp-0x34]  spill-single-def "Inline stloc first use temp"
+;  V13 tmp9         [V13,T07] (  9, 16.50)     ref  ->  [rbp-0x60]  class-hnd spill-single-def "Inline stloc first use temp" <System.Object>
+;  V14 tmp10        [V14,T02] ( 14, 28   )     int  ->  [rbp-0x2C]  spill-single-def "Inline stloc first use temp"
+;  V15 tmp11        [V15,T25] (  4,  8   )     int  ->  [rbp-0x30]  spill-single-def "Inline stloc first use temp"
 ;* V16 tmp12        [V16    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SR] multireg-ret "Return value temp for multireg return" <System.Memory`1[ubyte]>
-;  V17 tmp13        [V17    ] (  4,  8   )  struct (16) [rbp-0x48]  do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
+;  V17 tmp13        [V17    ] (  4,  8   )  struct (16) [rbp-0x40]  do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
 ;* V18 tmp14        [V18    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Memory`1[ubyte]>
 ;* V19 tmp15        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
 ;  V20 tmp16        [V20,T16] (  6, 12   )     ref  ->  rax         class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
 ;* V21 tmp17        [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.ReadOnlyMemory`1[ubyte]>
 ;  V22 tmp18        [V22,T31] (  3,  6   )     ref  ->  rcx         class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
 ;* V23 tmp19        [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.SequencePosition>
 ;* V24 tmp20        [V24    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V25 tmp21        [V25    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
 ;* V26 tmp22        [V26    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Object>
-;  V27 tmp23        [V27,T27] (  2,  8   )     int  ->  rdi         "Inlining Arg"
+;  V27 tmp23        [V27,T27] (  2,  8   )     int  ->  rcx         "Inlining Arg"
 ;  V28 tmp24        [V28,T28] (  2,  8   )     int  ->  rax         "Inlining Arg"
-;  V29 tmp25        [V29,T19] (  3, 12   )     int  ->  rdi         "Inlining Arg"
+;  V29 tmp25        [V29,T19] (  3, 12   )     int  ->  rsi         "Inlining Arg"
 ;* V30 tmp26        [V30    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
 ;* V31 tmp27        [V31    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Object>
 ;  V32 tmp28        [V32,T29] (  2,  8   )     int  ->   r8         "Inlining Arg"
 ;  V33 tmp29        [V33,T08] (  4, 16   )     ref  ->  rax         class-hnd "Inlining Arg" <ubyte[]>
 ;  V34 tmp30        [V34,T09] (  4, 16   )     int  ->  rsi         "Inlining Arg"
 ;  V35 tmp31        [V35,T20] (  3, 12   )     int  ->  rax         "Inlining Arg"
 ;* V36 tmp32        [V36    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Memory`1[ubyte]>
 ;* V37 tmp33        [V37    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Object>
 ;  V38 tmp34        [V38,T30] (  2,  8   )     int  ->  rcx         "Inlining Arg"
 ;* V39 tmp35        [V39    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Memory`1[ubyte]>
 ;  V40 tmp36        [V40,T39] (  4,  4   )   byref  ->  rsi         single-def "Inlining Arg"
 ;  V41 tmp37        [V41,T57] (  3,  3   )   byref  ->  r13         single-def "Inlining Arg"
 ;* V42 tmp38        [V42    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.SequencePosition>
 ;* V43 tmp39        [V43    ] (  0,  0   )     int  ->  zero-ref   
 ;  V44 tmp40        [V44,T67] (  3,  1.50)   ubyte  ->  rdi         "Inline return value spill temp"
-;  V45 tmp41        [V45,T61] (  4,  2   )     ref  ->  rax         class-hnd single-def "Inline stloc first use temp" <System.Object>
+;  V45 tmp41        [V45,T61] (  4,  2   )     ref  ->   r8         class-hnd single-def "Inline stloc first use temp" <System.Object>
 ;  V46 tmp42        [V46,T68] (  3,  1.50)     int  ->  rdi         "Inline stloc first use temp"
 ;  V47 tmp43        [V47,T54] (  7,  3.12)     ref  ->  r14         class-hnd single-def "Inline stloc first use temp" <System.Object>
 ;  V48 tmp44        [V48,T38] (  9,  4.50)     int  ->  r13         "Inline stloc first use temp"
 ;  V49 tmp45        [V49,T63] (  4,  2   )     int  ->  r15         "Inline stloc first use temp"
 ;* V50 tmp46        [V50    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SR] multireg-ret "Return value temp for multireg return" <System.Memory`1[ubyte]>
-;  V51 tmp47        [V51    ] (  2,  1   )  struct (16) [rbp-0x58]  do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
+;  V51 tmp47        [V51    ] (  2,  1   )  struct (16) [rbp-0x50]  do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
 ;* V52 tmp48        [V52    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Memory`1[ubyte]>
 ;* V53 tmp49        [V53    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
 ;  V54 tmp50        [V54,T62] (  4,  2   )     ref  ->  rax         class-hnd single-def "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
 ;* V55 tmp51        [V55    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.ReadOnlyMemory`1[ubyte]>
 ;* V56 tmp52        [V56    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
 ;* V57 tmp53        [V57    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.SequencePosition>
 ;* V58 tmp54        [V58    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V59 tmp55        [V59    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
 ;* V60 tmp56        [V60    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Object>
 ;* V61 tmp57        [V61    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V62 tmp58        [V62    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V63 tmp59        [V63    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V64 tmp60        [V64    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
 ;* V65 tmp61        [V65    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Object>
 ;* V66 tmp62        [V66    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;  V67 tmp63        [V67,T58] (  3,  3   )     ref  ->  rax         class-hnd single-def "Inlining Arg" <ubyte[]>
+;  V67 tmp63        [V67,T58] (  3,  3   )     ref  ->  r12         class-hnd single-def "Inlining Arg" <ubyte[]>
 ;  V68 tmp64        [V68,T60] (  3,  3   )     int  ->  rsi         "Inlining Arg"
 ;* V69 tmp65        [V69    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V70 tmp66        [V70    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Memory`1[ubyte]>
 ;* V71 tmp67        [V71    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg" <System.Object>
 ;* V72 tmp68        [V72    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V73 tmp69        [V73    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Memory`1[ubyte]>
 ;* V74 tmp70        [V74    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.ReadOnlySpan`1[ubyte]>
 ;  V75 tmp71        [V75,T55] (  6,  3   )   byref  ->  r15         "Inline stloc first use temp"
 ;  V76 tmp72        [V76,T56] (  6,  3   )     int  ->  r14         "Inline stloc first use temp"
 ;* V77 tmp73        [V77    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "Inline stloc first use temp" <System.Object>
 ;* V78 tmp74        [V78    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V79 tmp75        [V79    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "updating class info" <System.Buffers.MemoryManager`1[ubyte]>
 ;* V80 tmp76        [V80    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Span`1[ubyte]>
 ;* V81 tmp77        [V81    ] (  0,  0   )  struct (16) zero-ref    multireg-ret ld-addr-op "Inline stloc first use temp" <System.Span`1[ubyte]>
-;  V82 tmp78        [V82,T69] (  3,  1.50)    long  ->  rax         "Inline stloc first use temp"
+;  V82 tmp78        [V82,T69] (  3,  1.50)    long  ->  rdi         "Inline stloc first use temp"
 ;* V83 tmp79        [V83    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V84 tmp80        [V84    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "updating class info" <ubyte[]>
 ;* V85 tmp81        [V85    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "updating class info" <ubyte[]>
 ;  V86 tmp82        [V86,T65] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
 ;* V87 tmp83        [V87    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;  V88 tmp84        [V88,T13] ( 11, 13   )     ref  ->  [rbp-0x70]  "field V01._object (fldOffset=0x0)" P-INDEP
-;  V89 tmp85        [V89,T21] (  6, 10.50)     int  ->  [rbp-0x5C]  "field V01._index (fldOffset=0x8)" P-INDEP
-;  V90 tmp86        [V90,T11] (  8, 15   )     int  ->  [rbp-0x60]  "field V01._length (fldOffset=0xc)" P-INDEP
+;  V88 tmp84        [V88,T13] ( 11, 13   )     ref  ->  [rbp-0x68]  "field V01._object (fldOffset=0x0)" P-INDEP
+;  V89 tmp85        [V89,T21] (  6, 10.50)     int  ->  [rbp-0x54]  "field V01._index (fldOffset=0x8)" P-INDEP
+;  V90 tmp86        [V90,T11] (  8, 15   )     int  ->  [rbp-0x58]  "field V01._length (fldOffset=0xc)" P-INDEP
 ;  V91 tmp87        [V91,T14] (  3, 12.50)     ref  ->  r15         "field V02._object (fldOffset=0x0)" P-INDEP
 ;  V92 tmp88        [V92,T15] (  3, 12.50)     int  ->  r14         "field V02._integer (fldOffset=0x8)" P-INDEP
 ;* V93 tmp89        [V93    ] (  0,  0   )     ref  ->  zero-ref    "field V03._object (fldOffset=0x0)" P-INDEP
 ;* V94 tmp90        [V94    ] (  0,  0   )     int  ->  zero-ref    "field V03._index (fldOffset=0x8)" P-INDEP
 ;* V95 tmp91        [V95    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0xc)" P-INDEP
-;  V96 tmp92        [V96,T06] (  3, 18   )     ref  ->  [rbp-0x78]  "field V07._object (fldOffset=0x0)" P-INDEP
+;  V96 tmp92        [V96,T06] (  3, 18   )     ref  ->  [rbp-0x70]  "field V07._object (fldOffset=0x0)" P-INDEP
 ;* V97 tmp93        [V97,T23] (  0,  0   )     int  ->  zero-ref    "field V07._integer (fldOffset=0x8)" P-INDEP
-;  V98 tmp94        [V98,T40] (  2,  4   )     ref  ->  [rbp-0x48]  do-not-enreg[] "field V17._object (fldOffset=0x0)" P-DEP
-;  V99 tmp95        [V99,T45] (  2,  4   )     int  ->  [rbp-0x40]  do-not-enreg[] "field V17._index (fldOffset=0x8)" P-DEP
-;  V100 tmp96       [V100,T46] (  2,  4   )     int  ->  [rbp-0x3C]  do-not-enreg[] "field V17._length (fldOffset=0xc)" P-DEP
+;  V98 tmp94        [V98,T40] (  2,  4   )     ref  ->  [rbp-0x40]  do-not-enreg[] "field V17._object (fldOffset=0x0)" P-DEP
+;  V99 tmp95        [V99,T45] (  2,  4   )     int  ->  [rbp-0x38]  do-not-enreg[] "field V17._index (fldOffset=0x8)" P-DEP
+;  V100 tmp96       [V100,T46] (  2,  4   )     int  ->  [rbp-0x34]  do-not-enreg[] "field V17._length (fldOffset=0xc)" P-DEP
 ;* V101 tmp97       [V101    ] (  0,  0   )     ref  ->  zero-ref    "field V18._object (fldOffset=0x0)" P-INDEP
 ;* V102 tmp98       [V102    ] (  0,  0   )     int  ->  zero-ref    "field V18._index (fldOffset=0x8)" P-INDEP
 ;* V103 tmp99       [V103    ] (  0,  0   )     int  ->  zero-ref    "field V18._length (fldOffset=0xc)" P-INDEP
 ;  V104 tmp100      [V104,T32] (  3,  6   )     ref  ->  rdx         "field V19._object (fldOffset=0x0)" P-INDEP
 ;  V105 tmp101      [V105,T34] (  3,  6   )     int  ->  rdi         "field V19._index (fldOffset=0x8)" P-INDEP
 ;  V106 tmp102      [V106,T35] (  3,  6   )     int  ->  rax         "field V19._length (fldOffset=0xc)" P-INDEP
 ;  V107 tmp103      [V107,T24] (  4,  8   )     ref  ->  rdx         "field V21._object (fldOffset=0x0)" P-INDEP
 ;  V108 tmp104      [V108,T26] (  4,  8   )     int  ->   r8         "field V21._index (fldOffset=0x8)" P-INDEP
 ;  V109 tmp105      [V109,T22] (  5, 10   )     int  ->  rax         "field V21._length (fldOffset=0xc)" P-INDEP
 ;  V110 tmp106      [V110,T41] (  2,  4   )     ref  ->  rcx         "field V23._object (fldOffset=0x0)" P-INDEP
 ;* V111 tmp107      [V111,T66] (  0,  0   )     int  ->  zero-ref    "field V23._integer (fldOffset=0x8)" P-INDEP
-;  V112 tmp108      [V112,T42] (  2,  4   )     ref  ->  rsi         "field V25._object (fldOffset=0x0)" P-INDEP
+;  V112 tmp108      [V112,T42] (  2,  4   )     ref  ->  rdi         "field V25._object (fldOffset=0x0)" P-INDEP
 ;  V113 tmp109      [V113,T47] (  2,  4   )     int  ->  rdx         "field V25._index (fldOffset=0x8)" P-INDEP
 ;  V114 tmp110      [V114,T48] (  2,  4   )     int  ->  rax         "field V25._length (fldOffset=0xc)" P-INDEP
 ;  V115 tmp111      [V115,T43] (  2,  4   )     ref  ->  rdx         "field V30._object (fldOffset=0x0)" P-INDEP
 ;  V116 tmp112      [V116,T49] (  2,  4   )     int  ->   r8         "field V30._index (fldOffset=0x8)" P-INDEP
 ;  V117 tmp113      [V117,T50] (  2,  4   )     int  ->  rax         "field V30._length (fldOffset=0xc)" P-INDEP
 ;  V118 tmp114      [V118,T44] (  2,  4   )     ref  ->  rdx         "field V36._object (fldOffset=0x0)" P-INDEP
 ;  V119 tmp115      [V119,T51] (  2,  4   )     int  ->  rcx         "field V36._index (fldOffset=0x8)" P-INDEP
 ;  V120 tmp116      [V120,T52] (  2,  4   )     int  ->  rax         "field V36._length (fldOffset=0xc)" P-INDEP
 ;* V121 tmp117      [V121    ] (  0,  0   )     ref  ->  zero-ref    "field V39._object (fldOffset=0x0)" P-INDEP
 ;* V122 tmp118      [V122    ] (  0,  0   )     int  ->  zero-ref    "field V39._index (fldOffset=0x8)" P-INDEP
 ;* V123 tmp119      [V123    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0xc)" P-INDEP
 ;* V124 tmp120      [V124    ] (  0,  0   )     ref  ->  zero-ref    "field V42._object (fldOffset=0x0)" P-INDEP
 ;* V125 tmp121      [V125    ] (  0,  0   )     int  ->  zero-ref    "field V42._integer (fldOffset=0x8)" P-INDEP
-;  V126 tmp122      [V126,T77] (  1,  0.50)     ref  ->  [rbp-0x58]  do-not-enreg[] "field V51._object (fldOffset=0x0)" P-DEP
-;  V127 tmp123      [V127,T78] (  1,  0.50)     int  ->  [rbp-0x50]  do-not-enreg[] "field V51._index (fldOffset=0x8)" P-DEP
-;  V128 tmp124      [V128,T74] (  2,  1   )     int  ->  [rbp-0x4C]  do-not-enreg[] "field V51._length (fldOffset=0xc)" P-DEP
+;  V126 tmp122      [V126,T77] (  1,  0.50)     ref  ->  [rbp-0x50]  do-not-enreg[] "field V51._object (fldOffset=0x0)" P-DEP
+;  V127 tmp123      [V127,T78] (  1,  0.50)     int  ->  [rbp-0x48]  do-not-enreg[] "field V51._index (fldOffset=0x8)" P-DEP
+;  V128 tmp124      [V128,T74] (  2,  1   )     int  ->  [rbp-0x44]  do-not-enreg[] "field V51._length (fldOffset=0xc)" P-DEP
 ;* V129 tmp125      [V129    ] (  0,  0   )     ref  ->  zero-ref    "field V52._object (fldOffset=0x0)" P-INDEP
 ;* V130 tmp126      [V130    ] (  0,  0   )     int  ->  zero-ref    "field V52._index (fldOffset=0x8)" P-INDEP
 ;* V131 tmp127      [V131    ] (  0,  0   )     int  ->  zero-ref    "field V52._length (fldOffset=0xc)" P-INDEP
 ;* V132 tmp128      [V132    ] (  0,  0   )     ref  ->  zero-ref    "field V53._object (fldOffset=0x0)" P-INDEP
 ;* V133 tmp129      [V133    ] (  0,  0   )     int  ->  zero-ref    "field V53._index (fldOffset=0x8)" P-INDEP
 ;* V134 tmp130      [V134    ] (  0,  0   )     int  ->  zero-ref    "field V53._length (fldOffset=0xc)" P-INDEP
 ;* V135 tmp131      [V135    ] (  0,  0   )     ref  ->  zero-ref    "field V55._object (fldOffset=0x0)" P-INDEP
 ;* V136 tmp132      [V136    ] (  0,  0   )     int  ->  zero-ref    "field V55._index (fldOffset=0x8)" P-INDEP
 ;  V137 tmp133      [V137,T64] (  4,  2   )     int  ->  rdi         "field V55._length (fldOffset=0xc)" P-INDEP
 ;* V138 tmp134      [V138    ] (  0,  0   )     ref  ->  zero-ref    "field V57._object (fldOffset=0x0)" P-INDEP
 ;* V139 tmp135      [V139    ] (  0,  0   )     int  ->  zero-ref    "field V57._integer (fldOffset=0x8)" P-INDEP
 ;* V140 tmp136      [V140    ] (  0,  0   )     ref  ->  zero-ref    "field V59._object (fldOffset=0x0)" P-INDEP
 ;* V141 tmp137      [V141    ] (  0,  0   )     int  ->  zero-ref    "field V59._index (fldOffset=0x8)" P-INDEP
 ;* V142 tmp138      [V142    ] (  0,  0   )     int  ->  zero-ref    "field V59._length (fldOffset=0xc)" P-INDEP
 ;* V143 tmp139      [V143    ] (  0,  0   )     ref  ->  zero-ref    "field V64._object (fldOffset=0x0)" P-INDEP
 ;* V144 tmp140      [V144    ] (  0,  0   )     int  ->  zero-ref    "field V64._index (fldOffset=0x8)" P-INDEP
 ;* V145 tmp141      [V145    ] (  0,  0   )     int  ->  zero-ref    "field V64._length (fldOffset=0xc)" P-INDEP
 ;* V146 tmp142      [V146    ] (  0,  0   )     ref  ->  zero-ref    "field V70._object (fldOffset=0x0)" P-INDEP
 ;* V147 tmp143      [V147    ] (  0,  0   )     int  ->  zero-ref    "field V70._index (fldOffset=0x8)" P-INDEP
 ;* V148 tmp144      [V148    ] (  0,  0   )     int  ->  zero-ref    "field V70._length (fldOffset=0xc)" P-INDEP
 ;* V149 tmp145      [V149    ] (  0,  0   )     ref  ->  zero-ref    "field V73._object (fldOffset=0x0)" P-INDEP
 ;* V150 tmp146      [V150    ] (  0,  0   )     int  ->  zero-ref    "field V73._index (fldOffset=0x8)" P-INDEP
 ;* V151 tmp147      [V151    ] (  0,  0   )     int  ->  zero-ref    "field V73._length (fldOffset=0xc)" P-INDEP
 ;* V152 tmp148      [V152    ] (  0,  0   )   byref  ->  zero-ref    "field V74._reference (fldOffset=0x0)" P-INDEP
 ;* V153 tmp149      [V153    ] (  0,  0   )     int  ->  zero-ref    "field V74._length (fldOffset=0x8)" P-INDEP
 ;  V154 tmp150      [V154,T72] (  2,  1   )   byref  ->  rax         single-def "field V78._reference (fldOffset=0x0)" P-INDEP
 ;  V155 tmp151      [V155,T75] (  2,  1   )     int  ->  r14         "field V78._length (fldOffset=0x8)" P-INDEP
 ;* V156 tmp152      [V156    ] (  0,  0   )   byref  ->  zero-ref    "field V80._reference (fldOffset=0x0)" P-DEP
 ;* V157 tmp153      [V157    ] (  0,  0   )     int  ->  zero-ref    "field V80._length (fldOffset=0x8)" P-DEP
 ;  V158 tmp154      [V158,T73] (  2,  1   )   byref  ->  r15         "field V81._reference (fldOffset=0x0)" P-INDEP
 ;  V159 tmp155      [V159,T76] (  2,  1   )     int  ->  r14         "field V81._length (fldOffset=0x8)" P-INDEP
 ;* V160 tmp156      [V160    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V87._reference (fldOffset=0x0)" P-INDEP
 ;* V161 tmp157      [V161    ] (  0,  0   )     int  ->  zero-ref    "field V87._length (fldOffset=0x8)" P-INDEP
 ;  V162 tmp158      [V162,T17] (  3, 12   )     ref  ->  rax         "argument with side effect"
 ;  V163 tmp159      [V163,T59] (  3,  3   )     ref  ->  rax         single-def "argument with side effect"
 ;  V164 cse0        [V164,T36] (  3,  6   )     int  ->  rdx         "CSE #02: conservative"
 ;  V165 cse1        [V165,T70] (  3,  1.50)     int  ->  r15         "CSE #10: conservative"
 ;  V166 cse2        [V166,T04] (  4, 24.50)   byref  ->  r13         "CSE #01: aggressive"
 ;  V167 rat0        [V167,T12] (  5, 15   )     ref  ->  rax         "replacement local"
 ;  V168 rat1        [V168,T37] (  3,  5   )    long  ->  rdi         "CSE for expectedClsNode"
-;  V169 rat2        [V169,T53] (  5,  3.75)     ref  ->  rax         "replacement local"
+;  V169 rat2        [V169,T53] (  5,  3.75)     ref  ->  r12         "replacement local"
 ;  V170 rat3        [V170,T71] (  3,  1.25)    long  ->  rdi         "CSE for expectedClsNode"
 ;
-; Lcl frame size = 88
+; Lcl frame size = 72
 
 G_M26249_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 88
-       lea      rbp, [rsp+0x80]
-       xor      eax, eax
-       mov      qword ptr [rbp-0x58], rax
+       sub      rsp, 72
+       lea      rbp, [rsp+0x70]
        vxorps   xmm8, xmm8, xmm8
-       vmovdqa  xmmword ptr [rbp-0x50], xmm8
-       mov      qword ptr [rbp-0x40], rax
+       vmovdqu  ymmword ptr [rbp-0x50], ymm8
        mov      rbx, rdi
-						;; size=45 bbWeight=8 PerfScore 92.67
+						;; size=32 bbWeight=8 PerfScore 74.67
 G_M26249_IG02:
        mov      r15, gword ptr [rbx+0x70]
        mov      r14d, dword ptr [rbx+0x78]
        lea      r13, bword ptr [rbx+0x60]
        lea      rdi, bword ptr [rbx+0x70]
        mov      rsi, r13
        call     CORINFO_HELP_ASSIGN_BYREF
        movsq    
        lea      rsi, bword ptr [rbx+0x80]
        mov      r12, r13
        mov      rax, gword ptr [r12]
        xor      rcx, rcx
-       mov      gword ptr [rbp-0x78], rcx
+       mov      gword ptr [rbp-0x70], rcx
        test     rax, rax
        je       G_M26249_IG13
 						;; size=55 bbWeight=8 PerfScore 100.00
 G_M26249_IG03:
        mov      edi, dword ptr [rsi+0x10]
        sar      edi, 31
        mov      edx, dword ptr [rsi+0x14]
        mov      r8d, edx
        sar      r8d, 31
        lea      edi, [r8+2*rdi]
        neg      edi
        mov      r8, gword ptr [rsi+0x08]
-       mov      gword ptr [rbp-0x68], r8
+       mov      gword ptr [rbp-0x60], r8
        mov      r9d, dword ptr [r12+0x08]
-       mov      dword ptr [rbp-0x30], r9d
+       mov      dword ptr [rbp-0x2C], r9d
        and      edx, 0xD1FFAB1E
-       mov      dword ptr [rbp-0x34], edx
+       mov      dword ptr [rbp-0x30], edx
        test     edi, edi
        je       G_M26249_IG10
        cmp      rax, r8
-       jne      G_M26249_IG36
+       jne      G_M26249_IG37
        cmp      edi, 1
        je       SHORT G_M26249_IG04
        mov      rsi, r8
        mov      rdi, 0xD1FFAB1E      ; System.Buffers.MemoryManager`1[ubyte]
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
        mov      rdi, rax
        mov      rax, qword ptr [rax]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Buffers.MemoryManager`1[ubyte]:get_Memory():System.Memory`1[ubyte]:this
-       mov      gword ptr [rbp-0x48], rax
-       mov      qword ptr [rbp-0x40], rdx
-       mov      eax, dword ptr [rbp-0x34]
-       mov      ecx, dword ptr [rbp-0x30]
+       mov      gword ptr [rbp-0x40], rax
+       mov      qword ptr [rbp-0x38], rdx
+       mov      eax, dword ptr [rbp-0x30]
+       mov      ecx, dword ptr [rbp-0x2C]
        sub      eax, ecx
        mov      esi, ecx
        mov      edi, eax
        add      rsi, rdi
-       mov      edi, dword ptr [rbp-0x3C]
+       mov      edi, dword ptr [rbp-0x34]
        cmp      rsi, rdi
-       ja       G_M26249_IG37
-       add      ecx, dword ptr [rbp-0x40]
-       mov      rdx, gword ptr [rbp-0x48]
+       ja       G_M26249_IG38
+       add      ecx, dword ptr [rbp-0x38]
+       mov      rdx, gword ptr [rbp-0x40]
        jmp      G_M26249_IG12
 						;; size=155 bbWeight=2 PerfScore 80.50
 G_M26249_IG04:
        mov      rax, r8
        test     rax, rax
        je       SHORT G_M26249_IG07
 						;; size=8 bbWeight=2 PerfScore 3.00
 G_M26249_IG05:
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        cmp      qword ptr [rax], rdi
        je       SHORT G_M26249_IG07
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M26249_IG06:
        mov      rsi, r8
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTARRAY
        call     [rax]CORINFO_HELP_CHKCASTARRAY
 						;; size=15 bbWeight=0.50 PerfScore 1.75
 G_M26249_IG07:
-       mov      edx, dword ptr [rbp-0x34]
-       mov      r9d, dword ptr [rbp-0x30]
+       mov      edx, dword ptr [rbp-0x30]
+       mov      r9d, dword ptr [rbp-0x2C]
        mov      esi, edx
        sub      esi, r9d
        test     rax, rax
        je       SHORT G_M26249_IG08
        mov      edi, r9d
        mov      edx, esi
        add      rdi, rdx
        mov      edx, dword ptr [rax+0x08]
        cmp      rdi, rdx
-       ja       G_M26249_IG37
+       ja       G_M26249_IG38
        mov      rdx, rax
        mov      edi, r9d
        mov      eax, esi
        jmp      SHORT G_M26249_IG09
 						;; size=47 bbWeight=2 PerfScore 21.00
 G_M26249_IG08:
        mov      edx, r9d
        or       edx, esi
-       jne      G_M26249_IG37
+       jne      G_M26249_IG38
        xor      rdx, rdx
        xor      edi, edi
        xor      eax, eax
 						;; size=17 bbWeight=2 PerfScore 4.50
 G_M26249_IG09:
        mov      r8d, edi
        mov      ecx, r8d
        jmp      G_M26249_IG12
 						;; size=11 bbWeight=2 PerfScore 5.00
 G_M26249_IG10:
        mov      rsi, rax
        mov      rdi, 0xD1FFAB1E      ; System.Buffers.ReadOnlySequenceSegment`1[ubyte]
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
-       mov      rdi, gword ptr [rbp-0x68]
-       cmp      rax, rdi
+       mov      rsi, gword ptr [rbp-0x60]
+       cmp      rax, rsi
        jne      SHORT G_M26249_IG11
-       mov      rdx, gword ptr [rdi+0x18]
-       mov      r8d, dword ptr [rdi+0x20]
-       mov      eax, dword ptr [rdi+0x24]
-       mov      edi, dword ptr [rbp-0x34]
+       mov      rdx, gword ptr [rsi+0x18]
+       mov      r8d, dword ptr [rsi+0x20]
+       mov      eax, dword ptr [rsi+0x24]
        mov      esi, dword ptr [rbp-0x30]
-       sub      edi, esi
-       mov      ecx, esi
-       mov      r9d, edi
+       mov      edi, dword ptr [rbp-0x2C]
+       sub      esi, edi
+       mov      ecx, edi
+       mov      r9d, esi
        add      rcx, r9
        cmp      rcx, rax
-       ja       G_M26249_IG35
-       add      r8d, esi
-       mov      eax, edi
+       ja       G_M26249_IG36
+       add      r8d, edi
+       mov      eax, esi
        mov      rcx, rdx
        mov      edx, r8d
        mov      rsi, rcx
        mov      ecx, edx
        mov      rdx, rsi
        jmp      SHORT G_M26249_IG12
 						;; size=91 bbWeight=2 PerfScore 40.00
 G_M26249_IG11:
        mov      rcx, gword ptr [rax+0x08]
        test     rcx, rcx
-       je       G_M26249_IG36
+       je       G_M26249_IG37
+       mov      rsi, rcx
        mov      rdx, gword ptr [rax+0x18]
        mov      r8d, dword ptr [rax+0x20]
        mov      eax, dword ptr [rax+0x24]
-       mov      esi, dword ptr [rbp-0x30]
-       cmp      esi, eax
-       ja       G_M26249_IG35
-       lea      edi, [r8+rsi]
-       sub      eax, esi
-       mov      rsi, rdx
-       mov      edx, edi
-       mov      r8, rsi
-       mov      gword ptr [rbp-0x78], rcx
+       mov      edi, dword ptr [rbp-0x2C]
+       cmp      edi, eax
+       ja       G_M26249_IG36
+       lea      ecx, [r8+rdi]
+       sub      eax, edi
+       mov      rdi, rdx
+       mov      edx, ecx
+       mov      rcx, rdi
+       mov      gword ptr [rbp-0x70], rsi
+       mov      rdi, rcx
        mov      ecx, edx
-       mov      rdx, r8
-						;; size=58 bbWeight=2 PerfScore 29.00
+       mov      rdx, rdi
+						;; size=64 bbWeight=2 PerfScore 30.00
 G_M26249_IG12:
-       mov      r8d, 1
-       mov      dword ptr [rbp-0x60], eax
-       mov      gword ptr [rbp-0x70], rdx
-       mov      dword ptr [rbp-0x5C], ecx
-       jmp      SHORT G_M26249_IG14
-						;; size=18 bbWeight=2 PerfScore 10.50
+       mov      edi, 1
+       jmp      SHORT G_M26249_IG15
+						;; size=7 bbWeight=2 PerfScore 4.50
 G_M26249_IG13:
        xor      rdx, rdx
-       mov      gword ptr [rbp-0x70], rdx
+       mov      gword ptr [rbp-0x68], rdx
        xor      eax, eax
-       mov      dword ptr [rbp-0x5C], eax
-       xor      r8d, r8d
-       mov      dword ptr [rbp-0x60], r8d
+       mov      dword ptr [rbp-0x54], eax
        xor      edi, edi
-       xor      r9d, r9d
-       mov      r8d, r9d
-						;; size=26 bbWeight=2 PerfScore 9.00
+       xor      r8d, r8d
+						;; size=16 bbWeight=2 PerfScore 6.00
 G_M26249_IG14:
-       mov      dword ptr [rbp-0x2C], r8d
-       mov      rsi, gword ptr [rbp-0x78]
-       mov      rdi, r12
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      eax, r8d
+       mov      ecx, dword ptr [rbp-0x54]
+       mov      rdx, gword ptr [rbp-0x68]
+						;; size=10 bbWeight=2 PerfScore 4.50
+G_M26249_IG15:
+       mov      rsi, gword ptr [rbp-0x70]
+       mov      gword ptr [r12], rsi
        xor      esi, esi
        mov      dword ptr [r12+0x08], esi
-       cmp      byte  ptr [rbp-0x2C], 0
-       je       G_M26249_IG33
-						;; size=33 bbWeight=8 PerfScore 60.00
-G_M26249_IG15:
-       mov      r12d, dword ptr [rbp-0x60]
-       test     r12d, r12d
-       je       G_M26249_IG32
-						;; size=13 bbWeight=4 PerfScore 9.00
+       test     dil, dil
+       je       G_M26249_IG34
+						;; size=24 bbWeight=8 PerfScore 36.00
 G_M26249_IG16:
+       mov      dword ptr [rbp-0x58], eax
+       test     eax, eax
+       je       G_M26249_IG33
+						;; size=11 bbWeight=4 PerfScore 9.00
+G_M26249_IG17:
        cmp      byte  ptr [rbx+0x24], 0
-       je       G_M26249_IG27
+       je       G_M26249_IG28
        lea      rsi, bword ptr [rbx+0x80]
-       mov      rax, gword ptr [r13]
-       test     rax, rax
-       je       G_M26249_IG25
+       mov      r8, gword ptr [r13]
+       test     r8, r8
+       je       G_M26249_IG26
        mov      edi, dword ptr [rsi+0x10]
        sar      edi, 31
        mov      r15d, dword ptr [rsi+0x14]
-       mov      ecx, r15d
-       sar      ecx, 31
-       lea      edi, [rcx+2*rdi]
+       mov      r9d, r15d
+       sar      r9d, 31
+       lea      edi, [r9+2*rdi]
        neg      edi
        mov      r14, gword ptr [rsi+0x08]
        mov      r13d, dword ptr [r13+0x08]
        and      r15d, 0xD1FFAB1E
        test     edi, edi
-       je       G_M26249_IG22
-       cmp      rax, r14
-       jne      G_M26249_IG36
+       je       G_M26249_IG23
+       cmp      r8, r14
+       jne      G_M26249_IG37
        cmp      edi, 1
-       je       SHORT G_M26249_IG17
+       je       SHORT G_M26249_IG18
+       mov      gword ptr [rbp-0x68], rdx
+       mov      dword ptr [rbp-0x54], ecx
        mov      rsi, r14
        mov      rdi, 0xD1FFAB1E      ; System.Buffers.MemoryManager`1[ubyte]
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
-       call     [rax]CORINFO_HELP_CHKCASTCLASS
+       mov      r8, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
+       call     [r8]CORINFO_HELP_CHKCASTCLASS
        mov      rdi, rax
        mov      rax, qword ptr [rax]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Buffers.MemoryManager`1[ubyte]:get_Memory():System.Memory`1[ubyte]:this
-       mov      gword ptr [rbp-0x58], rax
-       mov      qword ptr [rbp-0x50], rdx
+       mov      gword ptr [rbp-0x50], rax
+       mov      qword ptr [rbp-0x48], rdx
        sub      r15d, r13d
        mov      esi, r15d
        mov      edi, r13d
        add      rsi, rdi
-       mov      edi, dword ptr [rbp-0x4C]
+       mov      edi, dword ptr [rbp-0x44]
        cmp      rsi, rdi
-       jbe      G_M26249_IG24
-       jmp      G_M26249_IG37
-						;; size=163 bbWeight=0.50 PerfScore 20.00
-G_M26249_IG17:
-       mov      rax, r14
-       test     rax, rax
-       je       SHORT G_M26249_IG20
-						;; size=8 bbWeight=0.50 PerfScore 0.75
+       jbe      G_M26249_IG25
+       jmp      G_M26249_IG38
+						;; size=173 bbWeight=0.50 PerfScore 21.00
 G_M26249_IG18:
-       mov      rdi, 0xD1FFAB1E      ; ubyte[]
-       cmp      qword ptr [rax], rdi
-       je       SHORT G_M26249_IG20
-						;; size=15 bbWeight=0.25 PerfScore 1.06
+       mov      r12, r14
+       test     r12, r12
+       je       SHORT G_M26249_IG21
+						;; size=8 bbWeight=0.50 PerfScore 0.75
 G_M26249_IG19:
-       mov      rsi, r14
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTARRAY
-       call     [rax]CORINFO_HELP_CHKCASTARRAY
-						;; size=15 bbWeight=0.12 PerfScore 0.44
+       mov      rdi, 0xD1FFAB1E      ; ubyte[]
+       cmp      qword ptr [r12], rdi
+       je       SHORT G_M26249_IG21
+						;; size=16 bbWeight=0.25 PerfScore 1.06
 G_M26249_IG20:
+       mov      gword ptr [rbp-0x68], rdx
+       mov      dword ptr [rbp-0x54], ecx
+       mov      rsi, r14
+       mov      r8, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTARRAY
+       call     [r8]CORINFO_HELP_CHKCASTARRAY
+       mov      r12, rax
+       mov      ecx, dword ptr [rbp-0x54]
+       mov      rdx, gword ptr [rbp-0x68]
+						;; size=33 bbWeight=0.12 PerfScore 0.97
+G_M26249_IG21:
        mov      esi, r15d
        sub      esi, r13d
-       test     rax, rax
-       je       SHORT G_M26249_IG21
+       test     r12, r12
+       je       SHORT G_M26249_IG22
        mov      edi, r13d
        add      rsi, rdi
-       mov      edi, dword ptr [rax+0x08]
+       mov      edi, dword ptr [r12+0x08]
        cmp      rsi, rdi
-       jbe      SHORT G_M26249_IG24
-       jmp      G_M26249_IG37
-						;; size=30 bbWeight=0.50 PerfScore 3.75
-G_M26249_IG21:
-       or       esi, r13d
-       je       SHORT G_M26249_IG24
-       jmp      G_M26249_IG37
-						;; size=10 bbWeight=0.50 PerfScore 1.62
+       mov      gword ptr [rbp-0x68], rdx
+       mov      dword ptr [rbp-0x54], ecx
+       jbe      SHORT G_M26249_IG25
+       jmp      G_M26249_IG38
+						;; size=39 bbWeight=0.50 PerfScore 4.75
 G_M26249_IG22:
-       mov      rsi, rax
+       or       esi, r13d
+       mov      gword ptr [rbp-0x68], rdx
+       mov      dword ptr [rbp-0x54], ecx
+       je       SHORT G_M26249_IG25
+       jmp      G_M26249_IG38
+						;; size=17 bbWeight=0.50 PerfScore 2.62
+G_M26249_IG23:
+       mov      gword ptr [rbp-0x68], rdx
+       mov      dword ptr [rbp-0x54], ecx
+       mov      rsi, r8
        mov      rdi, 0xD1FFAB1E      ; System.Buffers.ReadOnlySequenceSegment`1[ubyte]
-       mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
-       call     [rax]CORINFO_HELP_CHKCASTCLASS
+       mov      r8, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
+       call     [r8]CORINFO_HELP_CHKCASTCLASS
        cmp      rax, r14
-       jne      SHORT G_M26249_IG23
+       jne      SHORT G_M26249_IG24
        mov      edi, dword ptr [r14+0x24]
        mov      eax, r15d
        sub      eax, r13d
        mov      ecx, r13d
        add      rax, rcx
        cmp      rax, rdi
-       jbe      SHORT G_M26249_IG24
-       jmp      G_M26249_IG35
-						;; size=56 bbWeight=0.50 PerfScore 5.62
-G_M26249_IG23:
+       jbe      SHORT G_M26249_IG25
+       jmp      G_M26249_IG36
+						;; size=64 bbWeight=0.50 PerfScore 6.62
+G_M26249_IG24:
        cmp      gword ptr [rax+0x08], 0
-       je       G_M26249_IG36
+       je       G_M26249_IG37
        mov      edi, dword ptr [rax+0x24]
        cmp      r13d, edi
-       ja       G_M26249_IG35
+       ja       G_M26249_IG36
 						;; size=23 bbWeight=0.50 PerfScore 3.62
-G_M26249_IG24:
+G_M26249_IG25:
        mov      edi, 1
-       jmp      SHORT G_M26249_IG26
+       jmp      SHORT G_M26249_IG27
 						;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M26249_IG25:
-       xor      edi, edi
-						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M26249_IG26:
+       xor      edi, edi
+       mov      gword ptr [rbp-0x68], rdx
+       mov      dword ptr [rbp-0x54], ecx
+						;; size=9 bbWeight=0.50 PerfScore 1.12
+G_M26249_IG27:
        test     edi, edi
        sete     dil
        mov      byte  ptr [rbx+0x2A], dil
-						;; size=10 bbWeight=0.50 PerfScore 1.12
-G_M26249_IG27:
+       mov      ecx, dword ptr [rbp-0x54]
+       mov      rdx, gword ptr [rbp-0x68]
+						;; size=17 bbWeight=0.50 PerfScore 2.12
+G_M26249_IG28:
        xor      r15, r15
        xor      r14d, r14d
-       mov      r13, gword ptr [rbp-0x70]
-       test     r13, r13
-       je       SHORT G_M26249_IG30
-       mov      rdi, qword ptr [r13]
+       test     rdx, rdx
+       je       SHORT G_M26249_IG31
+       mov      rdi, qword ptr [rdx]
        test     dword ptr [rdi], 0xD1FFAB1E
-       jne      SHORT G_M26249_IG28
-       mov      rdi, r13
-       mov      rax, qword ptr [r13]
-       mov      rax, qword ptr [rax+0x40]
-       call     [rax+0x28]System.Buffers.MemoryManager`1[ubyte]:GetSpan():System.Span`1[ubyte]:this
+       jne      SHORT G_M26249_IG29
+       mov      dword ptr [rbp-0x54], ecx
+       mov      rdi, rdx
+       mov      rdx, qword ptr [rdx]
+       mov      rdx, qword ptr [rdx+0x40]
+       call     [rdx+0x28]System.Buffers.MemoryManager`1[ubyte]:GetSpan():System.Span`1[ubyte]:this
        mov      r15, rax
        mov      r14d, edx
-       jmp      SHORT G_M26249_IG29
-						;; size=49 bbWeight=0.50 PerfScore 9.25
-G_M26249_IG28:
-       lea      r15, bword ptr [r13+0x10]
-       mov      r14d, dword ptr [r13+0x08]
-						;; size=8 bbWeight=0.50 PerfScore 1.25
+       jmp      SHORT G_M26249_IG30
+						;; size=46 bbWeight=0.50 PerfScore 9.25
 G_M26249_IG29:
-       mov      r13d, dword ptr [rbp-0x5C]
-       and      r13d, 0xD1FFAB1E
-       mov      eax, r13d
-       mov      edi, r12d
-       add      rdi, rax
-       mov      esi, r14d
-       cmp      rdi, rsi
-       ja       G_M26249_IG37
-       add      r15, rax
-       mov      r14d, r12d
-						;; size=38 bbWeight=0.50 PerfScore 2.00
+       lea      r15, bword ptr [rdx+0x10]
+       mov      r14d, dword ptr [rdx+0x08]
+       mov      dword ptr [rbp-0x54], ecx
+						;; size=11 bbWeight=0.50 PerfScore 1.75
 G_M26249_IG30:
+       mov      ecx, dword ptr [rbp-0x54]
+       and      ecx, 0xD1FFAB1E
+       mov      edi, ecx
+       mov      eax, dword ptr [rbp-0x58]
+       mov      ecx, eax
+       add      rcx, rdi
+       mov      edx, r14d
+       cmp      rcx, rdx
+       ja       SHORT G_M26249_IG38
+       add      r15, rdi
+       mov      r14d, eax
+						;; size=33 bbWeight=0.50 PerfScore 2.50
+G_M26249_IG31:
        mov      rax, r15
        mov      bword ptr [rbx+0x30], rax
        mov      dword ptr [rbx+0x38], r14d
        movsxd   rax, dword ptr [rbx+0x20]
        add      qword ptr [rbx+0x10], rax
        xor      eax, eax
        mov      dword ptr [rbx+0x20], eax
        mov      eax, 1
 						;; size=29 bbWeight=0.50 PerfScore 5.38
-G_M26249_IG31:
-       add      rsp, 88
+G_M26249_IG32:
+       add      rsp, 72
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M26249_IG32:
-       lea      rdi, bword ptr [rbx+0x70]
-       mov      rsi, r15
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+G_M26249_IG33:
+       mov      gword ptr [rbx+0x70], r15
        mov      dword ptr [rbx+0x78], r14d
        jmp      G_M26249_IG02
-						;; size=21 bbWeight=4 PerfScore 19.00
-G_M26249_IG33:
-       lea      rdi, bword ptr [rbx+0x70]
-       mov      rsi, r15
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+						;; size=13 bbWeight=4 PerfScore 16.00
+G_M26249_IG34:
+       mov      gword ptr [rbx+0x70], r15
        mov      dword ptr [rbx+0x78], r14d
        mov      byte  ptr [rbx+0x2A], 1
        xor      eax, eax
-						;; size=22 bbWeight=0.50 PerfScore 2.00
-G_M26249_IG34:
-       add      rsp, 88
+						;; size=14 bbWeight=0.50 PerfScore 1.62
+G_M26249_IG35:
+       add      rsp, 72
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M26249_IG35:
+G_M26249_IG36:
        mov      edi, 33
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
-G_M26249_IG36:
+G_M26249_IG37:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowInvalidOperationException_EndPositionNotReached()
        call     [rax]System.ThrowHelper:ThrowInvalidOperationException_EndPositionNotReached()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M26249_IG37:
+G_M26249_IG38:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1187, prolog size 45, PerfScore 552.54, instruction count 330, allocated bytes for code 1187 (MethodHash=b36f9976) for method System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts)
+; Total bytes of code 1204, prolog size 32, PerfScore 511.20, instruction count 339, allocated bytes for code 1204 (MethodHash=b36f9976) for method System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts)

Note: some changes were skipped as they were likely noise.

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jun 17, 2024

Top method improvements

-216 (-4.16 % of base) - System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this
 ; Assembly listing for method System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts)
 ; Emitting BLENDED_CODE for X86 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 47 single block inlinees; 9 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (126,529   )   byref  ->  rbx         this single-def
 ;  V01 loc0         [V01,T01] ( 28,204   )  ushort  ->  [rbp-0x2C] 
 ;  V02 loc1         [V02,T42] (  8, 19   )   ubyte  ->  registers  
 ;  V03 loc2         [V03,T77] (  3,  6   )   ubyte  ->  r15        
 ;  V04 loc3         [V04,T27] (  8, 38   )     int  ->  r13        
 ;  V05 loc4         [V05,T49] (  5, 14   )     int  ->  r12        
 ;  V06 loc5         [V06,T78] (  3,  6   )     int  ->  rdx        
 ;  V07 loc6         [V07,T75] (  3,  6   )     ref  ->  r15         class-hnd exact <System.Text.RegularExpressions.RegexNode>
 ;  V08 loc7         [V08,T83] (  2,  4   )     ref  ->  r15         class-hnd exact <System.String>
 ;  V09 loc8         [V09,T24] (  8, 40   )     int  ->  registers  
 ;  V10 loc9         [V10,T07] (  6, 72   )     int  ->  r15        
 ;  V11 loc10        [V11,T06] (  7, 80   )     int  ->  registers  
 ;  V12 loc11        [V12,T26] (  3, 40   )   ubyte  ->  rsi        
 ;# V13 OutArgs      [V13    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V14 tmp1         [V14,T61] (  5, 10   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V15 tmp2         [V15,T65] (  2,  8   )     int  ->  rsi         "dup spill"
 ;  V16 tmp3         [V16,T91] (  3,  0   )     ref  ->  r15         class-hnd exact "Single-def Box Helper" <System.Char>
 ;  V17 tmp4         [V17,T94] (  2,  0   )     ref  ->  rdi         class-hnd exact "impImportAndPushBox" <System.String>
 ;  V18 tmp5         [V18,T92] (  3,  0   )     ref  ->  rax        
 ;  V19 tmp6         [V19,T93] (  3,  0   )     ref  ->  r15         class-hnd exact "Single-def Box Helper" <System.Char>
 ;  V20 tmp7         [V20,T95] (  2,  0   )     ref  ->  rdi         class-hnd exact "impImportAndPushBox" <System.String>
 ;* V21 tmp8         [V21    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V22 tmp9         [V22    ] (  0,  0   )   byref  ->  zero-ref   
 ;  V23 tmp10        [V23,T79] (  3,  6   )     int  ->  r12        
 ;  V24 tmp11        [V24,T43] (  4, 16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V25 tmp12        [V25,T66] (  2,  8   )     int  ->  r14         "dup spill"
 ;  V26 tmp13        [V26,T51] (  3, 12   )     ref  ->  rdi         class-hnd exact "impAppendStmt" <System.String>
 ;* V27 tmp14        [V27    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "non-inline candidate call" <System.Text.RegularExpressions.RegexNode>
 ;  V28 tmp15        [V28,T29] (  2, 32   )     int  ->  r15         "dup spill"
 ;  V29 tmp16        [V29,T13] (  3, 48   )     ref  ->  rsi         class-hnd exact "impAppendStmt" <System.String>
 ;  V30 tmp17        [V30,T36] (  3, 24   )     int  ->  rax        
 ;  V31 tmp18        [V31,T38] (  5, 20   )     ref  ->  r13         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;* V32 tmp19        [V32    ] (  0,  0   )   byref  ->  zero-ref   
-;  V33 tmp20        [V33,T39] (  5, 20   )     ref  ->  rsi         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+;  V33 tmp20        [V33,T39] (  5, 20   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;* V34 tmp21        [V34    ] (  0,  0   )   byref  ->  zero-ref   
-;  V35 tmp22        [V35,T76] (  3,  6   )     ref  ->  rsi        
-;  V36 tmp23        [V36,T40] (  5, 20   )     ref  ->  rsi         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+;  V35 tmp22        [V35,T76] (  3,  6   )     ref  ->  rax        
+;  V36 tmp23        [V36,T40] (  5, 20   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V37 tmp24        [V37,T52] (  3, 12   )   byref  ->  rdi         "dup spill"
 ;* V38 tmp25        [V38    ] (  0,  0   )   byref  ->  zero-ref   
 ;* V39 tmp26        [V39    ] (  0,  0   )   byref  ->  zero-ref   
 ;  V40 tmp27        [V40,T80] (  3,  6   )     int  ->  r15        
 ;  V41 tmp28        [V41,T44] (  4, 16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V42 tmp29        [V42,T10] (  2, 64   )     int  ->  r12         "dup spill"
 ;  V43 tmp30        [V43,T11] (  2, 64   )     int  ->  r12         "dup spill"
 ;  V44 tmp31        [V44,T85] (  2,  4   )     int  ->  rdi         "Inlining Arg"
 ;  V45 tmp32        [V45,T62] (  4,  8   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V46 tmp33        [V46,T63] (  4,  8   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V47 tmp34        [V47,T86] (  2,  4   )     int  ->  rdi         "Inlining Arg"
 ;  V48 tmp35        [V48,T87] (  2,  4   )     int  ->  rdi         "Inlining Arg"
 ;* V49 tmp36        [V49,T47] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V50 tmp37        [V50,T30] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V51 tmp38        [V51    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V52 tmp39        [V52    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V53 tmp40        [V53,T48] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V54 tmp41        [V54,T31] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V55 tmp42        [V55    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V56 tmp43        [V56    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V57 tmp44        [V57,T90] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V58 tmp45        [V58,T89] (  0,  0   )  ushort  ->  zero-ref    "Inlining Arg"
 ;* V59 tmp46        [V59    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V60 tmp47        [V60    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;  V61 tmp48        [V61,T81] (  3,  6   )   ubyte  ->  r14         "Inline return value spill temp"
 ;* V62 tmp49        [V62    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
 ;* V63 tmp50        [V63    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
 ;  V64 tmp51        [V64,T67] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;  V65 tmp52        [V65,T32] (  6, 24   )   byref  ->  rdi         "Inlining Arg"
 ;  V66 tmp53        [V66,T64] (  4,  8   )     int  ->  r15         "Inline stloc first use temp"
 ;* V67 tmp54        [V67    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline stloc first use temp" <System.Span`1[int]>
 ;  V68 tmp55        [V68,T56] (  3, 12   )     int  ->  rsi         "Inlining Arg"
 ;  V69 tmp56        [V69,T45] (  4, 16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V70 tmp57        [V70,T46] (  4, 16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V71 tmp58        [V71,T68] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;  V72 tmp59        [V72,T69] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;* V73 tmp60        [V73    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V74 tmp61        [V74,T41] (  5, 20   )   byref  ->  rdi         "Inlining Arg"
 ;  V75 tmp62        [V75,T57] (  3, 12   )     int  ->  rsi         "Span.get_Item index"
 ;  V76 tmp63        [V76,T53] (  3, 12   )   byref  ->  rdi         "Span.get_Item ptrToSpan"
 ;* V77 tmp64        [V77    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V78 tmp65        [V78,T70] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;* V79 tmp66        [V79    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V80 tmp67        [V80    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
-;  V81 tmp68        [V81,T71] (  2,  8   )     int  ->  rdi         "Inlining Arg"
+;  V81 tmp68        [V81,T71] (  2,  8   )     int  ->  rcx         "Inlining Arg"
 ;* V82 tmp69        [V82    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V83 tmp70        [V83,T72] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;  V84 tmp71        [V84,T73] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;* V85 tmp72        [V85    ] (  0,  0   )   byref  ->  zero-ref    "field V51._reference (fldOffset=0x0)" P-INDEP
 ;* V86 tmp73        [V86    ] (  0,  0   )     int  ->  zero-ref    "field V51._length (fldOffset=0x8)" P-INDEP
 ;* V87 tmp74        [V87    ] (  0,  0   )   byref  ->  zero-ref    "field V52._reference (fldOffset=0x0)" P-INDEP
 ;* V88 tmp75        [V88    ] (  0,  0   )     int  ->  zero-ref    "field V52._length (fldOffset=0x8)" P-INDEP
 ;* V89 tmp76        [V89    ] (  0,  0   )   byref  ->  zero-ref    "field V55._reference (fldOffset=0x0)" P-INDEP
 ;* V90 tmp77        [V90    ] (  0,  0   )     int  ->  zero-ref    "field V55._length (fldOffset=0x8)" P-INDEP
 ;* V91 tmp78        [V91    ] (  0,  0   )   byref  ->  zero-ref    "field V56._reference (fldOffset=0x0)" P-INDEP
 ;* V92 tmp79        [V92    ] (  0,  0   )     int  ->  zero-ref    "field V56._length (fldOffset=0x8)" P-INDEP
 ;* V93 tmp80        [V93    ] (  0,  0   )   byref  ->  zero-ref    "field V59._reference (fldOffset=0x0)" P-INDEP
 ;* V94 tmp81        [V94    ] (  0,  0   )     int  ->  zero-ref    "field V59._length (fldOffset=0x8)" P-INDEP
 ;* V95 tmp82        [V95    ] (  0,  0   )   byref  ->  zero-ref    "field V60._reference (fldOffset=0x0)" P-INDEP
 ;* V96 tmp83        [V96    ] (  0,  0   )     int  ->  zero-ref    "field V60._length (fldOffset=0x8)" P-INDEP
 ;* V97 tmp84        [V97    ] (  0,  0   )   byref  ->  zero-ref    "field V62._reference (fldOffset=0x0)" P-INDEP
 ;* V98 tmp85        [V98    ] (  0,  0   )     int  ->  zero-ref    "field V62._length (fldOffset=0x8)" P-INDEP
 ;* V99 tmp86        [V99    ] (  0,  0   )   byref  ->  zero-ref    "field V63._reference (fldOffset=0x0)" P-INDEP
 ;* V100 tmp87       [V100    ] (  0,  0   )     int  ->  zero-ref    "field V63._length (fldOffset=0x8)" P-INDEP
 ;  V101 tmp88       [V101,T84] (  2,  4   )   byref  ->  r13         "field V67._reference (fldOffset=0x0)" P-INDEP
 ;  V102 tmp89       [V102,T88] (  2,  4   )     int  ->  rax         "field V67._length (fldOffset=0x8)" P-INDEP
 ;  V103 tmp90       [V103,T02] (  3, 96   )     ref  ->  rax         "arr expr"
 ;  V104 tmp91       [V104,T04] (  3, 96   )     int  ->  rdi         "index expr"
 ;  V105 tmp92       [V105,T03] (  3, 96   )     ref  ->  rax         "arr expr"
 ;  V106 tmp93       [V106,T05] (  3, 96   )     int  ->  rdi         "index expr"
 ;  V107 tmp94       [V107,T54] (  3, 12   )     ref  ->  rsi         "arr expr"
 ;  V108 tmp95       [V108,T58] (  3, 12   )     int  ->  rdx         "index expr"
 ;  V109 tmp96       [V109,T55] (  3, 12   )     ref  ->  rdi         "arr expr"
 ;  V110 tmp97       [V110,T74] (  2,  8   )     int  ->  rdi         "argument with side effect"
 ;  V111 tmp98       [V111,T96] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V112 tmp99       [V112,T97] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V113 tmp100      [V113,T98] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V114 tmp101      [V114,T99] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V115 tmp102      [V115,T14] (  3, 48   )     ref  ->  rcx         "arr expr"
 ;  V116 tmp103      [V116,T19] (  3, 48   )     int  ->  rdx         "index expr"
 ;  V117 tmp104      [V117,T15] (  3, 48   )     ref  ->  rax         "arr expr"
 ;  V118 tmp105      [V118,T20] (  3, 48   )     int  ->  rdi         "index expr"
 ;  V119 tmp106      [V119,T16] (  3, 48   )     ref  ->  rdx         "arr expr"
 ;  V120 tmp107      [V120,T21] (  3, 48   )     int  ->  rcx         "index expr"
 ;  V121 tmp108      [V121,T08] (  2, 64   )     ref  ->  rsi         "argument with side effect"
 ;  V122 tmp109      [V122,T09] (  2, 64   )     ref  ->  [rbp-0x38]  spill-single-def "argument with side effect"
 ;  V123 tmp110      [V123,T100] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V124 tmp111      [V124,T101] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
 ;  V125 cse0        [V125,T82] (  3,  6   )     int  ->  rsi         "CSE #11: conservative"
 ;  V126 cse1        [V126,T25] (  5, 40   )     int  ->  rdi         "CSE #18: moderate"
 ;  V127 cse2        [V127,T28] (  4, 32   )     int  ->  rdi         "CSE #22: moderate"
 ;  V128 cse3        [V128,T17] (  3, 48   )     ref  ->  rax         "CSE #02: moderate"
 ;  V129 cse4        [V129,T22] (  3, 48   )     int  ->  rdi         "CSE #03: moderate"
 ;  V130 cse5        [V130,T18] (  3, 48   )     ref  ->  rax         "CSE #04: moderate"
 ;  V131 cse6        [V131,T23] (  3, 48   )     int  ->  rdi         "CSE #05: moderate"
 ;  V132 cse7        [V132,T12] (  4, 48   )     int  ->  rdi         "CSE #25: moderate"
 ;  V133 cse8        [V133,T33] (  3, 24   )     ref  ->  rcx         "CSE #19: moderate"
 ;  V134 cse9        [V134,T34] (  3, 24   )     ref  ->  rax         "CSE #20: moderate"
 ;  V135 cse10       [V135,T37] (  3, 24   )     int  ->  rdi         "CSE #21: moderate"
 ;  V136 cse11       [V136,T35] (  3, 24   )     ref  ->  rsi         "CSE #23: moderate"
 ;  V137 cse12       [V137,T50] (  4, 12   )     int  ->  rdi         "CSE #08: conservative"
 ;  V138 rat0        [V138,T60] (  3, 11.20)     int  ->  r13         "ReplaceWithLclVar is creating a new local variable"
 ;  V139 rat1        [V139,T59] (  3, 11.75)     int  ->  r12         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 24
 
 G_M39122_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x40]
        mov      rbx, rdi
 						;; size=22 bbWeight=1 PerfScore 7.00
 G_M39122_IG02:
        xor      r15d, r15d
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, dword ptr [rbx+0x70]
        and      edi, -2
        mov      byte  ptr [rax+0x2E], 28
        mov      dword ptr [rax+0x28], edi
        mov      rdi, 0xD1FFAB1E
        mov      qword ptr [rax+0x20], rdi
-       lea      rdi, bword ptr [rbx+0x08]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x08], rax
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, dword ptr [rbx+0x70]
        mov      byte  ptr [rax+0x2E], 24
        mov      dword ptr [rax+0x28], edi
-       lea      rdi, bword ptr [rbx+0x10]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x10], rax
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, dword ptr [rbx+0x70]
        mov      byte  ptr [rax+0x2E], 25
        mov      dword ptr [rax+0x28], edi
-       lea      rdi, bword ptr [rbx+0x18]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x18], rax
        mov      edi, dword ptr [rbx+0x58]
        mov      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        jge      G_M39122_IG58
-						;; size=147 bbWeight=1 PerfScore 30.75
+						;; size=123 bbWeight=1 PerfScore 28.50
 G_M39122_IG03:
        xor      edi, edi
        xor      r14d, r14d
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
        mov      r13d, dword ptr [rbx+0x58]
        test     byte  ptr [rbx+0x70], 32
        je       SHORT G_M39122_IG05
        jmp      SHORT G_M39122_IG07
 						;; size=32 bbWeight=4 PerfScore 48.00
 G_M39122_IG04:
        inc      dword ptr [rbx+0x58]
 						;; size=3 bbWeight=8 PerfScore 24.00
 G_M39122_IG05:
        mov      edi, dword ptr [rbx+0x58]
        mov      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        jge      G_M39122_IG08
        cmp      edi, dword ptr [rax+0x08]
        jae      G_M39122_IG67
        movzx    r12, word  ptr [rax+2*rdi+0x0C]
        cmp      r12d, 124
        jg       SHORT G_M39122_IG04
        mov      edi, r12d
        mov      rax, 0xD1FFAB1E      ; static handle
        cmp      byte  ptr [rdi+rax], 3
        jb       SHORT G_M39122_IG04
        cmp      r12d, 123
        jne      SHORT G_M39122_IG08
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
        call     [rax]System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
        test     eax, eax
        je       SHORT G_M39122_IG04
        jmp      SHORT G_M39122_IG08
 						;; size=83 bbWeight=16 PerfScore 444.00
 G_M39122_IG06:
        inc      dword ptr [rbx+0x58]
 						;; size=3 bbWeight=8 PerfScore 24.00
 G_M39122_IG07:
        mov      edi, dword ptr [rbx+0x58]
        mov      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        jge      SHORT G_M39122_IG08
        cmp      edi, dword ptr [rax+0x08]
        jae      G_M39122_IG67
        movzx    r12, word  ptr [rax+2*rdi+0x0C]
        cmp      r12d, 124
        jg       SHORT G_M39122_IG06
        mov      edi, r12d
        mov      rax, 0xD1FFAB1E      ; static handle
        cmp      byte  ptr [rdi+rax], 0
        jbe      SHORT G_M39122_IG06
        cmp      r12d, 123
        jne      SHORT G_M39122_IG08
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
        call     [rax]System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
        test     eax, eax
        je       SHORT G_M39122_IG06
 						;; size=77 bbWeight=16 PerfScore 412.00
 G_M39122_IG08:
        mov      r12d, dword ptr [rbx+0x58]
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
        mov      edi, dword ptr [rbx+0x58]
        mov      rsi, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rsi+0x08]
        je       SHORT G_M39122_IG14
 						;; size=31 bbWeight=4 PerfScore 54.00
 G_M39122_IG09:
        mov      rsi, gword ptr [rbx+0x28]
        mov      edx, edi
        cmp      edx, dword ptr [rsi+0x08]
        jae      G_M39122_IG67
        movzx    rsi, word  ptr [rsi+2*rdx+0x0C]
        mov      eax, esi
        cmp      eax, 124
        jg       SHORT G_M39122_IG10
        mov      esi, eax
        mov      rdx, 0xD1FFAB1E      ; static handle
        movzx    rsi, byte  ptr [rsi+rdx]
        cmp      esi, 3
        jge      SHORT G_M39122_IG11
 						;; size=49 bbWeight=2 PerfScore 27.00
 G_M39122_IG10:
        mov      eax, 32
        jmp      SHORT G_M39122_IG15
 						;; size=7 bbWeight=2 PerfScore 4.50
 G_M39122_IG11:
        cmp      eax, 123
        jle      SHORT G_M39122_IG12
        xor      r14d, r14d
        jmp      SHORT G_M39122_IG13
 						;; size=10 bbWeight=2 PerfScore 7.00
 G_M39122_IG12:
        cmp      esi, 4
        sete     r14b
        movzx    r14, r14b
 						;; size=11 bbWeight=2 PerfScore 3.00
 G_M39122_IG13:
        inc      edi
        mov      dword ptr [rbx+0x58], edi
        jmp      SHORT G_M39122_IG15
 						;; size=7 bbWeight=2 PerfScore 6.50
 G_M39122_IG14:
        mov      dword ptr [rbp-0x2C], 33
        mov      eax, dword ptr [rbp-0x2C]
 						;; size=10 bbWeight=2 PerfScore 4.00
 G_M39122_IG15:
        cmp      r13d, r12d
-       jge      G_M39122_IG18
-						;; size=9 bbWeight=4 PerfScore 5.00
+       jge      SHORT G_M39122_IG18
+						;; size=5 bbWeight=4 PerfScore 5.00
 G_M39122_IG16:
        mov      edx, r12d
        sub      edx, r13d
        test     r14d, r14d
        setne    dil
        movzx    rdi, dil
        sub      edx, edi
        xor      r15d, r15d
        test     edx, edx
        jle      SHORT G_M39122_IG17
        mov      dword ptr [rbp-0x2C], eax
        mov      rdi, rbx
        mov      esi, r13d
        xor      ecx, ecx
        mov      r8, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:AddToConcatenate(int,int,ubyte):this
        call     [r8]System.Text.RegularExpressions.RegexParser:AddToConcatenate(int,int,ubyte):this
        mov      eax, dword ptr [rbp-0x2C]
 						;; size=53 bbWeight=2 PerfScore 19.50
 G_M39122_IG17:
        test     r14d, r14d
        je       SHORT G_M39122_IG18
        mov      dword ptr [rbp-0x2C], eax
        mov      rdi, gword ptr [rbx+0x28]
        lea      esi, [r12-0x01]
        cmp      esi, dword ptr [rdi+0x08]
        jae      G_M39122_IG67
        dec      r12d
        mov      esi, r12d
        movzx    rdi, word  ptr [rdi+2*rsi+0x0C]
        mov      esi, dword ptr [rbx+0x70]
        mov      rdx, gword ptr [rbx+0x30]
        lea      rcx, bword ptr [rbx+0x5C]
        mov      r8, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexNode:CreateOneWithCaseConversion(ushort,int,System.Globalization.CultureInfo,byref):System.Text.RegularExpressions.RegexNode
        call     [r8]System.Text.RegularExpressions.RegexNode:CreateOneWithCaseConversion(ushort,int,System.Globalization.CultureInfo,byref):System.Text.RegularExpressions.RegexNode
-       lea      rdi, bword ptr [rbx+0x20]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x20], rax
        mov      eax, dword ptr [rbp-0x2C]
-						;; size=76 bbWeight=2 PerfScore 43.50
+						;; size=68 bbWeight=2 PerfScore 42.00
 G_M39122_IG18:
        cmp      eax, 63
        jbe      G_M39122_IG27
 						;; size=9 bbWeight=4 PerfScore 5.00
 G_M39122_IG19:
        lea      r13d, [rax-0x5B]
        cmp      r13d, 3
        ja       SHORT G_M39122_IG21
 						;; size=10 bbWeight=2 PerfScore 3.50
 G_M39122_IG20:
        mov      edi, r13d
        lea      rax, [reloc @RWD00]
        mov      eax, dword ptr [rax+4*rdi]
        lea      rcx, G_M39122_IG02
        add      rax, rcx
        jmp      rax
 						;; size=25 bbWeight=1.60 PerfScore 9.60
 G_M39122_IG21:
        cmp      eax, 123
        je       G_M39122_IG33
        cmp      eax, 124
        jne      G_M39122_IG42
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:AddAlternate():this
        call     [rax]System.Text.RegularExpressions.RegexParser:AddAlternate():this
        jmp      G_M39122_IG57
 						;; size=38 bbWeight=2 PerfScore 16.00
 G_M39122_IG22:
        test     byte  ptr [rbx+0x70], 2
        je       SHORT G_M39122_IG23
        mov      r12d, 14
        jmp      SHORT G_M39122_IG24
 						;; size=14 bbWeight=2 PerfScore 12.50
 G_M39122_IG23:
        mov      r12d, 18
 						;; size=6 bbWeight=2 PerfScore 0.50
 G_M39122_IG24:
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, dword ptr [rbx+0x70]
        mov      byte  ptr [rax+0x2E], r12b
        mov      dword ptr [rax+0x28], edi
-       lea      rdi, bword ptr [rbx+0x20]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x20], rax
        jmp      G_M39122_IG42
-						;; size=42 bbWeight=2 PerfScore 18.00
+						;; size=34 bbWeight=2 PerfScore 16.50
 G_M39122_IG25:
        mov      edi, dword ptr [rbx+0x58]
        mov      rsi, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rsi+0x08]
        je       G_M39122_IG60
        mov      rdi, rbx
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanBackslash(ubyte):System.Text.RegularExpressions.RegexNode:this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanBackslash(ubyte):System.Text.RegularExpressions.RegexNode:this
-       lea      rdi, bword ptr [rbx+0x20]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x20], rax
        jmp      G_M39122_IG42
-						;; size=50 bbWeight=2 PerfScore 31.00
+						;; size=42 bbWeight=2 PerfScore 29.50
 G_M39122_IG26:
        mov      esi, dword ptr [rbx+0x70]
        and      esi, 1
        mov      rdi, rbx
        xor      edx, edx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanCharClass(ubyte,ubyte):System.Text.RegularExpressions.RegexCharClass:this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanCharClass(ubyte,ubyte):System.Text.RegularExpressions.RegexCharClass:this
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexCharClass:ToStringClass():System.String:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.RegularExpressions.RegexCharClass:ToStringClass():System.String:this
        mov      r15, rax
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      edi, dword ptr [rbx+0x70]
        and      edi, -2
        mov      byte  ptr [r13+0x2E], 11
        mov      dword ptr [r13+0x28], edi
        lea      rdi, bword ptr [r13+0x10]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
-       lea      rdi, bword ptr [rbx+0x20]
-       mov      rsi, r13
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x20], r13
        jmp      G_M39122_IG42
-						;; size=105 bbWeight=2 PerfScore 48.00
+						;; size=97 bbWeight=2 PerfScore 46.50
 G_M39122_IG27:
        lea      r12d, [rax-0x20]
        cmp      r12d, 14
        ja       SHORT G_M39122_IG29
 						;; size=10 bbWeight=2 PerfScore 3.50
 G_M39122_IG28:
        mov      edi, r12d
        lea      rcx, [reloc @RWD16]
        mov      ecx, dword ptr [rcx+4*rdi]
        lea      rdx, G_M39122_IG02
        add      rcx, rdx
        jmp      rcx
 						;; size=25 bbWeight=1.88 PerfScore 11.25
 G_M39122_IG29:
        cmp      eax, 63
        je       SHORT G_M39122_IG33
        jmp      G_M39122_IG42
 						;; size=10 bbWeight=2 PerfScore 6.50
 G_M39122_IG30:
        test     byte  ptr [rbx+0x70], 16
        je       SHORT G_M39122_IG31
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
-       mov      rsi, rax
        mov      edi, dword ptr [rbx+0x70]
        and      edi, -2
-       mov      byte  ptr [rsi+0x2E], 11
-       mov      dword ptr [rsi+0x28], edi
+       mov      byte  ptr [rax+0x2E], 11
+       mov      dword ptr [rax+0x28], edi
        mov      rdi, 0xD1FFAB1E      ; ''
-       mov      gword ptr [rsi+0x10], rdi
+       mov      gword ptr [rax+0x10], rdi
        jmp      SHORT G_M39122_IG32
-						;; size=53 bbWeight=2 PerfScore 26.00
+						;; size=50 bbWeight=2 PerfScore 25.50
 G_M39122_IG31:
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
-       mov      rsi, rax
        mov      edi, dword ptr [rbx+0x70]
        and      edi, -2
-       mov      byte  ptr [rsi+0x2E], 10
-       mov      dword ptr [rsi+0x28], edi
-       mov      word  ptr [rsi+0x2C], 10
-						;; size=37 bbWeight=2 PerfScore 13.50
+       mov      byte  ptr [rax+0x2E], 10
+       mov      dword ptr [rax+0x28], edi
+       mov      word  ptr [rax+0x2C], 10
+						;; size=34 bbWeight=2 PerfScore 13.00
 G_M39122_IG32:
-       lea      rdi, bword ptr [rbx+0x20]
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x20], rax
        jmp      G_M39122_IG42
-						;; size=14 bbWeight=2 PerfScore 7.00
+						;; size=9 bbWeight=2 PerfScore 6.00
 G_M39122_IG33:
        cmp      gword ptr [rbx+0x20], 0
        je       G_M39122_IG61
        dec      dword ptr [rbx+0x58]
        jmp      G_M39122_IG42
 						;; size=19 bbWeight=2 PerfScore 18.00
 G_M39122_IG34:
        cmp      gword ptr [rbx], 0
        je       G_M39122_IG64
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:AddGroup():this
        call     [rax]System.Text.RegularExpressions.RegexParser:AddGroup():this
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:PopGroup():this
        call     [rax]System.Text.RegularExpressions.RegexParser:PopGroup():this
        lea      rdi, bword ptr [rbx+0x78]
        dec      dword ptr [rdi+0x08]
        mov      esi, dword ptr [rdi+0x08]
        add      rdi, 16
        cmp      esi, dword ptr [rdi+0x08]
        jae      G_M39122_IG67
        mov      rdi, bword ptr [rdi]
        mov      edi, dword ptr [rdi+4*rsi]
        mov      dword ptr [rbx+0x70], edi
        cmp      gword ptr [rbx+0x20], 0
        jne      G_M39122_IG42
        jmp      G_M39122_IG57
 						;; size=88 bbWeight=2 PerfScore 63.50
 G_M39122_IG35:
        lea      rdi, bword ptr [rbx+0x78]
        mov      esi, dword ptr [rbx+0x70]
        mov      r15d, dword ptr [rdi+0x08]
        mov      r13, bword ptr [rdi+0x10]
        mov      eax, dword ptr [rdi+0x18]
        cmp      r15d, eax
        jb       SHORT G_M39122_IG36
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.ValueListBuilder`1[int]:AddWithResize(int):this
        call     [rax]System.Collections.Generic.ValueListBuilder`1[int]:AddWithResize(int):this
        jmp      SHORT G_M39122_IG37
 						;; size=37 bbWeight=2 PerfScore 30.00
 G_M39122_IG36:
        mov      eax, r15d
        mov      dword ptr [r13+4*rax], esi
        inc      r15d
        mov      dword ptr [rdi+0x08], r15d
 						;; size=15 bbWeight=2 PerfScore 5.00
 G_M39122_IG37:
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanGroupOpen():System.Text.RegularExpressions.RegexNode:this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanGroupOpen():System.Text.RegularExpressions.RegexNode:this
        mov      r15, rax
        test     r15, r15
        jne      SHORT G_M39122_IG38
        lea      rdi, bword ptr [rbx+0x78]
        dec      dword ptr [rdi+0x08]
        jmp      G_M39122_IG57
 						;; size=35 bbWeight=2 PerfScore 21.00
 G_M39122_IG38:
        mov      rdi, gword ptr [rbx+0x08]
        lea      rdi, bword ptr [rdi+0x18]
        mov      rsi, gword ptr [rbx]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, gword ptr [rbx+0x10]
        lea      rdi, bword ptr [rdi+0x18]
        mov      rsi, gword ptr [rbx+0x08]
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, gword ptr [rbx+0x18]
        lea      rdi, bword ptr [rdi+0x18]
        mov      rsi, gword ptr [rbx+0x10]
        call     CORINFO_HELP_ASSIGN_REF
-       mov      rsi, gword ptr [rbx+0x18]
-       mov      rdi, rbx
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       lea      rdi, bword ptr [rbx+0x08]
-       mov      rsi, r15
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      rdi, gword ptr [rbx+0x18]
+       mov      gword ptr [rbx], rdi
+       mov      gword ptr [rbx+0x08], r15
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, dword ptr [rbx+0x70]
        mov      byte  ptr [rax+0x2E], 24
        mov      dword ptr [rax+0x28], edi
-       lea      rdi, bword ptr [rbx+0x10]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x10], rax
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, dword ptr [rbx+0x70]
        mov      byte  ptr [rax+0x2E], 25
        mov      dword ptr [rax+0x28], edi
-       lea      rdi, bword ptr [rbx+0x18]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x18], rax
        jmp      G_M39122_IG57
-						;; size=153 bbWeight=2 PerfScore 75.00
+						;; size=124 bbWeight=2 PerfScore 70.00
 G_M39122_IG39:
        test     byte  ptr [rbx+0x70], 2
        je       SHORT G_M39122_IG40
        mov      r15d, 15
        jmp      SHORT G_M39122_IG41
 						;; size=14 bbWeight=2 PerfScore 12.50
 G_M39122_IG40:
        mov      r15d, 20
 						;; size=6 bbWeight=2 PerfScore 0.50
 G_M39122_IG41:
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
-       mov      edi, dword ptr [rbx+0x70]
+       mov      ecx, dword ptr [rbx+0x70]
        mov      byte  ptr [rax+0x2E], r15b
-       mov      dword ptr [rax+0x28], edi
-       lea      rdi, bword ptr [rbx+0x20]
-       mov      rsi, rax
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-						;; size=37 bbWeight=2 PerfScore 14.00
+       mov      dword ptr [rax+0x28], ecx
+       mov      gword ptr [rbx+0x20], rax
+						;; size=29 bbWeight=2 PerfScore 12.50
 G_M39122_IG42:
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
        mov      edi, dword ptr [rbx+0x58]
        mov      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        je       G_M39122_IG56
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
        call     [rax]System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
        mov      r14d, eax
        test     r14d, r14d
        je       G_M39122_IG56
        mov      rdi, gword ptr [rbx+0x28]
        mov      r13d, dword ptr [rbx+0x58]
        lea      eax, [r13+0x01]
        mov      dword ptr [rbx+0x58], eax
        cmp      r13d, dword ptr [rdi+0x08]
        jae      G_M39122_IG67
        mov      eax, r13d
        movzx    rax, word  ptr [rdi+2*rax+0x0C]
        mov      r12d, eax
        cmp      gword ptr [rbx+0x20], 0
        je       G_M39122_IG57
 						;; size=105 bbWeight=2 PerfScore 65.00
 G_M39122_IG43:
        xor      r15d, r15d
        xor      r13d, r13d
        cmp      r12d, 43
        jbe      G_M39122_IG51
 						;; size=16 bbWeight=16 PerfScore 28.00
 G_M39122_IG44:
        cmp      r12d, 63
        jne      SHORT G_M39122_IG45
        mov      r13d, 1
        jmp      G_M39122_IG53
 						;; size=17 bbWeight=8 PerfScore 28.00
 G_M39122_IG45:
        cmp      r12d, 123
        jne      G_M39122_IG53
        mov      r13d, dword ptr [rbx+0x58]
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
        mov      r15d, eax
        mov      eax, r15d
        mov      edi, dword ptr [rbx+0x58]
        cmp      r13d, edi
        jge      SHORT G_M39122_IG48
        mov      rcx, gword ptr [rbx+0x28]
        cmp      dword ptr [rcx+0x08], edi
        jle      SHORT G_M39122_IG48
        mov      edx, edi
        cmp      edx, dword ptr [rcx+0x08]
        jae      G_M39122_IG67
        cmp      word  ptr [rcx+2*rdx+0x0C], 44
        jne      SHORT G_M39122_IG48
        inc      edi
        mov      dword ptr [rbx+0x58], edi
        mov      edi, dword ptr [rbx+0x58]
        mov      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        je       SHORT G_M39122_IG46
        cmp      edi, dword ptr [rax+0x08]
        jae      G_M39122_IG67
        cmp      word  ptr [rax+2*rdi+0x0C], 125
        jne      SHORT G_M39122_IG47
 						;; size=105 bbWeight=8 PerfScore 336.00
 G_M39122_IG46:
        mov      eax, 0xD1FFAB1E
        jmp      SHORT G_M39122_IG48
 						;; size=7 bbWeight=8 PerfScore 18.00
 G_M39122_IG47:
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
 						;; size=15 bbWeight=8 PerfScore 28.00
 G_M39122_IG48:
        mov      edi, dword ptr [rbx+0x58]
        cmp      r13d, edi
        je       SHORT G_M39122_IG49
        mov      rsi, gword ptr [rbx+0x28]
        cmp      dword ptr [rsi+0x08], edi
        je       SHORT G_M39122_IG49
        lea      ecx, [rdi+0x01]
        mov      dword ptr [rbx+0x58], ecx
        cmp      edi, dword ptr [rsi+0x08]
        jae      G_M39122_IG67
        cmp      word  ptr [rsi+2*rdi+0x0C], 125
        je       SHORT G_M39122_IG50
 						;; size=40 bbWeight=8 PerfScore 150.00
 G_M39122_IG49:
        mov      rdi, gword ptr [rbx+0x18]
        mov      rsi, gword ptr [rbx+0x20]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
        xor      rdi, rdi
        mov      gword ptr [rbx+0x20], rdi
        dec      r13d
        mov      dword ptr [rbx+0x58], r13d
        jmp      G_M39122_IG57
 						;; size=40 bbWeight=2 PerfScore 29.50
 G_M39122_IG50:
        mov      r13d, eax
        jmp      SHORT G_M39122_IG53
 						;; size=5 bbWeight=4 PerfScore 9.00
 G_M39122_IG51:
        cmp      r12d, 42
        je       SHORT G_M39122_IG52
        cmp      r12d, 43
        jne      SHORT G_M39122_IG53
        mov      r15d, 1
 						;; size=18 bbWeight=8 PerfScore 22.00
 G_M39122_IG52:
        mov      r13d, 0xD1FFAB1E
 						;; size=6 bbWeight=8 PerfScore 2.00
 G_M39122_IG53:
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
        xor      esi, esi
        mov      edi, dword ptr [rbx+0x58]
        mov      rdx, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rdx+0x08]
        jge      SHORT G_M39122_IG55
 						;; size=29 bbWeight=16 PerfScore 188.00
 G_M39122_IG54:
        mov      rdx, gword ptr [rbx+0x28]
        mov      ecx, edi
        cmp      ecx, dword ptr [rdx+0x08]
        jae      G_M39122_IG67
        cmp      word  ptr [rdx+2*rcx+0x0C], 63
        jne      SHORT G_M39122_IG55
        inc      edi
        mov      dword ptr [rbx+0x58], edi
        mov      esi, 1
 						;; size=33 bbWeight=8 PerfScore 94.00
 G_M39122_IG55:
        cmp      r15d, r13d
        jg       G_M39122_IG65
        mov      rax, gword ptr [rbx+0x18]
        mov      gword ptr [rbp-0x38], rax
        mov      rdi, gword ptr [rbx+0x20]
        mov      edx, r15d
        mov      ecx, r13d
        mov      r8, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexNode:MakeQuantifier(ubyte,int,int):System.Text.RegularExpressions.RegexNode:this
        cmp      dword ptr [rdi], edi
        call     [r8]System.Text.RegularExpressions.RegexNode:MakeQuantifier(ubyte,int,int):System.Text.RegularExpressions.RegexNode:this
        mov      rsi, rax
        mov      rdi, gword ptr [rbp-0x38]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
        xor      rdi, rdi
        mov      gword ptr [rbx+0x20], rdi
        cmp      gword ptr [rbx+0x20], 0
        jne      G_M39122_IG43
        jmp      SHORT G_M39122_IG57
 						;; size=82 bbWeight=16 PerfScore 444.00
 G_M39122_IG56:
        mov      rdi, gword ptr [rbx+0x18]
        mov      rsi, gword ptr [rbx+0x20]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
        xor      rdi, rdi
        mov      gword ptr [rbx+0x20], rdi
 						;; size=28 bbWeight=2 PerfScore 23.00
 G_M39122_IG57:
        mov      edi, dword ptr [rbx+0x58]
        mov      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        mov      r15d, r14d
        jl       G_M39122_IG03
 						;; size=19 bbWeight=4 PerfScore 33.00
 G_M39122_IG58:
        cmp      gword ptr [rbx], 0
        jne      G_M39122_IG66
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:AddGroup():this
        call     [rax]System.Text.RegularExpressions.RegexParser:AddGroup():this
        mov      rdi, gword ptr [rbx+0x20]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexNode:FinalOptimize():System.Text.RegularExpressions.RegexNode:this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.RegularExpressions.RegexNode:FinalOptimize():System.Text.RegularExpressions.RegexNode:this
        nop      
 						;; size=44 bbWeight=1 PerfScore 16.00
 G_M39122_IG59:
        ad