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

Arm64: Combine if conditions into compare chains #79283

Merged
merged 32 commits into from
Mar 21, 2023

Conversation

a74nh
Copy link
Contributor

@a74nh a74nh commented Dec 6, 2022

Add a new stage optOptimizeCompareChainCondBlock in pass optOptimizeBools.

This aims to reduced the number of conditional jumps by joining cases when multiple conditions gate the execution of a block.

Example 1:
If ( a > b || c == d) { x = y; }

Will be represented in IR as:

 ------------ BB01 -> BB03 (cond), succs={BB02,BB03}
 *  JTRUE (GT a,b)

 ------------ BB02 -> BB04 (cond), preds={BB01} succs={BB03,BB04}
 *  JTRUE (NE c,d)

 ------------ BB03, preds={BB01, BB02} succs={BB04}
 *  ASG (x,y)

These operands will be combined into a single AND in the first block (with the first
condition inverted), wrapped by the test condition (NE(...,0)). Giving:

 ------------ BB01 -> BB03 (cond), succs={BB03,BB04}
 *  JTRUE (NE (AND (LE a,b), (NE c,d)), 0)

 ------------ BB03, preds={BB01} succs={BB04}
 *  ASG x,y

Example 2:
If ( a > b && c == d) { x = y; } else { x = z; }

Here the && conditions are connected via an OR. After the pass:

 ------------ BB01 -> BB03 (cond), succs={BB03,BB04}
 *  JTRUE (NE (OR (LE a,b), (NE c,d)), 0)

 ------------ BB03, preds={BB01} succs={BB05}
 *  ASG x,y

 ------------ BB04, preds={BB01} succs={BB05}
 *  ASG x,z

Example 3:
If ( a > b || c == d || e < f ) { x = y; }
The first pass of the optimization will combine two of the conditions. The
second pass will then combine remaining condition the earlier chain.

 ------------ BB01 -> BB03 (cond), succs={BB03,BB04}
 *  JTRUE (NE (OR ((NE (OR (NE c,d), (GE e,f)), 0), (LE a,b))), 0)

 ------------ BB03, preds={BB01} succs={BB04}
 *  ASG x,y

This optimization means that every condition within the IF statement is always evaluated,
as opposed to stopping at the first positive match.
Theoretically there is no maximum limit on the size of the generated chain. Therefore cost
checking is used to limit the maximum number of conditions that can be chained together.

Currently the cost checking limits to a maximum of three simple conditions. This is the same behaviour as GCC. Note that LLVM allows chains of much longer length.

Related: #55364

@dotnet-issue-labeler dotnet-issue-labeler bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Dec 6, 2022
@ghost ghost added the community-contribution Indicates that the PR has been added by a community member label Dec 6, 2022
@a74nh a74nh marked this pull request as draft December 6, 2022 16:41
@ghost
Copy link

ghost commented Dec 6, 2022

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Issue Details

Add a new stage optOptimizeCompareChainCondBlock in pass optOptimizeBools. This finds multiple JTRUE(CMP) blocks and combine them into a single JTRUE(AND(CMP,CMP)) block.

All If conversion to use these AND as the condition.

Author: a74nh
Assignees: -
Labels:

area-CodeGen-coreclr, community-contribution

Milestone: -

@a74nh a74nh changed the title Create AND chains in bool optimizer pass WIP: Create AND chains in bool optimizer pass Dec 6, 2022
@a74nh
Copy link
Contributor Author

a74nh commented Dec 7, 2022

