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: Pass field's owner to getFieldType #216

Open
MihuBot opened this issue Jan 11, 2024 · 3 comments
Open

[X64] [EgorBo] JIT: Pass field's owner to getFieldType #216

MihuBot opened this issue Jan 11, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jan 11, 2024

Build completed in 1 hour 19 minutes.
dotnet/runtime#96794

CoreLib diffs

Found 2 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 6780796
Total bytes of diff: 6780803
Total bytes of delta: 7 (0.00 % of base)
Total relative delta: 0.09
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
           7 : System.Private.CoreLib.dasm (0.00 % of base)

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

Top method regressions (bytes):
          30 (3.65 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
          28 (9.21 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
          13 (1.21 % of base) : System.Private.CoreLib.dasm - System.Threading.TimerQueue:TimerThread() (FullOpts)

Top method improvements (bytes):
         -32 (-2.87 % of base) : System.Private.CoreLib.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
         -32 (-2.69 % of base) : System.Private.CoreLib.dasm - System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)

Top method regressions (percentages):
          28 (9.21 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
          30 (3.65 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
          13 (1.21 % of base) : System.Private.CoreLib.dasm - System.Threading.TimerQueue:TimerThread() (FullOpts)

Top method improvements (percentages):
         -32 (-2.87 % of base) : System.Private.CoreLib.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
         -32 (-2.69 % of base) : System.Private.CoreLib.dasm - System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)

5 total methods with Code Size differences (2 improved, 3 regressed), 55851 unchanged.

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

Frameworks diffs

Diffs
Found 342 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 38070469
Total bytes of diff: 38071341
Total bytes of delta: 872 (0.00 % of base)
Total relative delta: 2.00
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
         676 : System.Collections.dasm (0.12 % of base)
         392 : System.Text.RegularExpressions.dasm (0.05 % of base)
         263 : System.Data.Common.dasm (0.02 % of base)
         122 : System.Threading.RateLimiting.dasm (0.07 % of base)
          89 : System.Private.Xml.dasm (0.00 % of base)
          73 : System.Net.Security.dasm (0.03 % of base)
          40 : System.Diagnostics.Process.dasm (0.04 % of base)
          12 : Microsoft.Extensions.DependencyModel.dasm (0.01 % of base)
           9 : System.Data.Odbc.dasm (0.00 % of base)
           7 : System.Private.CoreLib.dasm (0.00 % of base)
           6 : System.Configuration.ConfigurationManager.dasm (0.00 % of base)
           2 : System.Diagnostics.TraceSource.dasm (0.00 % of base)

Top file improvements (bytes):
        -358 : System.Composition.Convention.dasm (-0.30 % of base)
        -280 : System.ComponentModel.Composition.Registration.dasm (-0.28 % of base)
         -74 : System.ComponentModel.Composition.dasm (-0.02 % of base)
         -61 : Microsoft.Extensions.Options.DataAnnotations.dasm (-1.36 % of base)
         -39 : System.Threading.Tasks.Dataflow.dasm (-0.00 % of base)
          -7 : System.Net.HttpListener.dasm (-0.01 % of base)

18 total files with Code Size differences (6 improved, 12 regressed), 238 unchanged.

Top method regressions (bytes):
          78 (3.79 % of base) : System.Private.Xml.dasm - System.Xml.Schema.ParticleContentValidator:BuildTransitionTable(System.Xml.Schema.BitSet,System.Xml.Schema.BitSet[],int):int[][]:this (FullOpts)
          74 (4.12 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:<ReduceAlternation>g__ReduceSingleLetterAndNestedAlternations|41_0():this (FullOpts)
          74 (5.18 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceConcatenationWithAdjacentStrings():this (FullOpts)
          73 (2.74 % of base) : System.Net.Security.dasm - System.Net.Security.SslStreamCertificateContext+<FetchOcspAsync>d__31:MoveNext():this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[double]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[double]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[int]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[int]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[long]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[long]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[short]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[short]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[System.Nullable`1[int]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Nullable`1[int]]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[System.Numerics.Vector`1[float]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Numerics.Vector`1[float]]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[ubyte]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[ubyte]):ubyte:this (FullOpts)
          48 (9.86 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[int]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[int]):ubyte:this (FullOpts)
          48 (9.82 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[long]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[long]):ubyte:this (FullOpts)
          48 (9.72 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[short]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[short]):ubyte:this (FullOpts)
          48 (9.82 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[System.Nullable`1[int]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Nullable`1[int]]):ubyte:this (FullOpts)
          48 (9.72 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[ubyte]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[ubyte]):ubyte:this (FullOpts)
          47 (9.31 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[double]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[double]):ubyte:this (FullOpts)
          39 (7.10 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[System.Numerics.Vector`1[float]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Numerics.Vector`1[float]]):ubyte:this (FullOpts)
          34 (2.72 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.FixedWindowRateLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          34 (2.74 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.SlidingWindowRateLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          30 (3.65 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
          30 (1.41 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:EliminateEndingBacktracking():this (FullOpts) (2 methods)
          28 (9.21 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
          27 (2.19 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.ConcurrencyLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          27 (2.13 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.TokenBucketRateLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          22 (3.30 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.AsyncStreamReader:MoveLinesFromStringBuilderToMessageQueue():this (FullOpts)
          18 (0.98 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.AsyncStreamReader+<ReadBufferAsync>d__16:MoveNext():this (FullOpts)
          17 (8.85 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReplaceChild(int,System.Text.RegularExpressions.RegexNode):this (FullOpts)
          17 (1.57 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[double]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[int]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[long]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[short]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[ubyte]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:this (FullOpts)
          13 (0.73 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceConcatenationWithAdjacentLoops():this (FullOpts)
          13 (0.81 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[double],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[int],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[long],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[short],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[ubyte],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte] (FullOpts)
          13 (1.21 % of base) : System.Private.CoreLib.dasm - System.Threading.TimerQueue:TimerThread() (FullOpts)
          12 (0.62 % of base) : Microsoft.Extensions.DependencyModel.dasm - Microsoft.Extensions.DependencyModel.Resolution.AppBaseCompilationAssemblyResolver:TryResolveAssemblyPaths(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List`1[System.String]):ubyte:this (FullOpts)
          12 (0.90 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceAtomic():System.Text.RegularExpressions.RegexNode:this (FullOpts)
          11 (4.49 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:<ReduceAlternation>g__RemoveRedundantEmptiesAndNothings|41_2(System.Text.RegularExpressions.RegexNode):System.Text.RegularExpressions.RegexNode (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[double]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[int]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[long]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[short]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[ubyte]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:this (FullOpts)
          11 (1.23 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.XsltOld.TemplateAction:AnalyzePriority(System.Xml.Xsl.XsltOld.Compiler):this (FullOpts)
          10 (0.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:FinalOptimize():System.Text.RegularExpressions.RegexNode:this (FullOpts) (2 methods)
           9 (3.67 % of base) : System.Data.Odbc.dasm - System.Data.Odbc.OdbcParameterCollection:Replace(int,System.Object):this (FullOpts)
           8 (1.48 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceExpressionConditional():System.Text.RegularExpressions.RegexNode:this (FullOpts)
           6 (1.31 % of base) : System.Configuration.ConfigurationManager.dasm - System.Configuration.SectionRecord:AddLocationInputImpl(System.Configuration.SectionInput,ubyte):this (FullOpts)
           6 (0.45 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:<ReduceAlternation>g__ExtractCommonPrefixOneNotoneSet|41_1(System.Text.RegularExpressions.RegexNode):System.Text.RegularExpressions.RegexNode (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:Clone():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.52 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[System.__Canon]():System.Data.SortExpressionBuilder`1[System.__Canon]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:Clone():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.52 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[System.__Canon]():System.Data.SortExpressionBuilder`1[System.__Canon]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:Clone():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.52 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[System.__Canon]():System.Data.SortExpressionBuilder`1[System.__Canon]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:Clone():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.52 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[System.__Canon]():System.Data.SortExpressionBuilder`1[System.__Canon]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:Clone():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.52 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[System.__Canon]():System.Data.SortExpressionBuilder`1[System.__Canon]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:Clone():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)

Top method improvements (bytes):
        -159 (-18.03 % of base) : System.ComponentModel.Composition.Registration.dasm - System.ComponentModel.Composition.Registration.ExportBuilder:BuildAttributes(System.Type,byref):this (FullOpts)
        -116 (-15.16 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.ExportConventionBuilder:BuildAttributes(System.Type,byref):this (FullOpts)
         -81 (-10.24 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.ImportConventionBuilder:BuildAttributes(System.Type,byref):this (FullOpts)
         -75 (-10.62 % of base) : System.ComponentModel.Composition.Registration.dasm - System.ComponentModel.Composition.Registration.PartBuilder:ConfigureConstructorAttributes(System.Reflection.ConstructorInfo,byref,System.Action`2[System.Reflection.ParameterInfo,System.ComponentModel.Composition.Registration.ImportBuilder]) (FullOpts)
         -74 (-6.18 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.Hosting.DirectoryCatalog:DiffChanges(System.String[],System.String[],byref,byref):this (FullOpts)
         -72 (-9.96 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.PartConventionBuilder:ConfigureConstructorAttributes(System.Reflection.ConstructorInfo,byref,System.Action`2[System.Reflection.ParameterInfo,System.Composition.Convention.ImportConventionBuilder]) (FullOpts)
         -64 (-4.61 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.RegexNodeConverter:<CreateBDDFromSetString>g__Compute|5_0(System.String):System.Text.RegularExpressions.Symbolic.BDD:this (FullOpts)
         -61 (-1.69 % of base) : Microsoft.Extensions.Options.DataAnnotations.dasm - Microsoft.Extensions.Options.DataAnnotationValidateOptions`1[System.__Canon]:TryValidateOptions(System.Object,System.String,System.Collections.Generic.List`1[System.ComponentModel.DataAnnotations.ValidationResult],byref,byref):ubyte (FullOpts)
         -50 (-4.24 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.PartConventionBuilder:BuildOnImportsSatisfiedNotification(System.Type,byref):this (FullOpts)
         -46 (-2.72 % of base) : System.ComponentModel.Composition.Registration.dasm - System.ComponentModel.Composition.Registration.PartBuilder:BuildPropertyAttributes(System.Type,byref):this (FullOpts)
         -39 (-2.10 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.PartConventionBuilder:BuildPropertyAttributes(System.Type,byref):this (FullOpts)
         -39 (-12.38 % of base) : System.Threading.Tasks.Dataflow.dasm - System.Threading.Tasks.Dataflow.Internal.Common:AddException(byref,System.Exception,ubyte) (FullOpts)
         -32 (-2.87 % of base) : System.Private.CoreLib.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
         -32 (-2.69 % of base) : System.Private.CoreLib.dasm - System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
          -5 (-1.38 % of base) : System.Data.Common.dasm - System.Data.DataViewListener:UnregisterListChangedEvent():this (FullOpts)
          -4 (-2.25 % of base) : System.Data.Common.dasm - System.Data.Index:ListChangedRemove(System.Data.DataViewListener):this (FullOpts)
          -4 (-1.48 % of base) : System.Net.HttpListener.dasm - System.Net.HttpListener:GetContextFromQueue():System.Net.HttpListenerContext:this (FullOpts)
          -4 (-0.13 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:AssignNameSlots():this (FullOpts) (2 methods)
          -3 (-0.45 % of base) : System.Net.HttpListener.dasm - System.Net.HttpListener:RegisterContext(System.Net.HttpListenerContext):this (FullOpts)

Top method regressions (percentages):
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[double]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[double]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[int]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[int]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[long]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[long]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[short]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[short]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[System.Nullable`1[int]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Nullable`1[int]]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[System.Numerics.Vector`1[float]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Numerics.Vector`1[float]]):ubyte:this (FullOpts)
          50 (14.01 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1[ubyte]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[ubyte]):ubyte:this (FullOpts)
          48 (9.86 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[int]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[int]):ubyte:this (FullOpts)
          48 (9.82 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[long]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[long]):ubyte:this (FullOpts)
          48 (9.82 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[System.Nullable`1[int]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Nullable`1[int]]):ubyte:this (FullOpts)
          48 (9.72 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[short]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[short]):ubyte:this (FullOpts)
          48 (9.72 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[ubyte]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[ubyte]):ubyte:this (FullOpts)
          47 (9.31 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[double]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[double]):ubyte:this (FullOpts)
          28 (9.21 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
          17 (8.85 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReplaceChild(int,System.Text.RegularExpressions.RegexNode):this (FullOpts)
          39 (7.10 % of base) : System.Collections.dasm - System.Collections.Generic.SortedSet`1+TreeSubSet[System.Numerics.Vector`1[float]]:BreadthFirstTreeWalk(System.Collections.Generic.TreeWalkPredicate`1[System.Numerics.Vector`1[float]]):ubyte:this (FullOpts)
          74 (5.18 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceConcatenationWithAdjacentStrings():this (FullOpts)
          11 (4.49 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:<ReduceAlternation>g__RemoveRedundantEmptiesAndNothings|41_2(System.Text.RegularExpressions.RegexNode):System.Text.RegularExpressions.RegexNode (FullOpts)
          74 (4.12 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:<ReduceAlternation>g__ReduceSingleLetterAndNestedAlternations|41_0():this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[double]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[int]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[long]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[short]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:this (FullOpts)
          11 (3.93 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[ubyte]:Alternate(System.Collections.Generic.List`1[System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:this (FullOpts)
          78 (3.79 % of base) : System.Private.Xml.dasm - System.Xml.Schema.ParticleContentValidator:BuildTransitionTable(System.Xml.Schema.BitSet,System.Xml.Schema.BitSet[],int):int[][]:this (FullOpts)
           9 (3.67 % of base) : System.Data.Odbc.dasm - System.Data.Odbc.OdbcParameterCollection:Replace(int,System.Object):this (FullOpts)
          30 (3.65 % of base) : System.Private.CoreLib.dasm - System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
          22 (3.30 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.AsyncStreamReader:MoveLinesFromStringBuilderToMessageQueue():this (FullOpts)
          73 (2.74 % of base) : System.Net.Security.dasm - System.Net.Security.SslStreamCertificateContext+<FetchOcspAsync>d__31:MoveNext():this (FullOpts)
          34 (2.74 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.SlidingWindowRateLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          34 (2.72 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.FixedWindowRateLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          27 (2.19 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.ConcurrencyLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          27 (2.13 % of base) : System.Threading.RateLimiting.dasm - System.Threading.RateLimiting.TokenBucketRateLimiter:AcquireAsyncCore(int,System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[System.Threading.RateLimiting.RateLimitLease]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[int]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[long]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[ubyte]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:this (FullOpts)
          17 (1.58 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[short]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:this (FullOpts)
          17 (1.57 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:StripEffects(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[double]):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:this (FullOpts)
           8 (1.48 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceExpressionConditional():System.Text.RegularExpressions.RegexNode:this (FullOpts)
          30 (1.41 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:EliminateEndingBacktracking():this (FullOpts) (2 methods)
           6 (1.31 % of base) : System.Configuration.ConfigurationManager.dasm - System.Configuration.SectionRecord:AddLocationInputImpl(System.Configuration.SectionInput,ubyte):this (FullOpts)
          11 (1.23 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.XsltOld.TemplateAction:AnalyzePriority(System.Xml.Xsl.XsltOld.Compiler):this (FullOpts)
          13 (1.21 % of base) : System.Private.CoreLib.dasm - System.Threading.TimerQueue:TimerThread() (FullOpts)
          18 (0.98 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.AsyncStreamReader+<ReadBufferAsync>d__16:MoveNext():this (FullOpts)
          12 (0.90 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceAtomic():System.Text.RegularExpressions.RegexNode:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:Clone():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:Clone():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:Clone():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:Clone():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:Clone():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:Clone():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.85 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[ubyte]:Clone():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
          13 (0.81 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[double],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[double] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[int],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[int] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[long],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[long] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[ubyte],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[ubyte] (FullOpts)
          13 (0.80 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short]:CreateAlternate(System.Text.RegularExpressions.Symbolic.SymbolicRegexBuilder`1[short],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short],System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short],ubyte,ubyte):System.Text.RegularExpressions.Symbolic.SymbolicRegexNode`1[short] (FullOpts)
          13 (0.73 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexNode:ReduceConcatenationWithAdjacentLoops():this (FullOpts)
           1 (0.69 % of base) : System.Data.Common.dasm - System.Data.Common.DataColumnMappingCollection:Replace(int,System.Data.Common.DataColumnMapping):this (FullOpts)
           1 (0.69 % of base) : System.Data.Common.dasm - System.Data.Common.DataTableMappingCollection:Replace(int,System.Data.Common.DataTableMapping):this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[double]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[int]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[long]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[short]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[System.Numerics.Vector`1[float]]():System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:CloneCast[ubyte]():System.Data.SortExpressionBuilder`1[ubyte]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:CloneCast[double]():System.Data.SortExpressionBuilder`1[double]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:CloneCast[int]():System.Data.SortExpressionBuilder`1[int]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:CloneCast[long]():System.Data.SortExpressionBuilder`1[long]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:CloneCast[short]():System.Data.SortExpressionBuilder`1[short]:this (FullOpts)
           4 (0.64 % of base) : System.Data.Common.dasm - System.Data.SortExpressionBuilder`1[System.Numerics.Vector`1[float]]:CloneCast[System.Nullable`1[int]]():System.Data.SortExpressionBuilder`1[System.Nullable`1[int]]:this (FullOpts)

Top method improvements (percentages):
        -159 (-18.03 % of base) : System.ComponentModel.Composition.Registration.dasm - System.ComponentModel.Composition.Registration.ExportBuilder:BuildAttributes(System.Type,byref):this (FullOpts)
        -116 (-15.16 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.ExportConventionBuilder:BuildAttributes(System.Type,byref):this (FullOpts)
         -39 (-12.38 % of base) : System.Threading.Tasks.Dataflow.dasm - System.Threading.Tasks.Dataflow.Internal.Common:AddException(byref,System.Exception,ubyte) (FullOpts)
         -75 (-10.62 % of base) : System.ComponentModel.Composition.Registration.dasm - System.ComponentModel.Composition.Registration.PartBuilder:ConfigureConstructorAttributes(System.Reflection.ConstructorInfo,byref,System.Action`2[System.Reflection.ParameterInfo,System.ComponentModel.Composition.Registration.ImportBuilder]) (FullOpts)
         -81 (-10.24 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.ImportConventionBuilder:BuildAttributes(System.Type,byref):this (FullOpts)
         -72 (-9.96 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.PartConventionBuilder:ConfigureConstructorAttributes(System.Reflection.ConstructorInfo,byref,System.Action`2[System.Reflection.ParameterInfo,System.Composition.Convention.ImportConventionBuilder]) (FullOpts)
         -74 (-6.18 % of base) : System.ComponentModel.Composition.dasm - System.ComponentModel.Composition.Hosting.DirectoryCatalog:DiffChanges(System.String[],System.String[],byref,byref):this (FullOpts)
         -64 (-4.61 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.Symbolic.RegexNodeConverter:<CreateBDDFromSetString>g__Compute|5_0(System.String):System.Text.RegularExpressions.Symbolic.BDD:this (FullOpts)
         -50 (-4.24 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.PartConventionBuilder:BuildOnImportsSatisfiedNotification(System.Type,byref):this (FullOpts)
         -32 (-2.87 % of base) : System.Private.CoreLib.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
         -46 (-2.72 % of base) : System.ComponentModel.Composition.Registration.dasm - System.ComponentModel.Composition.Registration.PartBuilder:BuildPropertyAttributes(System.Type,byref):this (FullOpts)
         -32 (-2.69 % of base) : System.Private.CoreLib.dasm - System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
          -4 (-2.25 % of base) : System.Data.Common.dasm - System.Data.Index:ListChangedRemove(System.Data.DataViewListener):this (FullOpts)
         -39 (-2.10 % of base) : System.Composition.Convention.dasm - System.Composition.Convention.PartConventionBuilder:BuildPropertyAttributes(System.Type,byref):this (FullOpts)
         -61 (-1.69 % of base) : Microsoft.Extensions.Options.DataAnnotations.dasm - Microsoft.Extensions.Options.DataAnnotationValidateOptions`1[System.__Canon]:TryValidateOptions(System.Object,System.String,System.Collections.Generic.List`1[System.ComponentModel.DataAnnotations.ValidationResult],byref,byref):ubyte (FullOpts)
          -4 (-1.48 % of base) : System.Net.HttpListener.dasm - System.Net.HttpListener:GetContextFromQueue():System.Net.HttpListenerContext:this (FullOpts)
          -5 (-1.38 % of base) : System.Data.Common.dasm - System.Data.DataViewListener:UnregisterListChangedEvent():this (FullOpts)
          -3 (-0.45 % of base) : System.Net.HttpListener.dasm - System.Net.HttpListener:RegisterContext(System.Net.HttpListenerContext):this (FullOpts)
          -4 (-0.13 % of base) : System.Text.RegularExpressions.dasm - System.Text.RegularExpressions.RegexParser:AssignNameSlots():this (FullOpts) (2 methods)

149 total methods with Code Size differences (19 improved, 130 regressed), 236593 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 11, 2024

Top method regressions

30 (3.65 % of base) - System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String])
 ; Assembly listing for method System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 7 single block inlinees; 8 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T07] ( 22, 23   )     ref  ->  rbx         class-hnd single-def <System.Collections.Generic.List`1[System.String]>
+;  V00 arg0         [V00,T07] ( 21, 22.50)     ref  ->  rbx         class-hnd single-def <System.Collections.Generic.List`1[System.String]>
 ;  V01 loc0         [V01,T02] ( 13, 47.50)     ref  ->  r15         class-hnd exact single-def <System.String>
-;  V02 loc1         [V02    ] ( 19, 53.50)  struct (16) [rbp-0x28]  do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[ushort]>
+;  V02 loc1         [V02    ] ( 19, 53.50)  struct (16) [rbp-0x30]  do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[ushort]>
 ;  V03 loc2         [V03,T00] ( 36,151.08)     int  ->  rax        
-;  V04 loc3         [V04,T20] (  4,  2   )     int  ->  rcx        
+;  V04 loc3         [V04,T22] (  4,  2   )     int  ->  rcx        
 ;* V05 loc4         [V05    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
-;  V06 loc5         [V06,T06] (  9, 25.50)     int  ->  r14        
+;  V06 loc5         [V06,T06] ( 10, 26   )     int  ->  r13        
 ;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V08 tmp1         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V09 tmp2         [V09,T04] (  5, 28   )     ref  ->  rdi         class-hnd exact "impAppendStmt" <System.String>
-;  V10 tmp3         [V10,T24] (  2,  2   )    long  ->  rax         "Inlining Arg"
-;  V11 tmp4         [V11,T23] (  2,  2   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.String>
-;  V12 tmp5         [V12,T05] (  5, 28   )     ref  ->  rsi         class-hnd "Inlining Arg" <System.__Canon>
+;  V10 tmp3         [V10,T26] (  2,  2   )    long  ->  rax         "Inlining Arg"
+;  V11 tmp4         [V11,T25] (  2,  2   )     ref  ->  rax         class-hnd exact single-def "Inlining Arg" <System.String>
+;  V12 tmp5         [V12,T05] (  5, 28   )     ref  ->  rsi         class-hnd exact "Inlining Arg" <System.String>
 ;  V13 tmp6         [V13,T14] (  2,  4   )   ubyte  ->  rax         "Inline return value spill temp"
 ;  V14 tmp7         [V14,T15] (  2,  8   )   byref  ->  rdi         "impAppendStmt"
-;  V15 tmp8         [V15,T25] (  3,  1.50)     ref  ->  rdi         class-hnd single-def "Inline stloc first use temp" <System.String[]>
-;  V16 tmp9         [V16,T21] (  4,  2   )     int  ->  rsi         "Inline stloc first use temp"
-;  V17 tmp10        [V17    ] ( 10, 27   )   byref  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed "field V02._reference (fldOffset=0x0)" P-DEP
-;  V18 tmp11        [V18    ] ( 10, 27   )     int  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed "field V02._length (fldOffset=0x8)" P-DEP
+;  V15 tmp8         [V15,T27] (  3,  1.50)     ref  ->  rdi         class-hnd exact single-def "Inline stloc first use temp" <System.String[]>
+;  V16 tmp9         [V16,T23] (  4,  2   )     int  ->  rsi         "Inline stloc first use temp"
+;  V17 tmp10        [V17    ] ( 10, 27   )   byref  ->  [rbp-0x30]  do-not-enreg[X] addr-exposed "field V02._reference (fldOffset=0x0)" P-DEP
+;  V18 tmp11        [V18    ] ( 10, 27   )     int  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed "field V02._length (fldOffset=0x8)" P-DEP
 ;* V19 tmp12        [V19    ] (  0,  0   )   byref  ->  zero-ref    "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V20 tmp13        [V20    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
-;  V21 tmp14        [V21,T28] (  2,  1   )   byref  ->  rax         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;  V22 tmp15        [V22,T29] (  2,  1   )     int  ->  rcx         "field V08._length (fldOffset=0x8)" P-INDEP
+;  V21 tmp14        [V21,T31] (  2,  1   )   byref  ->  rax         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+;  V22 tmp15        [V22,T32] (  2,  1   )     int  ->  rcx         "field V08._length (fldOffset=0x8)" P-INDEP
 ;  V23 tmp16        [V23,T19] (  3,  3   )     ref  ->  rax         single-def "arr expr"
-;  V24 tmp17        [V24,T08] (  3, 24   )     ref  ->  rdi         "arr expr"
-;  V25 tmp18        [V25,T09] (  2, 16   )     ref  ->  rsi         "arr expr"
-;  V26 GsCookie     [V26    ] (  1,  1   )    long  ->  [rbp-0x30]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
-;  V27 cse0         [V27,T13] (  3, 10   )     int  ->  rcx         "CSE - moderate"
-;  V28 cse1         [V28,T30] (  2,  1   )     int  ->  rax         "CSE - moderate"
-;  V29 cse2         [V29,T11] (  3, 12   )     int  ->  rdx         "CSE - moderate"
-;  V30 cse3         [V30,T10] (  3, 12   )     ref  ->  rsi         "CSE - moderate"
-;  V31 cse4         [V31,T26] (  3,  1.50)    long  ->  rdx         "CSE - moderate"
-;  V32 cse5         [V32,T03] ( 15, 30.54)     int  ->  rdi         "CSE - aggressive"
-;  V33 cse6         [V33,T16] (  2,  8   )     int  ->  rax         "CSE - moderate"
-;  V34 cse7         [V34,T12] (  3, 11.88)     int  ->  rcx         "CSE - moderate"
-;  V35 cse8         [V35,T18] (  7,  3.50)     int  ->  rsi         "CSE - moderate"
-;  V36 cse9         [V36,T17] (  3,  6   )     int  ->  rdx         "CSE - moderate"
-;  V37 cse10        [V37,T22] (  4,  2   )     int  ->  rcx         "CSE - moderate"
-;  V38 cse11        [V38,T27] (  3,  1.50)     int  ->  rax         "CSE - moderate"
-;  V39 cse12        [V39,T01] (  3, 48   )    long  ->  rdx         "CSE - aggressive"
+;  V24 tmp17        [V24,T20] (  3,  3   )     ref  ->  rdi         single-def "arr expr"
+;  V25 tmp18        [V25,T08] (  3, 24   )     ref  ->  rdi         "arr expr"
+;  V26 tmp19        [V26,T09] (  2, 16   )     ref  ->  rsi         "arr expr"
+;  V27 tmp20        [V27,T21] (  3,  3   )     ref  ->  rdi         single-def "arr expr"
+;  V28 GsCookie     [V28    ] (  1,  1   )    long  ->  [rbp-0x38]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
+;  V29 cse0         [V29,T13] (  3, 10   )     int  ->  rcx         "CSE - moderate"
+;  V30 cse1         [V30,T33] (  2,  1   )     int  ->  rax         "CSE - moderate"
+;  V31 cse2         [V31,T11] (  3, 12   )     int  ->  rdx         "CSE - moderate"
+;  V32 cse3         [V32,T10] (  3, 12   )     ref  ->  rsi         "CSE - moderate"
+;  V33 cse4         [V33,T28] (  3,  1.50)    long  ->  rdx         "CSE - moderate"
+;  V34 cse5         [V34,T29] (  3,  1.50)     int  ->  r14         "CSE - moderate"
+;  V35 cse6         [V35,T03] ( 15, 30.54)     int  ->  rdi         "CSE - aggressive"
+;  V36 cse7         [V36,T16] (  2,  8   )     int  ->  rax         "CSE - moderate"
+;  V37 cse8         [V37,T12] (  3, 11.88)     int  ->  rcx         "CSE - moderate"
+;  V38 cse9         [V38,T18] (  7,  3.50)     int  ->  rsi         "CSE - moderate"
+;  V39 cse10        [V39,T17] (  3,  6   )     int  ->  rdx         "CSE - moderate"
+;  V40 cse11        [V40,T24] (  4,  2   )     int  ->  rcx         "CSE - moderate"
+;  V41 cse12        [V41,T30] (  3,  1.50)     int  ->  rax         "CSE - moderate"
+;  V42 cse13        [V42,T01] (  3, 48   )    long  ->  rdx         "CSE - aggressive"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 32
 
 G_M28069_IG01:
        push     rbp
        push     r15
        push     r14
+       push     r13
        push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x30]
+       sub      rsp, 32
+       lea      rbp, [rsp+0x40]
        xor      eax, eax
-       mov      qword ptr [rbp-0x28], rax
-       mov      qword ptr [rbp-0x30], 0xD1FFAB1E
+       mov      qword ptr [rbp-0x30], rax
+       mov      qword ptr [rbp-0x38], 0xD1FFAB1E
        mov      rbx, rdi
-						;; size=32 bbWeight=1 PerfScore 7.25
+						;; size=34 bbWeight=1 PerfScore 8.25
 G_M28069_IG02:
        cmp      dword ptr [rbx+0x10], 0
        je       G_M28069_IG26
 						;; size=10 bbWeight=1 PerfScore 4.00
 G_M28069_IG03:
        mov      rax, gword ptr [rbx+0x08]
        cmp      dword ptr [rax+0x08], 0
        jbe      G_M28069_IG30
        mov      r15, gword ptr [rax+0x10]
        mov      edi, dword ptr [r15+0x08]
        cmp      edi, 100
        jg       G_M28069_IG26
        lea      ecx, [rdi+0x02]
        mov      eax, ecx
        mov      esi, 2
        mul      rdx:rax, rsi
        jb       G_M28069_IG29
        test     rax, rax
        je       SHORT G_M28069_IG05
        mov      rdx, rax
        add      rdx, 15
        and      rdx, -16
        neg      rdx
        add      rdx, rsp
        jb       SHORT G_M28069_IG04
        xor      edx, edx
 						;; size=76 bbWeight=0.50 PerfScore 10.00
 G_M28069_IG04:
        test     dword ptr [rsp], esp
        sub      rsp, 0x1000
        cmp      rsp, rdx
        jae      SHORT G_M28069_IG04
        mov      rsp, rdx
        lea      rax, [rsp]
 						;; size=22 bbWeight=0.50 PerfScore 2.62
 G_M28069_IG05:
        test     ecx, ecx
        jl       G_M28069_IG31
-       mov      bword ptr [rbp-0x28], rax
-       mov      dword ptr [rbp-0x20], ecx
+       mov      bword ptr [rbp-0x30], rax
+       mov      dword ptr [rbp-0x28], ecx
        xor      eax, eax
        test     edi, edi
        jle      G_M28069_IG14
 						;; size=25 bbWeight=0.50 PerfScore 2.38
 G_M28069_IG06:
        mov      ecx, eax
        movzx    rcx, word  ptr [r15+2*rcx+0x0C]
        cmp      ecx, 39
        jne      SHORT G_M28069_IG10
        jmp      SHORT G_M28069_IG07
        align    [0 bytes for IG07]
 						;; size=15 bbWeight=4 PerfScore 22.00
 G_M28069_IG07:
-       cmp      eax, dword ptr [rbp-0x20]
+       cmp      eax, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rcx, bword ptr [rbp-0x28]
+       mov      rcx, bword ptr [rbp-0x30]
        mov      edx, eax
        movzx    rsi, word  ptr [r15+2*rdx+0x0C]
        mov      word  ptr [rcx+2*rdx], si
        inc      eax
        cmp      edi, eax
        jle      SHORT G_M28069_IG08
        mov      ecx, eax
        cmp      word  ptr [r15+2*rcx+0x0C], 39
        jne      SHORT G_M28069_IG07
 						;; size=42 bbWeight=16 PerfScore 208.00
 G_M28069_IG08:
        cmp      edi, eax
        jg       SHORT G_M28069_IG11
 						;; size=4 bbWeight=2 PerfScore 2.50
 G_M28069_IG09:
        jmp      G_M28069_IG26
        align    [0 bytes for IG16]
 						;; size=5 bbWeight=0.50 PerfScore 1.00
 G_M28069_IG10:
        cmp      ecx, 121
        je       SHORT G_M28069_IG13
 						;; size=5 bbWeight=2 PerfScore 2.50
 G_M28069_IG11:
-       cmp      eax, dword ptr [rbp-0x20]
+       cmp      eax, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rcx, bword ptr [rbp-0x28]
+       mov      rcx, bword ptr [rbp-0x30]
        mov      edx, eax
        mov      esi, eax
        movzx    rsi, word  ptr [r15+2*rsi+0x0C]
        mov      word  ptr [rcx+2*rdx], si
        inc      eax
        cmp      edi, eax
        jg       SHORT G_M28069_IG06
 						;; size=33 bbWeight=4 PerfScore 36.00
 G_M28069_IG12:
        jmp      SHORT G_M28069_IG14
 						;; size=2 bbWeight=0.50 PerfScore 1.00
 G_M28069_IG13:
-       cmp      eax, dword ptr [rbp-0x20]
+       cmp      eax, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rcx, bword ptr [rbp-0x28]
+       mov      rcx, bword ptr [rbp-0x30]
        mov      edx, eax
        mov      word  ptr [rcx+2*rdx], 121
 						;; size=21 bbWeight=0.50 PerfScore 2.62
 G_M28069_IG14:
        lea      ecx, [rdi-0x01]
        cmp      ecx, eax
        jle      G_M28069_IG26
        lea      ecx, [rax+0x01]
        cmp      ecx, edi
        jae      G_M28069_IG30
        mov      edx, ecx
        cmp      word  ptr [r15+2*rdx+0x0C], 121
        jne      G_M28069_IG26
        lea      esi, [rax+0x02]
        cmp      edi, esi
        jle      SHORT G_M28069_IG15
        cmp      esi, edi
        jae      G_M28069_IG30
        mov      r8d, esi
        cmp      word  ptr [r15+2*r8+0x0C], 121
        je       G_M28069_IG26
 						;; size=68 bbWeight=0.50 PerfScore 7.50
 G_M28069_IG15:
-       cmp      ecx, dword ptr [rbp-0x20]
+       cmp      ecx, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rcx, bword ptr [rbp-0x28]
+       mov      rcx, bword ptr [rbp-0x30]
        mov      word  ptr [rcx+2*rdx], 121
-       cmp      esi, dword ptr [rbp-0x20]
+       cmp      esi, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rcx, bword ptr [rbp-0x28]
+       mov      rcx, bword ptr [rbp-0x30]
        mov      edx, esi
        mov      word  ptr [rcx+2*rdx], 121
        add      eax, 3
-       cmp      eax, dword ptr [rbp-0x20]
+       cmp      eax, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rcx, bword ptr [rbp-0x28]
+       mov      rcx, bword ptr [rbp-0x30]
        mov      word  ptr [rcx+2*rax], 121
        mov      eax, esi
        cmp      edi, eax
        jle      SHORT G_M28069_IG19
        test     eax, eax
        jl       SHORT G_M28069_IG18
 						;; size=72 bbWeight=0.50 PerfScore 9.12
 G_M28069_IG16:
        lea      ecx, [rax+0x02]
-       cmp      ecx, dword ptr [rbp-0x20]
+       cmp      ecx, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rdx, bword ptr [rbp-0x28]
+       mov      rdx, bword ptr [rbp-0x30]
        mov      esi, eax
        movzx    rsi, word  ptr [r15+2*rsi+0x0C]
        mov      word  ptr [rdx+2*rcx], si
        inc      eax
        cmp      edi, eax
        jg       SHORT G_M28069_IG16
 						;; size=34 bbWeight=3.96 PerfScore 36.63
 G_M28069_IG17:
        jmp      SHORT G_M28069_IG19
 						;; size=2 bbWeight=0.50 PerfScore 1.00
 G_M28069_IG18:
        lea      ecx, [rax+0x02]
-       cmp      ecx, dword ptr [rbp-0x20]
+       cmp      ecx, dword ptr [rbp-0x28]
        jae      G_M28069_IG30
-       mov      rcx, bword ptr [rbp-0x28]
+       mov      rcx, bword ptr [rbp-0x30]
        lea      edx, [rax+0x02]
        cmp      eax, edi
        jae      G_M28069_IG30
        mov      esi, eax
        movzx    rsi, word  ptr [r15+2*rsi+0x0C]
        mov      word  ptr [rcx+2*rdx], si
        inc      eax
        cmp      edi, eax
        jg       SHORT G_M28069_IG18
 						;; size=45 bbWeight=0.04 PerfScore 0.44
 G_M28069_IG19:
-       lea      rdi, [rbp-0x28]
+       lea      rdi, [rbp-0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.Span`1[ushort]:ToString():System.String:this
        call     [rax]System.Span`1[ushort]:ToString():System.String:this
-       mov      rdx, rax
-       cmp      dword ptr [rbx+0x10], 0
+       mov      r14d, dword ptr [rbx+0x10]
+       test     r14d, r14d
        je       G_M28069_IG32
        mov      rdi, gword ptr [rbx+0x08]
-       xor      esi, esi
-       call     CORINFO_HELP_ARRADDR_ST
+       cmp      dword ptr [rdi+0x08], 0
+       jbe      G_M28069_IG30
+       lea      rdi, bword ptr [rdi+0x10]
+       mov      rsi, rax
+       call     CORINFO_HELP_ASSIGN_REF
        inc      dword ptr [rbx+0x14]
-       mov      r14d, 1
-       cmp      dword ptr [rbx+0x10], 1
+       mov      r13d, 1
+       cmp      r14d, 1
        jle      SHORT G_M28069_IG23
-						;; size=55 bbWeight=0.50 PerfScore 9.25
+						;; size=70 bbWeight=0.50 PerfScore 9.62
 G_M28069_IG20:
        mov      edx, dword ptr [rbx+0x10]
-       cmp      r14d, edx
+       cmp      r13d, edx
        jae      G_M28069_IG32
        mov      rsi, gword ptr [rbx+0x08]
        mov      rdi, rsi
        mov      eax, dword ptr [rdi+0x08]
-       cmp      r14d, eax
+       cmp      r13d, eax
        jae      G_M28069_IG30
-       mov      eax, r14d
+       mov      eax, r13d
        mov      rdi, gword ptr [rdi+8*rax+0x10]
        test     edx, edx
        je       G_M28069_IG32
        mov      rsi, gword ptr [rsi+0x10]
        cmp      rdi, rsi
        je       SHORT G_M28069_IG24
 						;; size=56 bbWeight=4 PerfScore 62.00
 G_M28069_IG21:
        test     rdi, rdi
        je       SHORT G_M28069_IG22
        test     rsi, rsi
        je       SHORT G_M28069_IG22
        mov      edx, dword ptr [rdi+0x08]
        cmp      edx, dword ptr [rsi+0x08]
        jne      SHORT G_M28069_IG22
        add      rdi, 12
        add      edx, edx
        add      rsi, 12
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
        call     [rax]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
        test     eax, eax
        jne      SHORT G_M28069_IG24
 						;; size=44 bbWeight=2 PerfScore 27.50
 G_M28069_IG22:
-       inc      r14d
-       cmp      r14d, dword ptr [rbx+0x10]
+       inc      r13d
+       cmp      r13d, dword ptr [rbx+0x10]
        jl       SHORT G_M28069_IG20
 						;; size=9 bbWeight=4 PerfScore 17.00
 G_M28069_IG23:
        inc      dword ptr [rbx+0x14]
        mov      rdi, gword ptr [rbx+0x08]
        mov      esi, dword ptr [rbx+0x10]
        mov      eax, dword ptr [rdi+0x08]
        cmp      eax, esi
        jbe      SHORT G_M28069_IG25
        lea      eax, [rsi+0x01]
        mov      dword ptr [rbx+0x10], eax
        lea      rdi, bword ptr [rdi+8*rsi+0x10]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        jmp      SHORT G_M28069_IG26
 						;; size=38 bbWeight=0.50 PerfScore 8.00
 G_M28069_IG24:
-       cmp      r14d, dword ptr [rbx+0x10]
+       cmp      r13d, dword ptr [rbx+0x10]
        jae      SHORT G_M28069_IG32
        mov      rdi, gword ptr [rbx+0x08]
-       movsxd   rsi, r14d
-       mov      rdx, r15
-       call     CORINFO_HELP_ARRADDR_ST
+       cmp      r13d, dword ptr [rdi+0x08]
+       jae      SHORT G_M28069_IG30
+       mov      esi, r13d
+       lea      rdi, bword ptr [rdi+8*rsi+0x10]
+       mov      rsi, r15
+       call     CORINFO_HELP_ASSIGN_REF
        inc      dword ptr [rbx+0x14]
        jmp      SHORT G_M28069_IG26
-						;; size=26 bbWeight=0.50 PerfScore 6.25
+						;; size=37 bbWeight=0.50 PerfScore 8.75
 G_M28069_IG25:
        mov      rdi, rbx
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
        call     [rax]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
 						;; size=18 bbWeight=0.50 PerfScore 1.88
 G_M28069_IG26:
-       cmp      qword ptr [rbp-0x30], 0xD1FFAB1E
+       cmp      qword ptr [rbp-0x38], 0xD1FFAB1E
        je       SHORT G_M28069_IG27
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M28069_IG27:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
 G_M28069_IG28:
-       lea      rsp, [rbp-0x18]
+       lea      rsp, [rbp-0x20]
        pop      rbx
+       pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=11 bbWeight=1 PerfScore 3.50
+						;; size=13 bbWeight=1 PerfScore 4.00
 G_M28069_IG29:
        call     CORINFO_HELP_OVERFLOW
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M28069_IG30:
        call     CORINFO_HELP_RNGCHKFAIL
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M28069_IG31:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M28069_IG32:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 822, prolog size 32, PerfScore 578.80, instruction count 233, allocated bytes for code 826 (MethodHash=bd52925a) for method System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
+; Total bytes of code 852, prolog size 34, PerfScore 586.17, instruction count 241, allocated bytes for code 856 (MethodHash=bd52925a) for method System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String]) (FullOpts)
28 (9.21 % of base) - System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte
 ; Assembly listing for method System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T07] (  3,  3   )     ref  ->  r14         class-hnd single-def <System.String>
-;  V01 arg1         [V01,T08] (  3,  3   )  ushort  ->  r13         single-def
-;  V02 arg2         [V02,T06] (  4,  3.50)     int  ->  r15         single-def
-;  V03 arg3         [V03,T05] (  4,  3.50)   byref  ->  rbx         single-def
+;  V00 arg0         [V00,T10] (  3,  3   )     ref  ->  r14         class-hnd single-def <System.String>
+;  V01 arg1         [V01,T11] (  3,  3   )  ushort  ->  r13         single-def
+;  V02 arg2         [V02,T09] (  4,  3.50)     int  ->  r15         single-def
+;  V03 arg3         [V03,T08] (  4,  3.50)   byref  ->  rbx         single-def
 ;  V04 loc0         [V04    ] (  5,  4.50)  struct (16) [rbp-0x38]  do-not-enreg[XS] addr-exposed ld-addr-op <System.Globalization.CalendarData+IcuEnumCalendarsData>
-;  V05 loc1         [V05,T09] (  3,  3   )   ubyte  ->  r14        
-;  V06 loc2         [V06,T01] ( 11, 30   )     ref  ->  r13         class-hnd single-def <System.Collections.Generic.List`1[System.String]>
+;  V05 loc1         [V05,T12] (  3,  3   )   ubyte  ->  r14        
+;  V06 loc2         [V06,T01] ( 10, 26   )     ref  ->  r13         class-hnd single-def <System.Collections.Generic.List`1[System.String]>
 ;  V07 loc3         [V07,T00] (  9, 32.50)     int  ->  r12        
 ;# V08 OutArgs      [V08    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V09 tmp1         [V09,T04] (  3,  6   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.String]>
+;  V09 tmp1         [V09,T07] (  3,  6   )     ref  ->  rax         class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.String]>
 ;* V10 tmp2         [V10    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;  V11 tmp3         [V11,T03] (  2, 16   )     ref  ->  rdx         class-hnd exact "Inlining Arg" <System.String>
+;  V11 tmp3         [V11,T04] (  2, 16   )     ref  ->  rax         class-hnd exact "Inlining Arg" <System.String>
 ;  V12 tmp4         [V12    ] (  4,  3.50)     ref  ->  [rbp-0x38]  do-not-enreg[X] addr-exposed "field V04.Results (fldOffset=0x0)" P-DEP
 ;  V13 tmp5         [V13    ] (  3,  3   )   ubyte  ->  [rbp-0x30]  do-not-enreg[X] addr-exposed "field V04.DisallowDuplicates (fldOffset=0x8)" P-DEP
 ;  V14 tmp6         [V14,T02] (  3, 24   )     ref  ->  rdi         "arr expr"
+;  V15 tmp7         [V15,T03] (  3, 24   )     ref  ->  rdi         "arr expr"
+;  V16 cse0         [V16,T05] (  3, 12   )     int  ->  [rbp-0x3C]  spill-single-def "CSE - aggressive"
+;  V17 cse1         [V17,T06] (  3, 12   )    long  ->  [rbp-0x48]  spill-single-def "CSE - aggressive"
 ;
-; Lcl frame size = 24
+; Lcl frame size = 40
 
 G_M35446_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 24
+       sub      rsp, 40
        vzeroupper 
-       lea      rbp, [rsp+0x40]
+       lea      rbp, [rsp+0x50]
        mov      r14, rdi
        mov      r13d, esi
        mov      r15d, edx
        mov      rbx, rcx
 						;; size=34 bbWeight=1 PerfScore 8.75
 G_M35446_IG02:
        xor      rdi, rdi
        mov      gword ptr [rbx], rdi
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbp-0x38], xmm0
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.List`1[System.String]
        call     CORINFO_HELP_NEWSFAST
        mov      rdx, 0xD1FFAB1E      ; 'System.String[]'
 
        mov      gword ptr [rax+0x08], rdx
        mov      gword ptr [rbp-0x38], rax
        mov      byte  ptr [rbp-0x30], 1
        movzx    rdx, r13w
        lea      r8, [rbp-0x38]
        mov      rsi, r14
        mov      ecx, r15d
        mov      rdi, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:EnumCalendarInfoCallback(ulong,long)
        mov      rax, 0xD1FFAB1E      ; code for Interop+Globalization:EnumCalendarInfo(long,System.String,ushort,int,long):ubyte
        call     [rax]Interop+Globalization:EnumCalendarInfo(long,System.String,ushort,int,long):ubyte
        mov      r14d, eax
        test     r14d, r14d
        je       G_M35446_IG07
 						;; size=99 bbWeight=1 PerfScore 13.33
 G_M35446_IG03:
        mov      r13, gword ptr [rbp-0x38]
        xor      r12d, r12d
        cmp      dword ptr [r13+0x10], 0
        jle      SHORT G_M35446_IG05
 						;; size=14 bbWeight=0.50 PerfScore 2.62
 G_M35446_IG04:
        cmp      r12d, dword ptr [r13+0x10]
        jae      G_M35446_IG10
        mov      rdi, gword ptr [r13+0x08]
        cmp      r12d, dword ptr [rdi+0x08]
-       jae      SHORT G_M35446_IG09
+       jae      G_M35446_IG09
        mov      eax, r12d
+       mov      qword ptr [rbp-0x48], rax
        mov      rdi, gword ptr [rdi+8*rax+0x10]
-       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
-       call     [rax]System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
-       mov      rdx, rax
-       cmp      r12d, dword ptr [r13+0x10]
+       mov      rcx, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
+       call     [rcx]System.Globalization.CalendarData:NormalizeDatePattern(System.String):System.String
+       mov      ecx, dword ptr [r13+0x10]
+       mov      dword ptr [rbp-0x3C], ecx
+       cmp      r12d, ecx
        jae      SHORT G_M35446_IG10
        mov      rdi, gword ptr [r13+0x08]
-       movsxd   rsi, r12d
-       call     CORINFO_HELP_ARRADDR_ST
+       cmp      r12d, dword ptr [rdi+0x08]
+       jae      SHORT G_M35446_IG09
+       mov      rsi, qword ptr [rbp-0x48]
+       lea      rdi, bword ptr [rdi+8*rsi+0x10]
+       mov      rsi, rax
+       call     CORINFO_HELP_ASSIGN_REF
        inc      dword ptr [r13+0x14]
        inc      r12d
-       cmp      r12d, dword ptr [r13+0x10]
+       mov      edi, dword ptr [rbp-0x3C]
+       cmp      r12d, edi
        jl       SHORT G_M35446_IG04
-						;; size=74 bbWeight=4 PerfScore 121.00
+						;; size=102 bbWeight=4 PerfScore 142.00
 G_M35446_IG05:
        cmp      r15d, 3
        jne      SHORT G_M35446_IG06
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String])
        call     [rax]System.Globalization.CalendarData:FixDefaultShortDatePattern(System.Collections.Generic.List`1[System.String])
 						;; size=21 bbWeight=0.50 PerfScore 2.38
 G_M35446_IG06:
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.List`1[System.__Canon]:ToArray():System.__Canon[]:this
        call     [rax]System.Collections.Generic.List`1[System.__Canon]:ToArray():System.__Canon[]:this
        mov      rsi, rax
        mov      rdi, rbx
        call     CORINFO_HELP_CHECKED_ASSIGN_REF
 						;; size=26 bbWeight=0.50 PerfScore 2.50
 G_M35446_IG07:
        mov      eax, r14d
 						;; size=3 bbWeight=1 PerfScore 0.25
 G_M35446_IG08:
-       add      rsp, 24
+       add      rsp, 40
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M35446_IG09:
        call     CORINFO_HELP_RNGCHKFAIL
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M35446_IG10:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 304, prolog size 22, PerfScore 185.48, instruction count 80, allocated bytes for code 304 (MethodHash=99757589) for method System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
+; Total bytes of code 332, prolog size 22, PerfScore 209.28, instruction count 87, allocated bytes for code 332 (MethodHash=99757589) for method System.Globalization.CalendarData:EnumDatePatterns(System.String,ushort,int,byref):ubyte (FullOpts)
13 (1.21 % of base) - System.Threading.TimerQueue:TimerThread()
 ; Assembly listing for method System.Threading.TimerQueue:TimerThread() (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 17 single block inlinees; 15 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 loc0         [V00,T21] (  7, 196   )     ref  ->  rbx         class-hnd exact single-def <System.Threading.AutoResetEvent>
+;  V00 loc0         [V00,T22] (  7, 196   )     ref  ->  rbx         class-hnd exact single-def <System.Threading.AutoResetEvent>
 ;  V01 loc1         [V01,T00] ( 16,1249   )     ref  ->  r15         class-hnd single-def <System.Collections.Generic.List`1[System.Threading.TimerQueue]>
 ;  V02 loc2         [V02,T05] (  9, 641   )     ref  ->  r14         class-hnd single-def <System.Collections.Generic.List`1[System.Threading.TimerQueue]>
 ;  V03 loc3         [V03,T11] (  8, 392   )     int  ->  registers  
-;  V04 loc4         [V04,T35] (  2,   0   )     ref  ->  [rbp-0x50]  class-hnd exact EH-live single-def <System.Threading.AutoResetEvent>
+;  V04 loc4         [V04,T37] (  2,   0   )     ref  ->  [rbp-0x50]  class-hnd exact EH-live single-def <System.Threading.AutoResetEvent>
 ;  V05 loc5         [V05    ] (  5,   4   )   ubyte  ->  [rbp-0x30]  do-not-enreg[X] addr-exposed ld-addr-op
-;  V06 loc6         [V06,T25] (  2, 192   )    long  ->  r13        
-;  V07 loc7         [V07,T28] (  3,  80   )     ref  ->  [rbp-0x58]  do-not-enreg[Z] class-hnd exact EH-live <System.Threading.AutoResetEvent>
+;  V06 loc6         [V06,T27] (  2, 192   )    long  ->  r13        
+;  V07 loc7         [V07,T30] (  3,  80   )     ref  ->  [rbp-0x58]  do-not-enreg[Z] class-hnd exact EH-live <System.Threading.AutoResetEvent>
 ;  V08 loc8         [V08    ] (  5, 256   )   ubyte  ->  [rbp-0x38]  do-not-enreg[X] addr-exposed ld-addr-op
-;  V09 loc9         [V09,T01] ( 11,1088   )     int  ->  [rbp-0x3C] 
+;  V09 loc9         [V09,T01] ( 12,1152   )     int  ->  [rbp-0x3C] 
 ;  V10 loc10        [V10,T09] (  5, 448   )     ref  ->  rsi         class-hnd exact <System.Threading.TimerQueue>
 ;  V11 loc11        [V11,T13] (  4, 384   )    long  ->  rcx        
 ;  V12 loc12        [V12,T12] (  6, 384   )     int  ->  [rbp-0x40]  spill-single-def
 ;* V13 loc13        [V13    ] (  0,   0   )  struct (24) zero-ref    ld-addr-op <System.Collections.Generic.List`1+Enumerator[System.Threading.TimerQueue]>
 ;* V14 loc14        [V14    ] (  0,   0   )     ref  ->  zero-ref    class-hnd exact <System.Threading.TimerQueue>
 ;# V15 OutArgs      [V15    ] (  1,   1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V16 tmp1         [V16    ] (  0,   0   )     int  ->  zero-ref    ld-addr-op "Inlining Arg"
-;* V17 tmp2         [V17,T29] (  0,   0   )     int  ->  zero-ref    "Inline return value spill temp"
-;  V18 tmp3         [V18,T22] (  3, 192   )     ref  ->  rdi         class-hnd "Inline stloc first use temp" <System.Threading.TimerQueue[]>
+;* V17 tmp2         [V17,T31] (  0,   0   )     int  ->  zero-ref    "Inline return value spill temp"
+;  V18 tmp3         [V18,T23] (  3, 192   )     ref  ->  rdi         class-hnd exact "Inline stloc first use temp" <System.Threading.TimerQueue[]>
 ;  V19 tmp4         [V19,T17] (  4, 256   )     int  ->  rcx         "Inline stloc first use temp"
-;  V20 tmp5         [V20,T19] (  2, 256   )     ref  ->  rdx         class-hnd "Inlining Arg" <System.__Canon>
+;  V20 tmp5         [V20,T19] (  2, 256   )     ref  ->  rdx         class-hnd exact "Inlining Arg" <System.Threading.TimerQueue>
 ;* V21 tmp6         [V21    ] (  0,   0   )  struct (24) zero-ref    ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[System.Threading.TimerQueue]>
 ;  V22 tmp7         [V22,T06] (  5, 640   )     ref  ->  [rbp-0x60]  class-hnd exact spill-single-def "Inlining Arg" <System.Threading.ThreadPoolWorkQueue>
 ;* V23 tmp8         [V23    ] (  0,   0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Diagnostics.Tracing.FrameworkEventSource>
 ;  V24 tmp9         [V24,T14] (  3, 384   )     ref  ->  [rbp-0x68]  class-hnd spill-single-def "Inlining Arg" <System.Collections.Concurrent.ConcurrentQueue`1[System.Object]>
 ;  V25 tmp10        [V25,T07] (  5, 640   )     ref  ->  [rbp-0x70]  class-hnd exact "Inlining Arg" <System.Threading.PortableThreadPool>
 ;* V26 tmp11        [V26    ] (  0,   0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V27 tmp12        [V27    ] (  0,   0   )     int  ->  zero-ref    "impAppendStmt"
-;* V28 tmp13        [V28,T20] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;* V28 tmp13        [V28,T21] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V29 tmp14        [V29    ] (  0,   0   )     ref  ->  zero-ref    class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[System.Threading.TimerQueue]>
 ;  V30 tmp15        [V30,T16] (  3, 272   )     int  ->  rdx         "Inline stloc first use temp"
-;* V31 tmp16        [V31,T32] (  0,   0   )     ref  ->  zero-ref    "field V13._list (fldOffset=0x0)" P-INDEP
+;* V31 tmp16        [V31,T34] (  0,   0   )     ref  ->  zero-ref    "field V13._list (fldOffset=0x0)" P-INDEP
 ;  V32 tmp17        [V32,T10] (  4, 320   )     ref  ->  [rbp-0x78]  spill-single-def "field V13._current (fldOffset=0x8)" P-INDEP
 ;  V33 tmp18        [V33,T02] (  6, 656   )     int  ->  [rbp-0x44]  "field V13._index (fldOffset=0x10)" P-INDEP
-;  V34 tmp19        [V34,T26] (  2, 144   )     int  ->  r13         "field V13._version (fldOffset=0x14)" P-INDEP
-;  V35 tmp20        [V35,T30] (  2,  32   )     ref  ->  rdi         "field V21._list (fldOffset=0x0)" P-INDEP
+;  V34 tmp19        [V34,T28] (  2, 144   )     int  ->  r13         "field V13._version (fldOffset=0x14)" P-INDEP
+;  V35 tmp20        [V35,T32] (  2,  32   )     ref  ->  rdi         "field V21._list (fldOffset=0x0)" P-INDEP
 ;* V36 tmp21        [V36    ] (  0,   0   )     ref  ->  zero-ref    "field V21._current (fldOffset=0x8)" P-INDEP
-;* V37 tmp22        [V37,T33] (  0,   0   )     int  ->  zero-ref    "field V21._index (fldOffset=0x10)" P-INDEP
-;  V38 tmp23        [V38,T31] (  2,  32   )     int  ->  r13         "field V21._version (fldOffset=0x14)" P-INDEP
-;  V39 tmp24        [V39,T36] (  2,   0   )     ref  ->  rdx         "argument with side effect"
+;* V37 tmp22        [V37,T35] (  0,   0   )     int  ->  zero-ref    "field V21._index (fldOffset=0x10)" P-INDEP
+;  V38 tmp23        [V38,T33] (  2,  32   )     int  ->  r13         "field V21._version (fldOffset=0x14)" P-INDEP
+;  V39 tmp24        [V39,T38] (  2,   0   )     ref  ->  rdx         "argument with side effect"
 ;  V40 tmp25        [V40,T03] (  3, 768   )     ref  ->  rdi         "arr expr"
 ;  V41 tmp26        [V41,T15] (  3, 384   )     ref  ->  rdx         "arr expr"
-;  V42 tmp27        [V42,T04] (  3, 768   )     ref  ->  rsi         "arr expr"
-;  V43 PSPSym       [V43,T34] (  1,   1   )    long  ->  [rbp-0x80]  do-not-enreg[V] "PSPSym"
-;  V44 cse0         [V44,T23] (  3, 192   )     ref  ->  rsi         "CSE - moderate"
-;  V45 cse1         [V45,T08] (  3, 384   )     int  ->  rdx         "CSE - moderate"
-;  V46 cse2         [V46,T18] (  4, 256   )     int  ->  rdi         "CSE - moderate"
-;  V47 cse3         [V47,T24] (  3, 192   )     ref  ->  rsi         "CSE - moderate"
-;  V48 cse4         [V48,T27] (  2, 128   )     int  ->  rdx         "CSE - moderate"
+;  V42 tmp27        [V42,T20] (  2, 256   )     ref  ->  rsi         "arr expr"
+;  V43 tmp28        [V43,T04] (  3, 768   )     ref  ->  rsi         "arr expr"
+;  V44 PSPSym       [V44,T36] (  1,   1   )    long  ->  [rbp-0x80]  do-not-enreg[V] "PSPSym"
+;  V45 cse0         [V45,T24] (  3, 192   )     ref  ->  rsi         "CSE - moderate"
+;  V46 cse1         [V46,T08] (  3, 384   )     int  ->  rdx         "CSE - moderate"
+;  V47 cse2         [V47,T18] (  4, 256   )     int  ->  rdi         "CSE - moderate"
+;  V48 cse3         [V48,T25] (  3, 192   )     ref  ->  rsi         "CSE - moderate"
+;  V49 cse4         [V49,T29] (  2, 128   )     int  ->  rdx         "CSE - moderate"
+;  V50 cse5         [V50,T26] (  3, 192   )     int  ->   r8         "CSE - moderate"
 ;
 ; Lcl frame size = 88
 
 G_M45973_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 88
        lea      rbp, [rsp+0x80]
        mov      qword ptr [rbp-0x80], rsp
 						;; size=26 bbWeight=1 PerfScore 7.75
 G_M45973_IG02:
        mov      rsi, 0xD1FFAB1E      ; const ptr
        mov      rbx, gword ptr [rsi]
        mov      rsi, 0xD1FFAB1E      ; data for System.Threading.TimerQueue:s_scheduledTimersToFire
        mov      r15, gword ptr [rsi]
        mov      gword ptr [rbp-0x50], rbx
        xor      esi, esi
        mov      dword ptr [rbp-0x30], esi
 						;; size=35 bbWeight=1 PerfScore 6.75
 G_M45973_IG03:
        cmp      byte  ptr [rbp-0x30], 0
        jne      SHORT G_M45973_IG04
        lea      rsi, [rbp-0x30]
        mov      rdi, rbx
        call     System.Threading.Monitor:ReliableEnter(System.Object,byref)
        mov      rdi, 0xD1FFAB1E      ; data for System.Threading.TimerQueue:s_scheduledTimers
        mov      r14, gword ptr [rdi]
        jmp      SHORT G_M45973_IG05
 						;; size=33 bbWeight=1 PerfScore 9.00
 G_M45973_IG04:
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.Monitor:ThrowLockTakenException()
        call     [rax]System.Threading.Monitor:ThrowLockTakenException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M45973_IG05:
        cmp      byte  ptr [rbp-0x30], 0
        je       SHORT G_M45973_IG06
        mov      rdi, rbx
        call     System.Threading.Monitor:Exit(System.Object)
 						;; size=14 bbWeight=1 PerfScore 4.25
 G_M45973_IG06:
        mov      r13d, -1
 						;; size=6 bbWeight=8 PerfScore 2.00
 G_M45973_IG07:
        cmp      r13d, -1
        jl       G_M45973_IG37
        mov      rdi, rbx
        mov      esi, r13d
        xor      rdx, rdx
        xor      ecx, ecx
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.WaitHandle:WaitOneNoCheck(int,System.Object,ubyte):ubyte:this
        call     [rax]System.Threading.WaitHandle:WaitOneNoCheck(int,System.Object,ubyte):ubyte:this
        call     System.Environment:get_TickCount64():long
        mov      r13, rax
        mov      r12d, 0xD1FFAB1E
        mov      gword ptr [rbp-0x58], rbx
        xor      esi, esi
        mov      dword ptr [rbp-0x38], esi
 						;; size=55 bbWeight=64 PerfScore 592.00
 G_M45973_IG08:
        cmp      byte  ptr [rbp-0x38], 0
        jne      G_M45973_IG20
        lea      rsi, [rbp-0x38]
        mov      rdi, rbx
        call     System.Threading.Monitor:ReliableEnter(System.Object,byref)
        mov      eax, dword ptr [r14+0x10]
        dec      eax
        js       G_M45973_IG21
 						;; size=34 bbWeight=64 PerfScore 512.00
 G_M45973_IG09:
        cmp      eax, dword ptr [r14+0x10]
        jae      G_M45973_IG16
        mov      rdi, gword ptr [r14+0x08]
        cmp      eax, dword ptr [rdi+0x08]
        jae      G_M45973_IG19
        mov      dword ptr [rbp-0x3C], eax
        mov      esi, eax
        mov      rsi, gword ptr [rdi+8*rsi+0x10]
        mov      rcx, qword ptr [rsi+0x30]
        sub      rcx, r13
        test     rcx, rcx
        jg       G_M45973_IG18
 						;; size=49 bbWeight=128 PerfScore 2144.00
 G_M45973_IG10:
        mov      byte  ptr [rsi+0x3D], 0
        inc      dword ptr [r15+0x14]
        mov      rdi, gword ptr [r15+0x08]
        mov      ecx, dword ptr [r15+0x10]
        mov      edx, dword ptr [rdi+0x08]
        cmp      edx, ecx
        jbe      G_M45973_IG17
        lea      edx, [rcx+0x01]
        mov      dword ptr [r15+0x10], edx
        lea      rdi, bword ptr [rdi+8*rcx+0x10]
        call     CORINFO_HELP_ASSIGN_REF
 						;; size=44 bbWeight=64 PerfScore 944.00
 G_M45973_IG11:
        mov      edi, dword ptr [r14+0x10]
        lea      eax, [rdi-0x01]
        mov      dword ptr [rbp-0x40], eax
        mov      ecx, dword ptr [rbp-0x3C]
        cmp      ecx, eax
        je       SHORT G_M45973_IG15
        cmp      eax, edi
        jae      SHORT G_M45973_IG16
        mov      rsi, gword ptr [r14+0x08]
        mov      rdx, rsi
-       cmp      eax, dword ptr [rdx+0x08]
+       mov      r8d, dword ptr [rdx+0x08]
+       cmp      eax, r8d
        jae      SHORT G_M45973_IG19
-       mov      r8d, eax
-       mov      rdx, gword ptr [rdx+8*r8+0x10]
+       mov      r9d, eax
+       mov      rdx, gword ptr [rdx+8*r9+0x10]
        cmp      ecx, edi
        jae      SHORT G_M45973_IG16
-       mov      rdi, rsi
+       cmp      ecx, r8d
+       jae      SHORT G_M45973_IG19
        mov      dword ptr [rbp-0x3C], ecx
-       movsxd   rsi, ecx
-       call     CORINFO_HELP_ARRADDR_ST
+       mov      edi, ecx
+       lea      rdi, bword ptr [rsi+8*rdi+0x10]
+       mov      rsi, rdx
+       call     CORINFO_HELP_ASSIGN_REF
        inc      dword ptr [r14+0x14]
        mov      eax, dword ptr [rbp-0x40]
-						;; size=66 bbWeight=64 PerfScore 1488.00
+						;; size=79 bbWeight=64 PerfScore 1584.00
 G_M45973_IG12:
        mov      rdi, r14
        mov      esi, eax
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Generic.List`1[System.__Canon]:RemoveAt(int):this
        call     [rax]System.Collections.Generic.List`1[System.__Canon]:RemoveAt(int):this
 						;; size=17 bbWeight=64 PerfScore 240.00
 G_M45973_IG13:
        mov      eax, dword ptr [rbp-0x3C]
        dec      eax
        jns      G_M45973_IG09
 						;; size=11 bbWeight=128 PerfScore 288.00
 G_M45973_IG14:
        jmp      SHORT G_M45973_IG21
 						;; size=2 bbWeight=16 PerfScore 32.00
 G_M45973_IG15:
        mov      dword ptr [rbp-0x3C], ecx
        jmp      SHORT G_M45973_IG12
 						;; size=5 bbWeight=32 PerfScore 96.00
 G_M45973_IG16:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRange_IndexMustBeLessException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M45973_IG17:
        mov      rdi, r15
        mov      rcx, 0xD1FFAB1E      ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
        call     [rcx]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this
        jmp      G_M45973_IG11
 						;; size=20 bbWeight=64 PerfScore 352.00
 G_M45973_IG18:
        movsxd   rdi, r12d
        cmp      rcx, rdi
        jge      SHORT G_M45973_IG13
        mov      r12d, ecx
        jmp      SHORT G_M45973_IG13
 						;; size=13 bbWeight=64 PerfScore 240.00
 G_M45973_IG19:
        call     CORINFO_HELP_RNGCHKFAIL
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M45973_IG20:
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.Monitor:ThrowLockTakenException()
        call     [rax]System.Threading.Monitor:ThrowLockTakenException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M45973_IG21:
        cmp      byte  ptr [rbp-0x38], 0
        je       SHORT G_M45973_IG23
 						;; size=6 bbWeight=64 PerfScore 192.00
 G_M45973_IG22:
        mov      rdi, gword ptr [rbp-0x58]
        call     System.Threading.Monitor:Exit(System.Object)
 						;; size=9 bbWeight=16 PerfScore 32.00
 G_M45973_IG23:
        cmp      dword ptr [r15+0x10], 0
        jle      G_M45973_IG33
 						;; size=11 bbWeight=64 PerfScore 256.00
 G_M45973_IG24:
        mov      rdi, r15
        mov      r13d, dword ptr [rdi+0x14]
        xor      edi, edi
        jmp      G_M45973_IG29
 						;; size=14 bbWeight=16 PerfScore 72.00
 G_M45973_IG25:
        mov      rsi, 0xD1FFAB1E      ; const ptr
        mov      rcx, gword ptr [rsi]
        mov      gword ptr [rbp-0x60], rcx
        cmp      byte  ptr [rcx+0x34], 0
        je       SHORT G_M45973_IG26
        mov      rsi, 0xD1FFAB1E      ; const ptr
        mov      rsi, gword ptr [rsi]
        cmp      byte  ptr [rsi+0x9D], 0
        je       SHORT G_M45973_IG26
        mov      rdi, rsi
        mov      rsi, rax
        mov      rdx, 0xD1FFAB1E      ; code for System.Diagnostics.Tracing.FrameworkEventSource:ThreadPoolEnqueueWorkObject(System.Object):this
        call     [rdx]System.Diagnostics.Tracing.FrameworkEventSource:ThreadPoolEnqueueWorkObject(System.Object):this
        mov      rax, gword ptr [rbp-0x78]
 						;; size=67 bbWeight=64 PerfScore 1168.00
 G_M45973_IG26:
        mov      rcx, gword ptr [rbp-0x60]
        mov      rdx, gword ptr [rcx+0x10]
        mov      gword ptr [rbp-0x68], rdx
        mov      rdi, gword ptr [rdx+0x10]
        mov      rsi, rax
        mov      r8, 0xD1FFAB1E      ; code for System.Collections.Concurrent.ConcurrentQueueSegment`1[System.__Canon]:TryEnqueue(System.__Canon):ubyte:this
        cmp      dword ptr [rdi], edi
        call     [r8]System.Collections.Concurrent.ConcurrentQueueSegment`1[System.__Canon]:TryEnqueue(System.__Canon):ubyte:this
        test     eax, eax
        jne      SHORT G_M45973_IG27
        mov      rdi, gword ptr [rbp-0x68]
        mov      rsi, gword ptr [rbp-0x78]
        mov      rax, 0xD1FFAB1E      ; code for System.Collections.Concurrent.ConcurrentQueue`1[System.__Canon]:EnqueueSlow(System.__Canon):this
        call     [rax]System.Collections.Concurrent.ConcurrentQueue`1[System.__Canon]:EnqueueSlow(System.__Canon):this
 						;; size=58 bbWeight=64 PerfScore 1216.00
 G_M45973_IG27:
        mov      rdi, gword ptr [rbp-0x60]
        mov      dword ptr [rdi+0x30], 1
        add      rdi, 116
        mov      ecx, 1
        xor      eax, eax
        lock     
        cmpxchg  dword ptr [rdi], ecx
        test     eax, eax
        mov      edi, dword ptr [rbp-0x44]
        jne      SHORT G_M45973_IG29
        mov      rax, 0xD1FFAB1E      ; global ptr
        test     byte  ptr [rax], 1
        mov      dword ptr [rbp-0x44], edi
        je       G_M45973_IG36
 						;; size=55 bbWeight=64 PerfScore 1808.00
 G_M45973_IG28:
        mov      rax, 0xD1FFAB1E      ; data for System.Threading.PortableThreadPool:ThreadPoolInstance
        mov      rax, gword ptr [rax]
        lea      rcx, bword ptr [rax+0x160]
        lock     
        inc      dword ptr [rcx]
        mov      gword ptr [rbp-0x70], rax
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Threading.PortableThreadPool+WorkerThread:MaybeAddWorkingWorker(System.Threading.PortableThreadPool)
        call     [rcx]System.Threading.PortableThreadPool+WorkerThread:MaybeAddWorkingWorker(System.Threading.PortableThreadPool)
        mov      rax, gword ptr [rbp-0x70]
        cmp      dword ptr [rax+0x164], 6
        je       SHORT G_M45973_IG30
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.PortableThreadPool+GateThread:EnsureRunningSlow(System.Threading.PortableThreadPool)
        call     [rax]System.Threading.PortableThreadPool+GateThread:EnsureRunningSlow(System.Threading.PortableThreadPool)
        mov      edi, dword ptr [rbp-0x44]
 						;; size=73 bbWeight=64 PerfScore 2096.00
 G_M45973_IG29:
        cmp      r13d, dword ptr [r15+0x14]
        jne      G_M45973_IG38
        mov      edx, dword ptr [r15+0x10]
        cmp      edi, edx
        jae      SHORT G_M45973_IG31
        mov      rsi, gword ptr [r15+0x08]
        cmp      edi, dword ptr [rsi+0x08]
        jae      SHORT G_M45973_IG35
        mov      eax, edi
        mov      rax, gword ptr [rsi+8*rax+0x10]
        mov      gword ptr [rbp-0x78], rax
        inc      edi
        mov      dword ptr [rbp-0x44], edi
        jmp      G_M45973_IG25
 						;; size=48 bbWeight=128 PerfScore 2528.00
 G_M45973_IG30:
        mov      edi, dword ptr [rbp-0x44]
        jmp      SHORT G_M45973_IG29
 						;; size=5 bbWeight=32 PerfScore 96.00
 G_M45973_IG31:
        inc      dword ptr [r15+0x14]
        xor      edi, edi
        mov      dword ptr [r15+0x10], edi
        test     edx, edx
        jle      SHORT G_M45973_IG33
 						;; size=14 bbWeight=128 PerfScore 704.00
 G_M45973_IG32:
        mov      rdi, gword ptr [r15+0x08]
        xor      esi, esi
        mov      rax, 0xD1FFAB1E      ; code for System.Array:Clear(System.Array,int,int)
        call     [rax]System.Array:Clear(System.Array,int,int)
 						;; size=18 bbWeight=16 PerfScore 88.00
 G_M45973_IG33:
        cmp      r12d, 0xD1FFAB1E
        mov      r13d, r12d
        jne      G_M45973_IG07
 						;; size=16 bbWeight=64 PerfScore 96.00
 G_M45973_IG34:
        jmp      G_M45973_IG06
 						;; size=5 bbWeight=8 PerfScore 16.00
 G_M45973_IG35:
        call     CORINFO_HELP_RNGCHKFAIL
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M45973_IG36:
        mov      rdi, 0xD1FFAB1E
        mov      esi, 902
        call     CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
        jmp      G_M45973_IG28
 						;; size=25 bbWeight=0 PerfScore 0.00
 G_M45973_IG37:
        mov      edi, 0x961
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdx, rax
        mov      edi, r13d
        mov      esi, -1
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:ThrowLess[int](int,int,System.String)
        call     [rax]System.ArgumentOutOfRangeException:ThrowLess[int](int,int,System.String)
        int3     
 						;; size=44 bbWeight=0 PerfScore 0.00
 G_M45973_IG38:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
        call     [rax]System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M45973_IG39:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x80]
 						;; size=25 bbWeight=0 PerfScore 0.00
 G_M45973_IG40:
        cmp      byte  ptr [rbp-0x30], 0
        je       SHORT G_M45973_IG41
        mov      rdi, gword ptr [rbp-0x50]
        call     System.Threading.Monitor:Exit(System.Object)
 						;; size=15 bbWeight=0 PerfScore 0.00
 G_M45973_IG41:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
 G_M45973_IG42:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
 G_M45973_IG43:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x80]
 						;; size=25 bbWeight=0 PerfScore 0.00
 G_M45973_IG44:
        cmp      byte  ptr [rbp-0x38], 0
        je       SHORT G_M45973_IG45
        mov      rdi, gword ptr [rbp-0x58]
        call     System.Threading.Monitor:Exit(System.Object)
 						;; size=15 bbWeight=0 PerfScore 0.00
 G_M45973_IG45:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
 G_M45973_IG46:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1072, prolog size 26, PerfScore 17432.95, instruction count 285, allocated bytes for code 1072 (MethodHash=b6f44c6a) for method System.Threading.TimerQueue:TimerThread() (FullOpts)
+; Total bytes of code 1085, prolog size 26, PerfScore 17530.25, instruction count 289, allocated bytes for code 1085 (MethodHash=b6f44c6a) for method System.Threading.TimerQueue:TimerThread() (FullOpts)

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 11, 2024

Top method improvements

-32 (-2.87 % of base) - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String
 ; Assembly listing for method System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 12 single block inlinees; 19 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T01] ( 12, 15   )     ref  ->  rbx         class-hnd single-def <System.String>
 ;  V01 arg1         [V01,T17] (  5,  4   )     ref  ->  r15         class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.String]>
 ;  V02 loc0         [V02,T25] (  4,  3   )     ref  ->  rax         class-hnd single-def <System.Collections.Generic.List`1[System.String]>
 ;  V03 loc1         [V03,T28] (  5,  2.25)     ref  ->  rdi         class-hnd exact <System.String[]>
 ;  V04 loc2         [V04,T04] (  9, 10   )     ref  ->  [rbp-0x50]  class-hnd EH-live single-def <System.Collections.Generic.IEnumerator`1[System.String]>
 ;  V05 loc3         [V05,T24] (  6,  3   )     ref  ->  r13         class-hnd single-def <System.String>
 ;  V06 loc4         [V06    ] ( 33, 49.50)  struct (32) [rbp-0x48]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
 ;  V07 loc5         [V07,T29] (  4,  2   )     ref  ->  r13         class-hnd <System.String>
 ;* V08 loc6         [V08    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
 ;# V09 OutArgs      [V09    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V10 tmp1         [V10    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "spilling QMark2" <System.String[]>
 ;* V11 tmp2         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V12 tmp3         [V12,T26] (  5,  2.50)     ref  ->  r13        
 ;* V13 tmp4         [V13    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
 ;* V14 tmp5         [V14    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V15 tmp6         [V15    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V16 tmp7         [V16    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[System.__Canon]>
 ;* V17 tmp8         [V17    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[System.String]>
 ;* V18 tmp9         [V18    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V19 tmp10        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
 ;  V20 tmp11        [V20,T30] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
 ;  V21 tmp12        [V21,T32] (  2,  2   )     int  ->  r14         "Inlining Arg"
 ;* V22 tmp13        [V22    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.Span`1[System.String]>
 ;* V23 tmp14        [V23    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[System.String]>
 ;* V24 tmp15        [V24    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[System.String]>
-;  V25 tmp16        [V25,T22] (  5,  5   )     ref  ->  rdx         class-hnd single-def "Inlining Arg" <System.__Canon[]>
+;  V25 tmp16        [V25,T22] (  4,  4   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.String[]>
 ;  V26 tmp17        [V26,T23] (  4,  4   )     int  ->  rcx         "Inlining Arg"
 ;* V27 tmp18        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[System.String]>
 ;* V28 tmp19        [V28    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
 ;* V29 tmp20        [V29    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
 ;* V30 tmp21        [V30    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V31 tmp22        [V31    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
 ;* V32 tmp23        [V32    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
 ;  V33 tmp24        [V33,T31] (  2,  2   )   byref  ->  rsi         single-def "Inlining Arg"
 ;  V34 tmp25        [V34,T33] (  2,  2   )     int  ->  rdx         "Inlining Arg"
 ;  V35 tmp26        [V35,T34] (  2,  2   )    long  ->  rdi         "Inlining Arg"
 ;  V36 tmp27        [V36,T27] (  5,  2.50)     int  ->  rdi         "Inline stloc first use temp"
 ;  V37 tmp28        [V37,T05] (  5, 10   )     int  ->  rsi         "Inline stloc first use temp"
 ;  V38 tmp29        [V38,T06] (  5, 10   )     int  ->  r13         "Inline stloc first use temp"
 ;* V39 tmp30        [V39    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V40 tmp31        [V40    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V41 tmp32        [V41,T09] (  2,  8   )   byref  ->  rdi         "Inlining Arg"
 ;  V42 tmp33        [V42,T13] (  2,  8   )     int  ->  rdx         "Inlining Arg"
 ;* V43 tmp34        [V43    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V44 tmp35        [V44    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V45 tmp36        [V45,T10] (  2,  8   )   byref  ->  rsi         "Inlining Arg"
 ;  V46 tmp37        [V46,T14] (  2,  8   )    long  ->  rdx         "Inlining Arg"
 ;* V47 tmp38        [V47    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V48 tmp39        [V48,T00] (  5, 28   )     ref  ->  r14         class-hnd "Inlining Arg" <System.__Canon>
 ;  V49 tmp40        [V49,T07] (  5, 10   )     int  ->  rsi         "Inline stloc first use temp"
 ;  V50 tmp41        [V50,T08] (  5, 10   )     int  ->  r13         "Inline stloc first use temp"
 ;* V51 tmp42        [V51    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;* V52 tmp43        [V52    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V53 tmp44        [V53,T11] (  2,  8   )   byref  ->  rdi         "Inlining Arg"
 ;  V54 tmp45        [V54,T15] (  2,  8   )     int  ->  rdx         "Inlining Arg"
 ;* V55 tmp46        [V55    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V56 tmp47        [V56    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V57 tmp48        [V57,T12] (  2,  8   )   byref  ->  rsi         "Inlining Arg"
 ;  V58 tmp49        [V58,T16] (  2,  8   )    long  ->  rdx         "Inlining Arg"
 ;* V59 tmp50        [V59    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V60 tmp51        [V60    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V08._reference (fldOffset=0x0)" P-INDEP
 ;* V61 tmp52        [V61    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
 ;  V62 tmp53        [V62,T41] (  2,  1   )   byref  ->  rdi         single-def "field V11._reference (fldOffset=0x0)" P-INDEP
 ;* V63 tmp54        [V63,T53] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
 ;  V64 tmp55        [V64,T42] (  2,  1   )   byref  ->  rcx         single-def "field V13._reference (fldOffset=0x0)" P-INDEP
 ;  V65 tmp56        [V65,T47] (  2,  1   )     int  ->  rax         "field V13._length (fldOffset=0x8)" P-INDEP
 ;  V66 tmp57        [V66,T35] (  3,  1.50)   byref  ->  rsi         "field V14._reference (fldOffset=0x0)" P-INDEP
 ;  V67 tmp58        [V67,T38] (  3,  1.50)     int  ->  rdx         "field V14._length (fldOffset=0x8)" P-INDEP
 ;  V68 tmp59        [V68,T36] (  3,  1.50)   byref  ->  rdi         "field V15._reference (fldOffset=0x0)" P-INDEP
 ;  V69 tmp60        [V69,T39] (  3,  1.50)     int  ->  rsi         "field V15._length (fldOffset=0x8)" P-INDEP
 ;* V70 tmp61        [V70    ] (  0,  0   )   byref  ->  zero-ref    "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V71 tmp62        [V71    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
 ;* V72 tmp63        [V72    ] (  0,  0   )   byref  ->  zero-ref    "field V17._reference (fldOffset=0x0)" P-INDEP
 ;* V73 tmp64        [V73    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
 ;  V74 tmp65        [V74,T43] (  2,  1   )   byref  ->  rdi         single-def "field V18._reference (fldOffset=0x0)" P-INDEP
 ;  V75 tmp66        [V75,T48] (  2,  1   )     int  ->  rsi         "field V18._length (fldOffset=0x8)" P-INDEP
 ;* V76 tmp67        [V76    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V19._reference (fldOffset=0x0)" P-INDEP
 ;* V77 tmp68        [V77    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
 ;  V78 tmp69        [V78,T44] (  2,  1   )   byref  ->  rdx         single-def "field V22._reference (fldOffset=0x0)" P-INDEP
 ;  V79 tmp70        [V79,T49] (  2,  1   )     int  ->  rcx         "field V22._length (fldOffset=0x8)" P-INDEP
 ;* V80 tmp71        [V80    ] (  0,  0   )   byref  ->  zero-ref    "field V23._reference (fldOffset=0x0)" P-INDEP
 ;* V81 tmp72        [V81    ] (  0,  0   )     int  ->  zero-ref    "field V23._length (fldOffset=0x8)" P-INDEP
 ;  V82 tmp73        [V82,T37] (  3,  1.50)   byref  ->  rdx         "field V24._reference (fldOffset=0x0)" P-INDEP
 ;  V83 tmp74        [V83,T40] (  3,  1.50)     int  ->  rcx         "field V24._length (fldOffset=0x8)" P-INDEP
 ;* V84 tmp75        [V84    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
 ;* V85 tmp76        [V85    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
 ;  V86 tmp77        [V86,T45] (  2,  1   )   byref  ->  rdx         single-def "field V28._reference (fldOffset=0x0)" P-INDEP
 ;  V87 tmp78        [V87,T50] (  2,  1   )     int  ->  rcx         "field V28._length (fldOffset=0x8)" P-INDEP
 ;  V88 tmp79        [V88,T46] (  2,  1   )   byref  ->  rsi         single-def "field V31._reference (fldOffset=0x0)" P-INDEP
 ;  V89 tmp80        [V89,T51] (  2,  1   )     int  ->  rdx         "field V31._length (fldOffset=0x8)" P-INDEP
 ;* V90 tmp81        [V90    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V32._reference (fldOffset=0x0)" P-INDEP
 ;* V91 tmp82        [V91    ] (  0,  0   )     int  ->  zero-ref    "field V32._length (fldOffset=0x8)" P-INDEP
 ;* V92 tmp83        [V92    ] (  0,  0   )   byref  ->  zero-ref    "field V39._reference (fldOffset=0x0)" P-INDEP
 ;* V93 tmp84        [V93    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0x8)" P-INDEP
 ;* V94 tmp85        [V94    ] (  0,  0   )   byref  ->  zero-ref    "field V40._reference (fldOffset=0x0)" P-INDEP
 ;* V95 tmp86        [V95    ] (  0,  0   )     int  ->  zero-ref    "field V40._length (fldOffset=0x8)" P-INDEP
 ;* V96 tmp87        [V96    ] (  0,  0   )   byref  ->  zero-ref    "field V43._reference (fldOffset=0x0)" P-INDEP
 ;* V97 tmp88        [V97    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
 ;* V98 tmp89        [V98    ] (  0,  0   )   byref  ->  zero-ref    "field V51._reference (fldOffset=0x0)" P-INDEP
 ;* V99 tmp90        [V99    ] (  0,  0   )     int  ->  zero-ref    "field V51._length (fldOffset=0x8)" P-INDEP
 ;* V100 tmp91       [V100    ] (  0,  0   )   byref  ->  zero-ref    "field V52._reference (fldOffset=0x0)" P-INDEP
 ;* V101 tmp92       [V101    ] (  0,  0   )     int  ->  zero-ref    "field V52._length (fldOffset=0x8)" P-INDEP
 ;* V102 tmp93       [V102    ] (  0,  0   )   byref  ->  zero-ref    "field V55._reference (fldOffset=0x0)" P-INDEP
 ;* V103 tmp94       [V103    ] (  0,  0   )     int  ->  zero-ref    "field V55._length (fldOffset=0x8)" P-INDEP
 ;  V104 GsCookie    [V104    ] (  1,  1   )    long  ->  [rbp-0x58]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V105 PSPSym      [V105,T52] (  1,  1   )    long  ->  [rbp-0x60]  do-not-enreg[V] "PSPSym"
 ;  V106 cse0        [V106,T03] (  7, 14   )     int  ->  r12         "CSE - aggressive"
 ;  V107 cse1        [V107,T02] ( 11, 16   )     int  ->  r14         multi-def "CSE - aggressive"
 ;  V108 cse2        [V108,T18] (  3,  6   )     int  ->  r13         "CSE - moderate"
 ;  V109 cse3        [V109,T19] (  3,  6   )     int  ->  rdx         "CSE - moderate"
 ;  V110 cse4        [V110,T20] (  3,  6   )     int  ->  r13         "CSE - moderate"
 ;  V111 cse5        [V111,T21] (  3,  6   )     int  ->  rdx         "CSE - moderate"
 ;
 ; Lcl frame size = 56
 
 G_M8186_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 56
        lea      rbp, [rsp+0x60]
        xor      eax, eax
        mov      qword ptr [rbp-0x48], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqa  xmmword ptr [rbp-0x40], xmm8
        mov      qword ptr [rbp-0x30], rax
        mov      qword ptr [rbp-0x60], rsp
        mov      qword ptr [rbp-0x58], 0xD1FFAB1E
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=57 bbWeight=1 PerfScore 13.83
 G_M8186_IG02:
        mov      rsi, r15
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.List`1[System.String]
        call     CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
        je       SHORT G_M8186_IG10
 						;; size=23 bbWeight=1 PerfScore 2.75
 G_M8186_IG03:
        test     rbx, rbx
        jne      SHORT G_M8186_IG04
        xor      rdi, rdi
        xor      esi, esi
        jmp      SHORT G_M8186_IG05
 						;; size=11 bbWeight=0.50 PerfScore 1.88
 G_M8186_IG04:
        lea      rdi, bword ptr [rbx+0x0C]
        mov      r14d, dword ptr [rbx+0x08]
        mov      esi, r14d
 						;; size=11 bbWeight=0.50 PerfScore 1.38
 G_M8186_IG05:
        mov      rdx, gword ptr [rax+0x08]
        mov      ecx, dword ptr [rax+0x10]
        test     rdx, rdx
        jne      SHORT G_M8186_IG06
        test     ecx, ecx
-       jne      G_M8186_IG40
+       jne      G_M8186_IG39
        xor      rdx, rdx
        xor      ecx, ecx
        jmp      SHORT G_M8186_IG07
 						;; size=26 bbWeight=0.50 PerfScore 4.50
 G_M8186_IG06:
-       mov      rax, 0xD1FFAB1E      ; System.String[]
-       cmp      qword ptr [rdx], rax
-       jne      G_M8186_IG39
        cmp      dword ptr [rdx+0x08], ecx
-       jb       G_M8186_IG40
+       jb       G_M8186_IG39
        add      rdx, 16
-						;; size=32 bbWeight=0.50 PerfScore 4.25
+						;; size=13 bbWeight=0.50 PerfScore 2.12
 G_M8186_IG07:
        mov      rax, 0xD1FFAB1E      ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        call     [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        cmp      qword ptr [rbp-0x58], 0xD1FFAB1E
        je       SHORT G_M8186_IG08
        call     CORINFO_HELP_FAIL_FAST
 						;; size=27 bbWeight=0.50 PerfScore 3.62
 G_M8186_IG08:
        nop      
 						;; size=1 bbWeight=0.50 PerfScore 0.12
 G_M8186_IG09:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.25
 G_M8186_IG10:
        mov      rdi, r15
        test     rdi, rdi
-       je       G_M8186_IG41
+       je       G_M8186_IG40
 						;; size=12 bbWeight=0.50 PerfScore 0.75
 G_M8186_IG11:
        mov      rsi, 0xD1FFAB1E      ; System.String[]
        cmp      qword ptr [rdi], rsi
        jne      SHORT G_M8186_IG17
 						;; size=15 bbWeight=0.25 PerfScore 1.06
 G_M8186_IG12:
        test     rbx, rbx
        jne      SHORT G_M8186_IG13
        xor      rsi, rsi
        xor      edx, edx
        jmp      SHORT G_M8186_IG14
 						;; size=11 bbWeight=0.50 PerfScore 1.88
 G_M8186_IG13:
        lea      rsi, bword ptr [rbx+0x0C]
        mov      r14d, dword ptr [rbx+0x08]
        mov      edx, r14d
 						;; size=11 bbWeight=0.50 PerfScore 1.38
 G_M8186_IG14:
        lea      rcx, bword ptr [rdi+0x10]
        mov      eax, dword ptr [rdi+0x08]
        mov      rdi, rsi
        mov      esi, edx
        mov      rdx, rcx
        mov      ecx, eax
        mov      rax, 0xD1FFAB1E      ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        call     [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        cmp      qword ptr [rbp-0x58], 0xD1FFAB1E
        je       SHORT G_M8186_IG15
        call     CORINFO_HELP_FAIL_FAST
 						;; size=44 bbWeight=0.50 PerfScore 5.38
 G_M8186_IG15:
        nop      
 						;; size=1 bbWeight=0.50 PerfScore 0.12
 G_M8186_IG16:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.25
 G_M8186_IG17:
        mov      rdi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IEnumerable`1[System.__Canon]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
        call     [r11]System.Collections.Generic.IEnumerable`1[System.__Canon]:GetEnumerator():System.Collections.Generic.IEnumerator`1[System.__Canon]:this
        mov      r15, rax
        mov      gword ptr [rbp-0x50], r15
 						;; size=23 bbWeight=0.50 PerfScore 2.38
 G_M8186_IG18:
        mov      rdi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      SHORT G_M8186_IG19
        mov      r13, 0xD1FFAB1E      ; ''
 
        jmp      G_M8186_IG36
 						;; size=35 bbWeight=0.50 PerfScore 3.50
 G_M8186_IG19:
        mov      rdi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        call     [r11]System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        mov      r13, rax
        mov      rdi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      SHORT G_M8186_IG20
        mov      rdi, 0xD1FFAB1E      ; ''
 
        test     r13, r13
        cmove    r13, rdi
        jmp      G_M8186_IG36
 						;; size=61 bbWeight=0.50 PerfScore 5.62
 G_M8186_IG20:
        test     dword ptr [rsp], esp
        sub      rsp, 512
        lea      rdi, [rsp]
        xor      rsi, rsi
        mov      gword ptr [rbp-0x48], rsi
        mov      bword ptr [rbp-0x38], rdi
        mov      dword ptr [rbp-0x30], 256
 						;; size=31 bbWeight=0.50 PerfScore 3.50
 G_M8186_IG21:
        mov      dword ptr [rbp-0x40], esi
        test     r13, r13
        je       SHORT G_M8186_IG22
        mov      edi, dword ptr [rbp-0x40]
        cmp      dword ptr [r13+0x08], 1
        jne      G_M8186_IG31
        cmp      edi, dword ptr [rbp-0x30]
        jae      G_M8186_IG31
        cmp      edi, dword ptr [rbp-0x30]
        jae      G_M8186_IG28
        mov      rsi, bword ptr [rbp-0x38]
        mov      eax, edi
        movzx    rcx, word  ptr [r13+0x0C]
        mov      word  ptr [rsi+2*rax], cx
        inc      edi
        mov      dword ptr [rbp-0x40], edi
 						;; size=60 bbWeight=0.50 PerfScore 9.38
 G_M8186_IG22:
        test     rbx, rbx
        je       SHORT G_M8186_IG24
 						;; size=5 bbWeight=4 PerfScore 5.00
 G_M8186_IG23:
        mov      r13d, dword ptr [rbp-0x40]
        mov      esi, r13d
        mov      r14d, dword ptr [rbx+0x08]
        cmp      r14d, 1
        jne      G_M8186_IG32
        cmp      esi, dword ptr [rbp-0x30]
        jae      G_M8186_IG32
        cmp      esi, dword ptr [rbp-0x30]
        jae      G_M8186_IG28
        mov      rdi, bword ptr [rbp-0x38]
        mov      eax, esi
        movzx    rcx, word  ptr [rbx+0x0C]
        mov      word  ptr [rdi+2*rax], cx
        inc      esi
        mov      dword ptr [rbp-0x40], esi
 						;; size=58 bbWeight=2 PerfScore 32.00
 G_M8186_IG24:
        mov      rdi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        call     [r11]System.Collections.Generic.IEnumerator`1[System.__Canon]:get_Current():System.__Canon:this
        mov      r14, rax
        test     r14, r14
        je       SHORT G_M8186_IG26
 						;; size=24 bbWeight=4 PerfScore 20.00
 G_M8186_IG25:
        mov      r13d, dword ptr [rbp-0x40]
        mov      esi, r13d
        mov      r12d, dword ptr [r14+0x08]
        cmp      r12d, 1
        jne      G_M8186_IG34
        cmp      esi, dword ptr [rbp-0x30]
        jae      G_M8186_IG34
        cmp      esi, dword ptr [rbp-0x30]
        jae      SHORT G_M8186_IG28
        mov      rdi, bword ptr [rbp-0x38]
        mov      eax, esi
        movzx    rcx, word  ptr [r14+0x0C]
        mov      word  ptr [rdi+2*rax], cx
        inc      esi
        mov      dword ptr [rbp-0x40], esi
 						;; size=55 bbWeight=2 PerfScore 32.00
 G_M8186_IG26:
        mov      rdi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      G_M8186_IG22
 						;; size=24 bbWeight=4 PerfScore 19.00
 G_M8186_IG27:
        lea      rdi, [rbp-0x48]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:ToString():System.String:this
        call     [rax]System.Text.ValueStringBuilder:ToString():System.String:this
        mov      r13, rax
        jmp      G_M8186_IG36
 						;; size=24 bbWeight=0.50 PerfScore 3.00
 G_M8186_IG28:
        call     CORINFO_HELP_RNGCHKFAIL
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M8186_IG29:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M8186_IG30:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M8186_IG31:
        lea      rdi, [rbp-0x48]
        mov      rsi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:AppendSlow(System.String):this
        call     [rax]System.Text.ValueStringBuilder:AppendSlow(System.String):this
        jmp      G_M8186_IG22
 						;; size=24 bbWeight=0.50 PerfScore 3.00
 G_M8186_IG32:
        mov      esi, dword ptr [rbp-0x30]
        sub      esi, r14d
        cmp      esi, r13d
        jge      SHORT G_M8186_IG33
        mov      esi, r14d
        lea      rdi, [rbp-0x48]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rax]System.Text.ValueStringBuilder:Grow(int):this
 						;; size=30 bbWeight=2 PerfScore 13.00
 G_M8186_IG33:
        mov      edx, dword ptr [rbp-0x30]
        cmp      r13d, edx
        ja       SHORT G_M8186_IG30
        mov      rdi, bword ptr [rbp-0x38]
        mov      esi, r13d
        lea      rdi, bword ptr [rdi+2*rsi]
        sub      edx, r13d
        cmp      r14d, edx
        ja       SHORT G_M8186_IG29
        lea      rsi, bword ptr [rbx+0x0C]
        mov      edx, r14d
        add      rdx, rdx
        mov      rax, 0xD1FFAB1E      ; code for System.Buffer:Memmove(byref,byref,ulong)
        call     [rax]System.Buffer:Memmove(byref,byref,ulong)
        mov      edi, r14d
        add      edi, dword ptr [rbp-0x40]
        mov      dword ptr [rbp-0x40], edi
        jmp      G_M8186_IG24
 						;; size=63 bbWeight=2 PerfScore 30.00
 G_M8186_IG34:
        mov      esi, dword ptr [rbp-0x30]
        sub      esi, r12d
        cmp      esi, r13d
        jge      SHORT G_M8186_IG35
        mov      esi, r12d
        lea      rdi, [rbp-0x48]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rax]System.Text.ValueStringBuilder:Grow(int):this
 						;; size=30 bbWeight=2 PerfScore 13.00
 G_M8186_IG35:
        mov      edx, dword ptr [rbp-0x30]
        cmp      r13d, edx
        ja       G_M8186_IG30
        mov      rdi, bword ptr [rbp-0x38]
        mov      esi, r13d
        lea      rdi, bword ptr [rdi+2*rsi]
        sub      edx, r13d
        cmp      r12d, edx
        ja       G_M8186_IG29
        lea      rsi, bword ptr [r14+0x0C]
        mov      edx, r12d
        add      rdx, rdx
        mov      rax, 0xD1FFAB1E      ; code for System.Buffer:Memmove(byref,byref,ulong)
        call     [rax]System.Buffer:Memmove(byref,byref,ulong)
        add      r12d, dword ptr [rbp-0x40]
        mov      dword ptr [rbp-0x40], r12d
        jmp      G_M8186_IG26
 						;; size=70 bbWeight=2 PerfScore 29.50
 G_M8186_IG36:
        mov      rdi, r15
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
        mov      rax, r13
        cmp      qword ptr [rbp-0x58], 0xD1FFAB1E
        je       SHORT G_M8186_IG37
        call     CORINFO_HELP_FAIL_FAST
 						;; size=34 bbWeight=0.50 PerfScore 3.88
 G_M8186_IG37:
        nop      
 						;; size=1 bbWeight=0.50 PerfScore 0.12
 G_M8186_IG38:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.25
 G_M8186_IG39:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
-       call     [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
-       int3     
-						;; size=13 bbWeight=0 PerfScore 0.00
-G_M8186_IG40:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M8186_IG41:
+G_M8186_IG40:
        mov      edi, 6
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
-G_M8186_IG42:
+G_M8186_IG41:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x60]
 						;; size=22 bbWeight=0 PerfScore 0.00
-G_M8186_IG43:
+G_M8186_IG42:
        cmp      gword ptr [rbp-0x50], 0
-       je       SHORT G_M8186_IG44
+       je       SHORT G_M8186_IG43
        mov      rdi, gword ptr [rbp-0x50]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
 						;; size=24 bbWeight=0 PerfScore 0.00
-G_M8186_IG44:
+G_M8186_IG43:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M8186_IG45:
+G_M8186_IG44:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1116, prolog size 57, PerfScore 389.12, instruction count 302, allocated bytes for code 1116 (MethodHash=3c36e005) for method System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
+; Total bytes of code 1084, prolog size 57, PerfScore 383.80, instruction count 296, allocated bytes for code 1084 (MethodHash=3c36e005) for method System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (FullOpts)
-32 (-2.69 % of base) - System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String
 ; Assembly listing for method System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 9 single block inlinees; 16 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 TypeCtx      [V00,T19] (  8,  5.20)    long  ->  r15         single-def
 ;* V01 arg0         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
 ;  V02 arg1         [V02,T20] (  6,  4   )     ref  ->  r14         class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
 ;  V03 loc0         [V03,T38] (  4,  2   )     ref  ->  rax         class-hnd single-def <System.Collections.Generic.List`1[System.String]>
 ;  V04 loc1         [V04,T37] (  5,  2.25)     ref  ->  rdi         class-hnd exact <System.String[]>
 ;  V05 loc2         [V05,T09] (  9, 10   )     ref  ->  [rbp-0x68]  class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]>
 ;  V06 loc3         [V06,T39] (  4,  2   )     ref  ->  r14         class-hnd <System.String>
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.Collections.Generic.IEnumerator`1[ushort]>
 ;* V08 loc5         [V08    ] (  0,  0   )  ushort  ->  zero-ref   
 ;* V09 loc6         [V09    ] (  0,  0   )  struct (32) zero-ref    do-not-enreg[S] ld-addr-op <System.Text.ValueStringBuilder>
 ;* V10 loc7         [V10    ] (  0,  0   )  struct (16) zero-ref    <System.Span`1[ushort]>
 ;  V11 loc8         [V11    ] (  6, 13.50)     ref  ->  [rbp-0x38]  do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
 ;* V12 loc9         [V12    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd <System.__Canon>
 ;* V13 loc10        [V13    ] (  0,  0   )  struct (40) zero-ref    do-not-enreg[S] ld-addr-op <System.Runtime.CompilerServices.DefaultInterpolatedStringHandler>
 ;* V14 loc11        [V14    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.IFormatProvider>
 ;* V15 loc12        [V15    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def <System.String>
 ;  V16 loc13        [V16    ] ( 20, 25.50)  struct (32) [rbp-0x58]  do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.ValueStringBuilder>
 ;# V17 OutArgs      [V17    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V18 tmp1         [V18    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V19 tmp2         [V19,T30] (  4,  3   )    long  ->  r11         "VirtualCall with runtime lookup"
 ;* V20 tmp3         [V20    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V21 tmp4         [V21,T32] (  3,  3   )    long  ->  r11         "VirtualCall with runtime lookup"
 ;  V22 tmp5         [V22,T44] (  2,  1   )   byref  ->  rdi         single-def
 ;  V23 tmp6         [V23,T29] (  7,  3.50)     ref  ->  r15        
 ;* V24 tmp7         [V24    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;* V25 tmp8         [V25    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V26 tmp9         [V26,T00] (  3, 24   )    long  ->  r11         "VirtualCall with runtime lookup"
 ;  V27 tmp10        [V27,T01] ( 10, 22   )   byref  ->  r14        
 ;  V28 tmp11        [V28,T25] (  2,  6   )   byref  ->  r15        
 ;* V29 tmp12        [V29    ] (  0,  0   )   byref  ->  zero-ref   
 ;  V30 tmp13        [V30,T05] (  5, 10   )     ref  ->  r15        
 ;  V31 tmp14        [V31,T35] (  5,  2.50)     ref  ->  r15        
 ;* V32 tmp15        [V32    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "spilling QMark2" <System.String[]>
 ;* V33 tmp16        [V33    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
 ;* V34 tmp17        [V34    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V35 tmp18        [V35    ] (  0,  0   )  struct (16) zero-ref    multireg-arg "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
 ;* V36 tmp19        [V36    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[System.__Canon]>
 ;* V37 tmp20        [V37    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[System.String]>
 ;* V38 tmp21        [V38    ] (  0,  0   )  struct (16) zero-ref    "Inline return value spill temp" <System.Span`1[System.String]>
 ;* V39 tmp22        [V39    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[System.String]>
 ;* V40 tmp23        [V40    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[System.String]>
-;  V41 tmp24        [V41,T26] (  5,  5   )     ref  ->  rdx         class-hnd single-def "Inlining Arg" <System.__Canon[]>
+;  V41 tmp24        [V41,T27] (  4,  4   )     ref  ->  rdx         class-hnd exact single-def "Inlining Arg" <System.String[]>
 ;  V42 tmp25        [V42,T28] (  4,  4   )     int  ->  rcx         "Inlining Arg"
 ;* V43 tmp26        [V43    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[System.String]>
 ;* V44 tmp27        [V44    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.String]>
 ;* V45 tmp28        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
 ;* V46 tmp29        [V46    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V47 tmp30        [V47,T41] (  2,  2   )    long  ->  rdi         "Inlining Arg"
 ;  V48 tmp31        [V48,T36] (  5,  2.50)     int  ->  rdi         "Inline stloc first use temp"
 ;* V49 tmp32        [V49    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V50 tmp33        [V50    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
 ;* V51 tmp34        [V51    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;  V52 tmp35        [V52,T03] (  4, 16   )     int  ->  rdx         "Inlining Arg"
 ;* V53 tmp36        [V53    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V54 tmp37        [V54,T12] (  2,  8   )   byref  ->  rsi         "Inlining Arg"
 ;  V55 tmp38        [V55,T15] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;* V56 tmp39        [V56    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V57 tmp40        [V57    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V58 tmp41        [V58    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V59 tmp42        [V59,T16] (  2,  8   )    long  ->  rdx         "Inlining Arg"
 ;* V60 tmp43        [V60    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V61 tmp44        [V61,T10] (  5, 10   )     int  ->  rsi         "Inline stloc first use temp"
 ;  V62 tmp45        [V62,T06] (  3, 12   )   byref  ->  rax         "Span.get_Item ptrToSpan"
 ;  V63 tmp46        [V63,T11] (  5, 10   )     int  ->  [rbp-0x5C]  spill-single-def "Inline stloc first use temp"
 ;* V64 tmp47        [V64    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[ushort]>
 ;  V65 tmp48        [V65,T07] (  3, 12   )   byref  ->  rdx         "Inlining Arg"
 ;* V66 tmp49        [V66    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
 ;  V67 tmp50        [V67,T13] (  2,  8   )   byref  ->  rsi         "Inlining Arg"
 ;  V68 tmp51        [V68,T17] (  2,  8   )     int  ->  rdi         "Inlining Arg"
 ;* V69 tmp52        [V69    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
 ;* V70 tmp53        [V70    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;  V71 tmp54        [V71,T14] (  2,  8   )   byref  ->  r15         "Inlining Arg"
 ;  V72 tmp55        [V72,T18] (  2,  8   )    long  ->  rdx         "Inlining Arg"
 ;* V73 tmp56        [V73    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V74 tmp57        [V74,T21] (  4,  4   )   byref  ->  r13         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
 ;  V75 tmp58        [V75,T02] (  9, 16   )     int  ->  rbx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
 ;* V76 tmp59        [V76    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
 ;* V77 tmp60        [V77    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
 ;  V78 tmp61        [V78,T45] (  2,  1   )   byref  ->  rdi         single-def "field V24._reference (fldOffset=0x0)" P-INDEP
 ;* V79 tmp62        [V79,T57] (  0,  0   )     int  ->  zero-ref    "field V24._length (fldOffset=0x8)" P-INDEP
 ;  V80 tmp63        [V80,T46] (  2,  1   )   byref  ->  rcx         single-def "field V33._reference (fldOffset=0x0)" P-INDEP
 ;  V81 tmp64        [V81,T51] (  2,  1   )     int  ->  rax         "field V33._length (fldOffset=0x8)" P-INDEP
 ;  V82 tmp65        [V82,T47] (  2,  1   )   byref  ->  rsi         single-def "field V34._reference (fldOffset=0x0)" P-INDEP
 ;  V83 tmp66        [V83,T52] (  2,  1   )     int  ->  rdx         "field V34._length (fldOffset=0x8)" P-INDEP
 ;  V84 tmp67        [V84,T48] (  2,  1   )   byref  ->  rdi         single-def "field V35._reference (fldOffset=0x0)" P-INDEP
 ;  V85 tmp68        [V85,T53] (  2,  1   )     int  ->  rsi         "field V35._length (fldOffset=0x8)" P-INDEP
 ;* V86 tmp69        [V86    ] (  0,  0   )   byref  ->  zero-ref    "field V36._reference (fldOffset=0x0)" P-INDEP
 ;* V87 tmp70        [V87    ] (  0,  0   )     int  ->  zero-ref    "field V36._length (fldOffset=0x8)" P-INDEP
 ;* V88 tmp71        [V88    ] (  0,  0   )   byref  ->  zero-ref    "field V37._reference (fldOffset=0x0)" P-INDEP
 ;* V89 tmp72        [V89    ] (  0,  0   )     int  ->  zero-ref    "field V37._length (fldOffset=0x8)" P-INDEP
 ;  V90 tmp73        [V90,T49] (  2,  1   )   byref  ->  rdx         single-def "field V38._reference (fldOffset=0x0)" P-INDEP
 ;  V91 tmp74        [V91,T54] (  2,  1   )     int  ->  rcx         "field V38._length (fldOffset=0x8)" P-INDEP
 ;* V92 tmp75        [V92    ] (  0,  0   )   byref  ->  zero-ref    "field V39._reference (fldOffset=0x0)" P-INDEP
 ;* V93 tmp76        [V93    ] (  0,  0   )     int  ->  zero-ref    "field V39._length (fldOffset=0x8)" P-INDEP
 ;  V94 tmp77        [V94,T42] (  3,  1.50)   byref  ->  rdx         "field V40._reference (fldOffset=0x0)" P-INDEP
 ;  V95 tmp78        [V95,T43] (  3,  1.50)     int  ->  rcx         "field V40._length (fldOffset=0x8)" P-INDEP
 ;* V96 tmp79        [V96    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V43._reference (fldOffset=0x0)" P-INDEP
 ;* V97 tmp80        [V97    ] (  0,  0   )     int  ->  zero-ref    "field V43._length (fldOffset=0x8)" P-INDEP
 ;  V98 tmp81        [V98,T50] (  2,  1   )   byref  ->  rdx         single-def "field V44._reference (fldOffset=0x0)" P-INDEP
 ;  V99 tmp82        [V99,T55] (  2,  1   )     int  ->  rcx         "field V44._length (fldOffset=0x8)" P-INDEP
 ;* V100 tmp83       [V100    ] (  0,  0   )   byref  ->  zero-ref    "field V50._reference (fldOffset=0x0)" P-INDEP
 ;* V101 tmp84       [V101    ] (  0,  0   )     int  ->  zero-ref    "field V50._length (fldOffset=0x8)" P-INDEP
 ;* V102 tmp85       [V102    ] (  0,  0   )   byref  ->  zero-ref    "field V51._reference (fldOffset=0x0)" P-INDEP
 ;* V103 tmp86       [V103    ] (  0,  0   )     int  ->  zero-ref    "field V51._length (fldOffset=0x8)" P-INDEP
 ;* V104 tmp87       [V104    ] (  0,  0   )   byref  ->  zero-ref    "field V53._reference (fldOffset=0x0)" P-INDEP
 ;* V105 tmp88       [V105    ] (  0,  0   )     int  ->  zero-ref    "field V53._length (fldOffset=0x8)" P-INDEP
 ;* V106 tmp89       [V106    ] (  0,  0   )   byref  ->  zero-ref    "field V56._reference (fldOffset=0x0)" P-INDEP
 ;* V107 tmp90       [V107    ] (  0,  0   )     int  ->  zero-ref    "field V56._length (fldOffset=0x8)" P-INDEP
 ;* V108 tmp91       [V108    ] (  0,  0   )   byref  ->  zero-ref    "field V64._reference (fldOffset=0x0)" P-INDEP
 ;* V109 tmp92       [V109    ] (  0,  0   )     int  ->  zero-ref    "field V64._length (fldOffset=0x8)" P-INDEP
 ;* V110 tmp93       [V110    ] (  0,  0   )   byref  ->  zero-ref    "field V66._reference (fldOffset=0x0)" P-INDEP
 ;* V111 tmp94       [V111    ] (  0,  0   )     int  ->  zero-ref    "field V66._length (fldOffset=0x8)" P-INDEP
 ;* V112 tmp95       [V112    ] (  0,  0   )   byref  ->  zero-ref    "field V69._reference (fldOffset=0x0)" P-INDEP
 ;* V113 tmp96       [V113    ] (  0,  0   )     int  ->  zero-ref    "field V69._length (fldOffset=0x8)" P-INDEP
 ;  V114 tmp97       [V114,T31] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
 ;  V115 tmp98       [V115,T08] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V116 GsCookie    [V116    ] (  1,  1   )    long  ->  [rbp-0x70]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
 ;  V117 PSPSym      [V117,T56] (  1,  1   )    long  ->  [rbp-0x80]  do-not-enreg[V] "PSPSym"
-;  V118 cse0        [V118,T27] (  3,  5   )    long  ->  r12         "CSE - moderate"
+;  V118 cse0        [V118,T26] (  3,  5   )    long  ->  r12         "CSE - moderate"
 ;  V119 cse1        [V119,T22] (  3,  6   )     int  ->  rax         "CSE - moderate"
 ;  V120 cse2        [V120,T23] (  3,  6   )     int  ->  rdi         "CSE - moderate"
 ;  V121 cse3        [V121,T04] (  7, 14   )     int  ->  [rbp-0x60]  spill-single-def "CSE - moderate"
 ;  V122 cse4        [V122,T24] (  3,  6   )     int  ->  rdi         "CSE - moderate"
 ;  V123 rat0        [V123,T33] (  3,  2.80)    long  ->  r11         "fgMakeTemp is creating a new local variable"
 ;  V124 rat1        [V124,T40] (  3,  2   )    long  ->  r12         "runtime lookup"
 ;  V125 rat2        [V125,T34] (  3,  2.80)    long  ->  r12         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 88
 
 G_M1718_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 88
        lea      rbp, [rsp+0x80]
        xor      eax, eax
        mov      qword ptr [rbp-0x58], rax
        vxorps   xmm8, xmm8, xmm8
        vmovdqu  ymmword ptr [rbp-0x50], ymm8
        mov      qword ptr [rbp-0x80], rsp
        mov      qword ptr [rbp-0x30], rdi
        mov      qword ptr [rbp-0x70], 0xD1FFAB1E
        mov      r15, rdi
        mov      r13, rsi
        mov      ebx, edx
        mov      r14, rcx
 						;; size=65 bbWeight=1 PerfScore 14.33
 G_M1718_IG02:
        mov      rsi, qword ptr [r15+0x10]
        mov      rdi, 0xD1FFAB1E      ; System.String
        cmp      qword ptr [rsi], rdi
        jne      G_M1718_IG10
 						;; size=23 bbWeight=1 PerfScore 6.25
 G_M1718_IG03:
        mov      rsi, r14
        mov      rdi, 0xD1FFAB1E      ; System.Collections.Generic.List`1[System.String]
        call     CORINFO_HELP_ISINSTANCEOFCLASS
        test     rax, rax
        je       SHORT G_M1718_IG08
        mov      rdi, r13
        mov      esi, ebx
        mov      rdx, gword ptr [rax+0x08]
        mov      ecx, dword ptr [rax+0x10]
        test     rdx, rdx
        jne      SHORT G_M1718_IG04
        test     ecx, ecx
-       jne      G_M1718_IG42
+       jne      G_M1718_IG41
        xor      rdx, rdx
        xor      ecx, ecx
        jmp      SHORT G_M1718_IG05
 						;; size=54 bbWeight=0.50 PerfScore 6.12
 G_M1718_IG04:
-       mov      rax, 0xD1FFAB1E      ; System.String[]
-       cmp      qword ptr [rdx], rax
-       jne      G_M1718_IG41
        cmp      dword ptr [rdx+0x08], ecx
-       jb       G_M1718_IG42
+       jb       G_M1718_IG41
        add      rdx, 16
-						;; size=32 bbWeight=0.50 PerfScore 4.25
+						;; size=13 bbWeight=0.50 PerfScore 2.12
 G_M1718_IG05:
        mov      rax, 0xD1FFAB1E      ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        call     [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        cmp      qword ptr [rbp-0x70], 0xD1FFAB1E
        je       SHORT G_M1718_IG06
        call     CORINFO_HELP_FAIL_FAST
 						;; size=27 bbWeight=0.50 PerfScore 3.62
 G_M1718_IG06:
        nop      
 						;; size=1 bbWeight=0.50 PerfScore 0.12
 G_M1718_IG07:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.25
 G_M1718_IG08:
        mov      rdi, r14
        test     rdi, rdi
        je       SHORT G_M1718_IG10
 						;; size=8 bbWeight=0.50 PerfScore 0.75
 G_M1718_IG09:
        mov      rsi, 0xD1FFAB1E      ; System.String[]
        cmp      qword ptr [rdi], rsi
        je       SHORT G_M1718_IG12
 						;; size=15 bbWeight=0.25 PerfScore 1.06
 G_M1718_IG10:
        test     r14, r14
-       je       G_M1718_IG43
+       je       G_M1718_IG42
        mov      rdi, qword ptr [r15+0x10]
        mov      r11, qword ptr [rdi+0x10]
        test     r11, r11
        je       SHORT G_M1718_IG15
 						;; size=22 bbWeight=0.50 PerfScore 3.25
 G_M1718_IG11:
        mov      rdi, r14
        call     [r11]
        mov      gword ptr [rbp-0x68], rax
        jmp      SHORT G_M1718_IG16
 						;; size=12 bbWeight=0.50 PerfScore 3.12
 G_M1718_IG12:
        mov      rsi, r13
        mov      edx, ebx
        lea      rcx, bword ptr [rdi+0x10]
        mov      eax, dword ptr [rdi+0x08]
        mov      rdi, rsi
        mov      esi, edx
        mov      rdx, rcx
        mov      ecx, eax
        mov      rax, 0xD1FFAB1E      ; code for System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        call     [rax]System.String:JoinCore(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[System.String]):System.String
        cmp      qword ptr [rbp-0x70], 0xD1FFAB1E
        je       SHORT G_M1718_IG13
        call     CORINFO_HELP_FAIL_FAST
 						;; size=49 bbWeight=0.50 PerfScore 5.62
 G_M1718_IG13:
        nop      
 						;; size=1 bbWeight=0.50 PerfScore 0.12
 G_M1718_IG14:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.25
 G_M1718_IG15:
        mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_METHOD
        mov      r11, rax
        jmp      SHORT G_M1718_IG11
 						;; size=23 bbWeight=0.10 PerfScore 0.38
 G_M1718_IG16:
        mov      rdi, rax
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      SHORT G_M1718_IG17
        mov      r14, 0xD1FFAB1E      ; ''
 
        jmp      G_M1718_IG38
 						;; size=35 bbWeight=0.50 PerfScore 3.50
 G_M1718_IG17:
        mov      rdi, qword ptr [r15+0x10]
        mov      r12, qword ptr [rdi+0x18]
        test     r12, r12
        je       SHORT G_M1718_IG19
 						;; size=13 bbWeight=0.50 PerfScore 2.62
 G_M1718_IG18:
        jmp      SHORT G_M1718_IG20
 						;; size=2 bbWeight=0.40 PerfScore 0.80
 G_M1718_IG19:
        mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_METHOD
        mov      r12, rax
 						;; size=21 bbWeight=0.10 PerfScore 0.18
 G_M1718_IG20:
        mov      r11, r12
        mov      rdi, gword ptr [rbp-0x68]
        call     [r11]
        mov      gword ptr [rbp-0x38], rax
        lea      rdi, bword ptr [rbp-0x38]
        cmp      gword ptr [rbp-0x38], 0
        jne      SHORT G_M1718_IG21
        xor      r15, r15
        jmp      SHORT G_M1718_IG22
 						;; size=30 bbWeight=0.50 PerfScore 5.50
 G_M1718_IG21:
        mov      rdi, gword ptr [rdi]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x08]System.Object:ToString():System.String:this
        mov      r15, rax
 						;; size=16 bbWeight=0.50 PerfScore 4.62
 G_M1718_IG22:
        mov      rdi, gword ptr [rbp-0x68]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      SHORT G_M1718_IG23
        mov      rdi, 0xD1FFAB1E      ; ''
 
        test     r15, r15
        cmove    r15, rdi
        mov      r14, r15
        jmp      G_M1718_IG38
 						;; size=46 bbWeight=0.50 PerfScore 4.25
 G_M1718_IG23:
        test     dword ptr [rsp], esp
        sub      rsp, 512
        lea      rdi, [rsp]
        xor      rsi, rsi
        mov      gword ptr [rbp-0x58], rsi
        mov      bword ptr [rbp-0x48], rdi
        mov      dword ptr [rbp-0x40], 256
 						;; size=31 bbWeight=0.50 PerfScore 3.50
 G_M1718_IG24:
        mov      dword ptr [rbp-0x50], esi
        test     r15, r15
        je       SHORT G_M1718_IG25
        mov      edi, dword ptr [rbp-0x50]
        cmp      dword ptr [r15+0x08], 1
        jne      G_M1718_IG34
        cmp      edi, dword ptr [rbp-0x40]
        jae      G_M1718_IG34
        cmp      edi, dword ptr [rbp-0x40]
        jae      G_M1718_IG31
        mov      rsi, bword ptr [rbp-0x48]
        mov      eax, edi
        movzx    rcx, word  ptr [r15+0x0C]
        mov      word  ptr [rsi+2*rax], cx
        inc      edi
        mov      dword ptr [rbp-0x50], edi
 						;; size=60 bbWeight=0.50 PerfScore 9.38
 G_M1718_IG25:
        test     ebx, ebx
        je       SHORT G_M1718_IG28
 						;; size=4 bbWeight=4 PerfScore 5.00
 G_M1718_IG26:
        mov      edi, dword ptr [rbp-0x40]
        sub      edi, ebx
        cmp      dword ptr [rbp-0x50], edi
        jle      SHORT G_M1718_IG27
        lea      rdi, [rbp-0x58]
        mov      esi, ebx
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rax]System.Text.ValueStringBuilder:Grow(int):this
 						;; size=28 bbWeight=2 PerfScore 16.50
 G_M1718_IG27:
        mov      edx, dword ptr [rbp-0x50]
        mov      edi, dword ptr [rbp-0x40]
        cmp      edx, edi
        ja       G_M1718_IG33
        mov      rsi, bword ptr [rbp-0x48]
        mov      eax, edx
        lea      rsi, bword ptr [rsi+2*rax]
        sub      edi, edx
        cmp      ebx, edi
        ja       SHORT G_M1718_IG32
        mov      edx, ebx
        add      rdx, rdx
        mov      rdi, rsi
        mov      rsi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Buffer:Memmove(byref,byref,ulong)
        call     [rax]System.Buffer:Memmove(byref,byref,ulong)
        mov      edi, ebx
        add      edi, dword ptr [rbp-0x50]
        mov      dword ptr [rbp-0x50], edi
 						;; size=61 bbWeight=2 PerfScore 28.00
 G_M1718_IG28:
        mov      r11, r12
        mov      rdi, gword ptr [rbp-0x68]
        call     [r11]
        mov      gword ptr [rbp-0x38], rax
        lea      r14, bword ptr [rbp-0x58]
        lea      r15, bword ptr [rbp-0x38]
        cmp      gword ptr [rbp-0x38], 0
        jne      SHORT G_M1718_IG35
 						;; size=29 bbWeight=4 PerfScore 37.00
 G_M1718_IG29:
        mov      rdi, gword ptr [rbp-0x68]
        mov      r11, 0xD1FFAB1E      ; code for System.Collections.IEnumerator:MoveNext():ubyte:this
        call     [r11]System.Collections.IEnumerator:MoveNext():ubyte:this
        test     eax, eax
        jne      G_M1718_IG25
 						;; size=25 bbWeight=4 PerfScore 22.00
 G_M1718_IG30:
        lea      rdi, [rbp-0x58]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:ToString():System.String:this
        call     [rax]System.Text.ValueStringBuilder:ToString():System.String:this
        mov      r14, rax
        jmp      G_M1718_IG38
 						;; size=24 bbWeight=0.50 PerfScore 3.00
 G_M1718_IG31:
        call     CORINFO_HELP_RNGCHKFAIL
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M1718_IG32:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        call     [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M1718_IG33:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M1718_IG34:
        lea      rdi, [rbp-0x58]
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:AppendSlow(System.String):this
        call     [rax]System.Text.ValueStringBuilder:AppendSlow(System.String):this
        jmp      G_M1718_IG25
 						;; size=24 bbWeight=0.50 PerfScore 3.00
 G_M1718_IG35:
        mov      rdi, gword ptr [r15]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x08]System.Object:ToString():System.String:this
        mov      r15, rax
        test     r15, r15
        je       SHORT G_M1718_IG29
        mov      eax, dword ptr [r14+0x08]
        mov      esi, eax
        mov      ecx, dword ptr [r15+0x08]
        mov      dword ptr [rbp-0x60], ecx
        cmp      ecx, 1
        jne      SHORT G_M1718_IG36
        cmp      esi, dword ptr [r14+0x18]
        jae      SHORT G_M1718_IG36
        lea      rax, bword ptr [r14+0x10]
        cmp      esi, dword ptr [rax+0x08]
        jae      SHORT G_M1718_IG31
        mov      rcx, bword ptr [rax]
        mov      edi, esi
        movzx    rax, word  ptr [r15+0x0C]
        mov      word  ptr [rcx+2*rdi], ax
        inc      esi
        mov      dword ptr [r14+0x08], esi
        jmp      G_M1718_IG29
 						;; size=79 bbWeight=2 PerfScore 68.00
 G_M1718_IG36:
        mov      dword ptr [rbp-0x5C], eax
        mov      esi, dword ptr [r14+0x18]
        sub      esi, ecx
        cmp      esi, eax
        jge      SHORT G_M1718_IG37
        mov      esi, ecx
        mov      rdi, r14
        mov      rdx, 0xD1FFAB1E      ; code for System.Text.ValueStringBuilder:Grow(int):this
        call     [rdx]System.Text.ValueStringBuilder:Grow(int):this
        mov      ecx, dword ptr [rbp-0x60]
 						;; size=33 bbWeight=2 PerfScore 18.50
 G_M1718_IG37:
        lea      rdx, bword ptr [r14+0x10]
        mov      edi, dword ptr [rdx+0x08]
        mov      eax, dword ptr [rbp-0x5C]
        cmp      eax, edi
        ja       G_M1718_IG33
        mov      rdx, bword ptr [rdx]
        mov      esi, eax
        lea      rsi, bword ptr [rdx+2*rsi]
        sub      edi, eax
        cmp      ecx, edi
        ja       G_M1718_IG32
        add      r15, 12
        mov      edx, ecx
        add      rdx, rdx
        mov      rdi, rsi
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Buffer:Memmove(byref,byref,ulong)
        call     [rax]System.Buffer:Memmove(byref,byref,ulong)
        mov      r15d, dword ptr [rbp-0x60]
        add      dword ptr [r14+0x08], r15d
        jmp      G_M1718_IG29
 						;; size=77 bbWeight=2 PerfScore 39.00
 G_M1718_IG38:
        mov      rdi, gword ptr [rbp-0x68]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
        mov      rax, r14
        cmp      qword ptr [rbp-0x70], 0xD1FFAB1E
        je       SHORT G_M1718_IG39
        call     CORINFO_HELP_FAIL_FAST
 						;; size=35 bbWeight=0.50 PerfScore 4.25
 G_M1718_IG39:
        nop      
 						;; size=1 bbWeight=0.50 PerfScore 0.12
 G_M1718_IG40:
        lea      rsp, [rbp-0x28]
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.25
 G_M1718_IG41:
-       mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
-       call     [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
-       int3     
-						;; size=13 bbWeight=0 PerfScore 0.00
-G_M1718_IG42:
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
        call     [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
-G_M1718_IG43:
+G_M1718_IG42:
        mov      edi, 6
        mov      rax, 0xD1FFAB1E      ; code for System.ThrowHelper:ThrowArgumentNullException(int)
        call     [rax]System.ThrowHelper:ThrowArgumentNullException(int)
        int3     
 						;; size=18 bbWeight=0 PerfScore 0.00
-G_M1718_IG44:
+G_M1718_IG43:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x80]
 						;; size=25 bbWeight=0 PerfScore 0.00
-G_M1718_IG45:
+G_M1718_IG44:
        cmp      gword ptr [rbp-0x68], 0
-       je       SHORT G_M1718_IG46
+       je       SHORT G_M1718_IG45
        mov      rdi, gword ptr [rbp-0x68]
        mov      r11, 0xD1FFAB1E      ; code for System.IDisposable:Dispose():this
        call     [r11]System.IDisposable:Dispose():this
 						;; size=24 bbWeight=0 PerfScore 0.00
-G_M1718_IG46:
+G_M1718_IG45:
        nop      
 						;; size=1 bbWeight=0 PerfScore 0.00
-G_M1718_IG47:
+G_M1718_IG46:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1191, prolog size 65, PerfScore 453.60, instruction count 330, allocated bytes for code 1191 (MethodHash=18d2f949) for method System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
+; Total bytes of code 1159, prolog size 65, PerfScore 448.27, instruction count 324, allocated bytes for code 1159 (MethodHash=18d2f949) for method System.String:JoinCore[System.__Canon](System.ReadOnlySpan`1[ushort],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 11, 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