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 #469

Open
MihuBot opened this issue Jun 26, 2024 · 2 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jun 26, 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: 41571980
Total bytes of diff: 41569410
Total bytes of delta: -2570 (-0.01 % of base)
Total relative delta: -16.75
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
       -1155 : System.Private.CoreLib.dasm (-0.02 % of base)
        -817 : System.Text.RegularExpressions.dasm (-0.11 % of base)
        -200 : System.Runtime.Numerics.dasm (-0.17 % of base)
         -70 : System.Text.Json.dasm (-0.01 % of base)
         -34 : System.Reflection.Metadata.dasm (-0.01 % of base)
         -31 : System.Security.Cryptography.dasm (-0.00 % of base)
         -28 : System.Private.Uri.dasm (-0.03 % of base)
         -28 : System.Diagnostics.Process.dasm (-0.03 % of base)
         -28 : System.Net.Http.dasm (-0.00 % 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.Net.Mail.dasm (-0.01 % of base)
         -20 : System.Console.dasm (-0.02 % of base)
         -20 : System.Text.Encodings.Web.dasm (-0.08 % of base)
         -20 : System.Private.Xml.dasm (-0.00 % of base)
         -20 : System.Diagnostics.DiagnosticSource.dasm (-0.01 % of base)

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

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)
         -64 (-2.00 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:AssignNameSlots():this (FullOpts) (2 methods)
         -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)
         -35 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(double[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(int[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(long[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(short[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % 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 (-18.75 % 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)
         -33 (-18.75 % 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)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ubyte[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % 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)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ulong[],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)
         -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)
         -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[double]: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[long]: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.84 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[short]: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.Nullable`1[int]]: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.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]: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.92 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]:Grow(int):this (FullOpts)
         -24 (-16.22 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ushort],System.IFormatProvider,byref):this (FullOpts)
         -24 (-18.46 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider,System.Span`1[ushort]):this (FullOpts)
         -24 (-16.22 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ubyte],System.IFormatProvider,byref):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)
         -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.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.Runtime.Numerics.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.37 % 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.Reflection.Metadata.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.Diagnostics.Process.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.16 % of base) : System.Security.Cryptography.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.Console.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.Text.Encodings.Web.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.Net.Http.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.Private.CoreLib.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) : Microsoft.Extensions.Logging.Abstractions.dasm - System.Text.ValueStringBuilder:Grow(int):this (FullOpts)
         -20 (-8.16 % of base) : System.Text.Json.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)
         -16 (-16.67 % of base) : System.Private.CoreLib.dasm - System.Globalization.TimeSpanParse+TimeSpanRawInfo:Init(System.Globalization.DateTimeFormatInfo):this (FullOpts)
         -16 (-2.69 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:ScanReplacement():System.Text.RegularExpressions.RegexNode:this (FullOpts) (2 methods)
         -15 (-0.48 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:Lex(int,byref,byref,byref,byref,byref,int):ubyte (FullOpts)
         -14 (-10.94 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH:RhThrowEx(System.Object,byref) (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)
         -12 (-13.48 % of base) : System.Private.CoreLib.dasm - System.Reflection.MethodBase+StackAllocatedArguments:.ctor(System.Object,System.Object,System.Object,System.Object):this (FullOpts)
         -12 (-2.44 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:AddGroup():this (FullOpts) (2 methods)
         -11 (-9.48 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this (FullOpts)
         -11 (-3.93 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.Utf8DataEncoding:.ctor(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]):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)
          -9 (-5.70 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:AddAlternate():this (FullOpts)
          -8 (-6.45 % of base) : System.Private.CoreLib.dasm - System.__DTString:.ctor(System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo,ubyte):this (FullOpts)
          -8 (-6.78 % of base) : System.Private.CoreLib.dasm - System.__DTString:.ctor(System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo):this (FullOpts)
          -8 (-1.64 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[System.__Canon]:Grow(int):this (FullOpts)
          -8 (-1.64 % of base) : System.Private.CoreLib.dasm - System.Collections.Generic.ValueListBuilder`1[System.__Canon]:Grow(int):this (FullOpts)
          -8 (-1.64 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[System.__Canon]:Grow(int):this (FullOpts)
          -8 (-3.24 % of base) : System.Private.CoreLib.dasm - System.Runtime.EH:RhThrowHwEx(uint,byref) (FullOpts)
          -8 (-9.20 % of base) : System.Reflection.Metadata.dasm - System.Text.ValueStringBuilder:.ctor(int):this (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)
         -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)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(double[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(int[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(long[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(short[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % 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 (-18.75 % 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)
         -33 (-18.75 % 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)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ubyte[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[double,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[int,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[long,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[short,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -33 (-18.75 % 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)
         -33 (-18.75 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2+ManagedToUnmanagedIn[ubyte,long]:FromManaged(ulong[],System.Span`1[long]):this (FullOpts)
         -24 (-18.46 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider,System.Span`1[ushort]):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)
         -35 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int,System.IFormatProvider):this (FullOpts)
         -16 (-16.67 % of base) : System.Private.CoreLib.dasm - System.Globalization.TimeSpanParse+TimeSpanRawInfo:Init(System.Globalization.DateTimeFormatInfo):this (FullOpts)
         -24 (-16.22 % of base) : System.Private.CoreLib.dasm - System.MemoryExtensions+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ushort],System.IFormatProvider,byref):this (FullOpts)
         -24 (-16.22 % of base) : System.Private.CoreLib.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:.ctor(int,int,System.Span`1[ubyte],System.IFormatProvider,byref):this (FullOpts)
         -12 (-13.48 % of base) : System.Private.CoreLib.dasm - System.Reflection.MethodBase+StackAllocatedArguments:.ctor(System.Object,System.Object,System.Object,System.Object):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)
         -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)
         -11 (-9.48 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:.ctor(int,int):this (FullOpts)
          -8 (-9.20 % of base) : System.Reflection.Metadata.dasm - System.Text.ValueStringBuilder:.ctor(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.Text.RegularExpressions.dasm - System.Text.ValueStringBuilder:.ctor(int):this (FullOpts)
          -8 (-9.20 % of base) : System.Net.Http.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) : System.Runtime.Numerics.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.Text.Json.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.Reflection.Metadata.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.Diagnostics.Process.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.16 % of base) : System.Security.Cryptography.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.Console.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.Text.Encodings.Web.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.Net.Http.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.Private.CoreLib.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) : Microsoft.Extensions.Logging.Abstractions.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.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.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.Runtime.Numerics.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.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[ubyte]: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.84 % of base) : System.Text.RegularExpressions.dasm - System.Collections.Generic.ValueListBuilder`1[short]: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.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[double]: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[long]: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.Nullable`1[int]]: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.82 % of base) : System.Runtime.Numerics.dasm - System.Collections.Generic.ValueListBuilder`1[System.Numerics.Vector`1[float]]:Grow(int):this (FullOpts)
         -20 (-7.43 % of base) : System.Private.CoreLib.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:GrowCore(uint):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)
          -8 (-6.78 % of base) : System.Private.CoreLib.dasm - System.__DTString:.ctor(System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo):this (FullOpts)
          -8 (-6.45 % of base) : System.Private.CoreLib.dasm - System.__DTString:.ctor(System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo,ubyte):this (FullOpts)
         -20 (-6.37 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:NoteCaptureName(System.String,int):this (FullOpts)
          -9 (-5.70 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:AddAlternate():this (FullOpts)

114 total methods with Code Size differences (114 improved, 0 regressed), 252098 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jun 26, 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 X64 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] (128,1077   )   byref  ->  rbx         this single-def
 ;  V01 loc0         [V01,T03] ( 28, 588   )  ushort  ->  [rbp-0x2C] 
 ;  V02 loc1         [V02,T44] (  8,  19   )   ubyte  ->  registers  
 ;  V03 loc2         [V03,T76] (  3,   6   )   ubyte  ->  r15        
 ;  V04 loc3         [V04,T29] (  8,  38   )     int  ->  r13        
 ;  V05 loc4         [V05,T33] (  5,  26   )     int  ->  r12        
 ;  V06 loc5         [V06,T77] (  3,   6   )     int  ->  rdx        
 ;  V07 loc6         [V07,T74] (  3,   6   )     ref  ->  r15         class-hnd exact <System.Text.RegularExpressions.RegexNode>
 ;  V08 loc7         [V08,T82] (  2,   4   )     ref  ->  r15         class-hnd exact <System.String>
 ;  V09 loc8         [V09,T26] (  8,  40   )     int  ->  registers  
 ;  V10 loc9         [V10,T11] (  6,  72   )     int  ->  r15        
 ;  V11 loc10        [V11,T10] (  7,  80   )     int  ->  registers  
 ;  V12 loc11        [V12,T28] (  3,  40   )   ubyte  ->  rsi        
 ;# V13 OutArgs      [V13    ] (  1,   1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V14 tmp1         [V14,T60] (  5,  10   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V15 tmp2         [V15,T64] (  2,   8   )     int  ->  rdi         "dup spill"
 ;  V16 tmp3         [V16,T90] (  3,   0   )     ref  ->  r15         class-hnd exact "Single-def Box Helper" <System.Char>
 ;  V17 tmp4         [V17,T93] (  2,   0   )     ref  ->  rdi         class-hnd exact "impImportAndPushBox" <System.String>
 ;  V18 tmp5         [V18,T91] (  3,   0   )     ref  ->  rax        
 ;  V19 tmp6         [V19,T92] (  3,   0   )     ref  ->  r15         class-hnd exact "Single-def Box Helper" <System.Char>
 ;  V20 tmp7         [V20,T94] (  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,T78] (  3,   6   )     int  ->  r15        
 ;  V24 tmp11        [V24,T45] (  4,  16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V25 tmp12        [V25,T65] (  2,   8   )     int  ->  r14         "dup spill"
 ;  V26 tmp13        [V26,T50] (  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,T31] (  2,  32   )     int  ->  r15         "dup spill"
 ;  V29 tmp16        [V29,T17] (  3,  48   )     ref  ->  rsi         class-hnd exact "impAppendStmt" <System.String>
 ;  V30 tmp17        [V30,T38] (  3,  24   )     int  ->  rax        
 ;  V31 tmp18        [V31,T40] (  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,T41] (  5,  20   )     ref  ->  rsi         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+;  V33 tmp20        [V33,T41] (  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,T75] (  3,   6   )     ref  ->  rsi        
-;  V36 tmp23        [V36,T42] (  5,  20   )     ref  ->  rsi         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+;  V35 tmp22        [V35,T75] (  3,   6   )     ref  ->  rax        
+;  V36 tmp23        [V36,T42] (  5,  20   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V37 tmp24        [V37,T51] (  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,T79] (  3,   6   )     int  ->  r15        
 ;  V41 tmp28        [V41,T46] (  4,  16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V42 tmp29        [V42,T04] (  2, 512   )     int  ->  rax         "dup spill"
 ;  V43 tmp30        [V43,T14] (  2,  64   )     int  ->  r12         "dup spill"
 ;  V44 tmp31        [V44,T84] (  2,   4   )     int  ->  rdi         "Inlining Arg"
 ;  V45 tmp32        [V45,T61] (  4,   8   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V46 tmp33        [V46,T62] (  4,   8   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V47 tmp34        [V47,T85] (  2,   4   )     int  ->  rdi         "Inlining Arg"
 ;  V48 tmp35        [V48,T86] (  2,   4   )     int  ->  rdi         "Inlining Arg"
 ;* V49 tmp36        [V49,T49] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V50 tmp37        [V50,T32] (  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,T15] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V54 tmp41        [V54,T07] (  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,T89] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V58 tmp45        [V58,T88] (  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,T80] (  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,T66] (  2,   8   )     int  ->  rdi         "Inlining Arg"
 ;  V65 tmp52        [V65,T34] (  6,  24   )   byref  ->  rdi         "Inlining Arg"
 ;  V66 tmp53        [V66,T63] (  4,   8   )     int  ->  rax         "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,T55] (  3,  12   )     int  ->  rsi         "Inlining Arg"
 ;  V69 tmp56        [V69,T47] (  4,  16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V70 tmp57        [V70,T48] (  4,  16   )     ref  ->  rax         class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
 ;  V71 tmp58        [V71,T67] (  2,   8   )     int  ->  rdi         "Inlining Arg"
 ;  V72 tmp59        [V72,T68] (  2,   8   )     int  ->  rdi         "Inlining Arg"
 ;* V73 tmp60        [V73    ] (  0,   0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V74 tmp61        [V74,T43] (  5,  20   )   byref  ->  rdi         "Inlining Arg"
 ;  V75 tmp62        [V75,T56] (  3,  12   )     int  ->  rsi         "Span.get_Item index"
 ;  V76 tmp63        [V76,T52] (  3,  12   )   byref  ->  rdi         "Span.get_Item ptrToSpan"
 ;* V77 tmp64        [V77    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V78 tmp65        [V78,T69] (  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,T70] (  2,   8   )     int  ->  rdi         "Inlining Arg"
 ;* V82 tmp69        [V82    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V83 tmp70        [V83,T71] (  2,   8   )     int  ->  rdi         "Inlining Arg"
 ;  V84 tmp71        [V84,T72] (  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,T83] (  2,   4   )   byref  ->  rcx         "field V67._reference (fldOffset=0x0)" P-INDEP
 ;  V102 tmp89       [V102,T87] (  2,   4   )     int  ->  rdx         "field V67._length (fldOffset=0x8)" P-INDEP
 ;  V103 tmp90       [V103,T01] (  3, 768   )     ref  ->  rcx         "arr expr"
 ;  V104 tmp91       [V104,T02] (  3, 768   )     int  ->  rax         "index expr"
 ;  V105 tmp92       [V105,T08] (  3,  96   )     ref  ->  rax         "arr expr"
 ;  V106 tmp93       [V106,T09] (  3,  96   )     int  ->  rdi         "index expr"
 ;  V107 tmp94       [V107,T53] (  3,  12   )     ref  ->  rdi         "arr expr"
 ;  V108 tmp95       [V108,T57] (  3,  12   )     int  ->  rsi         "index expr"
 ;  V109 tmp96       [V109,T54] (  3,  12   )     ref  ->  rdi         "arr expr"
 ;  V110 tmp97       [V110,T73] (  2,   8   )     int  ->  rdi         "argument with side effect"
 ;  V111 tmp98       [V111,T95] (  2,   0   )     ref  ->  rdx         "argument with side effect"
 ;  V112 tmp99       [V112,T96] (  2,   0   )     ref  ->  rdx         "argument with side effect"
 ;  V113 tmp100      [V113,T97] (  2,   0   )     ref  ->  rdx         "argument with side effect"
 ;  V114 tmp101      [V114,T98] (  2,   0   )     ref  ->  rdx         "argument with side effect"
 ;  V115 tmp102      [V115,T18] (  3,  48   )     ref  ->  rcx         "arr expr"
 ;  V116 tmp103      [V116,T22] (  3,  48   )     int  ->  rdx         "index expr"
 ;  V117 tmp104      [V117,T19] (  3,  48   )     ref  ->  rax         "arr expr"
 ;  V118 tmp105      [V118,T23] (  3,  48   )     int  ->  rdi         "index expr"
 ;  V119 tmp106      [V119,T20] (  3,  48   )     ref  ->  rdx         "arr expr"
 ;  V120 tmp107      [V120,T24] (  3,  48   )     int  ->  rcx         "index expr"
 ;  V121 tmp108      [V121,T12] (  2,  64   )     ref  ->  rsi         "argument with side effect"
 ;  V122 tmp109      [V122,T13] (  2,  64   )     ref  ->  [rbp-0x38]  spill-single-def "argument with side effect"
 ;  V123 tmp110      [V123,T99] (  2,   0   )     ref  ->  rdx         "argument with side effect"
 ;  V124 tmp111      [V124,T100] (  2,   0   )     ref  ->  rdx         single-def "argument with side effect"
 ;  V125 cse0        [V125,T81] (  3,   6   )     int  ->  rdi         "CSE #11: conservative"
 ;  V126 cse1        [V126,T05] (  3, 384   )     ref  ->  rcx         "CSE #04: aggressive"
 ;  V127 cse2        [V127,T06] (  3, 384   )     int  ->  rax         "CSE #05: aggressive"
 ;  V128 cse3        [V128,T27] (  5,  40   )     int  ->  rdi         "CSE #18: moderate"
 ;  V129 cse4        [V129,T30] (  4,  32   )     int  ->  rdi         "CSE #22: moderate"
 ;  V130 cse5        [V130,T21] (  3,  48   )     ref  ->  rax         "CSE #02: moderate"
 ;  V131 cse6        [V131,T25] (  3,  48   )     int  ->  rdi         "CSE #03: moderate"
 ;  V132 cse7        [V132,T16] (  4,  48   )     int  ->  rdi         "CSE #25: moderate"
 ;  V133 cse8        [V133,T35] (  3,  24   )     ref  ->  rcx         "CSE #19: conservative"
 ;  V134 cse9        [V134,T36] (  3,  24   )     ref  ->  rax         "CSE #20: conservative"
 ;  V135 cse10       [V135,T39] (  3,  24   )     int  ->  rdi         "CSE #21: conservative"
 ;  V136 cse11       [V136,T37] (  3,  24   )     ref  ->  rsi         "CSE #23: conservative"
 ;  V137 rat0        [V137,T58] (  3,  11.75)     int  ->  r13         "ReplaceWithLclVar is creating a new local variable"
 ;  V138 rat1        [V138,T59] (  3,  11.20)     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_IG46
-						;; 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       G_M39122_IG09
        jmp      SHORT G_M39122_IG05
 						;; size=36 bbWeight=4 PerfScore 48.00
 G_M39122_IG04:
        inc      dword ptr [rbx+0x58]
 						;; size=3 bbWeight=64 PerfScore 192.00
 G_M39122_IG05:
        mov      edi, dword ptr [rbx+0x58]
        mov      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        jge      SHORT G_M39122_IG06
        cmp      edi, dword ptr [rax+0x08]
        jae      G_M39122_IG69
        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], 0
        jbe      SHORT G_M39122_IG04
        cmp      r12d, 123
        jne      SHORT G_M39122_IG06
        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
 						;; size=77 bbWeight=16 PerfScore 412.00
 G_M39122_IG06:
        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      rax, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rax+0x08]
        jne      SHORT G_M39122_IG12
 						;; size=31 bbWeight=16 PerfScore 216.00
 G_M39122_IG07:
        mov      eax, 33
        jmp      G_M39122_IG16
 						;; size=10 bbWeight=2 PerfScore 4.50
 G_M39122_IG08:
        inc      dword ptr [rbx+0x58]
 						;; size=3 bbWeight=32 PerfScore 96.00
 G_M39122_IG09:
        mov      eax, dword ptr [rbx+0x58]
        mov      rcx, gword ptr [rbx+0x28]
        cmp      eax, dword ptr [rcx+0x08]
        jge      SHORT G_M39122_IG06
        cmp      eax, dword ptr [rcx+0x08]
        jae      G_M39122_IG69
        mov      edi, eax
        movzx    rax, word  ptr [rcx+2*rdi+0x0C]
        mov      r12d, eax
        cmp      r12d, 124
        jg       SHORT G_M39122_IG08
 						;; size=37 bbWeight=128 PerfScore 2016.00
 G_M39122_IG10:
        mov      edi, r12d
        mov      rax, 0xD1FFAB1E      ; static handle
        cmp      byte  ptr [rdi+rax], 3
        jb       SHORT G_M39122_IG08
 						;; size=19 bbWeight=64 PerfScore 288.00
 G_M39122_IG11:
        cmp      r12d, 123
        jne      SHORT G_M39122_IG06
        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_IG08
        jmp      SHORT G_M39122_IG06
 						;; size=27 bbWeight=128 PerfScore 1024.00
 G_M39122_IG12:
        mov      rdi, gword ptr [rbx+0x28]
        mov      esi, dword ptr [rbx+0x58]
        cmp      esi, dword ptr [rdi+0x08]
        jae      G_M39122_IG69
        movzx    rdi, word  ptr [rdi+2*rsi+0x0C]
        mov      eax, edi
        cmp      eax, 124
        jg       SHORT G_M39122_IG13
        mov      edi, eax
        mov      rsi, 0xD1FFAB1E      ; static handle
        movzx    rdi, byte  ptr [rdi+rsi]
        cmp      edi, 3
        jl       SHORT G_M39122_IG13
        cmp      eax, 123
        jg       SHORT G_M39122_IG14
        cmp      edi, 4
        sete     r14b
        movzx    r14, r14b
        jmp      SHORT G_M39122_IG15
 						;; size=68 bbWeight=2 PerfScore 40.00
 G_M39122_IG13:
        mov      dword ptr [rbp-0x2C], 32
        mov      eax, dword ptr [rbp-0x2C]
        jmp      SHORT G_M39122_IG16
 						;; size=12 bbWeight=2 PerfScore 8.00
 G_M39122_IG14:
        xor      r14d, r14d
 						;; size=3 bbWeight=2 PerfScore 0.50
 G_M39122_IG15:
        inc      dword ptr [rbx+0x58]
 						;; size=3 bbWeight=2 PerfScore 6.00
 G_M39122_IG16:
        cmp      r13d, r12d
-       jge      G_M39122_IG19
-						;; size=9 bbWeight=4 PerfScore 5.00
+       jge      SHORT G_M39122_IG19
+						;; size=5 bbWeight=4 PerfScore 5.00
 G_M39122_IG17:
        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_IG18
        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_IG18:
        test     r14d, r14d
        je       SHORT G_M39122_IG19
        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_IG69
        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_IG19:
        cmp      eax, 63
        ja       SHORT G_M39122_IG22
 						;; size=5 bbWeight=4 PerfScore 5.00
 G_M39122_IG20:
        lea      r13d, [rax-0x20]
        cmp      r13d, 14
        ja       G_M39122_IG30
 						;; size=14 bbWeight=2 PerfScore 3.50
 G_M39122_IG21:
        mov      edi, r13d
        lea      rcx, [reloc @RWD00]
        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_IG22:
        lea      r12d, [rax-0x5B]
        cmp      r12d, 3
        ja       SHORT G_M39122_IG24
 						;; size=10 bbWeight=2 PerfScore 3.50
 G_M39122_IG23:
        mov      edi, r12d
        lea      rax, [reloc @RWD60]
        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_IG24:
        cmp      eax, 123
        je       G_M39122_IG34
        cmp      eax, 124
        jne      G_M39122_IG43
        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_IG45
 						;; size=38 bbWeight=2 PerfScore 16.00
 G_M39122_IG25:
        test     byte  ptr [rbx+0x70], 2
        jne      SHORT G_M39122_IG26
        mov      r15d, 18
        jmp      SHORT G_M39122_IG27
 						;; size=14 bbWeight=2 PerfScore 12.50
 G_M39122_IG26:
        mov      r15d, 14
 						;; size=6 bbWeight=2 PerfScore 0.50
 G_M39122_IG27:
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, 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
+       mov      gword ptr [rbx+0x20], rax
        jmp      G_M39122_IG43
-						;; size=42 bbWeight=2 PerfScore 18.00
+						;; size=34 bbWeight=2 PerfScore 16.50
 G_M39122_IG28:
        mov      edi, dword ptr [rbx+0x58]
        mov      rsi, gword ptr [rbx+0x28]
        cmp      edi, dword ptr [rsi+0x08]
        je       G_M39122_IG62
        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_IG43
-						;; size=50 bbWeight=2 PerfScore 31.00
+						;; size=42 bbWeight=2 PerfScore 29.50
 G_M39122_IG29:
        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_IG43
-						;; size=105 bbWeight=2 PerfScore 48.00
+						;; size=97 bbWeight=2 PerfScore 46.50
 G_M39122_IG30:
        cmp      eax, 63
        je       SHORT G_M39122_IG34
        jmp      G_M39122_IG43
 						;; size=10 bbWeight=2 PerfScore 6.50
 G_M39122_IG31:
        test     byte  ptr [rbx+0x70], 16
        jne      SHORT G_M39122_IG32
        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
+       mov      byte  ptr [rax+0x2E], 10
+       mov      dword ptr [rax+0x28], edi
+       mov      word  ptr [rax+0x2C], 10
        jmp      SHORT G_M39122_IG33
-						;; size=45 bbWeight=2 PerfScore 25.50
+						;; size=42 bbWeight=2 PerfScore 25.00
 G_M39122_IG32:
        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
-						;; size=45 bbWeight=2 PerfScore 14.00
+       mov      gword ptr [rax+0x10], rdi
+						;; size=42 bbWeight=2 PerfScore 13.50
 G_M39122_IG33:
-       lea      rdi, bword ptr [rbx+0x20]
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
+       mov      gword ptr [rbx+0x20], rax
        jmp      G_M39122_IG43
-						;; size=14 bbWeight=2 PerfScore 7.00
+						;; size=9 bbWeight=2 PerfScore 6.00
 G_M39122_IG34:
        cmp      gword ptr [rbx+0x20], 0
        je       G_M39122_IG63
        dec      dword ptr [rbx+0x58]
        jmp      G_M39122_IG43
 						;; size=19 bbWeight=2 PerfScore 18.00
 G_M39122_IG35:
        cmp      gword ptr [rbx], 0
        je       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, 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_IG69
        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_IG43
        jmp      G_M39122_IG45
 						;; size=88 bbWeight=2 PerfScore 63.50
 G_M39122_IG36:
        lea      rdi, bword ptr [rbx+0x78]
        mov      esi, dword ptr [rbx+0x70]
        mov      eax, dword ptr [rdi+0x08]
        mov      rcx, bword ptr [rdi+0x10]
        mov      edx, dword ptr [rdi+0x18]
        cmp      eax, edx
        jae      SHORT G_M39122_IG37
        mov      edx, eax
        mov      dword ptr [rcx+4*rdx], esi
        inc      eax
        mov      dword ptr [rdi+0x08], eax
        jmp      SHORT G_M39122_IG38
 						;; size=33 bbWeight=2 PerfScore 28.50
 G_M39122_IG37:
        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
 						;; size=12 bbWeight=2 PerfScore 6.50
 G_M39122_IG38:
        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
        je       G_M39122_IG39
        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_IG45
-						;; size=180 bbWeight=2 PerfScore 85.00
+						;; size=151 bbWeight=2 PerfScore 80.00
 G_M39122_IG39:
        lea      rdi, bword ptr [rbx+0x78]
        dec      dword ptr [rdi+0x08]
        jmp      G_M39122_IG45
 						;; size=12 bbWeight=2 PerfScore 11.00
 G_M39122_IG40:
        test     byte  ptr [rbx+0x70], 2
        jne      SHORT G_M39122_IG41
        mov      r15d, 20
        jmp      SHORT G_M39122_IG42
 						;; size=14 bbWeight=2 PerfScore 12.50
 G_M39122_IG41:
        mov      r15d, 15
 						;; size=6 bbWeight=2 PerfScore 0.50
 G_M39122_IG42:
        mov      rdi, 0xD1FFAB1E      ; System.Text.RegularExpressions.RegexNode
        call     CORINFO_HELP_NEWSFAST
        mov      edi, 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      gword ptr [rbx+0x20], rax
+						;; size=29 bbWeight=2 PerfScore 12.50
 G_M39122_IG43:
        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       SHORT G_M39122_IG44
        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
        jne      SHORT G_M39122_IG48
 						;; size=50 bbWeight=2 PerfScore 33.00
 G_M39122_IG44:
        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_IG45:
        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_IG46:
        cmp      gword ptr [rbx], 0
        jne      G_M39122_IG68
        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_IG47:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M39122_IG48:
        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_IG69
        mov      eax, r13d
        movzx    rax, word  ptr [rdi+2*rax+0x0C]
        mov      r12d, eax
        cmp      gword ptr [rbx+0x20], 0
        je       SHORT G_M39122_IG45
 						;; size=43 bbWeight=2 PerfScore 32.00
 G_M39122_IG49:
        xor      r15d, r15d
        xor      r13d, r13d
        cmp      r12d, 43
        ja       G_M39122_IG55
 						;; size=16 bbWeight=16 PerfScore 28.00
 G_M39122_IG50:
        cmp      r12d, 42
        je       SHORT G_M39122_IG51
        cmp      r12d, 43
        jne      SHORT G_M39122_IG52
        mov      r15d, 1
 						;; size=18 bbWeight=8 PerfScore 22.00
 G_M39122_IG51:
        mov      r13d, 0xD1FFAB1E
 						;; size=6 bbWeight=8 PerfScore 2.00
 G_M39122_IG52:
        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_IG54
 						;; size=29 bbWeight=16 PerfScore 188.00
 G_M39122_IG53:
        mov      rdx, gword ptr [rbx+0x28]
        mov      ecx, edi
        cmp      ecx, dword ptr [rdx+0x08]
        jae      G_M39122_IG69
        cmp      word  ptr [rdx+2*rcx+0x0C], 63
        jne      SHORT G_M39122_IG54
        inc      edi
        mov      dword ptr [rbx+0x58], edi
        mov      esi, 1
 						;; size=33 bbWeight=8 PerfScore 94.00
 G_M39122_IG54:
        cmp      r15d, r13d
        jg       G_M39122_IG67
        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_IG49
        jmp      G_M39122_IG45
 						;; size=85 bbWeight=16 PerfScore 444.00
 G_M39122_IG55:
        cmp      r12d, 63
        je       SHORT G_M39122_IG56
        cmp      r12d, 123
        jne      G_M39122_IG52
        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_IG59
        mov      rcx, gword ptr [rbx+0x28]
        cmp      dword ptr [rcx+0x08], edi
        jle      SHORT G_M39122_IG59
        mov      edx, edi
        cmp      edx, dword ptr [rcx+0x08]
        jae      G_M39122_IG69
        cmp      word  ptr [rcx+2*rdx+0x0C], 44
        jne      SHORT G_M39122_IG59
        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_IG57
        cmp      edi, dword ptr [rax+0x08]
        jae      G_M39122_IG69
        cmp      word  ptr [rax+2*rdi+0x0C], 125
        je       SHORT G_M39122_IG57
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
        call     [rax]System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
        jmp      SHORT G_M39122_IG58
 						;; size=128 bbWeight=8 PerfScore 390.00
 G_M39122_IG56:
        mov      r13d, 1
        jmp      G_M39122_IG52
 						;; size=11 bbWeight=8 PerfScore 18.00
 G_M39122_IG57:
        mov      eax, 0xD1FFAB1E
 						;; size=5 bbWeight=8 PerfScore 2.00
 G_M39122_IG58:
        mov      edi, eax
        mov      eax, edi
 						;; size=4 bbWeight=8 PerfScore 4.00
 G_M39122_IG59:
        mov      edi, dword ptr [rbx+0x58]
        cmp      r13d, edi
        je       SHORT G_M39122_IG60
        mov      rsi, gword ptr [rbx+0x28]
        cmp      dword ptr [rsi+0x08], edi
        je       SHORT G_M39122_IG60
        lea      ecx, [rdi+0x01]
        mov      dword ptr [rbx+0x58], ecx
        cmp      edi, dword ptr [rsi+0x08]
        jae      G_M39122_IG69
        cmp      word  ptr [rsi+2*rdi+0x0C], 125
        je       SHORT G_M39122_IG61
 						;; size=40 bbWeight=8 PerfScore 150.00
 G_M39122_IG60:
        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_IG45
 						;; size=40 bbWeight=2 PerfScore 29.50
 G_M39122_IG61:
        mov      r13d, eax
        jmp      G_M39122_IG52
 						;; size=8 bbWeight=4 PerfScore 9.00
 G_M39122_IG62:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_UnescapedEndingBackslash():System.String
        call     [rax]System.SR:get_UnescapedEndingBackslash():System.String
        mov      rdx, rax
        mov      rdi, rbx
        mov      esi, 13
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        call     [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        mov      rdi, rax
        call     CORINFO_HELP_THROW
        int3     
 						;; size=44 bbWeight=0 PerfScore 0.00
 G_M39122_IG63:
        test     r15d, r15d
        je       SHORT G_M39122_IG64
        mov      dword ptr [rbp-0x2C], eax
        mov      rdi, 0xD1FFAB1E      ; System.Char
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rdi, 0xD1FFAB1E      ; 'NestedQuantifiersNotParenthesized'
        mov      rax, 0xD1FFAB1E      ; code for System.SR:GetResourceString(System.String):System.String
        call     [rax]System.SR:GetResourceString(System.String):System.String
        mov      rdi, rax
        mov      r12d, dword ptr [rbp-0x2C]
        mov      word  ptr [r15+0x08], r12w
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object):System.String
        mov      rdx, rax
        mov      rdi, rbx
        mov      esi, 28
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        call     [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        jmp      SHORT G_M39122_IG65
 						;; size=100 bbWeight=0 PerfScore 0.00
 G_M39122_IG64:
        mov      dword ptr [rbp-0x2C], eax
        mov      rdi, 0xD1FFAB1E      ; System.Char
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rdi, 0xD1FFAB1E      ; 'QuantifierAfterNothing'
        mov      rax, 0xD1FFAB1E      ; code for System.SR:GetResourceString(System.String):System.String
        call     [rax]System.SR:GetResourceString(System.String):System.String
        mov      rdi, rax
        mov      r12d, dword ptr [rbp-0x2C]
        mov      word  ptr [r15+0x08], r12w
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object):System.String
        mov      rdx, rax
        mov      rdi, rbx
        mov      esi, 29
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        call     [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
 						;; size=93 bbWeight=0 PerfScore 0.00
 G_M39122_IG65:
        mov      rdi, rax
        call     CORINFO_HELP_THROW
        int3     
 						;; size=9 bbWeight=0 PerfScore 0.00
 G_M39122_IG66:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_InsufficientOpeningParentheses():System.String
        call     [rax]System.SR:get_InsufficientOpeningParentheses():System.String
        mov      rdx, rax
        mov      rdi, rbx
        mov      esi, 30
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        call     [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        mov      rdi, rax
        call     CORINFO_HELP_THROW
        int3     
 						;; size=44 bbWeight=0 PerfScore 0.00
 G_M39122_IG67:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ReversedQuantifierRange():System.String
        call     [rax]System.SR:get_ReversedQuantifierRange():System.String
        mov      rdx, rax
        mov      rdi, rbx
        mov      esi, 27
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        call     [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        mov      rdi, rax
        call     CORINFO_HELP_THROW
        int3     
 						;; size=44 bbWeight=0 PerfScore 0.00
 G_M39122_IG68:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_InsufficientClosingParentheses():System.String
        call     [rax]System.SR:get_InsufficientClosingParentheses():System.String
        mov      rdx, rax
        mov      rdi, rbx
        mov      esi, 26
        mov      rax, 0xD1FFAB1E      ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        call     [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
        mov      rdi, rax
        call     CORINFO_HELP_THROW
        int3     
 						;; size=44 bbWeight=0 PerfScore 0.00
 G_M39122_IG69:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 RWD00  	dd	G_M39122_IG45 - G_M39122_IG02
        	dd	G_M39122_IG46 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG40 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG36 - G_M39122_IG02
        	dd	G_M39122_IG35 - G_M39122_IG02
        	dd	G_M39122_IG34 - G_M39122_IG02
        	dd	G_M39122_IG34 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG31 - G_M39122_IG02
 RWD60  	dd	G_M39122_IG29 - G_M39122_IG02
        	dd	G_M39122_IG28 - G_M39122_IG02
        	dd	G_M39122_IG43 - G_M39122_IG02
        	dd	G_M39122_IG25 - G_M39122_IG02
 
 
-; Total bytes of code 2491, prolog size 22, PerfScore 6429.85, instruction count 615, allocated bytes for code 2491 (MethodHash=7576672d) for method System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts)
+; Total bytes of code 2383, prolog size 22, PerfScore 6413.10, instruction count 589, allocated bytes for code 2383 (MethodHash=7576672d) for method System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts)
-124 (-35.43 % of base) - System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this
 ; Assembly listing for method System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T00] ( 23, 23   )   byref  ->  rbx         this single-def
+;  V00 this         [V00,T00] ( 23, 23   )   byref  ->  rdi         this single-def
 ;  V01 arg1         [V01,T02] (  3,  3   )     ref  ->  rsi         class-hnd single-def <System.String>
-;  V02 arg2         [V02,T05] (  3,  3   )     int  ->  r13         single-def
-;  V03 arg3         [V03,T03] (  3,  3   )     ref  ->  r15         class-hnd single-def <System.Globalization.CultureInfo>
-;  V04 arg4         [V04,T04] (  3,  3   )     ref  ->  r14         class-hnd single-def <System.Collections.Hashtable>
-;  V05 arg5         [V05,T06] (  3,  3   )     int  ->  r12         single-def
+;  V02 arg2         [V02,T05] (  3,  3   )     int  ->  rdx         single-def
+;  V03 arg3         [V03,T03] (  3,  3   )     ref  ->  rcx         class-hnd single-def <System.Globalization.CultureInfo>
+;  V04 arg4         [V04,T04] (  3,  3   )     ref  ->   r8         class-hnd single-def <System.Collections.Hashtable>
+;  V05 arg5         [V05,T06] (  3,  3   )     int  ->   r9         single-def
 ;  V06 arg6         [V06,T07] (  1,  1   )     ref  ->  [rbp+0x10]  class-hnd single-def <System.Collections.Hashtable>
 ;* V07 arg7         [V07    ] (  0,  0   )  struct (16) zero-ref    single-def <System.Span`1[int]>
 ;# V08 OutArgs      [V08    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V09 tmp1         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.ValueListBuilder`1[int]>
 ;  V10 tmp2         [V10,T08] (  1,  1   )   byref  ->  [rbp+0x18]  single-def "field V07._reference (fldOffset=0x0)" P-INDEP
 ;  V11 tmp3         [V11,T09] (  1,  1   )     int  ->  [rbp+0x20]  single-def "field V07._length (fldOffset=0x8)" P-INDEP
 ;* V12 tmp4         [V12    ] (  0,  0   )     ref  ->  zero-ref    "V09.[000..008)"
 ;* V13 tmp5         [V13    ] (  0,  0   )     int  ->  zero-ref    "V09.[008..012)"
 ;* V14 tmp6         [V14    ] (  0,  0   )   byref  ->  zero-ref    single-def "V09.[016..024)"
 ;* V15 tmp7         [V15    ] (  0,  0   )     int  ->  zero-ref    "V09.[024..028)"
 ;  V16 tmp8         [V16,T01] (  5, 10   )   byref  ->  rax         single-def "Spilling address for field-by-field copy"
 ;
 ; Lcl frame size = 0
 
 G_M19169_IG01:
        push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       lea      rbp, [rsp+0x28]
-       mov      rbx, rdi
-       mov      r13d, edx
-       mov      r15, rcx
-       mov      r14, r8
-       mov      r12d, r9d
-						;; size=30 bbWeight=1 PerfScore 7.75
+       mov      rbp, rsp
+						;; size=4 bbWeight=1 PerfScore 1.25
 G_M19169_IG02:
-       lea      rdi, bword ptr [rbx+0x28]
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       mov      dword ptr [rbx+0x70], r13d
-       lea      rdi, bword ptr [rbx+0x30]
-       mov      rsi, r15
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       xor      edi, edi
-       mov      dword ptr [rbx+0x5C], edi
-       mov      byte  ptr [rbx+0x74], 0
-       lea      rdi, bword ptr [rbx+0x38]
-       mov      rsi, r14
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       mov      dword ptr [rbx+0x6C], r12d
-       lea      rdi, bword ptr [rbx+0x40]
-       mov      rsi, gword ptr [rbp+0x10]
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       lea      rax, bword ptr [rbx+0x78]
+       mov      gword ptr [rdi+0x28], rsi
+       mov      dword ptr [rdi+0x70], edx
+       mov      gword ptr [rdi+0x30], rcx
+       xor      eax, eax
+       mov      dword ptr [rdi+0x5C], eax
+       mov      byte  ptr [rdi+0x74], 0
+       mov      gword ptr [rdi+0x38], r8
+       mov      dword ptr [rdi+0x6C], r9d
+       mov      rax, gword ptr [rbp+0x10]
+       mov      gword ptr [rdi+0x40], rax
+       lea      rax, bword ptr [rdi+0x78]
        xor      rcx, rcx
        mov      gword ptr [rax], rcx
-						;; size=72 bbWeight=1 PerfScore 13.50
+						;; size=45 bbWeight=1 PerfScore 11.00
 G_M19169_IG03:
        mov      dword ptr [rax+0x08], ecx
-       mov      r15, bword ptr [rbp+0x18]
-       mov      bword ptr [rax+0x10], r15
-       mov      r15d, dword ptr [rbp+0x20]
-       mov      dword ptr [rax+0x18], r15d
-						;; size=19 bbWeight=1 PerfScore 5.00
+       mov      rcx, bword ptr [rbp+0x18]
+       mov      bword ptr [rax+0x10], rcx
+       mov      ecx, dword ptr [rbp+0x20]
+       mov      dword ptr [rax+0x18], ecx
+       xor      rax, rax
+       mov      gword ptr [rdi], rax
+						;; size=22 bbWeight=1 PerfScore 6.25
 G_M19169_IG04:
-       mov      gword ptr [rbx], rcx
-						;; size=3 bbWeight=1 PerfScore 1.00
+       mov      gword ptr [rdi+0x08], rax
+						;; size=4 bbWeight=1 PerfScore 1.00
 G_M19169_IG05:
-       mov      gword ptr [rbx+0x08], rcx
+       mov      gword ptr [rdi+0x10], rax
 						;; size=4 bbWeight=1 PerfScore 1.00
 G_M19169_IG06:
-       mov      gword ptr [rbx+0x10], rcx
+       mov      gword ptr [rdi+0x18], rax
 						;; size=4 bbWeight=1 PerfScore 1.00
 G_M19169_IG07:
-       mov      gword ptr [rbx+0x18], rcx
+       mov      gword ptr [rdi+0x20], rax
 						;; size=4 bbWeight=1 PerfScore 1.00
 G_M19169_IG08:
-       mov      gword ptr [rbx+0x20], rcx
-						;; size=4 bbWeight=1 PerfScore 1.00
+       mov      dword ptr [rdi+0x58], eax
+						;; size=3 bbWeight=1 PerfScore 1.00
 G_M19169_IG09:
-       mov      dword ptr [rbx+0x58], ecx
+       mov      dword ptr [rdi+0x60], eax
 						;; size=3 bbWeight=1 PerfScore 1.00
 G_M19169_IG10:
-       mov      dword ptr [rbx+0x60], ecx
+       mov      dword ptr [rdi+0x64], eax
 						;; size=3 bbWeight=1 PerfScore 1.00
 G_M19169_IG11:
-       mov      dword ptr [rbx+0x64], ecx
+       mov      dword ptr [rdi+0x68], eax
 						;; size=3 bbWeight=1 PerfScore 1.00
 G_M19169_IG12:
-       mov      dword ptr [rbx+0x68], ecx
-						;; size=3 bbWeight=1 PerfScore 1.00
-G_M19169_IG13:
-       mov      gword ptr [rbx+0x48], rcx
+       mov      gword ptr [rdi+0x48], rax
 						;; size=4 bbWeight=1 PerfScore 1.00
-G_M19169_IG14:
-       mov      gword ptr [rbx+0x50], rcx
-       mov      byte  ptr [rbx+0x75], 0
+G_M19169_IG13:
+       mov      gword ptr [rdi+0x50], rax
+       mov      byte  ptr [rdi+0x75], 0
 						;; size=8 bbWeight=1 PerfScore 2.00
-G_M19169_IG15:
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
+G_M19169_IG14:
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 4.00
+						;; size=2 bbWeight=1 PerfScore 1.50
 
-; Total bytes of code 175, prolog size 15, PerfScore 42.25, instruction count 55, allocated bytes for code 175 (MethodHash=855eb51e) for method System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts)
+; Total bytes of code 113, prolog size 4, PerfScore 31.00, instruction count 35, allocated bytes for code 113 (MethodHash=855eb51e) for method System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts)

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jun 26, 2024

@EgorBo

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

No branches or pull requests

1 participant