(Putting up a WIP patch as I've got a couple of issues to still work through.)

I'm getting an error compiling System.Number:NumberToStringFormat(). This is a big function!

With this optimise bools creates an AND chain connected to JTRUE node 001240. This is not If converted.

At the code generation stage, we'll generate something like:

cmp x1, x2
ccmp x3, x4, eq
beq label

The eq in the ccmp comes from the node for the cmp. The eq in the beq comes from the node for the ccmp.
To ensure this happens, during lowering the AND chain is contained within the JTRUE. Then in genCodeForJumpTrue(), we generate the chain (via genCodeForContainedCompareChain()), which returns the condition for use in the JTRUE.

However, NumberToStringFormat() is a big function. During linear scan, a COPY node is added. This is put at the bottom of the block. ie - between the JTRUE and the contained AND, giving the IR:

....
N455 ( 15, 14) [001250] -c-XG--N---                 t1250 = *  EQ        int    REG NA <l:$36f, c:$370>
                                                            /--*  t1239  int    
                                                            +--*  t1250  int    
N457 ( 22, 18) [003730] Jc-XG--N---                         *  AND       void   REG NA
N001 (  1,  1) [004318] -----------                 t4318 =    LCL_VAR   int    V16 loc12         x10 REG x10
                                                            /--*  t4318  int    
N002 (  2,  2) [004319] -----------                 t4319 = *  COPY      int    REG x1
N459 ( 24, 20) [001240] ---XG------                         *  JTRUE     void   REG NA $VN.Void

Note that the AND has the contained flag set.

Now during the code generation, the entire AND chain is ignored (because it is contained). The COPY node generates a mov but then falls over with liveness asserts - it's trying to move a value from the AND chain, but the AND chain hasn't been generated yet! The COPY can't be moved before the chain for the same reasons.

Alternatively, I was thinking not to contain the AND chain within the JTRUE. Instead, the final AND would be marked as setting flags, and when generating JTRUE it would parse the chain to find the condition for the final compare. I think this is the way forward, but wanted to check before rewriting things.

Full dump file:
dump_18888.txt

@kunalspathak, @jakobbotsch what are your thoughts?

@jakobbotsch
Copy link
Member

jakobbotsch commented Dec 7, 2022

Yes, LSRA will spill and insert resolution nodes before the terminating nodes like JTRUE. It means we cannot in general contain things inside the JTRUE as the contained trees may be using locals that are no longer present in registers. @TIHan ran into the same problem in #76731 (before that, I did not realize this would be a problem). It would probably be possible to teach LSRA about this so that it could insert resolution after the JTRUE instead when necessary (by splitting the edge -- already done in some cases).

I think your suggestion is fine to make forward progress, assuming you validate that the AND comes right before the JTRUE, in the same way that other relops are handled.

@a74nh
Copy link
Contributor Author

a74nh commented Dec 7, 2022

@TIHan ran into the same problem in #76731

A few months back, I spent about a half day trying to do this, then realised it was trickier than expected and gave up.

I think your suggestion is fine to make forward progress, assuming you validate that the AND comes right before the JTRUE, in the same way that other relops are handled.

ok, will go this way then. Thanks.

@jakobbotsch
Copy link
Member

It would probably be possible to teach LSRA about this so that it could insert resolution after the JTRUE instead when necessary (by splitting the edge -- already done in some cases).

LSRA actually already handles the situation for other cases so it does not look that complicated to extend it:

// Next, if this blocks ends with a switch table, or for Arm64, ends with JCMP instruction,
// make sure to not copy into the registers that are consumed at the end of this block.
//
// Note: Only switches and JCMP (for Arm4) have input regs (and so can be fed by copies), so those
// are the only block-ending branches that need special handling.
regMaskTP consumedRegs = RBM_NONE;
if (block->bbJumpKind == BBJ_SWITCH)
{
// At this point, Lowering has transformed any non-switch-table blocks into
// cascading ifs.
GenTree* switchTable = LIR::AsRange(block).LastNode();
assert(switchTable != nullptr && switchTable->OperGet() == GT_SWITCH_TABLE);
consumedRegs = switchTable->gtRsvdRegs;
GenTree* op1 = switchTable->gtGetOp1();
GenTree* op2 = switchTable->gtGetOp2();
noway_assert(op1 != nullptr && op2 != nullptr);
assert(op1->GetRegNum() != REG_NA && op2->GetRegNum() != REG_NA);
// No floating point values, so no need to worry about the register type
// (i.e. for ARM32, where we used the genRegMask overload with a type).
assert(varTypeIsIntegralOrI(op1) && varTypeIsIntegralOrI(op2));
consumedRegs |= genRegMask(op1->GetRegNum());
consumedRegs |= genRegMask(op2->GetRegNum());
// Special handling for GT_COPY to not resolve into the source
// of switch's operand.
if (op1->OperIs(GT_COPY))
{
GenTree* srcOp1 = op1->gtGetOp1();
consumedRegs |= genRegMask(srcOp1->GetRegNum());
}
}
#if defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64)
// Next, if this blocks ends with a JCMP, we have to make sure:
// 1. Not to copy into the register that JCMP uses
// e.g. JCMP w21, BRANCH
// 2. Not to copy into the source of JCMP's operand before it is consumed
// e.g. Should not use w0 since it will contain wrong value after resolution
// call METHOD
// ; mov w0, w19 <-- should not resolve in w0 here.
// mov w21, w0
// JCMP w21, BRANCH
// 3. Not to modify the local variable it must consume
// Note: GT_COPY has special handling in codegen and its generation is merged with the
// node that consumes its result. So both, the input and output regs of GT_COPY must be
// excluded from the set available for resolution.
LclVarDsc* jcmpLocalVarDsc = nullptr;
if (block->bbJumpKind == BBJ_COND)
{
GenTree* lastNode = LIR::AsRange(block).LastNode();
if (lastNode->OperIs(GT_JCMP))
{
GenTree* op1 = lastNode->gtGetOp1();
consumedRegs |= genRegMask(op1->GetRegNum());
if (op1->OperIs(GT_COPY))
{
GenTree* srcOp1 = op1->gtGetOp1();
consumedRegs |= genRegMask(srcOp1->GetRegNum());
}
if (op1->IsLocal())
{
GenTreeLclVarCommon* lcl = op1->AsLclVarCommon();
jcmpLocalVarDsc = &compiler->lvaTable[lcl->GetLclNum()];
}
}
}
#endif // defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64)

@a74nh
Copy link
Contributor Author

a74nh commented Jan 25, 2023

LSRA actually already handles the situation for other cases so it does not look that complicated to extend it:

In the end not containing anything inside the JTRUE made it work fine. The AND node is just treated the same way as a CMP node. Containing inside a JTRUE would need a new pull request, as there would be quite a lot of changes not directly applicable here.

Been distracted elsewhere, but this is looking good now, so I'll be taking it out of draft shorty....

@jakobbotsch
Copy link
Member

That's fine, this was also more of a general note regarding #76731 -- I just stumbled upon that LSRA code today.

@a74nh a74nh marked this pull request as ready for review January 25, 2023 18:08
@a74nh
Copy link
Contributor Author

a74nh commented Jan 25, 2023

Taking this patch out of draft. It needs some more test cases in compareAnd3Chains, but otherwise I'm happy with it now.

optOptimizeCompareChainCondBlock() merges two compares into an AND chain.
Due to the the way the blocks flow, we currently only handle cases where the two conditions are ORed together.
See the large comment block for examples, and also the new tests.

Adding cases that are ANDed together would require a little more thought as it doesn't quite fit. You'd either need an OR or ANDNOT chains or epiologues mid block - I've not fully considered how it'd work.

optOptimizeBools() now iterates through bocks in reverse order, this allows for multiple conditions to be chained. It doesn't seem to have caused any issues with the other optimizations there.

The rest of the changes are to support JTRUE having an AND child.

In particular, AND chains can only be reversed by adding a NOT on the front of the chain. The changes in fgopt and ifconversion make sure that AND chains are never reversed.

Getting the chain code working in lowering/codegen was a little fiddly.

I've taken care to avoid code size regressions. In particular, avoiding optimising where the code would normally generate a CBZ or TST instruction. The handful of regressions remaining are due to the immediate size in a CCMP instruction being smaller than a CMP instruction.

@jakobbotsch
Copy link
Member

Given this is a lowering issue, and the low number of regressions (+416 bytes) compared to improvements (-148,480 bytes) is it ok to leave that for a later PR?

Yes, that's completely fine -- thanks for checking the regressions in this level of detail.

@a74nh
Copy link
Contributor Author

a74nh commented Mar 16, 2023

Yes, that's completely fine -- thanks for checking the regressions in this level of detail.

Ok, in that case I think this patch is ready then. Looks like the failing test is a known error. And I think I've addressed all the review comments.

@jakobbotsch
Copy link
Member

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

Comment on lines 9532 to 9543
int op1Cost = cond1->GetCostEx();
int op2Cost = cond2->GetCostEx();
int maxOp1Cost = op1IsCondChain ? 35 : 7;
int maxOp2Cost = op2IsCondChain ? 35 : 7;

// Cost to allow for chain size of three.
if (op1Cost > maxOp1Cost || op2Cost > maxOp2Cost)
{
JITDUMP("Skipping CompareChainCond that will evaluate conditions unconditionally at costs %d,%d\n", op1Cost,
op2Cost);
return false;
}
Copy link
Member

Choose a reason for hiding this comment

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

Did you end up adding some handling for potentially expensive trees somewhere else?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We're iterating forwards through the blocks now, so that I think gets rid of that issue:

if (expensive1 || cheap1 )

  • both of expensive1 and cheap1 would be checked against cost 7.

if (expensive1 || cheap1 || cheap2 )

  • First iteration both of expensive1 and cheap1 would be checked against cost 7.
  • If first iteration passed, then second pass the combined (expensive1+cheap1) would be checked against 35 and cheap2 against 7.
  • If first iteration failed, then both cheap1 and cheap2 would be checked against 7.

if (cheap1 || cheap2 || expensive1)

  • both cheap1 and cheap2 would be checked against cost 7. Which would pass.
  • Then (cheap1+cheap2) against 35 and expensive1 against 7.

Copy link
Member

@jakobbotsch jakobbotsch Mar 17, 2023

Choose a reason for hiding this comment

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

It's odd to me that it's possible to "defeat" the check:

[MethodImpl(MethodImplOptions.NoInlining)]
public static int Foo(int a, int b)
{
    if (a > 10 && (((a * a * a * a * a > 3) & (a == 20)) != false))
    {
        return 42;
    }

    return 100;
}

this produces:

G_M63574_IG01:              ;; offset=0000H
        A9BF7BFD          stp     fp, lr, [sp, #-0x10]!
        910003FD          mov     fp, sp
                                                ;; size=8 bbWeight=1 PerfScore 1.50
G_M63574_IG02:              ;; offset=0008H
        1B007C01          mul     w1, w0, w0
        1B007C21          mul     w1, w1, w0
        1B007C21          mul     w1, w1, w0
        1B007C21          mul     w1, w1, w0
        52800C82          mov     w2, #100
        52800543          mov     w3, #42
        71000C3F          cmp     w1, #3
        7A54C800          ccmp    w0, #20, 0, gt
        7A4A080E          ccmp    w0, #10, nzc, eq
        1A83D040          csel    w0, w2, w3, le
                                                ;; size=40 bbWeight=1 PerfScore 11.00
G_M63574_IG03:              ;; offset=0030H
        A8C17BFD          ldp     fp, lr, [sp], #0x10
        D65F03C0          ret     lr
                                                ;; size=8 bbWeight=1 PerfScore 2.00

Of course it's a very constructed example but I would be afraid that there are more natural looking examples.
I suppose to fix this you would need the recursive walk you wanted to avoid. I don't think that's expensive -- the code below calls gtSetEvalOrder and fgSetStmtSeq and they both end up doing these kinds of full tree walks anyway -- but it's not as elegant. It would make me feel a bit more at ease, however, to find and limit the cost of each "leaf" in the compare chain.

Copy link
Member

Choose a reason for hiding this comment

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

I think we can leave it as is, it's probably fine in practice. Will leave it up to you.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The cost of (((a * a * a * a * a > 3) & (a == 20)) is 35, which is on the limit for combing with the a > 10

Whereas the cost after combining, for example, op1 > 3 && op2 == 10 && op3 >= 12 is 32. (It's fairly high because of the two lots of EQ(AND,0)).

Looking at this again, a limit of 35 is probably too high as it's allowing 4 items to chain together. I should probably drop it to 31 to prevent op1 > 3 && op2 == 10 && op3 >= 12 combing with anything else.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

With the new costing it'll still allow like (((a * a * a * a > 3) & (a == 20)) (ie one less than you had before).
To improve it, further I think we'd have to somehow remove all the EQ(AND,0) blocks from the costings (as we know they'll vanish during lowering). Not sure it's worth it, so happy to leave as is now.

@a74nh
Copy link
Contributor Author

a74nh commented Mar 16, 2023

/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn

Those are all looking good - just X86 failures, which this patch doesn't touch

Copy link
Member

@jakobbotsch jakobbotsch left a comment

Choose a reason for hiding this comment

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

LGTM with a few suggestions. Very nice work, great to see this.

@a74nh
Copy link
Contributor Author

a74nh commented Mar 17, 2023

With the max cost reduced the diffs haven't changed much:

Diffs are based on 1,496,829 contexts (401,888 MinOpts, 1,094,941 FullOpts).

MISSED contexts: base: 86 (0.01%), diff: 88 (0.01%)

Overall (-147,888 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries_tests.pmi.linux.arm64.checked.mch 162,440,896 -27,068
libraries.pmi.linux.arm64.checked.mch 66,031,816 -28,324
benchmarks.run.linux.arm64.checked.mch 18,839,792 -6,420
coreclr_tests.run.linux.arm64.checked.mch 536,166,368 -71,888
libraries.crossgen2.linux.arm64.checked.mch 46,085,472 -14,188
MinOpts (+0 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm64.checked.mch 361,870,520 +0
FullOpts (-147,888 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries_tests.pmi.linux.arm64.checked.mch 156,698,000 -27,068
libraries.pmi.linux.arm64.checked.mch 64,495,464 -28,324
benchmarks.run.linux.arm64.checked.mch 17,775,424 -6,420
coreclr_tests.run.linux.arm64.checked.mch 174,295,848 -71,888
libraries.crossgen2.linux.arm64.checked.mch 46,083,964 -14,188
Example diffs
libraries_tests.pmi.linux.arm64.checked.mch
-20 (-35.71%) : 199251.dasm - System.Runtime.InteropServices.Tests.LibObjC:SupportedOnPlatform(int):bool
@@ -7,59 +7,43 @@
 ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  5,  4   )     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  5,  5   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M12476_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M12476_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M12476_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M12476_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            mov     w1, #1
             cmp     w0, #1
-            beq     G_M12476_IG04
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M12476_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #2
-            beq     G_M12476_IG04
-            cmp     w0, #4
-            bne     G_M12476_IG06
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M12476_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M12476_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #2, z, ne
+            ccmp    w0, #4, z, ne
+            csel    w0, w1, wzr, ne
+						;; size=20 bbWeight=1 PerfScore 2.50
+G_M12476_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M12476_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M12476_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 56, prolog size 8, PerfScore 12.60, instruction count 14, allocated bytes for code 56 (MethodHash=d337cf43) for method System.Runtime.InteropServices.Tests.LibObjC:SupportedOnPlatform(int):bool
+; Total bytes of code 36, prolog size 8, PerfScore 9.60, instruction count 9, allocated bytes for code 36 (MethodHash=d337cf43) for method System.Runtime.InteropServices.Tests.LibObjC:SupportedOnPlatform(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 14 (0x0000e) Actual length = 56 (0x000038)
+  Function Length   : 9 (0x00009) Actual length = 36 (0x000024)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-20 (-35.71%) : 73785.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage13d.usage13d.Parent:Foo(int,int,int):int:this
@@ -8,58 +8,44 @@
 ;
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def
 ;  V01 arg1         [V01,T00] (  3,  3   )     int  ->   x1         single-def
-;  V02 arg2         [V02,T01] (  3,  2.50)     int  ->   x2         single-def
-;  V03 arg3         [V03,T02] (  3,  2.50)     int  ->   x3         single-def
+;  V02 arg2         [V02,T01] (  3,  3   )     int  ->   x2         single-def
+;  V03 arg3         [V03,T02] (  3,  3   )     int  ->   x3         single-def
 ;# V04 OutArgs      [V04    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M39116_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M39116_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M39116_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w1, #2
-            bne     G_M39116_IG05
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M39116_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w2, #1
-            bne     G_M39116_IG05
-            cmp     w3, #3
-            bne     G_M39116_IG05
-            mov     w0, wzr
-						;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M39116_IG04:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M39116_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M39116_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M39116_IG06:        ; bbWeight=0.50, epilog, nogc, extend
+            cmp     w1, #2
+            ccmp    w2, #1, 0, eq
+            ccmp    w3, #3, 0, eq
+            csel    w0, w0, wzr, ne
+						;; size=20 bbWeight=1 PerfScore 2.50
+G_M39116_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 56, prolog size 8, PerfScore 12.60, instruction count 14, allocated bytes for code 56 (MethodHash=7fce6733) for method ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage13d.usage13d.Parent:Foo(int,int,int):int:this
+; Total bytes of code 36, prolog size 8, PerfScore 9.60, instruction count 9, allocated bytes for code 36 (MethodHash=7fce6733) for method ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage13d.usage13d.Parent:Foo(int,int,int):int:this
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 14 (0x0000e) Actual length = 56 (0x000038)
+  Function Length   : 9 (0x00009) Actual length = 36 (0x000024)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-16 (-33.33%) : 107909.dasm - Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
@@ -6,57 +6,42 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  4,  3.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  4,  4   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M56201_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M56201_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M56201_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            mov     w1, #1
             cmp     w0, #4
-            bls     G_M56201_IG04
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #9
-            bne     G_M56201_IG06
-						;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M56201_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #9, z, hi
+            csel    w0, wzr, w1, ne
+						;; size=16 bbWeight=1 PerfScore 2.00
+G_M56201_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M56201_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
+  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
+4 (+1.14%) : 315758.dasm - Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:b__92_1(long,long):System.Object[]:this
@@ -100,53 +100,50 @@ G_M18778_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             bl      CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[x0 x15]
             ; byrRegs -[x14]
-            cbz     x19, G_M18778_IG08
+            cbz     x19, G_M18778_IG06
 						;; size=152 bbWeight=1 PerfScore 27.50
 G_M18778_IG03:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
+            mov     x0, #0xD1FFAB1E
             cmn     x20, #1
-            bne     G_M18778_IG04
-            mov     x0, #0xD1FFAB1E
-            cmp     x19, x0
-            beq     G_M18778_IG07
-						;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M18778_IG04:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
-            mov     x0, #0xD1FFAB1E
-            cmp     x20, x0
-            bne     G_M18778_IG05
-            cmn     x19, #1
-            beq     G_M18778_IG07
-						;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M18778_IG05:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
+            ccmp    x19, x0, 0, eq
+            cset    x0, eq
+            mov     x2, #0xD1FFAB1E
+            movn    x3, #0
+            cmp     x20, x2
+            ccmp    x19, x3, 0, eq
+            cset    x2, eq
+            orr     w0, w0, w2
+            cbnz    w0, G_M18778_IG05
             mov     x22, x21
             ; gcrRegs +[x22]
             cmp     x19, #0
-            beq     G_M18778_IG12
+            beq     G_M18778_IG10
             cmn     x19, #1
-            bne     G_M18778_IG06
+            bne     G_M18778_IG04
             adds    xzr, x1, x1
-            bne     G_M18778_IG06
-            bvs     G_M18778_IG11
-						;; size=32 bbWeight=0.50 PerfScore 3.00
-G_M18778_IG06:        ; bbWeight=0.50, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
+            bne     G_M18778_IG04
+            bvs     G_M18778_IG09
+						;; size=76 bbWeight=0.50 PerfScore 6.00
+G_M18778_IG04:        ; bbWeight=0.50, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
             sdiv    x0, x1, x19
             cmp     x0, x20
             cset    x19, eq
-            b       G_M18778_IG09
+            b       G_M18778_IG07
 						;; size=16 bbWeight=0.50 PerfScore 10.50
-G_M18778_IG07:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
+G_M18778_IG05:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
             ; gcrRegs -[x22]
             mov     x22, x21
             ; gcrRegs +[x22]
             mov     w19, wzr
-            b       G_M18778_IG09
+            b       G_M18778_IG07
 						;; size=12 bbWeight=0.50 PerfScore 1.00
-G_M18778_IG08:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
+G_M18778_IG06:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
             ; gcrRegs -[x22]
             mov     x22, x21
             ; gcrRegs +[x22]
             mov     w19, #1
 						;; size=8 bbWeight=0.50 PerfScore 0.50
-G_M18778_IG09:        ; bbWeight=1, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
+G_M18778_IG07:        ; bbWeight=1, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
             movz    x0, #0xD1FFAB1E
             movk    x0, #0xD1FFAB1E LSL #16
             movk    x0, #0xD1FFAB1E LSL #32
@@ -162,22 +159,22 @@ G_M18778_IG09:        ; bbWeight=1, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {
             mov     x0, x21
             ; gcrRegs +[x0]
 						;; size=40 bbWeight=1 PerfScore 6.50
-G_M18778_IG10:        ; bbWeight=1, epilog, nogc, extend
+G_M18778_IG08:        ; bbWeight=1, epilog, nogc, extend
             ldp     x21, x22, [sp, #0x20]
             ldp     x19, x20, [sp, #0x10]
             ldp     fp, lr, [sp], #0x30
             ret     lr
 						;; size=16 bbWeight=1 PerfScore 4.00
-G_M18778_IG11:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M18778_IG09:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             ; gcrRegs -[x0 x21]
             bl      CORINFO_HELP_OVERFLOW
 						;; size=4 bbWeight=0 PerfScore 0.00
-G_M18778_IG12:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M18778_IG10:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             bl      CORINFO_HELP_THROWDIVZERO
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 352, prolog size 16, PerfScore 96.20, instruction count 88, allocated bytes for code 352 (MethodHash=910fb6a5) for method Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int64TestMultiplications>b__92_1(long,long):System.Object[]:this
+; Total bytes of code 356, prolog size 16, PerfScore 96.10, instruction count 89, allocated bytes for code 356 (MethodHash=910fb6a5) for method Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int64TestMultiplications>b__92_1(long,long):System.Object[]:this
 ; ============================================================
 
 Unwind Info:
@@ -188,7 +185,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 88 (0x00058) Actual length = 352 (0x000160)
+  Function Length   : 89 (0x00059) Actual length = 356 (0x000164)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+2.44%) : 110651.dasm - Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool
@@ -39,57 +39,55 @@ G_M46472_IG02:        ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0008 {x3}, by
             ldr     w4, [x0, #0x08]
             add     w5, w1, #1
             cmp     w4, w5
-            ble     G_M46472_IG07
+            ble     G_M46472_IG05
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M46472_IG03:        ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0008 {x3}, byref, isz
             cmp     w1, w4
-            bhs     G_M46472_IG11
+            bhs     G_M46472_IG09
             add     x0, x0, #12
             ; gcrRegs -[x0]
             ; byrRegs +[x0]
             ldrh    w6, [x0, w1, UXTW #2]
             cmp     w5, w4
-            bhs     G_M46472_IG11
+            bhs     G_M46472_IG09
             ldrh    w0, [x0, w5, UXTW #2]
             ; byrRegs -[x0]
+            mov     w4, #123
             cmp     w6, #123
-            bne     G_M46472_IG04
-            cmp     w0, #123
-            beq     G_M46472_IG05
-						;; size=44 bbWeight=0.50 PerfScore 6.25
-G_M46472_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, byref, isz
+            ccmp    w0, w4, 0, eq
+            cset    x4, ne
+            mov     w5, #125
             cmp     w6, #125
-            bne     G_M46472_IG07
-            cmp     w0, #125
-            bne     G_M46472_IG07
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M46472_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, byref, isz
+            ccmp    w0, w5, 0, eq
+            cset    x0, ne
+            tst     w4, w0
+            bne     G_M46472_IG05
             add     w0, w2, w1
             cmp     w0, #0
-            blt     G_M46472_IG09
+            blt     G_M46472_IG07
             add     w1, w0, #2
             cmp     w1, w0
-            blt     G_M46472_IG10
+            blt     G_M46472_IG08
             str     w0, [x3]
             mov     w0, #2
             str     w0, [x3, #0x04]
             mov     w0, #1
-						;; size=40 bbWeight=0.50 PerfScore 3.50
+						;; size=108 bbWeight=0.50 PerfScore 11.00
+G_M46472_IG04:        ; bbWeight=0.50, epilog, nogc, extend
+            ldr     x19, [sp, #0x18]
+            ldp     fp, lr, [sp], #0x20
+            ret     lr
+						;; size=12 bbWeight=0.50 PerfScore 2.00
+G_M46472_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, gcvars, byref
+            str     xzr, [x3]
+            mov     w0, wzr
+						;; size=8 bbWeight=0.50 PerfScore 0.75
 G_M46472_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
             ret     lr
 						;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M46472_IG07:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, gcvars, byref
-            str     xzr, [x3]
-            mov     w0, wzr
-						;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M46472_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ldr     x19, [sp, #0x18]
-            ldp     fp, lr, [sp], #0x20
-            ret     lr
-						;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M46472_IG09:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M46472_IG07:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             ; byrRegs -[x3]
             movz    x0, #0xD1FFAB1E
             movk    x0, #0xD1FFAB1E LSL #16
@@ -120,7 +118,7 @@ G_M46472_IG09:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             bl      CORINFO_HELP_THROW
             ; gcrRegs -[x0 x19]
 						;; size=80 bbWeight=0 PerfScore 0.00
-G_M46472_IG10:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46472_IG08:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             movz    x0, #0xD1FFAB1E
             movk    x0, #0xD1FFAB1E LSL #16
             movk    x0, #0xD1FFAB1E LSL #32
@@ -150,12 +148,12 @@ G_M46472_IG10:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             bl      CORINFO_HELP_THROW
             ; gcrRegs -[x0 x19]
 						;; size=80 bbWeight=0 PerfScore 0.00
-G_M46472_IG11:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46472_IG09:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             bl      CORINFO_HELP_RNGCHKFAIL
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 328, prolog size 12, PerfScore 56.30, instruction count 82, allocated bytes for code 328 (MethodHash=3eb14a77) for method Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool
+; Total bytes of code 336, prolog size 12, PerfScore 56.85, instruction count 84, allocated bytes for code 336 (MethodHash=3eb14a77) for method Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool
 ; ============================================================
 
 Unwind Info:
@@ -166,7 +164,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 82 (0x00052) Actual length = 328 (0x000148)
+  Function Length   : 84 (0x00054) Actual length = 336 (0x000150)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+4.76%) : 231893.dasm - NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool
@@ -24,33 +24,33 @@ G_M22473_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=12 bbWeight=1 PerfScore 2.00
 G_M22473_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             cmp     w1, #90
-            ble     G_M22473_IG06
+            ble     G_M22473_IG05
 						;; size=8 bbWeight=0.50 PerfScore 0.75
 G_M22473_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            mov     w0, #122
             cmp     w1, #97
-            blt     G_M22473_IG05
-            cmp     w1, #122
-            ble     G_M22473_IG06
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M22473_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w1, w0, 0, ge
+            cset    x0, gt
+            mov     w2, #57
             cmp     w1, #48
-            blt     G_M22473_IG08
-            cmp     w1, #57
-            bgt     G_M22473_IG08
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M22473_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            ccmp    w1, w2, 0, ge
+            cset    x2, gt
+            tst     w0, w2
+            bne     G_M22473_IG07
+						;; size=40 bbWeight=0.50 PerfScore 2.75
+G_M22473_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, #1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22473_IG07:        ; bbWeight=0.50, epilog, nogc, extend
+G_M22473_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M22473_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M22473_IG07:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
             cmp     w1, #58
-            bhi     G_M22473_IG10
+            bhi     G_M22473_IG09
             sub     w0, w1, #32
             cmp     w0, #15
-            bhi     G_M22473_IG09
+            bhi     G_M22473_IG08
             mov     w0, w0
             adr     x1, [@RWD00]
             ldr     w1, [x1, x0, LSL #2]
@@ -58,50 +58,50 @@ G_M22473_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
             add     x1, x1, x2
             br      x1
 						;; size=44 bbWeight=0.50 PerfScore 4.75
-G_M22473_IG09:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M22473_IG08:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             cmp     w1, #58
-            beq     G_M22473_IG11
-            b       G_M22473_IG13
+            beq     G_M22473_IG10
+            b       G_M22473_IG12
 						;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M22473_IG10:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M22473_IG09:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            mov     w0, #63
             cmp     w1, #61
-            beq     G_M22473_IG11
-            cmp     w1, #63
-            bne     G_M22473_IG13
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M22473_IG11:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            ccmp    w1, w0, z, ne
+            bne     G_M22473_IG12
+						;; size=16 bbWeight=0.50 PerfScore 1.25
+G_M22473_IG10:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, #1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22473_IG12:        ; bbWeight=0.50, epilog, nogc, extend
+G_M22473_IG11:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M22473_IG13:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M22473_IG12:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, wzr
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22473_IG14:        ; bbWeight=0.50, epilog, nogc, extend
+G_M22473_IG13:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-RWD00  	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG13 - G_M22473_IG02
-       	dd	G_M22473_IG13 - G_M22473_IG02
-       	dd	G_M22473_IG13 - G_M22473_IG02
-       	dd	G_M22473_IG13 - G_M22473_IG02
-       	dd	G_M22473_IG13 - G_M22473_IG02
-       	dd	G_M22473_IG13 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG13 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
-       	dd	G_M22473_IG11 - G_M22473_IG02
+RWD00  	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG12 - G_M22473_IG02
+       	dd	G_M22473_IG12 - G_M22473_IG02
+       	dd	G_M22473_IG12 - G_M22473_IG02
+       	dd	G_M22473_IG12 - G_M22473_IG02
+       	dd	G_M22473_IG12 - G_M22473_IG02
+       	dd	G_M22473_IG12 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG12 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
+       	dd	G_M22473_IG10 - G_M22473_IG02
 
 
-; Total bytes of code 168, prolog size 8, PerfScore 35.30, instruction count 42, allocated bytes for code 168 (MethodHash=95b1a836) for method NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool
+; Total bytes of code 176, prolog size 8, PerfScore 35.60, instruction count 44, allocated bytes for code 176 (MethodHash=95b1a836) for method NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool
 ; ============================================================
 
 Unwind Info:
@@ -112,7 +112,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 42 (0x0002a) Actual length = 168 (0x0000a8)
+  Function Length   : 44 (0x0002c) Actual length = 176 (0x0000b0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
libraries.pmi.linux.arm64.checked.mch
-20 (-38.46%) : 86103.dasm - ILCompiler.DependencyAnalysis.Relocation:GetFileRelocationType(int):int
@@ -6,56 +6,42 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  6,  4.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  6,  6   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M18504_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M18504_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M18504_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M18504_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             cmp     w0, #3
-            beq     G_M18504_IG04
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M18504_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #7
-            beq     G_M18504_IG04
-            cmp     w0, #10
-            bne     G_M18504_IG05
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M18504_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+            ccmp    w0, #7, z, ne
+            ccmp    w0, #10, z, ne
+            csel    w0, wzr, w0, ne
+						;; size=16 bbWeight=1 PerfScore 2.00
+G_M18504_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M18504_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M18504_IG06:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 52, prolog size 8, PerfScore 11.95, instruction count 13, allocated bytes for code 52 (MethodHash=2aa8b7b7) for method ILCompiler.DependencyAnalysis.Relocation:GetFileRelocationType(int):int
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=2aa8b7b7) for method ILCompiler.DependencyAnalysis.Relocation:GetFileRelocationType(int):int
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 13 (0x0000d) Actual length = 52 (0x000034)
+  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-16 (-33.33%) : 179075.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool
@@ -6,57 +6,42 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  4,  3.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  4,  4   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M35125_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M35125_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M35125_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M35125_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            mov     w1, #1
             cmp     w0, #3
-            beq     G_M35125_IG04
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M35125_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #4
-            bne     G_M35125_IG06
-						;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M35125_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M35125_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #4, z, ne
+            csel    w0, wzr, w1, ne
+						;; size=16 bbWeight=1 PerfScore 2.00
+G_M35125_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M35125_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M35125_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=210876ca) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=210876ca) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
+  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-20 (-33.33%) : 153610.dasm - ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool
@@ -6,60 +6,44 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  5,  4   )     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  5,  5   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M45715_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M45715_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M45715_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M45715_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             sub     w1, w0, #12
+            mov     w2, #1
             cmp     w1, #2
-            bls     G_M45715_IG04
-						;; size=12 bbWeight=1 PerfScore 2.00
-G_M45715_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #16
-            beq     G_M45715_IG04
-            cmp     w0, #29
-            bne     G_M45715_IG06
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M45715_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45715_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #16, z, hi
+            ccmp    w0, #29, z, ne
+            csel    w0, wzr, w2, ne
+						;; size=24 bbWeight=1 PerfScore 3.00
+G_M45715_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M45715_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45715_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 60, prolog size 8, PerfScore 13.50, instruction count 15, allocated bytes for code 60 (MethodHash=6fda4d6c) for method ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool
+; Total bytes of code 40, prolog size 8, PerfScore 10.50, instruction count 10, allocated bytes for code 40 (MethodHash=6fda4d6c) for method ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 15 (0x0000f) Actual length = 60 (0x00003c)
+  Function Length   : 10 (0x0000a) Actual length = 40 (0x000028)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
+8 (+5.71%) : 218007.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
@@ -9,8 +9,8 @@
 ;
 ;  V00 arg0         [V00,T02] (  5,  3.96)     ref  ->   x0         class-hnd single-def
 ;  V01 loc0         [V01,T05] (  2,  1   )     ref  ->   x0         class-hnd single-def
-;  V02 loc1         [V02,T01] (  5, 16.50)     int  ->   x2        
-;  V03 loc2         [V03,T00] (  7, 18   )  ushort  ->   x3        
+;  V02 loc1         [V02,T00] (  5, 16.50)     int  ->   x2        
+;  V03 loc2         [V03,T01] (  7, 16   )  ushort  ->   x3        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;* V05 tmp1         [V05,T06] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
 ;  V06 cse0         [V06,T03] (  5,  5.92)     int  ->   x1         "CSE - aggressive"
@@ -45,54 +45,50 @@ G_M10687_IG07:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
             ; gcrRegs +[x0]
             mov     w2, wzr
             cmp     w1, #0
-            ble     G_M10687_IG13
+            ble     G_M10687_IG10
             add     x0, x0, #12
             ; gcrRegs -[x0]
             ; byrRegs +[x0]
 						;; size=16 bbWeight=0.50 PerfScore 1.25
 G_M10687_IG08:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
             ldrh    w3, [x0, w2, UXTW #2]
+            mov     w4, #57
             cmp     w3, #48
-            blt     G_M10687_IG10
-						;; size=12 bbWeight=4 PerfScore 18.00
-G_M10687_IG09:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
-            cmp     w3, #57
-            ble     G_M10687_IG12
-						;; size=8 bbWeight=2 PerfScore 3.00
-G_M10687_IG10:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w4, 0, ge
+            cset    x4, le
+            mov     w5, #102
             cmp     w3, #97
-            blt     G_M10687_IG11
-            cmp     w3, #102
-            ble     G_M10687_IG12
-						;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG11:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w5, 0, ge
+            cset    x5, le
+            orr     w4, w4, w5
+            cbnz    w4, G_M10687_IG09
+            mov     w4, #70
             cmp     w3, #65
-            blt     G_M10687_IG15
-            cmp     w3, #70
-            bgt     G_M10687_IG15
-						;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG12:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w4, 0, ge
+            bgt     G_M10687_IG12
+						;; size=60 bbWeight=4 PerfScore 44.00
+G_M10687_IG09:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
             add     w2, w2, #1
             cmp     w1, w2
             bgt     G_M10687_IG08
 						;; size=12 bbWeight=4 PerfScore 8.00
-G_M10687_IG13:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M10687_IG10:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; byrRegs -[x0]
             mov     w0, #1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG14:        ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG11:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M10687_IG15:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M10687_IG12:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, wzr
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG16:        ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG13:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 140, prolog size 8, PerfScore 64.84, instruction count 35, allocated bytes for code 140 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
+; Total bytes of code 148, prolog size 8, PerfScore 76.64, instruction count 37, allocated bytes for code 148 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
 ; ============================================================
 
 Unwind Info:
@@ -103,7 +99,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 35 (0x00023) Actual length = 140 (0x00008c)
+  Function Length   : 37 (0x00025) Actual length = 148 (0x000094)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+5.71%) : 179103.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
@@ -9,8 +9,8 @@
 ;
 ;  V00 arg0         [V00,T02] (  5,  3.96)     ref  ->   x0         class-hnd single-def
 ;  V01 loc0         [V01,T05] (  2,  1   )     ref  ->   x0         class-hnd single-def
-;  V02 loc1         [V02,T01] (  5, 16.50)     int  ->   x2        
-;  V03 loc2         [V03,T00] (  7, 18   )  ushort  ->   x3        
+;  V02 loc1         [V02,T00] (  5, 16.50)     int  ->   x2        
+;  V03 loc2         [V03,T01] (  7, 16   )  ushort  ->   x3        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;* V05 tmp1         [V05,T06] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
 ;  V06 cse0         [V06,T03] (  5,  5.92)     int  ->   x1         "CSE - aggressive"
@@ -45,54 +45,50 @@ G_M10687_IG07:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
             ; gcrRegs +[x0]
             mov     w2, wzr
             cmp     w1, #0
-            ble     G_M10687_IG13
+            ble     G_M10687_IG10
             add     x0, x0, #12
             ; gcrRegs -[x0]
             ; byrRegs +[x0]
 						;; size=16 bbWeight=0.50 PerfScore 1.25
 G_M10687_IG08:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
             ldrh    w3, [x0, w2, UXTW #2]
+            mov     w4, #57
             cmp     w3, #48
-            blt     G_M10687_IG10
-						;; size=12 bbWeight=4 PerfScore 18.00
-G_M10687_IG09:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
-            cmp     w3, #57
-            ble     G_M10687_IG12
-						;; size=8 bbWeight=2 PerfScore 3.00
-G_M10687_IG10:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w4, 0, ge
+            cset    x4, le
+            mov     w5, #102
             cmp     w3, #97
-            blt     G_M10687_IG11
-            cmp     w3, #102
-            ble     G_M10687_IG12
-						;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG11:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w5, 0, ge
+            cset    x5, le
+            orr     w4, w4, w5
+            cbnz    w4, G_M10687_IG09
+            mov     w4, #70
             cmp     w3, #65
-            blt     G_M10687_IG15
-            cmp     w3, #70
-            bgt     G_M10687_IG15
-						;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG12:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w4, 0, ge
+            bgt     G_M10687_IG12
+						;; size=60 bbWeight=4 PerfScore 44.00
+G_M10687_IG09:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
             add     w2, w2, #1
             cmp     w1, w2
             bgt     G_M10687_IG08
 						;; size=12 bbWeight=4 PerfScore 8.00
-G_M10687_IG13:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M10687_IG10:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; byrRegs -[x0]
             mov     w0, #1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG14:        ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG11:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M10687_IG15:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M10687_IG12:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, wzr
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG16:        ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG13:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 140, prolog size 8, PerfScore 64.84, instruction count 35, allocated bytes for code 140 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
+; Total bytes of code 148, prolog size 8, PerfScore 76.64, instruction count 37, allocated bytes for code 148 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
 ; ============================================================
 
 Unwind Info:
@@ -103,7 +99,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 35 (0x00023) Actual length = 140 (0x00008c)
+  Function Length   : 37 (0x00025) Actual length = 148 (0x000094)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+8.33%) : 191794.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
@@ -23,39 +23,37 @@ G_M29165_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=12 bbWeight=1 PerfScore 2.00
 G_M29165_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             cmp     w0, #90
-            ble     G_M29165_IG08
+            ble     G_M29165_IG06
 						;; size=8 bbWeight=0.50 PerfScore 0.75
 G_M29165_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            mov     w1, #122
             cmp     w0, #97
-            blt     G_M29165_IG05
-            cmp     w0, #122
-            ble     G_M29165_IG08
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w0, w1, 0, ge
+            cset    x1, le
+            mov     w2, #57
+            mov     w3, #95
             cmp     w0, #48
-            blt     G_M29165_IG06
-            cmp     w0, #57
-            ble     G_M29165_IG08
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #95
-            beq     G_M29165_IG08
+            ccmp    w0, w2, 0, ge
+            ccmp    w0, w3, z, gt
+            cset    x2, eq
+            orr     w1, w1, w2
+            cbnz    w1, G_M29165_IG06
             cmp     w0, #45
             cset    x0, eq
-						;; size=16 bbWeight=0.50 PerfScore 1.25
+						;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M29165_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ldp     fp, lr, [sp], #0x10
+            ret     lr
+						;; size=8 bbWeight=0.50 PerfScore 1.00
+G_M29165_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+            mov     w0, #1
+						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M29165_IG07:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M29165_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M29165_IG09:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 96, prolog size 8, PerfScore 20.35, instruction count 24, allocated bytes for code 96 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
+; Total bytes of code 104, prolog size 8, PerfScore 20.65, instruction count 26, allocated bytes for code 104 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
 ; ============================================================
 
 Unwind Info:
@@ -66,7 +64,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 24 (0x00018) Actual length = 96 (0x000060)
+  Function Length   : 26 (0x0001a) Actual length = 104 (0x000068)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
benchmarks.run.linux.arm64.checked.mch
-24 (-27.27%) : 1131.dasm - System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
@@ -28,43 +28,31 @@ G_M46525_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M46525_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
-            cmp     w1, #22
-            beq     G_M46525_IG06
-            cmp     w1, #24
-            beq     G_M46525_IG06
-            cmp     w1, #25
-            beq     G_M46525_IG06
-            cmp     w1, #28
-            bne     G_M46525_IG08
-						;; size=32 bbWeight=0.50 PerfScore 3.00
-G_M46525_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46525_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M46525_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M46525_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M46525_IG09:        ; bbWeight=0.50, epilog, nogc, extend
+            cmp     w1, #22
+            ccmp    w1, #24, z, ne
+            ccmp    w1, #25, z, ne
+            ccmp    w1, #28, z, ne
+            csel    w0, wzr, w0, ne
+						;; size=24 bbWeight=0.50 PerfScore 1.50
+G_M46525_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 88, prolog size 8, PerfScore 19.05, instruction count 22, allocated bytes for code 88 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
+; Total bytes of code 64, prolog size 8, PerfScore 13.65, instruction count 16, allocated bytes for code 64 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 3
+  Epilog Count      : 2
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 22 (0x00016) Actual length = 88 (0x000058)
+  Function Length   : 16 (0x00010) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -72,9 +60,6 @@ Unwind Info:
   ---- Scope 1
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 2
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-16 (-25.00%) : 20961.dasm - Microsoft.CodeAnalysis.CSharp.LanguageVersionExtensionsInternal:IsValid(int):bool
@@ -6,61 +6,46 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  5,  4   )     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  5,  5   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M45553_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M45553_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M45553_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M45553_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             sub     w1, w0, #1
+            sub     w2, w0, #0xD1FFAB1E
+            mov     w3, #0xD1FFAB1E
+            mov     w4, #1
             cmp     w1, #6
-            bls     G_M45553_IG04
-						;; size=12 bbWeight=1 PerfScore 2.00
-G_M45553_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            sub     w1, w0, #0xD1FFAB1E
-            cmp     w1, #2
-            bls     G_M45553_IG04
-            cmp     w0, #0xD1FFAB1E
-            bne     G_M45553_IG06
-						;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M45553_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45553_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w2, #2, z, hi
+            ccmp    w0, w3, z, hi
+            csel    w0, wzr, w4, ne
+						;; size=32 bbWeight=1 PerfScore 4.00
+G_M45553_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M45553_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45553_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 64, prolog size 8, PerfScore 14.15, instruction count 16, allocated bytes for code 64 (MethodHash=a2564e0e) for method Microsoft.CodeAnalysis.CSharp.LanguageVersionExtensionsInternal:IsValid(int):bool
+; Total bytes of code 48, prolog size 8, PerfScore 12.30, instruction count 12, allocated bytes for code 48 (MethodHash=a2564e0e) for method Microsoft.CodeAnalysis.CSharp.LanguageVersionExtensionsInternal:IsValid(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 16 (0x00010) Actual length = 64 (0x000040)
+  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-16 (-25.00%) : 21112.dasm - Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
@@ -6,61 +6,46 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  4,  3.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  4,  4   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M60755_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M60755_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M60755_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M60755_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             movn    w1, #0xD1FFAB1E
             add     w1, w0, w1
+            movn    w2, #0xD1FFAB1E
+            add     w0, w0, w2
+            mov     w2, #1
             cmp     w1, #1
-            bls     G_M60755_IG04
-						;; size=16 bbWeight=1 PerfScore 2.50
-G_M60755_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            movn    w1, #0xD1FFAB1E
-            add     w0, w0, w1
-            cmp     w0, #2
-            bhi     G_M60755_IG06
-						;; size=16 bbWeight=0.50 PerfScore 1.25
-G_M60755_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M60755_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #2, z, hi
+            csel    w0, wzr, w2, hi
+						;; size=32 bbWeight=1 PerfScore 4.00
+G_M60755_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M60755_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M60755_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 64, prolog size 8, PerfScore 14.15, instruction count 16, allocated bytes for code 64 (MethodHash=781f12ac) for method Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
+; Total bytes of code 48, prolog size 8, PerfScore 12.30, instruction count 12, allocated bytes for code 48 (MethodHash=781f12ac) for method Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 16 (0x00010) Actual length = 64 (0x000040)
+  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
+20 (+0.33%) : 7651.dasm - Jil.Deserialize.Methods:SkipWithLeadChar(System.IO.TextReader,int)
@@ -26,7 +26,7 @@
 ;  V16 tmp11        [V16,T52] (  3,  0   )     ref  ->  x25         class-hnd exact single-def "NewObj constructor temp"
 ;  V17 tmp12        [V17,T25] (  4, 16   )     int  ->   x0         "Inline stloc first use temp"
 ;  V18 tmp13        [V18,T12] ( 14, 56   )     int  ->   x0         "Inline stloc first use temp"
-;  V19 tmp14        [V19,T09] ( 32, 82   )     int  ->  x24         "Inline stloc first use temp"
+;  V19 tmp14        [V19,T04] ( 32,100   )     int  ->  x24         "Inline stloc first use temp"
 ;  V20 tmp15        [V20,T53] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
 ;  V21 tmp16        [V21,T54] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
 ;  V22 tmp17        [V22,T55] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
@@ -44,7 +44,7 @@
 ;* V34 tmp29        [V34,T31] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
 ;  V35 tmp30        [V35,T26] (  4, 16   )     int  ->   x0         "Inline stloc first use temp"
 ;  V36 tmp31        [V36,T13] ( 14, 56   )     int  ->   x0         "Inline stloc first use temp"
-;  V37 tmp32        [V37,T10] ( 32, 82   )     int  ->  x26         "Inline stloc first use temp"
+;  V37 tmp32        [V37,T05] ( 32,100   )     int  ->  x26         "Inline stloc first use temp"
 ;  V38 tmp33        [V38,T63] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
 ;  V39 tmp34        [V39,T64] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
 ;  V40 tmp35        [V40,T65] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
@@ -57,11 +57,11 @@
 ;* V47 tmp42        [V47,T32] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
 ;  V48 tmp43        [V48,T22] (  6, 20.50)     int  ->  x25         "Inline stloc first use temp"
 ;* V49 tmp44        [V49,T33] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
-;  V50 tmp45        [V50,T02] (  6,116   )     int  ->  x25         "Inline stloc first use temp"
+;  V50 tmp45        [V50,T06] (  6,100   )     int  ->  x25         "Inline stloc first use temp"
 ;* V51 tmp46        [V51,T37] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
-;  V52 tmp47        [V52,T03] (  6,116   )     int  ->  x25         "Inline stloc first use temp"
+;  V52 tmp47        [V52,T07] (  6,100   )     int  ->  x25         "Inline stloc first use temp"
 ;* V53 tmp48        [V53,T38] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
-;  V54 tmp49        [V54,T08] (  4,112   )     int  ->   x0         "Inline stloc first use temp"
+;  V54 tmp49        [V54,T03] (  4,112   )     int  ->   x0         "Inline stloc first use temp"
 ;  V55 tmp50        [V55,T18] ( 14, 28   )     int  ->   x0         "Inline stloc first use temp"
 ;  V56 tmp51        [V56,T11] ( 32, 56   )     int  ->  x27         "Inline stloc first use temp"
 ;  V57 tmp52        [V57,T71] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
@@ -72,22 +72,22 @@
 ;  V62 tmp57        [V62,T76] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
 ;  V63 tmp58        [V63,T77] (  3,  0   )     ref  ->  x25         class-hnd exact "NewObj constructor temp"
 ;  V64 tmp59        [V64,T78] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
-;  V65 tmp60        [V65,T04] (  6,120   )     int  ->  x25         "Inline stloc first use temp"
+;  V65 tmp60        [V65,T02] (  6,152   )     int  ->  x25         "Inline stloc first use temp"
 ;* V66 tmp61        [V66,T27] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
-;  V67 tmp62        [V67,T05] (  6,116   )     int  ->  x25         "Inline stloc first use temp"
+;  V67 tmp62        [V67,T08] (  6,100   )     int  ->  x25         "Inline stloc first use temp"
 ;* V68 tmp63        [V68,T39] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
 ;  V69 tmp64        [V69,T19] (  8, 21   )     int  ->  x28         "Inline stloc first use temp"
 ;  V70 tmp65        [V70,T79] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
 ;* V71 tmp66        [V71    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp"
 ;  V72 tmp67        [V72,T23] (  6, 20.50)     int  ->  x28         "Inline stloc first use temp"
 ;* V73 tmp68        [V73,T34] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
-;  V74 tmp69        [V74,T06] (  6,116   )     int  ->  x28         "Inline stloc first use temp"
+;  V74 tmp69        [V74,T09] (  6,100   )     int  ->  x28         "Inline stloc first use temp"
 ;* V75 tmp70        [V75,T40] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
-;  V76 tmp71        [V76,T07] (  6,116   )     int  ->  x28         "Inline stloc first use temp"
+;  V76 tmp71        [V76,T10] (  6,100   )     int  ->  x28         "Inline stloc first use temp"
 ;* V77 tmp72        [V77,T41] (  0,  0   )    bool  ->  zero-ref    "Inline return value spill temp"
 ;  V78 tmp73        [V78,T16] (  4, 36.50)    bool  ->  x23         "Inline stloc first use temp"
 ;  V79 tmp74        [V79,T29] (  3,  8.50)    bool  ->  x24         "Inline stloc first use temp"
-;  V80 tmp75        [V80,T14] (  7, 52   )     int  ->   x0         "Inline stloc first use temp"
+;  V80 tmp75        [V80,T14] (  7, 56   )     int  ->   x0         "Inline stloc first use temp"
 ;  V81 tmp76        [V81,T24] (  5, 20   )     int  ->   x0         "Inline stloc first use temp"
 ;  V82 tmp77        [V82,T80] (  3,  0   )     ref  ->  x20         class-hnd exact single-def "NewObj constructor temp"
 ;  V83 tmp78        [V83,T81] (  3,  0   )     ref  ->  x20         class-hnd exact "NewObj constructor temp"
@@ -165,7 +165,7 @@ G_M57414_IG03:        ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {},
             ; gcrRegs -[x0]
             mov     w23, w0
             cmp     w23, #117
-            bne     G_M57414_IG109
+            bne     G_M57414_IG77
             mov     x0, x19
             ; gcrRegs +[x0]
             ldr     x1, [x22, #0x08]
@@ -173,7 +173,7 @@ G_M57414_IG03:        ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {},
             ; gcrRegs -[x0]
             mov     w23, w0
             cmp     w23, #108
-            bne     G_M57414_IG110
+            bne     G_M57414_IG78
             mov     x0, x19
             ; gcrRegs +[x0]
             ldr     x1, [x22, #0x08]
@@ -181,17 +181,17 @@ G_M57414_IG03:        ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {},
             ; gcrRegs -[x0]
             mov     w23, w0
             cmp     w23, #108
-            bne     G_M57414_IG111
-            b       G_M57414_IG108
+            bne     G_M57414_IG79
+            b       G_M57414_IG76
 						;; size=84 bbWeight=0.50 PerfScore 13.25
 G_M57414_IG04:        ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
             cmp     w20, #34
             beq     G_M57414_IG05
             cmp     w20, #123
-            beq     G_M57414_IG27
+            beq     G_M57414_IG19
             cmp     w20, #91
-            beq     G_M57414_IG86
-            b       G_M57414_IG85
+            beq     G_M57414_IG59
+            b       G_M57414_IG58
 						;; size=28 bbWeight=0.50 PerfScore 2.75
 G_M57414_IG05:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
             mov     x0, x19
@@ -202,9 +202,9 @@ G_M57414_IG05:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
             blr     x1
             ; gcrRegs -[x0]
             cmn     w0, #1
-            beq     G_M57414_IG112
+            beq     G_M57414_IG80
             cmp     w0, #34
-            beq     G_M57414_IG108
+            beq     G_M57414_IG76
             cmp     w0, #92
             bne     G_M57414_IG05
             mov     x0, x19
@@ -213,73 +213,95 @@ G_M57414_IG05:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
             blr     x1
             ; gcrRegs -[x0]
             cmn     w0, #1
-            beq     G_M57414_IG113
+            beq     G_M57414_IG81
             cmp     w0, #98
             bgt     G_M57414_IG09
             cmp     w0, #47
             bgt     G_M57414_IG07
+            mov     w1, #47
             cmp     w0, #34
+            ccmp    w0, w1, z, ne
             beq     G_M57414_IG05
-            cmp     w0, #47
-            beq     G_M57414_IG05
-						;; size=96 bbWeight=4 PerfScore 108.00
+						;; size=96 bbWeight=4 PerfScore 106.00
 G_M57414_IG06:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
             b       G_M57414_IG12
 						;; size=4 bbWeight=2 PerfScore 2.00
 G_M57414_IG07:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+            mov     w1, #98
             cmp     w0, #92
+            ccmp    w0, w1, z, ne
             beq     G_M57414_IG05
-            cmp     w0, #98
-            beq     G_M57414_IG05
-						;; size=16 bbWeight=4 PerfScore 12.00
+						;; size=16 bbWeight=4 PerfScore 10.00
 G_M57414_IG08:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
             b       G_M57414_IG12
 						;; size=4 bbWeight=2 PerfScore 2.00
 G_M57414_IG09:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
             cmp     w0, #110
             bgt     G_M57414_IG11
+            mov     w1, #110
             cmp     w0, #102
+            ccmp    w0, w1, z, ne
             beq     G_M57414_IG05
-            cmp     w0, #110
-            beq     G_M57414_IG05
-						;; size=24 bbWeight=4 PerfScore 18.00
+						;; size=24 bbWeight=4 PerfScore 16.00
 G_M57414_IG10:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
             b       G_M57414_IG12
 						;; size=4 bbWeight=2 PerfScore 2.00
 G_M57414_IG11:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+            mov     w1, #116
             cmp     w0, #114
+            ccmp    w0, w1, z, ne
             beq     G_M57414_IG05
-            cmp     w0, #116
-            beq     G_M57414_IG05
-						;; size=16 bbWeight=4 PerfScore 12.00
+						;; size=16 bbWeight=4 PerfScore 10.00
 G_M57414_IG12:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
             cmp     w0, #117
-            bne     G_M57414_IG114
+            bne     G_M57414_IG82
             mov     x0, x19
             ; gcrRegs +[x0]
             ldr     x1, [x22, #0x08]
             blr     x1
             ; gcrRegs -[x0]
             mov     w24, w0
+            mov     w0, #57
             cmp     w24, #48
-            blt     G_M57414_IG14
-						;; size=32 bbWeight=4 PerfScore 32.00
-G_M57414_IG13:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
-            cmp     w24, #57
-            ble     G_M57414_IG16
-						;; size=8 bbWeight=2 PerfScore 3.00
-G_M57414_IG14:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+            ccmp    w24, w0, 0, ge
+            cset    x0, le
+            mov     w1, #70
             cmp     w24, #65
-            blt     G_M57414_IG15
-            cmp     w24, #70
-            ble     G_M57414_IG16
-						;; size=16 bbWeight=2 PerfScore 6.00
-G_M57414_IG15:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+            ccmp    w24, w1, 0, ge
+            cset    x1, le
+            orr     w0, w0, w1
+            cbnz    w0, G_M57414_IG14
+						;; size=64 bbWeight=4 PerfScore 48.00
+G_M57414_IG13:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+            mov     w0, #102
             cmp     w24, #97
-            blt     G_M57414_IG115
-            cmp     w24, #102
-            bgt     G_M57414_IG115
-						;; size=16 bbWeight=2 PerfScore 6.00
+            ccmp    w24, w0, 0, ge
+            bgt     G_M57414_IG83
+						;; size=16 bbWeight=2 PerfScore 5.00
+G_M57414_IG14:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+            mov     x0, x19
+            ; gcrRegs +[x0]
+            ldr     x1, [x22, #0x08]
+            blr     x1
+            ; gcrRegs -[x0]
+            mov     w24, w0
+            mov     w0, #57
+            cmp     w24, #48
+            ccmp    w24, w0, 0, ge
+            cset    x0, le
+            mov     w1, #70
+            cmp     w24, #65
+            ccmp    w24, w1, 0, ge
+            cset    x1, le
+            orr     w0, w0, w1
+            cbnz    w0, G_M57414_IG16
+						;; size=56 bbWeight=4 PerfScore 42.00
+G_M57414_IG15:        ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+            mov     w0, #102
+            cmp     w24, #97
+            ccmp    w24, w0, 0, ge
+            bgt     G_M57414_IG84
+						;; size=16 bbWeight=2 PerfScore 5.00
 G_M57414_IG16:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
             mov     x0, x19
             ; gcrRegs +[x0]
@@ -287,77 +309,47 @@ G_M57414_IG16:        ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
             blr     x1
             ; gcrRegs -[x0]
             mov     w24, w0
+            mov     w0, #57
             cmp     w24, #48
-            blt     G_M57414_IG18
-						;; size=24 bbWeight=4 PerfScore 26.00
+            ccmp    w24, w0, 0, ge
+            cset    x0, le
...
+16 (+2.76%) : 12117.dasm - ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this
@@ -21,19 +21,20 @@
 ;  V11 tmp5         [V11,T15] (  3,  1.50)     ref  ->   x0         single-def
 ;  V12 tmp6         [V12,T03] (  3,  6   )     int  ->   x0         "Inlining Arg"
 ;* V13 tmp7         [V13    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
-;  V14 tmp8         [V14,T09] (  3,  3   )     int  ->  x24         "Inlining Arg"
+;  V14 tmp8         [V14,T09] (  3,  3   )     int  ->  x25         "Inlining Arg"
 ;* V15 tmp9         [V15    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;  V16 tmp10        [V16,T10] (  3,  3   )     int  ->  x19         "Inlining Arg"
 ;  V17 tmp11        [V17,T12] (  2,  2   )     ref  ->   x0         single-def "argument with side effect"
 ;  V18 cse0         [V18,T07] (  4,  3   )    long  ->  x24         "CSE - aggressive"
 ;
-; Lcl frame size = 0
+; Lcl frame size = 8
 
 G_M33833_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
-            stp     fp, lr, [sp, #-0x40]!
-            stp     x19, x20, [sp, #0x10]
-            stp     x21, x22, [sp, #0x20]
-            stp     x23, x24, [sp, #0x30]
+            stp     fp, lr, [sp, #-0x50]!
+            stp     x19, x20, [sp, #0x18]
+            stp     x21, x22, [sp, #0x28]
+            stp     x23, x24, [sp, #0x38]
+            str     x25, [sp, #0x48]
             mov     fp, sp
             mov     x21, x0
             ; byrRegs +[x21]
@@ -42,7 +43,7 @@ G_M33833_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             mov     w23, w3
             mov     x20, x4
             ; gcrRegs +[x20]
-						;; size=40 bbWeight=1 PerfScore 7.00
+						;; size=44 bbWeight=1 PerfScore 8.00
 G_M33833_IG02:        ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
             cbnz    x20, G_M33833_IG06
 						;; size=4 bbWeight=1 PerfScore 1.00
@@ -91,61 +92,26 @@ G_M33833_IG06:        ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x2
             bgt     G_M33833_IG08
 						;; size=72 bbWeight=1 PerfScore 12.50
 G_M33833_IG07:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
-            cbz     w1, G_M33833_IG09
+            cbz     w1, G_M33833_IG11
             cmp     w1, #32
-            bne     G_M33833_IG17
-            b       G_M33833_IG14
+            bne     G_M33833_IG16
+            b       G_M33833_IG13
 						;; size=16 bbWeight=0.50 PerfScore 1.75
 G_M33833_IG08:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
+            mov     w0, #96
             cmp     w1, #64
-            beq     G_M33833_IG11
-            cmp     w1, #96
-            beq     G_M33833_IG11
-            b       G_M33833_IG17
-						;; size=20 bbWeight=0.50 PerfScore 2.00
-G_M33833_IG09:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
-            mov     x1, x20
-            ; gcrRegs +[x1]
-            movz    x0, #0xD1FFAB1E
-            movk    x0, #0xD1FFAB1E LSL #16
-            movk    x0, #0xD1FFAB1E LSL #32
-            movz    x2, #0xD1FFAB1E      // code for CORINFO_HELP_CHKCASTINTERFACE
-            movk    x2, #0xD1FFAB1E LSL #16
-            movk    x2, #0xD1FFAB1E LSL #32
-            ldr     x2, [x2]
-            blr     x2
-            ; gcrRegs -[x1 x20] +[x0]
-            mov     w4, w23
-            mov     x1, x21
-            ; byrRegs +[x1]
-            mov     w2, w22
-            mov     w3, w19
-            add     x11, x24, #8
-            ldr     x5, [x11]
-            blr     x5
-            ; gcrRegs -[x0]
-            ; byrRegs -[x1 x21]
-						;; size=64 bbWeight=0.50 PerfScore 7.00
-G_M33833_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     x23, x24, [sp, #0x30]
-            ldp     x21, x22, [sp, #0x20]
-            ldp     x19, x20, [sp, #0x10]
-            ldp     fp, lr, [sp], #0x40
-            ret     lr
-						;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M33833_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
-            ; gcrRegs +[x20]
-            ; byrRegs +[x21]
-            mov     w24, w19
-            tbnz    w24, #4, G_M33833_IG12
+            ccmp    w1, w0, z, ne
+            bne     G_M33833_IG16
+            mov     w25, w19
+            tbnz    w25, #4, G_M33833_IG09
             movz    x0, #0xD1FFAB1E      // code for <unknown method>
             movk    x0, #0xD1FFAB1E LSL #16
             movk    x0, #0xD1FFAB1E LSL #32
             ldr     x0, [x0]
             blr     x0
-						;; size=28 bbWeight=0.50 PerfScore 3.50
-G_M33833_IG12:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
-            and     w2, w24, #15
+						;; size=44 bbWeight=0.50 PerfScore 4.75
+G_M33833_IG09:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+            and     w2, w25, #15
             mov     x0, x21
             ; byrRegs +[x0]
             mov     w1, w22
@@ -182,24 +148,58 @@ G_M33833_IG12:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000
             ; gcrRegs -[x0 x3 x20 x22]
             ; byrRegs -[x1 x21]
 						;; size=104 bbWeight=0.50 PerfScore 9.75
-G_M33833_IG13:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     x23, x24, [sp, #0x30]
-            ldp     x21, x22, [sp, #0x20]
-            ldp     x19, x20, [sp, #0x10]
-            ldp     fp, lr, [sp], #0x40
+G_M33833_IG10:        ; bbWeight=0.50, epilog, nogc, extend
+            ldr     x25, [sp, #0x48]
+            ldp     x23, x24, [sp, #0x38]
+            ldp     x21, x22, [sp, #0x28]
+            ldp     x19, x20, [sp, #0x18]
+            ldp     fp, lr, [sp], #0x50
             ret     lr
-						;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M33833_IG14:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
+						;; size=24 bbWeight=0.50 PerfScore 3.50
+G_M33833_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref
             ; gcrRegs +[x20]
             ; byrRegs +[x21]
-            tbnz    w19, #4, G_M33833_IG15
+            mov     x1, x20
+            ; gcrRegs +[x1]
+            movz    x0, #0xD1FFAB1E
+            movk    x0, #0xD1FFAB1E LSL #16
+            movk    x0, #0xD1FFAB1E LSL #32
+            movz    x2, #0xD1FFAB1E      // code for CORINFO_HELP_CHKCASTINTERFACE
+            movk    x2, #0xD1FFAB1E LSL #16
+            movk    x2, #0xD1FFAB1E LSL #32
+            ldr     x2, [x2]
+            blr     x2
+            ; gcrRegs -[x1 x20] +[x0]
+            mov     w4, w23
+            mov     x1, x21
+            ; byrRegs +[x1]
+            mov     w2, w22
+            mov     w3, w19
+            add     x11, x24, #8
+            ldr     x5, [x11]
+            blr     x5
+            ; gcrRegs -[x0]
+            ; byrRegs -[x1 x21]
+						;; size=64 bbWeight=0.50 PerfScore 7.00
+G_M33833_IG12:        ; bbWeight=0.50, epilog, nogc, extend
+            ldr     x25, [sp, #0x48]
+            ldp     x23, x24, [sp, #0x38]
+            ldp     x21, x22, [sp, #0x28]
+            ldp     x19, x20, [sp, #0x18]
+            ldp     fp, lr, [sp], #0x50
+            ret     lr
+						;; size=24 bbWeight=0.50 PerfScore 3.50
+G_M33833_IG13:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
+            ; gcrRegs +[x20]
+            ; byrRegs +[x21]
+            tbnz    w19, #4, G_M33833_IG14
             movz    x0, #0xD1FFAB1E      // code for <unknown method>
             movk    x0, #0xD1FFAB1E LSL #16
             movk    x0, #0xD1FFAB1E LSL #32
             ldr     x0, [x0]
             blr     x0
 						;; size=24 bbWeight=0.50 PerfScore 3.25
-G_M33833_IG15:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+G_M33833_IG14:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
             and     w2, w19, #15
             mov     x0, x21
             ; byrRegs +[x0]
@@ -221,14 +221,15 @@ G_M33833_IG15:        ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000
             ; gcrRegs -[x0 x20]
             ; byrRegs -[x1 x21]
 						;; size=56 bbWeight=0.50 PerfScore 6.50
-G_M33833_IG16:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     x23, x24, [sp, #0x30]
-            ldp     x21, x22, [sp, #0x20]
-            ldp     x19, x20, [sp, #0x10]
-            ldp     fp, lr, [sp], #0x40
+G_M33833_IG15:        ; bbWeight=0.50, epilog, nogc, extend
+            ldr     x25, [sp, #0x48]
+            ldp     x23, x24, [sp, #0x38]
+            ldp     x21, x22, [sp, #0x28]
+            ldp     x19, x20, [sp, #0x18]
+            ldp     fp, lr, [sp], #0x50
             ret     lr
-						;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M33833_IG17:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+						;; size=24 bbWeight=0.50 PerfScore 3.50
+G_M33833_IG16:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, w19
             movz    x1, #0xD1FFAB1E      // code for <unknown method>
             movk    x1, #0xD1FFAB1E LSL #16
@@ -236,26 +237,27 @@ G_M33833_IG17:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
             ldr     x1, [x1]
             blr     x1
 						;; size=24 bbWeight=0.50 PerfScore 3.00
-G_M33833_IG18:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     x23, x24, [sp, #0x30]
-            ldp     x21, x22, [sp, #0x20]
-            ldp     x19, x20, [sp, #0x10]
-            ldp     fp, lr, [sp], #0x40
+G_M33833_IG17:        ; bbWeight=0.50, epilog, nogc, extend
+            ldr     x25, [sp, #0x48]
+            ldp     x23, x24, [sp, #0x38]
+            ldp     x21, x22, [sp, #0x28]
+            ldp     x19, x20, [sp, #0x18]
+            ldp     fp, lr, [sp], #0x50
             ret     lr
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=24 bbWeight=0.50 PerfScore 3.50
 
-; Total bytes of code 580, prolog size 20, PerfScore 132.75, instruction count 145, allocated bytes for code 580 (MethodHash=1e667bd6) for method ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this
+; Total bytes of code 596, prolog size 24, PerfScore 138.60, instruction count 149, allocated bytes for code 596 (MethodHash=1e667bd6) for method ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 2
+  Code Words        : 3
   Epilog Count      : 4
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 145 (0x00091) Actual length = 580 (0x000244)
+  Function Length   : 149 (0x00095) Actual length = 596 (0x000254)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -272,10 +274,13 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
+    D1 89       save_reg X#6 Z#9 (0x09); str x25, [sp, #72]
     E6          save_next
     E6          save_next
-    C8 02       save_regp X#0 Z#2 (0x02); stp x19, x20, [sp, #16]
-    87          save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+    C8 03       save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
+    89          save_fplr_x #9 (0x09); stp fp, lr, [sp, #-80]!
+    E4          end
+    E4          end
...
+8 (+9.09%) : 4051.dasm - System.Globalization.Tests.StringSearch+<>c:b__14_0(ushort):bool:this
@@ -20,37 +20,37 @@ G_M31341_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
 G_M31341_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             uxth    w0, w1
             cmp     w0, #32
-            beq     G_M31341_IG06
+            beq     G_M31341_IG05
 						;; size=12 bbWeight=1 PerfScore 2.00
 G_M31341_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            mov     w1, #44
             cmp     w0, #46
-            beq     G_M31341_IG06
-            cmp     w0, #44
-            beq     G_M31341_IG06
+            ccmp    w0, w1, z, ne
+            cset    x1, eq
+            mov     w2, #122
             cmp     w0, #97
-            blt     G_M31341_IG04
-            cmp     w0, #122
-            ble     G_M31341_IG06
-						;; size=32 bbWeight=0.50 PerfScore 3.00
-G_M31341_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            ccmp    w0, w2, 0, ge
+            cset    x2, le
+            orr     w1, w1, w2
+            cbnz    w1, G_M31341_IG05
             cmp     w0, #90
             cset    x1, le
             cmp     w0, #65
             csel    w0, wzr, w1, lt
-						;; size=16 bbWeight=0.50 PerfScore 1.00
-G_M31341_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+						;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M31341_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M31341_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M31341_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, #1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M31341_IG07:        ; bbWeight=0.50, epilog, nogc, extend
+G_M31341_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 88, prolog size 8, PerfScore 18.55, instruction count 22, allocated bytes for code 88 (MethodHash=4a768592) for method System.Globalization.Tests.StringSearch+<>c:<ContainsSimpleCharactersOnly>b__14_0(ushort):bool:this
+; Total bytes of code 96, prolog size 8, PerfScore 19.10, instruction count 24, allocated bytes for code 96 (MethodHash=4a768592) for method System.Globalization.Tests.StringSearch+<>c:<ContainsSimpleCharactersOnly>b__14_0(ushort):bool:this
 ; ============================================================
 
 Unwind Info:
@@ -61,7 +61,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 22 (0x00016) Actual length = 88 (0x000058)
+  Function Length   : 24 (0x00018) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
coreclr_tests.run.linux.arm64.checked.mch
-16 (-28.57%) : 356691.dasm - System.Reflection.Metadata.SignatureHeader:get_Kind():ubyte:this
@@ -8,61 +8,46 @@
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  3,  3   )   byref  ->   x0         this single-def
-;  V01 loc0         [V01,T01] (  4,  3   )     int  ->   x1        
+;  V01 loc0         [V01,T01] (  4,  4   )     int  ->   x0        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M20099_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M20099_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M20099_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+G_M20099_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref
             ; byrRegs +[x0]
             ldrb    w0, [x0]
             ; byrRegs -[x0]
-            and     w1, w0, #15
-            cmp     w1, #5
-            ble     G_M20099_IG04
-						;; size=16 bbWeight=1 PerfScore 5.00
-G_M20099_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w1, #9
-            bne     G_M20099_IG06
-						;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M20099_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M20099_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            and     w0, w0, #15
+            uxtb    w1, w0
+            cmp     w0, #5
+            ccmp    w0, #9, z, gt
+            csel    w0, w1, wzr, ne
+						;; size=24 bbWeight=1 PerfScore 5.50
+G_M20099_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M20099_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            uxtb    w0, w1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M20099_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 56, prolog size 8, PerfScore 15.35, instruction count 14, allocated bytes for code 56 (MethodHash=c9cfb17c) for method System.Reflection.Metadata.SignatureHeader:get_Kind():ubyte:this
+; Total bytes of code 40, prolog size 8, PerfScore 13.00, instruction count 10, allocated bytes for code 40 (MethodHash=c9cfb17c) for method System.Reflection.Metadata.SignatureHeader:get_Kind():ubyte:this
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 14 (0x0000e) Actual length = 56 (0x000038)
+  Function Length   : 10 (0x0000a) Actual length = 40 (0x000028)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-16 (-28.57%) : 364903.dasm - System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this
@@ -8,59 +8,46 @@
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  3,  3   )   byref  ->   x0         this single-def
-;  V01 loc0         [V01,T01] (  4,  3   )     int  ->   x1        
+;  V01 loc0         [V01,T01] (  4,  4   )     int  ->   x0        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M22474_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M22474_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M22474_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+G_M22474_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref
             ; byrRegs +[x0]
             ldrb    w0, [x0]
             ; byrRegs -[x0]
-            and     w1, w0, #15
-            cmp     w1, #5
-            ble     G_M22474_IG05
-						;; size=16 bbWeight=1 PerfScore 5.00
-G_M22474_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w1, #9
-            beq     G_M22474_IG05
-            mov     w0, wzr
-						;; size=12 bbWeight=0.50 PerfScore 1.00
-G_M22474_IG04:        ; bbWeight=0.50, epilog, nogc, extend
+            and     w0, w0, #15
+            uxtb    w1, w0
+            cmp     w0, #5
+            ccmp    w0, #9, z, gt
+            csel    w0, w1, wzr, eq
+						;; size=24 bbWeight=1 PerfScore 5.50
+G_M22474_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M22474_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            uxtb    w0, w1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22474_IG06:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 56, prolog size 8, PerfScore 15.35, instruction count 14, allocated bytes for code 56 (MethodHash=337ba835) for method System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this
+; Total bytes of code 40, prolog size 8, PerfScore 13.00, instruction count 10, allocated bytes for code 40 (MethodHash=337ba835) for method System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 14 (0x0000e) Actual length = 56 (0x000038)
+  Function Length   : 10 (0x0000a) Actual length = 40 (0x000028)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-24 (-27.27%) : 1236.dasm - System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
@@ -10,7 +10,7 @@
 ;
 ;  V00 arg0         [V00,T01] (  3,  3   )   ubyte  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
-;  V02 cse0         [V02,T00] (  6,  5.35)     int  ->   x1         "CSE - aggressive"
+;  V02 cse0         [V02,T00] (  6,  5.48)     int  ->   x1         "CSE - aggressive"
 ;
 ; Lcl frame size = 0
 
@@ -21,54 +21,40 @@ G_M46525_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
 G_M46525_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             uxtb    w1, w0
             cmp     w1, #14
-            ble     G_M46525_IG09
+            ble     G_M46525_IG05
 						;; size=12 bbWeight=1 PerfScore 2.00
-G_M46525_IG03:        ; bbWeight=0.87, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w1, #22
-            beq     G_M46525_IG05
-            cmp     w1, #24
-            beq     G_M46525_IG05
-						;; size=16 bbWeight=0.87 PerfScore 2.61
-G_M46525_IG04:        ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w1, #25
-            beq     G_M46525_IG05
-            cmp     w1, #28
-            bne     G_M46525_IG07
-						;; size=16 bbWeight=0.80 PerfScore 2.41
-G_M46525_IG05:        ; bbWeight=0.55, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46525_IG03:        ; bbWeight=0.87, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, #1
-						;; size=4 bbWeight=0.55 PerfScore 0.28
-G_M46525_IG06:        ; bbWeight=0.55, epilog, nogc, extend
+            cmp     w1, #22
+            ccmp    w1, #24, z, ne
+            ccmp    w1, #25, z, ne
+            ccmp    w1, #28, z, ne
+            csel    w0, wzr, w0, ne
+						;; size=24 bbWeight=0.87 PerfScore 2.61
+G_M46525_IG04:        ; bbWeight=0.87, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.55 PerfScore 1.11
-G_M46525_IG07:        ; bbWeight=0.32, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.32 PerfScore 0.16
-G_M46525_IG08:        ; bbWeight=0.32, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.32 PerfScore 0.63
-G_M46525_IG09:        ; bbWeight=0.13, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+						;; size=8 bbWeight=0.87 PerfScore 1.74
+G_M46525_IG05:        ; bbWeight=0.13, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, #1
 						;; size=4 bbWeight=0.13 PerfScore 0.06
-G_M46525_IG10:        ; bbWeight=0.13, epilog, nogc, extend
+G_M46525_IG06:        ; bbWeight=0.13, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.13 PerfScore 0.26
 
-; Total bytes of code 88, prolog size 8, PerfScore 19.82, instruction count 22, allocated bytes for code 88 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
+; Total bytes of code 64, prolog size 8, PerfScore 14.58, instruction count 16, allocated bytes for code 64 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 3
+  Epilog Count      : 2
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 22 (0x00016) Actual length = 88 (0x000058)
+  Function Length   : 16 (0x00010) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -76,9 +62,6 @@ Unwind Info:
   ---- Scope 1
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 2
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
+4 (+0.13%) : 517264.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)
@@ -948,11 +948,12 @@ G_M36121_IG33:        ; bbWeight=0.50, gcrefRegs=780000 {x19 x20 x21 x22}, byref
 						;; size=340 bbWeight=0.50 PerfScore 58.50
 G_M36121_IG34:        ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
             ; gcrRegs +[x19-x21]
-            cmn     w23, #1
-            beq     G_M36121_IG41
+            movn    w0, #0
             cmp     w25, w23
-            ble     G_M36121_IG41
-            cbnz    w26, G_M36121_IG41
+            ccmp    w23, w0, z, gt
+            cset    x0, eq
+            orr     w0, w0, w26
+            cbnz    w0, G_M36121_IG41
             mov     x0, x19
             ; gcrRegs +[x0]
             ldr     x1, [x27, #0x08]
@@ -974,7 +975,7 @@ G_M36121_IG34:        ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs
             stp     xzr, xzr, [fp, #0x38]
             str     xzr, [fp, #0x48]
             b       G_M36121_IG36
-						;; size=84 bbWeight=0.50 PerfScore 11.00
+						;; size=88 bbWeight=0.50 PerfScore 10.75
 G_M36121_IG35:        ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
             ; gcrRegs -[x0]
             ldr     x0, [fp, #0xD1FFAB1E]	// [V122 tmp110]
@@ -1319,7 +1320,7 @@ G_M36121_IG47:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 3116, prolog size 76, PerfScore 813.85, instruction count 779, allocated bytes for code 3116 (MethodHash=615872e6) for method Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)
+; Total bytes of code 3120, prolog size 76, PerfScore 814.00, instruction count 780, allocated bytes for code 3120 (MethodHash=615872e6) for method Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)
 ; ============================================================
 
 Unwind Info:
@@ -1330,7 +1331,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 779 (0x0030b) Actual length = 3116 (0x000c2c)
+  Function Length   : 780 (0x0030c) Actual length = 3120 (0x000c30)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+8.33%) : 360681.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
@@ -24,39 +24,37 @@ G_M29165_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=12 bbWeight=1 PerfScore 2.00
 G_M29165_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             cmp     w0, #90
-            ble     G_M29165_IG08
+            ble     G_M29165_IG06
 						;; size=8 bbWeight=0.50 PerfScore 0.75
 G_M29165_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            mov     w1, #122
             cmp     w0, #97
-            blt     G_M29165_IG05
-            cmp     w0, #122
-            ble     G_M29165_IG08
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w0, w1, 0, ge
+            cset    x1, le
+            mov     w2, #57
+            mov     w3, #95
             cmp     w0, #48
-            blt     G_M29165_IG06
-            cmp     w0, #57
-            ble     G_M29165_IG08
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #95
-            beq     G_M29165_IG08
+            ccmp    w0, w2, 0, ge
+            ccmp    w0, w3, z, gt
+            cset    x2, eq
+            orr     w1, w1, w2
+            cbnz    w1, G_M29165_IG06
             cmp     w0, #45
             cset    x0, eq
-						;; size=16 bbWeight=0.50 PerfScore 1.25
+						;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M29165_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ldp     fp, lr, [sp], #0x10
+            ret     lr
+						;; size=8 bbWeight=0.50 PerfScore 1.00
+G_M29165_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+            mov     w0, #1
+						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M29165_IG07:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M29165_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M29165_IG09:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 96, prolog size 8, PerfScore 20.35, instruction count 24, allocated bytes for code 96 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
+; Total bytes of code 104, prolog size 8, PerfScore 20.65, instruction count 26, allocated bytes for code 104 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
 ; ============================================================
 
 Unwind Info:
@@ -67,7 +65,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 24 (0x00018) Actual length = 96 (0x000060)
+  Function Length   : 26 (0x0001a) Actual length = 104 (0x000068)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+8.33%) : 586743.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
@@ -23,39 +23,37 @@ G_M29165_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=12 bbWeight=1 PerfScore 2.00
 G_M29165_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             cmp     w0, #90
-            ble     G_M29165_IG08
+            ble     G_M29165_IG06
 						;; size=8 bbWeight=0.50 PerfScore 0.75
 G_M29165_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            mov     w1, #122
             cmp     w0, #97
-            blt     G_M29165_IG05
-            cmp     w0, #122
-            ble     G_M29165_IG08
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w0, w1, 0, ge
+            cset    x1, le
+            mov     w2, #57
+            mov     w3, #95
             cmp     w0, #48
-            blt     G_M29165_IG06
-            cmp     w0, #57
-            ble     G_M29165_IG08
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #95
-            beq     G_M29165_IG08
+            ccmp    w0, w2, 0, ge
+            ccmp    w0, w3, z, gt
+            cset    x2, eq
+            orr     w1, w1, w2
+            cbnz    w1, G_M29165_IG06
             cmp     w0, #45
             cset    x0, eq
-						;; size=16 bbWeight=0.50 PerfScore 1.25
+						;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M29165_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ldp     fp, lr, [sp], #0x10
+            ret     lr
+						;; size=8 bbWeight=0.50 PerfScore 1.00
+G_M29165_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+            mov     w0, #1
+						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M29165_IG07:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M29165_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M29165_IG09:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 96, prolog size 8, PerfScore 20.35, instruction count 24, allocated bytes for code 96 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
+; Total bytes of code 104, prolog size 8, PerfScore 20.65, instruction count 26, allocated bytes for code 104 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
 ; ============================================================
 
 Unwind Info:
@@ -66,7 +64,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 24 (0x00018) Actual length = 96 (0x000060)
+  Function Length   : 26 (0x0001a) Actual length = 104 (0x000068)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
libraries.crossgen2.linux.arm64.checked.mch
-16 (-33.33%) : 122051.dasm - Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
@@ -7,57 +7,42 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  4,  3.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  4,  4   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M56201_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M56201_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M56201_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            mov     w1, #1
             cmp     w0, #4
-            bls     G_M56201_IG04
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #9
-            bne     G_M56201_IG06
-						;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M56201_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #9, z, hi
+            csel    w0, wzr, w1, ne
+						;; size=16 bbWeight=1 PerfScore 2.00
+G_M56201_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M56201_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
+  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-16 (-33.33%) : 123848.dasm - Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int
@@ -7,55 +7,42 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  4,  3.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  4,  4   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M44118_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M44118_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M44118_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M44118_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            mov     w1, #1
             cmp     w0, #2
-            beq     G_M44118_IG05
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M44118_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #3
-            bne     G_M44118_IG05
-            mov     w0, wzr
-						;; size=12 bbWeight=0.50 PerfScore 1.00
-G_M44118_IG04:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #3, 0, ne
+            csel    w0, w1, wzr, ne
+						;; size=16 bbWeight=1 PerfScore 2.00
+G_M44118_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M44118_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M44118_IG06:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=669853a9) for method Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=669853a9) for method Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
+  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
-16 (-33.33%) : 124616.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool
@@ -7,57 +7,42 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] (  4,  3.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] (  4,  4   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
-G_M18810_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M18810_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             stp     fp, lr, [sp, #-0x10]!
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
-G_M18810_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M18810_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+            mov     w1, #1
             cmp     w0, #7
-            beq     G_M18810_IG04
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M18810_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #15
-            bne     G_M18810_IG06
-						;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M18810_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            mov     w0, #1
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M18810_IG05:        ; bbWeight=0.50, epilog, nogc, extend
+            ccmp    w0, #15, z, ne
+            csel    w0, wzr, w1, ne
+						;; size=16 bbWeight=1 PerfScore 2.00
+G_M18810_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M18810_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
-            mov     w0, wzr
-						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M18810_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ldp     fp, lr, [sp], #0x10
-            ret     lr
-						;; size=8 bbWeight=0.50 PerfScore 1.00
+						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=1f3db685) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=1f3db685) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
   Code Words        : 1
-  Epilog Count      : 2
+  Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
+  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 1 (0x01)
-  ---- Scope 1
-  Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
     E1          set_fp; mov fp, sp
     ---- Epilog start at index 1 ----
+8 (+4.55%) : 143288.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
@@ -9,8 +9,8 @@
 ;
 ;  V00 arg0         [V00,T02] (  5,  4   )     ref  ->  x19         class-hnd single-def
 ;  V01 loc0         [V01,T05] (  2,  1   )     ref  ->  x19         class-hnd single-def
-;  V02 loc1         [V02,T01] (  5, 16.50)     int  ->   x2        
-;  V03 loc2         [V03,T00] (  7, 18   )  ushort  ->   x3        
+;  V02 loc1         [V02,T00] (  5, 16.50)     int  ->   x2        
+;  V03 loc2         [V03,T01] (  7, 16   )  ushort  ->   x3        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;  V05 cse0         [V05,T03] (  4,  5.50)     int  ->   x1         "CSE - aggressive"
 ;  V06 cse1         [V06,T04] (  2,  4.50)   byref  ->   x0         "CSE - aggressive"
@@ -52,56 +52,52 @@ G_M10687_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=800
             ; gcrRegs +[x19]
             mov     w2, wzr
             cmp     w1, #0
-            ble     G_M10687_IG12
+            ble     G_M10687_IG09
             add     x0, x19, #12
             ; byrRegs +[x0]
 						;; size=16 bbWeight=0.50 PerfScore 1.25
 G_M10687_IG07:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
             ; gcrRegs -[x19]
             ldrh    w3, [x0, w2, UXTW #2]
+            mov     w4, #57
             cmp     w3, #48
-            blt     G_M10687_IG09
-						;; size=12 bbWeight=4 PerfScore 18.00
-G_M10687_IG08:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
-            cmp     w3, #57
-            ble     G_M10687_IG11
-						;; size=8 bbWeight=2 PerfScore 3.00
-G_M10687_IG09:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w4, 0, ge
+            cset    x4, le
+            mov     w5, #102
             cmp     w3, #97
-            blt     G_M10687_IG10
-            cmp     w3, #102
-            ble     G_M10687_IG11
-						;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG10:        ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w5, 0, ge
+            cset    x5, le
+            orr     w4, w4, w5
+            cbnz    w4, G_M10687_IG08
+            mov     w4, #70
             cmp     w3, #65
-            blt     G_M10687_IG14
-            cmp     w3, #70
-            bgt     G_M10687_IG14
-						;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG11:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+            ccmp    w3, w4, 0, ge
+            bgt     G_M10687_IG11
+						;; size=60 bbWeight=4 PerfScore 44.00
+G_M10687_IG08:        ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
             add     w2, w2, #1
             cmp     w1, w2
             bgt     G_M10687_IG07
 						;; size=12 bbWeight=4 PerfScore 8.00
-G_M10687_IG12:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M10687_IG09:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; byrRegs -[x0]
             mov     w0, #1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG13:        ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG10:        ; bbWeight=0.50, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
             ret     lr
 						;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M10687_IG14:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M10687_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, wzr
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG15:        ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG12:        ; bbWeight=0.50, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
             ret     lr
 						;; size=12 bbWeight=0.50 PerfScore 2.00
 
-; Total bytes of code 176, prolog size 16, PerfScore 78.10, instruction count 44, allocated bytes for code 176 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
+; Total bytes of code 184, prolog size 16, PerfScore 89.90, instruction count 46, allocated bytes for code 184 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
 ; ============================================================
 
 Unwind Info:
@@ -112,7 +108,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 176 (0x0000b0)
+  Function Length   : 46 (0x0002e) Actual length = 184 (0x0000b8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+5.00%) : 162723.dasm - System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
@@ -7,7 +7,7 @@
 ; No matching PGO data
 ; Final local variable assignments
 ;
-;  V00 arg0         [V00,T00] ( 18, 10.50)     int  ->   x0         single-def
+;  V00 arg0         [V00,T00] ( 18, 12   )     int  ->   x0         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  lclBlk ( 0) [sp+00H]   "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T01] (  2,  2   )     int  ->   x1         "Single return block return value"
 ;
@@ -19,64 +19,56 @@ G_M23697_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
 						;; size=8 bbWeight=1 PerfScore 1.50
 G_M23697_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             cmp     w0, #0
-            blt     G_M23697_IG04
-						;; size=8 bbWeight=1 PerfScore 1.50
-G_M23697_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #14
-            ble     G_M23697_IG10
-						;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M23697_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w0, #14, 0, ge
+            cset    x1, le
             cmp     w0, #16
-            blt     G_M23697_IG05
-            cmp     w0, #21
-            ble     G_M23697_IG10
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w0, #21, 0, ge
+            cset    x2, le
+            orr     w1, w1, w2
+            cbnz    w1, G_M23697_IG05
+						;; size=32 bbWeight=1 PerfScore 4.50
+G_M23697_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            mov     w1, #34
             cmp     w0, #32
-            blt     G_M23697_IG06
-            cmp     w0, #34
-            ble     G_M23697_IG10
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w0, w1, 0, ge
+            cset    x1, le
+            mov     w2, #54
             cmp     w0, #50
-            blt     G_M23697_IG07
-            cmp     w0, #54
-            ble     G_M23697_IG10
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+            ccmp    w0, w2, 0, ge
+            cset    x2, le
+            orr     w1, w1, w2
+            cbnz    w1, G_M23697_IG05
+            mov     w1, #71
+            mov     w2, #36
+            mov     w3, #48
             cmp     w0, #64
-            blt     G_M23697_IG08
-            cmp     w0, #71
-            ble     G_M23697_IG10
-						;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG08:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            cmp     w0, #36
-            beq     G_M23697_IG10
-            cmp     w0, #48
-            beq     G_M23697_IG10
+            ccmp    w0, w1, 0, ge
+            ccmp    w0, w2, z, gt
+            ccmp    w0, w3, z, ne
+            beq     G_M23697_IG05
+            mov     w1, #61
+            mov     w2, #76
             cmp     w0, #60
-            beq     G_M23697_IG10
-            cmp     w0, #61
-            beq     G_M23697_IG10
-            cmp     w0, #76
-            beq     G_M23697_IG10
+            ccmp    w0, w1, z, ne
+            ccmp    w0, w2, z, ne
+            beq     G_M23697_IG05
             cmp     w0, #80
             cset    x1, eq
             uxtb    w0, w1
-						;; size=52 bbWeight=0.50 PerfScore 4.50
-G_M23697_IG09:        ; bbWeight=0.50, epilog, nogc, extend
+						;; size=108 bbWeight=0.50 PerfScore 7.50
+G_M23697_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M23697_IG10:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M23697_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mov     w0, #1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M23697_IG11:        ; bbWeight=0.50, epilog, nogc, extend
+G_M23697_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 
-; Total bytes of code 160, prolog size 8, PerfScore 32.50, instruction count 40, allocated bytes for code 160 (MethodHash=6425a36e) for method System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
+; Total bytes of code 168, prolog size 8, PerfScore 32.55, instruction count 42, allocated bytes for code 168 (MethodHash=6425a36e) for method System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
 ; ============================================================
 
 Unwind Info:
@@ -87,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 40 (0x00028) Actual length = 160 (0x0000a0)
+  Function Length   : 42 (0x0002a) Actual length = 168 (0x0000a8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+5.71%) : 18473.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
@@ -31,11 +31,13 @@ G_M41419_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             mov     w0, #102
             cmp     w19, #97
             ccmp    w19, w0, 0, ge
-            ble     G_M41419_IG05
-            mov     w0, #70
+            cset    x0, le
+            mov     w1, #70
             cmp     w19, #65
-            ccmp    w19, w0, 0, ge
-            ble     G_M41419_IG05
+            ccmp    w19, w1, 0, ge
+            cset    x1, le
+            orr     w0, w0, w1
+            cbnz    w0, G_M41419_IG05
             mov     w0, #0xD1FFAB1E
             mov     w1, #0xD1FFAB1E
             cmp     w19, w0
@@ -46,7 +48,7 @@ G_M41419_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             cmp     w19, w0
             ccmp    w19, w1, 0, ge
             cset    x0, le
-						;; size=72 bbWeight=0.50 PerfScore 5.25
+						;; size=80 bbWeight=0.50 PerfScore 5.50
 G_M41419_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
@@ -61,7 +63,7 @@ G_M41419_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ret     lr
 						;; size=12 bbWeight=0.50 PerfScore 2.00
 
-; Total bytes of code 140, prolog size 12, PerfScore 33.00, instruction count 35, allocated bytes for code 140 (MethodHash=707e5e34) for method Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
+; Total bytes of code 148, prolog size 12, PerfScore 34.05, instruction count 37, allocated bytes for code 148 (MethodHash=707e5e34) for method Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
 ; ============================================================
 
 Unwind Info:
@@ -72,7 +74,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 35 (0x00023) Actual length = 140 (0x00008c)
+  Function Length   : 37 (0x00025) Actual length = 148 (0x000094)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
libraries_tests.pmi.linux.arm64.checked.mch 4,381 4,128 12 241 -27,152 +84
libraries.pmi.linux.arm64.checked.mch 4,211 3,274 20 917 -28,464 +140
benchmarks.run.linux.arm64.checked.mch 813 639 5 169 -6,496 +76
coreclr_tests.run.linux.arm64.checked.mch 9,796 9,549 3 244 -71,908 +20
libraries.crossgen2.linux.arm64.checked.mch 2,962 2,103 13 846 -14,284 +96
22,163 19,693 53 2,417 -148,304 +416

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
libraries_tests.pmi.linux.arm64.checked.mch 373,800 8,227 365,573 0 (0.00%) 0 (0.00%)
libraries.pmi.linux.arm64.checked.mch 260,042 4,778 255,264 0 (0.00%) 0 (0.00%)
benchmarks.run.linux.arm64.checked.mch 40,914 6,346 34,568 1 (0.00%) 1 (0.00%)
coreclr_tests.run.linux.arm64.checked.mch 629,013 382,523 246,490 85 (0.01%) 87 (0.01%)
libraries.crossgen2.linux.arm64.checked.mch 193,060 14 193,046 0 (0.00%) 0 (0.00%)
1,496,829 401,888 1,094,941 86 (0.01%) 88 (0.01%)

jit-analyze output

libraries_tests.pmi.linux.arm64.checked.mch

To reproduce these diffs on Windows arm64:

superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch arm64

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 162440896 (overridden on cmd)
Total bytes of diff: 162413828 (overridden on cmd)
Total bytes of delta: -27068 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
           8 : 211623.dasm (0.38 % of base)
           8 : 168783.dasm (0.93 % of base)
           8 : 110651.dasm (2.44 % of base)
           8 : 249111.dasm (0.28 % of base)
           8 : 164088.dasm (0.63 % of base)
           8 : 231893.dasm (4.76 % of base)
           8 : 257937.dasm (0.34 % of base)
           8 : 110654.dasm (0.33 % of base)
           8 : 258579.dasm (0.32 % of base)
           4 : 315718.dasm (1.14 % of base)
           4 : 168670.dasm (0.41 % of base)
           4 : 315758.dasm (1.14 % of base)

Top file improvements (bytes):
        -180 : 258460.dasm (-1.99 % of base)
        -144 : 258362.dasm (-5.96 % of base)
        -136 : 259643.dasm (-4.86 % of base)
        -128 : 51947.dasm (-1.31 % of base)
        -112 : 148829.dasm (-1.69 % of base)
         -96 : 210802.dasm (-4.14 % of base)
         -96 : 250068.dasm (-8.79 % of base)
         -96 : 307120.dasm (-1.32 % of base)
         -92 : 211862.dasm (-2.93 % of base)
         -72 : 51932.dasm (-1.44 % of base)
         -72 : 361093.dasm (-3.17 % of base)
         -72 : 211670.dasm (-1.17 % of base)
         -72 : 68246.dasm (-3.18 % of base)
         -68 : 325058.dasm (-1.53 % of base)
         -64 : 51936.dasm (-0.63 % of base)
         -64 : 259788.dasm (-0.96 % of base)
         -60 : 257394.dasm (-19.74 % of base)
         -60 : 52244.dasm (-0.54 % of base)
         -60 : 164335.dasm (-1.25 % of base)
         -60 : 325062.dasm (-2.09 % of base)

63 total files with Code Size differences (51 improved, 12 regressed), 28 unchanged.

Top method regressions (bytes):
           8 (0.28 % of base) : 249111.dasm - ImTools.ImMapTree`1[System.__Canon]:AddOrKeepLeftOrRight(int,System.__Canon):ImTools.ImMapTree`1[System.__Canon]:this
           8 (0.34 % of base) : 257937.dasm - Microsoft.CodeAnalysis.CSharp.EmbeddedLanguages.VirtualChars.CSharpVirtualCharService:TryConvertStringToVirtualChars(Microsoft.CodeAnalysis.SyntaxToken,System.String,System.String,bool):Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.VirtualCharSequence
           8 (0.32 % of base) : 258579.dasm - Microsoft.CodeAnalysis.CSharp.Extensions.CompilationUnitSyntaxExtensions:AddUsingDirectives(Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax,System.Collections.Generic.IList`1[Microsoft.CodeAnalysis.CSharp.Syntax.UsingDirectiveSyntax]):System.Collections.Generic.List`1[Microsoft.CodeAnalysis.CSharp.Syntax.UsingDirectiveSyntax]
           8 (2.44 % of base) : 110651.dasm - Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool
           8 (0.33 % of base) : 110654.dasm - Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:TryConvertSimpleDoubleQuoteString(Microsoft.CodeAnalysis.SyntaxToken,System.String,System.String,bool):Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.VirtualCharSequence
           8 (0.38 % of base) : 211623.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.CompilationUnitSyntaxExtensions:AddImportsStatements(Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax,System.Collections.Generic.IList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsStatementSyntax]):System.Collections.Generic.List`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsStatementSyntax]
           8 (0.63 % of base) : 164088.dasm - Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.DoNotPrefixEnumValuesWithTypeNameAnalyzer:AnalyzeNamedType(Microsoft.CodeAnalysis.Diagnostics.SymbolAnalysisContext)
           8 (4.76 % of base) : 231893.dasm - NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool
           8 (0.93 % of base) : 168783.dasm - System.Text.Encodings.Web.Tests.UrlEncoderTests:UrlEncode_AllRangesAllowed_StillEncodesForbiddenChars():this
           4 (1.14 % of base) : 315718.dasm - Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int32TestMultiplications>b__32_1(int,int):System.Object[]:this
           4 (1.14 % of base) : 315758.dasm - Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int64TestMultiplications>b__92_1(long,long):System.Object[]:this
           4 (0.41 % of base) : 168670.dasm - System.Text.Encodings.Web.Tests.HtmlEncoderTests:HtmlEncode_AllRangesAllowed_StillEncodesForbiddenChars_Extended():this

Top method improvements (bytes):
        -180 (-1.99 % of base) : 258460.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.SpacingFormattingRule:GetAdjustSpacesOperation(byref,byref,byref):Microsoft.CodeAnalysis.Formatting.Rules.AdjustSpacesOperation:this
        -144 (-5.96 % of base) : 258362.dasm - Microsoft.CodeAnalysis.CSharp.Formatting.FormattingHelpers:IsParenInArgumentList(Microsoft.CodeAnalysis.SyntaxToken):bool
        -136 (-4.86 % of base) : 259643.dasm - Microsoft.CodeAnalysis.CSharp.Classification.ClassificationHelpers:GetSyntacticClassificationForIdentifier(Microsoft.CodeAnalysis.SyntaxToken):System.String
        -128 (-1.31 % of base) : 51947.dasm - System.Text.Json.Tests.Utf8JsonReaderTests:SkipTest()
        -112 (-1.69 % of base) : 148829.dasm - System.Xml.XmlConvertTests.ToTypeTests:ToType57():int:this
         -96 (-8.79 % of base) : 250068.dasm - FastExpressionCompiler.LightExpression.TypeTools:IsImplicitlyNumericConvertibleTo(System.Type,System.Type):bool
         -96 (-4.14 % of base) : 210802.dasm - Microsoft.CodeAnalysis.VisualBasic.Classification.ClassificationHelpers:GetSyntacticClassificationForIdentifier(Microsoft.CodeAnalysis.SyntaxToken):System.String
         -96 (-1.32 % of base) : 307120.dasm - System.Text.RegularExpressions.Generator.RegexGenerator:GetSemanticTargetForGeneration(Microsoft.CodeAnalysis.GeneratorAttributeSyntaxContext,System.Threading.CancellationToken):System.Object
         -92 (-2.93 % of base) : 211862.dasm - Microsoft.CodeAnalysis.VisualBasic.Formatting.FormattingHelpers:IsXmlToken(Microsoft.CodeAnalysis.SyntaxToken):bool
         -72 (-1.17 % of base) : 211670.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.ContextQuery.SyntaxTreeExtensions:IsTypeContext(Microsoft.CodeAnalysis.SyntaxTree,int,Microsoft.CodeAnalysis.SyntaxToken,System.Threading.CancellationToken,Microsoft.CodeAnalysis.SemanticModel):bool
         -72 (-3.17 % of base) : 361093.dasm - Microsoft.Interop.GeneratorDiagnostics:ReportMarshallingNotSupported(Microsoft.Interop.MethodSignatureDiagnosticLocations,Microsoft.Interop.TypePositionInfo,System.String,System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]):this
         -72 (-3.18 % of base) : 68246.dasm - Microsoft.Interop.GeneratorDiagnostics:ReportMarshallingNotSupported(Microsoft.Interop.MethodSignatureDiagnosticLocations,Microsoft.Interop.TypePositionInfo,System.String):this
         -72 (-1.44 % of base) : 51932.dasm - System.Text.Json.Tests.Utf8JsonReaderTests:CurrentDepthArrayTest()
         -68 (-1.53 % of base) : 325058.dasm - System.Globalization.Tests.GregorianCalendarGetWeekOfYears+<GetWeekOfYear_TestData>d__6:MoveNext():bool:this
         -64 (-0.96 % of base) : 259788.dasm - Microsoft.CodeAnalysis.CSharp.CSharpTypeInferenceService+TypeInferrer:InferTypesWorker_DoNotCallDirectly(Microsoft.CodeAnalysis.SyntaxNode):System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.LanguageService.TypeInferenceInfo]:this
         -64 (-0.63 % of base) : 51936.dasm - System.Text.Json.Tests.Utf8JsonReaderTests:TrySkipHelper(System.String,ubyte,System.Collections.Generic.List`1[ubyte],ubyte)
         -60 (-19.74 % of base) : 257394.dasm - Microsoft.CodeAnalysis.CSharp.Utilities.FormattingRangeHelper:IsSpecialContainingNode(Microsoft.CodeAnalysis.SyntaxNode):bool
         -60 (-1.25 % of base) : 164335.dasm - Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.OperatorOverloadsHaveNamedAlternatesAnalyzer:AnalyzeSymbol(Microsoft.CodeAnalysis.Diagnostics.SymbolAnalysisContext)
         -60 (-2.09 % of base) : 325062.dasm - System.Globalization.Tests.GregorianCalendarGetYear+<GetYear_TestData>d__0:MoveNext():bool:this
         -60 (-0.54 % of base) : 52244.dasm - System.Text.Json.Tests.Utf8JsonWriterTests:WriteHelloWorldEscaped(bool,bool):this

Top method regressions (percentages):
           8 (4.76 % of base) : 231893.dasm - NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool
           8 (2.44 % of base) : 110651.dasm - Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool
           4 (1.14 % of base) : 315718.dasm - Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int32TestMultiplications>b__32_1(int,int):System.Object[]:this
           4 (1.14 % of base) : 315758.dasm - Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int64TestMultiplications>b__92_1(long,long):System.Object[]:this
           8 (0.93 % of base) : 168783.dasm - System.Text.Encodings.Web.Tests.UrlEncoderTests:UrlEncode_AllRangesAllowed_StillEncodesForbiddenChars():this
           8 (0.63 % of base) : 164088.dasm - Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.DoNotPrefixEnumValuesWithTypeNameAnalyzer:AnalyzeNamedType(Microsoft.CodeAnalysis.Diagnostics.SymbolAnalysisContext)
           4 (0.41 % of base) : 168670.dasm - System.Text.Encodings.Web.Tests.HtmlEncoderTests:HtmlEncode_AllRangesAllowed_StillEncodesForbiddenChars_Extended():this
           8 (0.38 % of base) : 211623.dasm - Microsoft.CodeAnalysis.VisualBasic.Extensions.CompilationUnitSyntaxExtensions:AddImportsStatements(Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax,System.Collections.Generic.IList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsStatementSyntax]):System.Collections.Generic.List`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsStatementSyntax]
           8 (0.34 % of base) : 257937.dasm - Microsoft.CodeAnalysis.CSharp.EmbeddedLanguages.VirtualChars.CSharpVirtualCharService:TryConvertStringToVirtualChars(Microsoft.CodeAnalysis.SyntaxToken,System.String,System.String,bool):Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.VirtualCharSequence
           8 (0.33 % of base) : 110654.dasm - Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:TryConvertSimpleDoubleQuoteString(Microsoft.CodeAnalysis.SyntaxToken,System.String,System.String,bool):Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.VirtualCharSequence
           8 (0.32 % of base) : 258579.dasm - Microsoft.CodeAnalysis.CSharp.Extensions.CompilationUnitSyntaxExtensions:AddUsingDirectives(Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax,System.Collections.Generic.IList`1[Microsoft.CodeAnalysis.CSharp.Syntax.UsingDirectiveSyntax]):System.Collections.Generic.List`1[Microsoft.CodeAnalysis.CSharp.Syntax.UsingDirectiveSyntax]
           8 (0.28 % of base) : 249111.dasm - ImTools.ImMapTree`1[System.__Canon]:AddOrKeepLeftOrRight(int,System.__Canon):ImTools.ImMapTree`1[System.__Canon]:this

Top method improvements (percentages):
         -20 (-35.71 % of base) : 73785.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage13d.usage13d.Parent:Foo(int,int,int):int:this
         -20 (-35.71 % of base) : 199251.dasm - System.Runtime.InteropServices.Tests.LibObjC:SupportedOnPlatform(int):bool
         -16 (-33.33 % of base) : 73841.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage03d.usage03d.Parent:Foo(int,int):int:this
         -16 (-33.33 % of base) : 72805.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.inheritance.inherit21c.inherit21c.Parent:Foo(int,int):int:this
         -16 (-33.33 % of base) : 72787.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.inheritance.multi03c.multi03c.Derived:Foo(int,int):int:this
         -16 (-33.33 % of base) : 72380.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.prms.prms07c.prms07c.Parent:Foo(int,int,System.Object[]):int:this
         -16 (-33.33 % of base) : 72363.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.prms.prms09c.prms09c.Parent:Foo(int,int,System.Object[]):int:this
         -20 (-33.33 % of base) : 212876.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGeneration.ExpressionGenerator+StringPiece:IsPrintable(int):bool
         -16 (-33.33 % of base) : 217994.dasm - NuGet.Protocol.Plugins.MessageDispatcher:GetIsKeepAlive(NuGet.Protocol.Plugins.IConnection,int,int):bool
         -16 (-33.33 % of base) : 107909.dasm - Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
         -20 (-29.41 % of base) : 202324.dasm - Microsoft.Diagnostics.Runtime.ClrElementTypeExtensions:IsObjectReference(int):bool
         -16 (-28.57 % of base) : 204490.dasm - Microsoft.IdentityModel.Json.Utilities.JsonTokenUtils:IsPrimitiveToken(int):bool
         -12 (-27.27 % of base) : 160316.dasm - Analyzer.Utilities.DisposeAnalysisKindExtensions:AreMayBeNotDisposedViolationsEnabled(int):bool
         -12 (-27.27 % of base) : 113705.dasm - Microsoft.CodeAnalysis.Text.SourceHashAlgorithms:IsSupportedAlgorithm(int):bool
         -16 (-26.67 % of base) : 160527.dasm - Analyzer.Utilities.FlowAnalysis.Analysis.TaintedDataAnalysis.HardcodedSymmetricAlgorithmKeysSources:IsLegalKeySize(int):bool
         -20 (-26.32 % of base) : 160411.dasm - Analyzer.Utilities.FlowAnalysis.Analysis.PropertySetAnalysis.PropertySetAnalysis:MergeHazardousUsageEvaluationResult(int,int):int
         -12 (-25.00 % of base) : 282204.dasm - Microsoft.Interop.ManualTypeMarshallingHelper:ModeUsesManagedToUnmanagedShape(int):bool
         -12 (-23.08 % of base) : 146587.dasm - System.Xml.XPath.XDocument.Tests.XDocument.NavigatorComparer:IsWhitespaceOrText(int):bool
         -28 (-22.58 % of base) : 277760.dasm - System.Text.RegularExpressions.RegexNode:<ReduceConcatenationWithAdjacentLoops>g__CanCombineCounts|51_0(int,int,int,int):bool
         -16 (-22.22 % of base) : 195784.dasm - System.ComponentModel.Tests.IBaseConverter:CanConvertTo(System.ComponentModel.ITypeDescriptorContext,System.Type):bool:this


libraries.pmi.linux.arm64.checked.mch

To reproduce these diffs on Windows arm64:

superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch arm64

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 66031816 (overridden on cmd)
Total bytes of diff: 66003492 (overridden on cmd)
Total bytes of delta: -28324 (-0.04 % of base)
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
           8 : 202551.dasm (0.35 % of base)
           8 : 257569.dasm (3.77 % of base)
           8 : 81550.dasm (2.63 % of base)
           8 : 255102.dasm (0.94 % of base)
           8 : 29442.dasm (1.85 % of base)
           8 : 179103.dasm (5.71 % of base)
           8 : 148531.dasm (5.00 % of base)
           8 : 22868.dasm (0.50 % of base)
           8 : 191794.dasm (8.33 % of base)
           8 : 16760.dasm (0.35 % of base)
           8 : 27644.dasm (5.41 % of base)
           8 : 16710.dasm (1.14 % of base)
           8 : 250117.dasm (2.17 % of base)
           8 : 218007.dasm (5.71 % of base)
           8 : 255116.dasm (0.27 % of base)
           4 : 191748.dasm (0.34 % of base)
           4 : 73391.dasm (1.33 % of base)
           4 : 27624.dasm (4.17 % of base)
           4 : 80313.dasm (0.12 % of base)
           4 : 115479.dasm (0.17 % of base)

Top file improvements (bytes):
        -136 : 196936.dasm (-0.47 % of base)
        -120 : 71049.dasm (-9.65 % of base)
        -104 : 37018.dasm (-15.66 % of base)
        -104 : 37021.dasm (-15.66 % of base)
        -104 : 149643.dasm (-12.21 % of base)
        -100 : 37040.dasm (-15.43 % of base)
        -100 : 37037.dasm (-15.43 % of base)
         -88 : 196938.dasm (-2.14 % of base)
         -84 : 22953.dasm (-6.40 % of base)
         -84 : 23093.dasm (-7.64 % of base)
         -80 : 37016.dasm (-11.43 % of base)
         -80 : 37017.dasm (-11.43 % of base)
         -76 : 37036.dasm (-11.11 % of base)
         -76 : 37035.dasm (-11.11 % of base)
         -72 : 27538.dasm (-6.59 % of base)
         -68 : 71872.dasm (-4.82 % of base)
         -68 : 69253.dasm (-4.83 % of base)
         -68 : 71840.dasm (-4.82 % of base)
         -64 : 2651.dasm (-1.08 % of base)
         -60 : 22915.dasm (-5.10 % of base)

71 total files with Code Size differences (51 improved, 20 regressed), 20 unchanged.

Top method regressions (bytes):
           8 (0.35 % of base) : 202551.dasm - Internal.IL.ILStackHelper:ComputeMaxStack(Internal.IL.MethodIL):int
           8 (8.33 % of base) : 191794.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
           8 (2.63 % of base) : 81550.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.GeneratedNames:TryParseGeneratedName(System.String,byref,byref,byref):bool
           8 (5.71 % of base) : 179103.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           8 (5.71 % of base) : 218007.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           8 (1.85 % of base) : 29442.dasm - Microsoft.CodeAnalysis.VisualBasic.LambdaUtilities:GetCollectionRangeVariables(Microsoft.CodeAnalysis.SyntaxNode):Microsoft.CodeAnalysis.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.CollectionRangeVariableSyntax]
           8 (0.35 % of base) : 16760.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseExternalChecksumDirective(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.PunctuationSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ExternalChecksumDirectiveTriviaSyntax:this
           8 (1.14 % of base) : 16710.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.PropertyBlockContext:ProcessSyntax(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.BlockContext:this
           8 (0.50 % of base) : 22868.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.MethodBaseSyntax:get_AsClauseInternal():Microsoft.CodeAnalysis.VisualBasic.Syntax.AsClauseSyntax:this
           8 (5.41 % of base) : 27644.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
           8 (5.00 % of base) : 148531.dasm - System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
           8 (0.94 % of base) : 255102.dasm - System.Formats.Tar.TarReader:TryProcessGnuMetadataHeader(System.Formats.Tar.TarHeader,bool,byref):bool:this
           8 (0.27 % of base) : 255116.dasm - System.Formats.Tar.TarReader+<TryProcessGnuMetadataHeaderAsync>d__19:MoveNext():this
           8 (2.17 % of base) : 250117.dasm - System.Net.WebSockets.ManagedWebSocket:TryValidateUtf8(System.Span`1[ubyte],bool,System.Net.WebSockets.ManagedWebSocket+Utf8MessageState):bool
           8 (3.77 % of base) : 257569.dasm - System.Security.Cryptography.Cose.KnownCoseAlgorithms:ThrowIfNotSupported(long)
           4 (0.34 % of base) : 191748.dasm - Microsoft.Build.Shared.ResourceUtilities:ExtractMessageCode(bool,System.String,byref):System.String
           4 (0.12 % of base) : 80313.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)
           4 (1.33 % of base) : 73391.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:AdvanceIfMatches(ushort):bool:this
           4 (4.17 % of base) : 27624.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsWhitespaceNotAscii(ushort):bool
           4 (0.17 % of base) : 115479.dasm - System.Xml.DtdParser+<ScanEntity2Async>d__189:MoveNext():this

Top method improvements (bytes):
        -136 (-0.47 % of base) : 196936.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this
        -120 (-9.65 % of base) : 71049.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.ForEachStatementSyntax:Update(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax):Microsoft.CodeAnalysis.CSharp.Syntax.ForEachStatementSyntax:this
        -104 (-15.66 % of base) : 37018.dasm - System.SpanHelpers:IndexOfAny[int](byref,int,int,int,int):int
        -104 (-15.66 % of base) : 37021.dasm - System.SpanHelpers:IndexOfAny[long](byref,long,long,long,int):int
        -104 (-12.21 % of base) : 149643.dasm - System.Text.Json.JsonReaderHelper:IndexOfOrLessThan(byref,ubyte,ubyte,ubyte,int):int
        -100 (-15.43 % of base) : 37037.dasm - System.SpanHelpers:LastIndexOfAny[int](byref,int,int,int,int):int
        -100 (-15.43 % of base) : 37040.dasm - System.SpanHelpers:LastIndexOfAny[long](byref,long,long,long,int):int
         -88 (-2.14 % of base) : 196938.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:GetMostSpecific(System.Reflection.MethodBase,System.Reflection.MethodBase,int[],System.Object[],bool,int,int,System.Object[]):int:this
         -84 (-6.40 % of base) : 22953.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.DelegateStatementSyntax:Update(ushort,Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeListSyntax],Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeParameterListSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.ParameterListSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.SimpleAsClauseSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.DelegateStatementSyntax:this
         -84 (-7.64 % of base) : 23093.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.EventStatementSyntax:Update(Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeListSyntax],Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.VisualBasic.Syntax.ParameterListSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.SimpleAsClauseSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.ImplementsClauseSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.EventStatementSyntax:this
         -80 (-11.43 % of base) : 37017.dasm - System.SpanHelpers:IndexOfAny[short](byref,short,short,short,int):int
         -80 (-11.43 % of base) : 37016.dasm - System.SpanHelpers:IndexOfAny[ubyte](byref,ubyte,ubyte,ubyte,int):int
         -76 (-11.11 % of base) : 37036.dasm - System.SpanHelpers:LastIndexOfAny[short](byref,short,short,short,int):int
         -76 (-11.11 % of base) : 37035.dasm - System.SpanHelpers:LastIndexOfAny[ubyte](byref,ubyte,ubyte,ubyte,int):int
         -72 (-6.59 % of base) : 27538.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.ExternalChecksumDirectiveTriviaSyntax:Update(Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken):Microsoft.CodeAnalysis.VisualBasic.Syntax.ExternalChecksumDirectiveTriviaSyntax:this
         -68 (-4.82 % of base) : 71872.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.ConversionOperatorDeclarationSyntax:Update(Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax],Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterListSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.ArrowExpressionClauseSyntax,Microsoft.CodeAnalysis.SyntaxToken):Microsoft.CodeAnalysis.CSharp.Syntax.ConversionOperatorDeclarationSyntax:this
         -68 (-4.83 % of base) : 69253.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.DelegateDeclarationSyntax:Update(Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax],Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.TypeParameterListSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterListSyntax,Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.CSharp.Syntax.TypeParameterConstraintClauseSyntax],Microsoft.CodeAnalysis.SyntaxToken):Microsoft.CodeAnalysis.CSharp.Syntax.DelegateDeclarationSyntax:this
         -68 (-4.82 % of base) : 71840.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.OperatorDeclarationSyntax:Update(Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.CSharp.Syntax.AttributeListSyntax],Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterListSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax,Microsoft.CodeAnalysis.CSharp.Syntax.ArrowExpressionClauseSyntax,Microsoft.CodeAnalysis.SyntaxToken):Microsoft.CodeAnalysis.CSharp.Syntax.OperatorDeclarationSyntax:this
         -64 (-1.08 % of base) : 2651.dasm - System.Data.DataSet:ReadXml(System.Xml.XmlReader,int,bool):int:this
         -60 (-5.10 % of base) : 22915.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.MethodStatementSyntax:Update(ushort,Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeListSyntax],Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeParameterListSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.ParameterListSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.SimpleAsClauseSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.HandlesClauseSyntax,Microsoft.CodeAnalysis.VisualBasic.Syntax.ImplementsClauseSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.MethodStatementSyntax:this

Top method regressions (percentages):
           8 (8.33 % of base) : 191794.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
           8 (5.71 % of base) : 179103.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           8 (5.71 % of base) : 218007.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           8 (5.41 % of base) : 27644.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
           8 (5.00 % of base) : 148531.dasm - System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
           4 (4.17 % of base) : 27624.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsWhitespaceNotAscii(ushort):bool
           8 (3.77 % of base) : 257569.dasm - System.Security.Cryptography.Cose.KnownCoseAlgorithms:ThrowIfNotSupported(long)
           8 (2.63 % of base) : 81550.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.GeneratedNames:TryParseGeneratedName(System.String,byref,byref,byref):bool
           8 (2.17 % of base) : 250117.dasm - System.Net.WebSockets.ManagedWebSocket:TryValidateUtf8(System.Span`1[ubyte],bool,System.Net.WebSockets.ManagedWebSocket+Utf8MessageState):bool
           8 (1.85 % of base) : 29442.dasm - Microsoft.CodeAnalysis.VisualBasic.LambdaUtilities:GetCollectionRangeVariables(Microsoft.CodeAnalysis.SyntaxNode):Microsoft.CodeAnalysis.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.CollectionRangeVariableSyntax]
           4 (1.33 % of base) : 73391.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:AdvanceIfMatches(ushort):bool:this
           8 (1.14 % of base) : 16710.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.PropertyBlockContext:ProcessSyntax(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.BlockContext:this
           8 (0.94 % of base) : 255102.dasm - System.Formats.Tar.TarReader:TryProcessGnuMetadataHeader(System.Formats.Tar.TarHeader,bool,byref):bool:this
           8 (0.50 % of base) : 22868.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.MethodBaseSyntax:get_AsClauseInternal():Microsoft.CodeAnalysis.VisualBasic.Syntax.AsClauseSyntax:this
           8 (0.35 % of base) : 16760.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Parser:ParseExternalChecksumDirective(Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.PunctuationSyntax):Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.ExternalChecksumDirectiveTriviaSyntax:this
           8 (0.35 % of base) : 202551.dasm - Internal.IL.ILStackHelper:ComputeMaxStack(Internal.IL.MethodIL):int
           4 (0.34 % of base) : 191748.dasm - Microsoft.Build.Shared.ResourceUtilities:ExtractMessageCode(bool,System.String,byref):System.String
           8 (0.27 % of base) : 255116.dasm - System.Formats.Tar.TarReader+<TryProcessGnuMetadataHeaderAsync>d__19:MoveNext():this
           4 (0.17 % of base) : 115479.dasm - System.Xml.DtdParser+<ScanEntity2Async>d__189:MoveNext():this
           4 (0.12 % of base) : 80313.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)

Top method improvements (percentages):
         -20 (-38.46 % of base) : 86103.dasm - ILCompiler.DependencyAnalysis.Relocation:GetFileRelocationType(int):int
         -20 (-33.33 % of base) : 153610.dasm - ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool
         -20 (-33.33 % of base) : 62230.dasm - Microsoft.CodeAnalysis.CSharp.ConversionsBase:IsValidExtensionMethodThisArgConversion(Microsoft.CodeAnalysis.CSharp.Conversion):bool
         -16 (-33.33 % of base) : 216666.dasm - Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int
         -16 (-33.33 % of base) : 179072.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool
         -16 (-33.33 % of base) : 179075.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool
         -16 (-33.33 % of base) : 177244.dasm - Microsoft.CodeAnalysis.UnicodeCharacterUtilities:IsCombiningChar(int):bool
         -16 (-33.33 % of base) : 214438.dasm - Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
         -16 (-33.33 % of base) : 44064.dasm - System.Reflection.Emit.ExceptionHandler:IsValidKind(int):bool
         -16 (-33.33 % of base) : 164071.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:IsCompleteChain(Interop+Crypto+X509VerifyStatusCode):bool
         -16 (-30.77 % of base) : 82899.dasm - Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator:IsFloat(int):bool
         -16 (-30.77 % of base) : 62510.dasm - Microsoft.CodeAnalysis.CSharp.MemberAnalysisResult:get_IsValid():bool:this
         -16 (-30.77 % of base) : 231677.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.PredefinedTypeFacts:IsNumericType(uint):bool
         -20 (-29.41 % of base) : 4027.dasm - System.Data.ExpressionNode:IsUnsignedSql(int):bool
         -20 (-29.41 % of base) : 4153.dasm - System.Data.Operators:IsArithmetical(int):bool
         -20 (-29.41 % of base) : 4154.dasm - System.Data.Operators:IsLogical(int):bool
         -20 (-29.41 % of base) : 166037.dasm - System.Xml.XmlDictionaryReader:IsTextNode(int):bool:this
         -16 (-28.57 % of base) : 66122.dasm - Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
         -16 (-28.57 % of base) : 139591.dasm - Newtonsoft.Json.Utilities.JsonTokenUtils:IsPrimitiveToken(int):bool
         -16 (-28.57 % of base) : 146920.dasm - System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this


benchmarks.run.linux.arm64.checked.mch

To reproduce these diffs on Windows arm64:

superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch arm64

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 18839792 (overridden on cmd)
Total bytes of diff: 18833372 (overridden on cmd)
Total bytes of delta: -6420 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
          28 : 28312.dasm (0.25 % of base)
          20 : 7651.dasm (0.33 % of base)
          16 : 12117.dasm (2.76 % of base)
           8 : 4051.dasm (9.09 % of base)
           4 : 24030.dasm (0.13 % of base)

Top file improvements (bytes):
        -120 : 25962.dasm (-1.47 % of base)
        -112 : 7465.dasm (-0.30 % of base)
        -104 : 23643.dasm (-15.95 % of base)
        -104 : 2281.dasm (-12.21 % of base)
         -96 : 21111.dasm (-6.00 % of base)
         -88 : 16596.dasm (-1.14 % of base)
         -88 : 7655.dasm (-1.09 % of base)
         -88 : 39803.dasm (-0.82 % of base)
         -88 : 16590.dasm (-0.90 % of base)
         -84 : 24957.dasm (-0.87 % of base)
         -80 : 20070.dasm (-1.84 % of base)
         -80 : 19994.dasm (-1.31 % of base)
         -60 : 7656.dasm (-0.58 % of base)
         -60 : 28316.dasm (-0.58 % of base)
         -60 : 19641.dasm (-5.19 % of base)
         -56 : 15284.dasm (-1.18 % of base)
         -56 : 1212.dasm (-0.96 % of base)
         -52 : 23130.dasm (-9.77 % of base)
         -48 : 28315.dasm (-0.42 % of base)
         -48 : 23376.dasm (-9.23 % of base)

53 total files with Code Size differences (48 improved, 5 regressed), 34 unchanged.

Top method regressions (bytes):
          28 (0.25 % of base) : 28312.dasm - Jil.Deserialize.Methods:SkipWithLeadCharThunkReader(byref,int)
          20 (0.33 % of base) : 7651.dasm - Jil.Deserialize.Methods:SkipWithLeadChar(System.IO.TextReader,int)
          16 (2.76 % of base) : 12117.dasm - ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this
           8 (9.09 % of base) : 4051.dasm - System.Globalization.Tests.StringSearch+<>c:<ContainsSimpleCharactersOnly>b__14_0(ushort):bool:this
           4 (0.13 % of base) : 24030.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,int,Microsoft.CodeAnalysis.DiagnosticBag)

Top method improvements (bytes):
        -120 (-1.47 % of base) : 25962.dasm - (dynamicClass):_DynamicMethod1(System.IO.TextReader,int):MicroBenchmarks.Serializers.Location
        -112 (-0.30 % of base) : 7465.dasm - (dynamicClass):_DynamicMethod0(System.IO.TextWriter,MicroBenchmarks.Serializers.IndexViewModel,int)
        -104 (-15.95 % of base) : 23643.dasm - System.SpanHelpers:IndexOfAny[int](byref,int,int,int,int):int
        -104 (-12.21 % of base) : 2281.dasm - System.Text.Json.JsonReaderHelper:IndexOfOrLessThan(byref,ubyte,ubyte,ubyte,int):int
         -96 (-6.00 % of base) : 21111.dasm - Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsWarning(int):bool
         -88 (-0.82 % of base) : 39803.dasm - (dynamicClass):_DynamicMethod1(byref,int):MicroBenchmarks.Serializers.CollectionsOfPrimitives
         -88 (-0.90 % of base) : 16590.dasm - (dynamicClass):_DynamicMethod1(System.IO.TextReader,int):MicroBenchmarks.Serializers.CollectionsOfPrimitives
         -88 (-1.14 % of base) : 16596.dasm - Jil.Deserialize.Methods:_ReadISO8601Date(System.IO.TextReader,ushort[]):System.DateTime
         -88 (-1.09 % of base) : 7655.dasm - Jil.Deserialize.Methods:_ReadISO8601DateWithOffset(System.IO.TextReader,ushort[]):System.DateTimeOffset
         -84 (-0.87 % of base) : 24957.dasm - (dynamicClass):_DynamicMethod1(byref,int):MicroBenchmarks.Serializers.Location
         -80 (-1.31 % of base) : 19994.dasm - (dynamicClass):_DynamicMethod1(byref,int):MicroBenchmarks.Serializers.LoginViewModel
         -80 (-1.84 % of base) : 20070.dasm - (dynamicClass):_DynamicMethod1(System.IO.TextReader,int):MicroBenchmarks.Serializers.LoginViewModel
         -60 (-0.58 % of base) : 7656.dasm - Jil.Deserialize.Methods:ParseISO8601Date(System.IO.TextReader,ushort[],int,int):System.DateTime
         -60 (-0.58 % of base) : 28316.dasm - Jil.Deserialize.Methods:ParseISO8601DateThunkReader(byref,ushort[],int,int):System.DateTime
         -60 (-5.19 % of base) : 19641.dasm - System.DateTimeParse:TryParseFormatO(System.ReadOnlySpan`1[ushort],byref):bool
         -56 (-0.96 % of base) : 1212.dasm - System.Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo)
         -56 (-1.18 % of base) : 15284.dasm - Utf8Json.Formatters.ISO8601DateTimeFormatter:Deserialize(byref,Utf8Json.IJsonFormatterResolver):System.DateTime:this
         -52 (-9.77 % of base) : 23130.dasm - System.SpanHelpers:IndexOfAny[int](byref,int,int,int):int
         -48 (-0.42 % of base) : 28315.dasm - Jil.Deserialize.Methods:_ReadISO8601DateWithOffsetThunkReader(byref,ushort[]):System.DateTimeOffset
         -48 (-9.23 % of base) : 23376.dasm - System.SpanHelpers:LastIndexOfAny[int](byref,int,int,int):int

Top method regressions (percentages):
           8 (9.09 % of base) : 4051.dasm - System.Globalization.Tests.StringSearch+<>c:<ContainsSimpleCharactersOnly>b__14_0(ushort):bool:this
          16 (2.76 % of base) : 12117.dasm - ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this
          20 (0.33 % of base) : 7651.dasm - Jil.Deserialize.Methods:SkipWithLeadChar(System.IO.TextReader,int)
          28 (0.25 % of base) : 28312.dasm - Jil.Deserialize.Methods:SkipWithLeadCharThunkReader(byref,int)
           4 (0.13 % of base) : 24030.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,Microsoft.CodeAnalysis.SyntaxToken,Microsoft.CodeAnalysis.SyntaxToken,int,Microsoft.CodeAnalysis.DiagnosticBag)

Top method improvements (percentages):
         -24 (-27.27 % of base) : 1131.dasm - System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
         -16 (-25.00 % of base) : 21112.dasm - Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
         -16 (-25.00 % of base) : 20961.dasm - Microsoft.CodeAnalysis.CSharp.LanguageVersionExtensionsInternal:IsValid(int):bool
         -16 (-25.00 % of base) : 1721.dasm - System.Reflection.Emit.OpCodes:TakesSingleByteArgument(System.Reflection.Emit.OpCode):bool
         -16 (-23.53 % of base) : 22152.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:get_IsReferenceType():bool:this
         -16 (-22.22 % of base) : 21383.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.PEPropertyOrEventHelpers:GetDeclaredAccessibilityFromAccessors(int,int):int
         -16 (-20.00 % of base) : 20465.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsPossibleMemberName():bool:this
         -16 (-19.05 % of base) : 3735.dasm - Newtonsoft.Json.Linq.JValue:GetStringValueType(System.Nullable`1[int]):int
         -16 (-19.05 % of base) : 5608.dasm - System.UriHelper:IsLWS(ushort):bool
         -20 (-17.24 % of base) : 16757.dasm - System.Linq.Expressions.Compiler.ILGen:CanEmitILConstant(System.Type):bool
        -104 (-15.95 % of base) : 23643.dasm - System.SpanHelpers:IndexOfAny[int](byref,int,int,int,int):int
         -20 (-14.71 % of base) : 6849.dasm - System.Text.RegularExpressions.RegexCharClass:IsWordChar(ushort):bool
          -8 (-13.33 % of base) : 91.dasm - System.RuntimeType:HasElementTypeImpl():bool:this
         -12 (-13.04 % of base) : 22276.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.PEMethodSymbol:get_IsVararg():bool:this
         -16 (-12.90 % of base) : 21984.dasm - Microsoft.CodeAnalysis.CSharp.OperatorKindExtensions:IsComparison(int):bool
        -104 (-12.21 % of base) : 2281.dasm - System.Text.Json.JsonReaderHelper:IndexOfOrLessThan(byref,ubyte,ubyte,ubyte,int):int
         -32 (-11.76 % of base) : 15790.dasm - MessagePack.Internal.DynamicObjectTypeBuilder:IsOptimizeTargetType(System.Type):bool
         -44 (-11.34 % of base) : 7054.dasm - Jil.Common.ExtensionMethods:IsPrimitiveType(System.Type):bool
         -12 (-11.11 % of base) : 22192.dasm - Microsoft.CodeAnalysis.CodeGen.ILOpCodeExtensions:CanFallThrough(ushort):bool
         -12 (-11.11 % of base) : 14701.dasm - ProtoBuf.Internal.Serializers.SubValueSerializer`1[System.DateTimeOffset]:ProtoBuf.Internal.Serializers.IDirectWriteNode.CanEmitDirectWrite(int):bool:this


coreclr_tests.run.linux.arm64.checked.mch

To reproduce these diffs on Windows arm64:

superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch arm64

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 536166368 (overridden on cmd)
Total bytes of diff: 536094480 (overridden on cmd)
Total bytes of delta: -71888 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
           8 : 586743.dasm (8.33 % of base)
           8 : 360681.dasm (8.33 % of base)
           4 : 517264.dasm (0.13 % of base)

Top file improvements (bytes):
        -132 : 580766.dasm (-1.44 % of base)
         -88 : 511444.dasm (-23.16 % of base)
         -88 : 511458.dasm (-23.16 % of base)
         -88 : 511443.dasm (-23.16 % of base)
         -88 : 511457.dasm (-23.16 % of base)
         -88 : 511512.dasm (-23.16 % of base)
         -80 : 511648.dasm (-2.63 % of base)
         -80 : 511646.dasm (-2.61 % of base)
         -80 : 511644.dasm (-2.60 % of base)
         -80 : 511645.dasm (-2.59 % of base)
         -72 : 587876.dasm (-6.69 % of base)
         -64 : 362844.dasm (-1.00 % of base)
         -64 : 552429.dasm (-11.68 % of base)
         -60 : 511469.dasm (-19.48 % of base)
         -60 : 511431.dasm (-19.48 % of base)
         -60 : 511430.dasm (-19.48 % of base)
         -60 : 511468.dasm (-19.48 % of base)
         -60 : 511527.dasm (-19.48 % of base)
         -60 : 526444.dasm (-0.63 % of base)
         -56 : 5381.dasm (-0.95 % of base)

44 total files with Code Size differences (41 improved, 3 regressed), 35 unchanged.

Top method regressions (bytes):
           8 (8.33 % of base) : 586743.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
           8 (8.33 % of base) : 360681.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
           4 (0.13 % of base) : 517264.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)

Top method improvements (bytes):
        -132 (-1.44 % of base) : 580766.dasm - structinreg.Program3:Main1():int
         -88 (-23.16 % of base) : 511443.dasm - bgt_i4._bgt:main():int
         -88 (-23.16 % of base) : 511444.dasm - bgt_i8._bgt:main():int
         -88 (-23.16 % of base) : 511457.dasm - ble_i4._ble:main():int
         -88 (-23.16 % of base) : 511458.dasm - ble_i8._ble:main():int
         -88 (-23.16 % of base) : 511512.dasm - cgt_i4._cgt:main():int
         -80 (-2.60 % of base) : 511644.dasm - ldarg_s_i1:test_int8(byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte,byte):int
         -80 (-2.59 % of base) : 511645.dasm - ldarg_s_i2:test_int16(short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short,short):int
         -80 (-2.61 % of base) : 511646.dasm - ldarg_s_i4:test_int32(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int):int
         -80 (-2.63 % of base) : 511648.dasm - ldarg_s_i8:test_int64(long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long):int
         -72 (-6.69 % of base) : 587876.dasm - TestSmallStackArgsClass:TestSmallStackArgsMethod(short,short,short,short,short,short,short,short,short,short,short,short):int:this
         -64 (-11.68 % of base) : 552429.dasm - ABIStress.TypeExtensions:IsOurStructType(System.Type):bool
         -64 (-1.00 % of base) : 362844.dasm - System.Diagnostics.Tracing.EventPipePayloadDecoder:DecodePayload(byref,System.ReadOnlySpan`1[ubyte]):System.Object[]
         -60 (-19.48 % of base) : 511430.dasm - bge_i4._bge:main():int
         -60 (-19.48 % of base) : 511431.dasm - bge_i8._bge:main():int
         -60 (-19.48 % of base) : 511468.dasm - blt_i4._blt:main():int
         -60 (-19.48 % of base) : 511469.dasm - blt_i8._blt:main():int
         -60 (-19.48 % of base) : 511527.dasm - clt_i4._clt:main():int
         -60 (-0.63 % of base) : 526444.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder:bindUserDefinedConversion(Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.Semantics.CType,Microsoft.CSharp.RuntimeBinder.Semantics.CType,bool,byref,bool):bool:this
         -56 (-0.95 % of base) : 5381.dasm - System.Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo)

Top method regressions (percentages):
           8 (8.33 % of base) : 586743.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
           8 (8.33 % of base) : 360681.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
           4 (0.13 % of base) : 517264.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)

Top method improvements (percentages):
         -16 (-28.57 % of base) : 364903.dasm - System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this
         -16 (-28.57 % of base) : 356691.dasm - System.Reflection.Metadata.SignatureHeader:get_Kind():ubyte:this
         -24 (-27.27 % of base) : 1236.dasm - System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
         -16 (-25.00 % of base) : 237766.dasm - System.Reflection.Emit.OpCodes:TakesSingleByteArgument(System.Reflection.Emit.OpCode):bool
         -16 (-25.00 % of base) : 628658.dasm - System.RuntimeTypeHandle:HasElementType(System.RuntimeType):bool
         -16 (-25.00 % of base) : 429238.dasm - System.RuntimeTypeHandle:HasElementType(System.RuntimeType):bool
         -16 (-25.00 % of base) : 297616.dasm - System.RuntimeTypeHandle:HasElementType(System.RuntimeType):bool
         -16 (-23.53 % of base) : 516198.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:get_IsReferenceType():bool:this
         -88 (-23.16 % of base) : 511443.dasm - bgt_i4._bgt:main():int
         -88 (-23.16 % of base) : 511444.dasm - bgt_i8._bgt:main():int
         -88 (-23.16 % of base) : 511457.dasm - ble_i4._ble:main():int
         -88 (-23.16 % of base) : 511458.dasm - ble_i8._ble:main():int
         -88 (-23.16 % of base) : 511512.dasm - cgt_i4._cgt:main():int
         -16 (-22.22 % of base) : 515506.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.PEPropertyOrEventHelpers:GetDeclaredAccessibilityFromAccessors(int,int):int
         -20 (-21.74 % of base) : 363620.dasm - System.Threading.Tasks.Parallel:CheckTimeoutReached(int):bool
         -24 (-20.69 % of base) : 524951.dasm - N.C:HasPrimeUnderTwenty(int,int):bool
         -16 (-20.00 % of base) : 514564.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:IsPossibleMemberName():bool:this
         -60 (-19.48 % of base) : 511430.dasm - bge_i4._bge:main():int
         -60 (-19.48 % of base) : 511431.dasm - bge_i8._bge:main():int
         -60 (-19.48 % of base) : 511468.dasm - blt_i4._blt:main():int


libraries.crossgen2.linux.arm64.checked.mch

To reproduce these diffs on Windows arm64:

superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch arm64

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 46085472 (overridden on cmd)
Total bytes of diff: 46071284 (overridden on cmd)
Total bytes of delta: -14188 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
          12 : 46310.dasm (4.35 % of base)
           8 : 187886.dasm (4.08 % of base)
           8 : 186551.dasm (2.06 % of base)
           8 : 143288.dasm (4.55 % of base)
           8 : 162723.dasm (5.00 % of base)
           8 : 95766.dasm (2.56 % of base)
           8 : 124935.dasm (4.55 % of base)
           8 : 113313.dasm (0.47 % of base)
           8 : 18473.dasm (5.71 % of base)
           8 : 113503.dasm (0.78 % of base)
           4 : 94535.dasm (0.26 % of base)
           4 : 18453.dasm (4.35 % of base)
           4 : 89486.dasm (1.39 % of base)

Top file improvements (bytes):
        -104 : 155031.dasm (-12.21 % of base)
         -92 : 117181.dasm (-2.38 % of base)
         -80 : 116479.dasm (-0.29 % of base)
         -60 : 46158.dasm (-5.23 % of base)
         -60 : 177280.dasm (-0.61 % of base)
         -56 : 44954.dasm (-1.87 % of base)
         -52 : 41950.dasm (-4.48 % of base)
         -48 : 89215.dasm (-11.11 % of base)
         -44 : 5569.dasm (-1.89 % of base)
         -44 : 44604.dasm (-0.87 % of base)
         -40 : 180141.dasm (-0.86 % of base)
         -40 : 79997.dasm (-4.95 % of base)
         -36 : 177163.dasm (-1.41 % of base)
         -36 : 44840.dasm (-3.14 % of base)
         -36 : 117189.dasm (-3.72 % of base)
         -32 : 41832.dasm (-7.27 % of base)
         -32 : 28590.dasm (-2.29 % of base)
         -32 : 117549.dasm (-1.91 % of base)
         -32 : 180957.dasm (-1.68 % of base)
         -32 : 175513.dasm (-6.25 % of base)

62 total files with Code Size differences (49 improved, 13 regressed), 27 unchanged.

Top method regressions (bytes):
          12 (4.35 % of base) : 46310.dasm - System.Globalization.IdnMapping:ValidateStd3(ushort,bool)
           8 (2.56 % of base) : 95766.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.GeneratedNames:TryParseGeneratedName(System.String,byref,byref,byref):bool
           8 (4.55 % of base) : 143288.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           8 (4.55 % of base) : 124935.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           8 (5.71 % of base) : 18473.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
           8 (5.00 % of base) : 162723.dasm - System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
           8 (0.78 % of base) : 113503.dasm - System.Formats.Tar.TarReader:TryProcessGnuMetadataHeader(System.Formats.Tar.TarHeader,bool,byref):bool:this
           8 (0.47 % of base) : 113313.dasm - System.Formats.Tar.TarReader+<TryProcessGnuMetadataHeaderAsync>d__19:MoveNext():this
           8 (2.06 % of base) : 186551.dasm - System.Net.WebSockets.ManagedWebSocket:TryValidateUtf8(System.Span`1[ubyte],bool,System.Net.WebSockets.ManagedWebSocket+Utf8MessageState):bool
           8 (4.08 % of base) : 187886.dasm - System.Security.Cryptography.Cose.KnownCoseAlgorithms:ThrowIfNotSupported(long)
           4 (0.26 % of base) : 94535.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)
           4 (1.39 % of base) : 89486.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:AdvanceIfMatches(ushort):bool:this
           4 (4.35 % of base) : 18453.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsWhitespaceNotAscii(ushort):bool

Top method improvements (bytes):
        -104 (-12.21 % of base) : 155031.dasm - System.Text.Json.JsonReaderHelper:IndexOfOrLessThan(byref,ubyte,ubyte,ubyte,int):int
         -92 (-2.38 % of base) : 117181.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:GetMostSpecific(System.Reflection.MethodBase,System.Reflection.MethodBase,int[],System.Object[],bool,int,int,System.Object[]):int:this
         -80 (-0.29 % of base) : 116479.dasm - Microsoft.VisualBasic.CompilerServices.VBBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this
         -60 (-0.61 % of base) : 177280.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder:bindUserDefinedConversion(Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.Semantics.CType,Microsoft.CSharp.RuntimeBinder.Semantics.CType,bool,byref,bool):bool:this
         -60 (-5.23 % of base) : 46158.dasm - System.DateTimeParse:TryParseFormatO(System.ReadOnlySpan`1[ushort],byref):bool
         -56 (-1.87 % of base) : 44954.dasm - System.Globalization.TimeSpanFormat:TryFormatStandard(System.TimeSpan,int,System.String,System.Span`1[ushort],byref):bool
         -52 (-4.48 % of base) : 41950.dasm - System.Buffers.Text.Utf8Parser:TryParseDateTimeOffsetO(System.ReadOnlySpan`1[ubyte],byref,byref,byref):bool
         -48 (-11.11 % of base) : 89215.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ScanTypeArgumentList(bool):int:this
         -44 (-1.89 % of base) : 5569.dasm - Microsoft.CodeAnalysis.VisualBasic.Symbols.SourceMemberContainerTypeSymbol:CheckForOverloadsErrors(Microsoft.CodeAnalysis.DiagnosticBag):this
         -44 (-0.87 % of base) : 44604.dasm - System.Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo)
         -40 (-4.95 % of base) : 79997.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:GetEnumOperations(int,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.BinaryOperatorSignature]):this
         -40 (-0.86 % of base) : 180141.dasm - System.Globalization.FormatProvider+Number:NumberToStringFormat(byref,byref,System.ReadOnlySpan`1[ushort],System.Globalization.NumberFormatInfo)
         -36 (-1.41 % of base) : 177163.dasm - Microsoft.CSharp.RuntimeBinder.Errors.ErrorHandling:Error(int,Microsoft.CSharp.RuntimeBinder.Errors.ErrArg[]):Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
         -36 (-3.72 % of base) : 117189.dasm - Microsoft.VisualBasic.Conversion:HexOrOctValue(System.String,int):double
         -36 (-3.14 % of base) : 44840.dasm - System.TimeZoneInfo:TransitionTimeToDateTime(int,System.TimeZoneInfo+TransitionTime):System.DateTime
         -32 (-1.91 % of base) : 117549.dasm - Microsoft.VisualBasic.CompilerServices.OverloadResolution:CollectOverloadCandidates(System.Reflection.MemberInfo[],System.Object[],int,System.String[],System.Type[],bool,System.Type,byref,byref,Microsoft.VisualBasic.CompilerServices.Symbols+Container):System.Collections.Generic.List`1[Microsoft.VisualBasic.CompilerServices.Symbols+Method]
         -32 (-2.29 % of base) : 28590.dasm - System.Convert:TryFromBase64Chars(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte],byref):bool
         -32 (-6.25 % of base) : 175513.dasm - System.Drawing.Imaging.BitmapData:set_PixelFormat(int):this
         -32 (-7.27 % of base) : 41832.dasm - System.Globalization.GregorianCalendarHelper:IsLeapDay(int,int,int,int):bool:this
         -32 (-1.68 % of base) : 180957.dasm - System.UriHelper:UnescapeString(ulong,int,int,byref,ushort,ushort,ushort,int,System.UriParser,bool)

Top method regressions (percentages):
           8 (5.71 % of base) : 18473.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
           8 (5.00 % of base) : 162723.dasm - System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
           8 (4.55 % of base) : 143288.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           8 (4.55 % of base) : 124935.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
           4 (4.35 % of base) : 18453.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsWhitespaceNotAscii(ushort):bool
          12 (4.35 % of base) : 46310.dasm - System.Globalization.IdnMapping:ValidateStd3(ushort,bool)
           8 (4.08 % of base) : 187886.dasm - System.Security.Cryptography.Cose.KnownCoseAlgorithms:ThrowIfNotSupported(long)
           8 (2.56 % of base) : 95766.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.GeneratedNames:TryParseGeneratedName(System.String,byref,byref,byref):bool
           8 (2.06 % of base) : 186551.dasm - System.Net.WebSockets.ManagedWebSocket:TryValidateUtf8(System.Span`1[ubyte],bool,System.Net.WebSockets.ManagedWebSocket+Utf8MessageState):bool
           4 (1.39 % of base) : 89486.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer:AdvanceIfMatches(ushort):bool:this
           8 (0.78 % of base) : 113503.dasm - System.Formats.Tar.TarReader:TryProcessGnuMetadataHeader(System.Formats.Tar.TarHeader,bool,byref):bool:this
           8 (0.47 % of base) : 113313.dasm - System.Formats.Tar.TarReader+<TryProcessGnuMetadataHeaderAsync>d__19:MoveNext():this
           4 (0.26 % of base) : 94535.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)

Top method improvements (percentages):
         -20 (-33.33 % of base) : 167777.dasm - ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool
         -20 (-33.33 % of base) : 79890.dasm - Microsoft.CodeAnalysis.CSharp.ConversionsBase:IsValidExtensionMethodThisArgConversion(Microsoft.CodeAnalysis.CSharp.Conversion):bool
         -16 (-33.33 % of base) : 123848.dasm - Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int
         -16 (-33.33 % of base) : 124616.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool
         -16 (-33.33 % of base) : 143260.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool
         -16 (-33.33 % of base) : 141808.dasm - Microsoft.CodeAnalysis.UnicodeCharacterUtilities:IsCombiningChar(int):bool
         -16 (-33.33 % of base) : 122051.dasm - Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
         -16 (-33.33 % of base) : 166250.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:IsCompleteChain(Interop+Crypto+X509VerifyStatusCode):bool
         -16 (-30.77 % of base) : 97096.dasm - Microsoft.CodeAnalysis.CSharp.CodeGen.CodeGenerator:IsFloat(int):bool
         -16 (-30.77 % of base) : 80155.dasm - Microsoft.CodeAnalysis.CSharp.MemberAnalysisResult:get_IsValid():bool:this
         -20 (-29.41 % of base) : 157854.dasm - System.Xml.XmlDictionaryReader:IsTextNode(int):bool:this
         -16 (-28.57 % of base) : 83710.dasm - Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
         -16 (-28.57 % of base) : 169250.dasm - Newtonsoft.Json.Utilities.JsonTokenUtils:IsPrimitiveToken(int):bool
         -16 (-28.57 % of base) : 76192.dasm - System.Xml.XmlDocument:IsTextNode(int):bool
         -12 (-27.27 % of base) : 126817.dasm - Microsoft.CodeAnalysis.Text.SourceHashAlgorithms:IsSupportedAlgorithm(int):bool
         -24 (-27.27 % of base) : 45295.dasm - System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
         -16 (-26.67 % of base) : 160423.dasm - System.Xml.XmlBufferReader:IsAttrChar(int):bool
         -16 (-26.67 % of base) : 78400.dasm - System.Xml.Xsl.XPath.XPathParser`1[int]:IsReverseAxis(int):bool
         -16 (-26.67 % of base) : 78100.dasm - System.Xml.Xsl.XPath.XPathParser`1[System.__Canon]:IsReverseAxis(int):bool
         -20 (-26.32 % of base) : 183026.dasm - System.Runtime.Serialization.CodeExporter:IsValid(ushort):bool


@a74nh
Copy link
Contributor Author

a74nh commented Mar 17, 2023

There are now a bunch of X86 failures, but the logs indicate a failure in azure to download? Either way, this patch doesn't touch anything X86

@jakobbotsch
Copy link
Member

/azp run runtime-coreclr superpmi-diffs, runtime-coreclr superpmi-replay

@azure-pipelines
Copy link

Azure Pipelines successfully started running 2 pipeline(s).

@jakobbotsch
Copy link
Member

Sorry @a74nh, I think you got caught up in a JIT-EE GUID update. I will rerun the CI legs to get the final diffs, but I don't expect to see any problems. Diffs look great now.

@jakobbotsch
Copy link
Member

Thanks again @a74nh!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI community-contribution Indicates that the PR has been added by a community member
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants