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

Use cinv and cneg instead of csel when possible #84926

Merged
merged 17 commits into from May 25, 2023

Conversation

SwapnilGaikwad
Copy link
Contributor

This is similar to #82031 where cinv is emitted instead of csel when the trueVal == ~falseVal.

Note: Unfortunately, asmdiffs show no matches for this pattern as of now. Thus, I'm not sure whether we can add this optimisation or not.

@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 Apr 17, 2023
@SwapnilGaikwad
Copy link
Contributor Author

@kunalspathak @jakobbotsch

@jakobbotsch
Copy link
Member

Note: Unfortunately, asmdiffs show no matches for this pattern as of now. Thus, I'm not sure whether we can add this optimisation or not.

I think that without diffs it's hard to justify adding the transformation and new type of node.

@tkekalainen
Copy link
Contributor

Looking at the diffs I see a lot of the following:

             mvn     w2, w0 <--- ???
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w2, ge

It looks like the value is always inverted first, and then conditionally inverted back to the original value, instead of just conditionally inverting the original value when it is necessary.

@SwapnilGaikwad
Copy link
Contributor Author

SwapnilGaikwad commented Apr 18, 2023

             mvn     w2, w0 <--- ???
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w2, ge

Thanks! I'll check this. This may explain the zero asm diffs.

@SwapnilGaikwad
Copy link
Contributor Author

It looks like the value is always inverted first, and then conditionally inverted back to the original value, instead of just conditionally inverting the original value when it is necessary.

You're right. I was double inverting as a result of opposite value for shouldReverseCondition. It's the same confusion that we encountered before for cinc where csel is based on position while cinv is inverting on a condition.

The fix also improved the asmdiffs. We see a few now.

Diffs are based on 1,677,851 contexts (504,004 MinOpts, 1,173,847 FullOpts).

MISSED contexts: 3 (0.00%)

Overall (-2,432 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 20,052,316 -8
benchmarks.run_pgo.linux.arm64.checked.mch 78,943,444 -2,056
benchmarks.run_tiered.linux.arm64.checked.mch 23,007,908 -8
coreclr_tests.run.linux.arm64.checked.mch 540,914,504 -276
libraries.crossgen2.linux.arm64.checked.mch 44,163,324 -40
libraries.pmi.linux.arm64.checked.mch 66,092,864 -36
libraries_tests.pmi.linux.arm64.checked.mch 161,038,516 -8
MinOpts (+0 bytes)
Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm64.checked.mch 367,647,992 +0
FullOpts (-2,432 bytes)
Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 18,877,792 -8
benchmarks.run_pgo.linux.arm64.checked.mch 55,668,668 -2,056
benchmarks.run_tiered.linux.arm64.checked.mch 7,302,156 -8
coreclr_tests.run.linux.arm64.checked.mch 173,266,512 -276
libraries.crossgen2.linux.arm64.checked.mch 44,161,816 -40
libraries.pmi.linux.arm64.checked.mch 64,578,680 -36
libraries_tests.pmi.linux.arm64.checked.mch 155,528,376 -8
Example diffs
benchmarks.run.linux.arm64.checked.mch
-4 (-1.30%) : 332.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -11,7 +11,7 @@
 ;  V01 TypeCtx      [V01,T03] (  5,  4   )    long  ->  x20         single-def
 ;  V02 arg1         [V02,T02] (  4,  6.50)     ref  ->  x19         class-hnd single-def
 ;  V03 loc0         [V03,T09] (  4,  3   )     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T08] (  7,  3.50)     int  ->   x0        
+;  V04 loc1         [V04,T08] (  6,  3   )     int  ->   x0        
 ;  V05 loc2         [V05,T06] (  3,  5   )     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T00] (  9, 18.50)     int  ->  x24        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -69,9 +69,8 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w23, [x22, #0x08]
@@ -82,7 +81,7 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             bne     G_M33817_IG06
             cmp     w0, #1
             bvs     G_M33817_IG13
-						;; size=76 bbWeight=0.50 PerfScore 9.50
+						;; size=72 bbWeight=0.50 PerfScore 9.25
 G_M33817_IG06:        ; bbWeight=0.50, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w24, w1, w2, w0
@@ -160,7 +159,7 @@ G_M33817_IG15:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 308, prolog size 24, PerfScore 164.55, instruction count 77, allocated bytes for code 308 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 304, prolog size 24, PerfScore 163.90, instruction count 76, allocated bytes for code 304 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -171,7 +170,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 77 (0x0004d) Actual length = 308 (0x000134)
+  Function Length   : 76 (0x0004c) Actual length = 304 (0x000130)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.00%) : 343.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -10,7 +10,7 @@
 ;  V00 this         [V00,T04] (  7,  7   )     ref  ->  x20         this class-hnd single-def
 ;  V01 arg1         [V01,T03] (  5,  8   )     ref  ->  x19         class-hnd single-def
 ;  V02 arg2         [V02,T10] (  3,  3   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T06] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T06] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T14] (  4,  4   )     ref  ->  x23         class-hnd single-def
 ;  V05 loc2         [V05,T00] ( 10, 32   )     int  ->  x25        
 ;  V06 loc3         [V06,T01] (  4, 24   )     ref  ->   x0         class-hnd
@@ -76,9 +76,8 @@ G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -89,7 +88,7 @@ G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG06
             cmp     w0, #1
             bvs     G_M58385_IG15
-						;; size=72 bbWeight=1 PerfScore 18.50
+						;; size=68 bbWeight=1 PerfScore 18.00
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -190,7 +189,7 @@ G_M58385_IG17:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 400, prolog size 28, PerfScore 249.95, instruction count 100, allocated bytes for code 400 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 396, prolog size 28, PerfScore 249.05, instruction count 99, allocated bytes for code 396 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -201,7 +200,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 100 (0x00064) Actual length = 400 (0x000190)
+  Function Length   : 99 (0x00063) Actual length = 396 (0x00018c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
benchmarks.run_pgo.linux.arm64.checked.mch
-4 (-1.28%) : 103196.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -13,7 +13,7 @@
 ;  V01 TypeCtx      [V01,T00] (  5,  3   )    long  ->  x19         single-def
 ;  V02 arg1         [V02,T02] (  4,  2   )     ref  ->  x20         class-hnd single-def
 ;  V03 loc0         [V03,T03] (  4,  2   )     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T05] (  7,  0   )     int  ->   x0        
+;  V04 loc1         [V04,T05] (  6,  0   )     int  ->   x0        
 ;  V05 loc2         [V05,T06] (  5,  0   )     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T04] (  9,  0   )     int  ->  x23        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -65,9 +65,8 @@ G_M33817_IG04:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=300000
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w2, [x22, #0x08]
@@ -77,7 +76,7 @@ G_M33817_IG04:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=300000
             bne     G_M33817_IG05
             cmp     w0, #1
             bvs     G_M33817_IG11
-						;; size=72 bbWeight=0 PerfScore 0.00
+						;; size=68 bbWeight=0 PerfScore 0.00
 G_M33817_IG05:        ; bbWeight=0, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w23, w1, w2, w0
@@ -155,7 +154,7 @@ G_M33817_IG13:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 312, prolog size 24, PerfScore 48.20, instruction count 78, allocated bytes for code 312 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 308, prolog size 24, PerfScore 47.80, instruction count 77, allocated bytes for code 308 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -166,7 +165,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 78 (0x0004e) Actual length = 312 (0x000138)
+  Function Length   : 77 (0x0004d) Actual length = 308 (0x000134)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.96%) : 4342.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -12,7 +12,7 @@
 ;  V00 this         [V00,T01] (  7,  4   )     ref  ->  x19         this class-hnd single-def
 ;  V01 arg1         [V01,T04] (  7,  3   )     ref  ->  x20         class-hnd single-def
 ;  V02 arg2         [V02,T06] (  3,  2   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T00] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T00] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T10] (  4,  2   )     ref  ->  x23         class-hnd single-def
 ;  V05 loc2         [V05,T13] ( 10,  1   )     int  ->  x25        
 ;  V06 loc3         [V06,T14] (  4,  0   )     ref  ->   x0         class-hnd
@@ -76,9 +76,8 @@ G_M58385_IG04:        ; bbWeight=1, gcrefRegs=380001 {x0 x19 x20 x21}, byrefRegs
             ; gcrRegs -[x0]
 						;; size=24 bbWeight=1 PerfScore 8.50
 G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x23, [x19, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -89,7 +88,7 @@ G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG06
             cmp     w0, #1
             bvs     G_M58385_IG07
-						;; size=48 bbWeight=1 PerfScore 12.50
+						;; size=44 bbWeight=1 PerfScore 12.00
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -199,7 +198,7 @@ G_M58385_IG15:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 416, prolog size 28, PerfScore 92.10, instruction count 104, allocated bytes for code 416 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 412, prolog size 28, PerfScore 91.20, instruction count 103, allocated bytes for code 412 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -210,7 +209,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 104 (0x00068) Actual length = 416 (0x0001a0)
+  Function Length   : 103 (0x00067) Actual length = 412 (0x00019c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.81%) : 86722.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -13,7 +13,7 @@
 ;  V01 TypeCtx      [V01,T00] (  4,  3   )    long  ->  x19         single-def
 ;  V02 arg1         [V02,T02] (  8,  2.67)     ref  ->  x20         class-hnd single-def
 ;  V03 loc0         [V03,T05] (  4,  2.67)     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T03] (  7,  4.67)     int  ->   x0        
+;  V04 loc1         [V04,T03] (  6,  4.00)     int  ->   x0        
 ;  V05 loc2         [V05,T07] (  5,  1.33)     ref  ->  x24         class-hnd single-def
 ;  V06 loc3         [V06,T09] (  9,  0.67)     int  ->  x25        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -88,9 +88,8 @@ G_M33817_IG05:        ; bbWeight=0.67, gcrefRegs=300001 {x0 x20 x21}, byrefRegs=
             ; gcr arg pop 0
 						;; size=24 bbWeight=0.67 PerfScore 5.67
 G_M33817_IG06:        ; bbWeight=0.67, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x24, [x21, #0x08]
             ; gcrRegs +[x24]
             ldr     w1, [x24, #0x08]
@@ -100,7 +99,7 @@ G_M33817_IG06:        ; bbWeight=0.67, gcrefRegs=300000 {x20 x21}, byrefRegs=000
             bne     G_M33817_IG07
             cmp     w0, #1
             bvs     G_M33817_IG19
-						;; size=44 bbWeight=0.67 PerfScore 8.00
+						;; size=40 bbWeight=0.67 PerfScore 7.67
 G_M33817_IG07:        ; bbWeight=0.67, gcrefRegs=1300000 {x20 x21 x24}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -257,7 +256,7 @@ G_M33817_IG22:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 492, prolog size 36, PerfScore 88.87, instruction count 123, allocated bytes for code 492 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 488, prolog size 36, PerfScore 88.13, instruction count 122, allocated bytes for code 488 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -268,7 +267,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 123 (0x0007b) Actual length = 492 (0x0001ec)
+  Function Length   : 122 (0x0007a) Actual length = 488 (0x0001e8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.48%) : 119671.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -12,7 +12,7 @@
 ;  V00 this         [V00,T09] (  7,  7   )     ref  ->  x20         this class-hnd single-def
 ;  V01 arg1         [V01,T05] ( 14, 11.50)     ref  ->  x19         class-hnd single-def
 ;  V02 arg2         [V02,T15] (  3,  3   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T10] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T10] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T20] (  4,  4   )     ref  ->  x25         class-hnd single-def
 ;  V05 loc2         [V05,T03] ( 15, 28.55)     int  ->  x27        
 ;  V06 loc3         [V06,T07] ( 12, 11.10)     ref  ->   x0         class-hnd
@@ -125,9 +125,8 @@ G_M58385_IG05:        ; bbWeight=0.50, gcrefRegs=380001 {x0 x19 x20 x21}, byrefR
             ; gcr arg pop 0
 						;; size=48 bbWeight=0.50 PerfScore 7.25
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x25, [x20, #0x08]
             ; gcrRegs +[x25]
             ldr     w26, [x25, #0x08]
@@ -138,7 +137,7 @@ G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG07
             cmp     w0, #1
             bvs     G_M58385_IG31
-						;; size=48 bbWeight=1 PerfScore 12.50
+						;; size=44 bbWeight=1 PerfScore 12.00
 G_M58385_IG07:        ; bbWeight=1, gcrefRegs=2380000 {x19 x20 x21 x25}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w27, w2, w1, w0
@@ -416,7 +415,7 @@ G_M58385_IG37:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 828, prolog size 44, PerfScore 498.92, instruction count 207, allocated bytes for code 828 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 824, prolog size 44, PerfScore 498.02, instruction count 206, allocated bytes for code 824 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -427,7 +426,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 207 (0x000cf) Actual length = 828 (0x00033c)
+  Function Length   : 206 (0x000ce) Actual length = 824 (0x000338)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.48%) : 54199.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -12,7 +12,7 @@
 ;  V00 this         [V00,T09] (  7,  7   )     ref  ->  x20         this class-hnd single-def
 ;  V01 arg1         [V01,T05] ( 14, 12.46)     ref  ->  x19         class-hnd single-def
 ;  V02 arg2         [V02,T15] (  3,  3   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T10] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T10] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T21] (  4,  4   )     ref  ->  x25         class-hnd single-def
 ;  V05 loc2         [V05,T03] ( 15, 81.11)     int  ->  x27        
 ;  V06 loc3         [V06,T07] ( 12, 10.86)     ref  ->   x0         class-hnd
@@ -125,9 +125,8 @@ G_M58385_IG05:        ; bbWeight=0.50, gcrefRegs=380001 {x0 x19 x20 x21}, byrefR
             ; gcr arg pop 0
 						;; size=48 bbWeight=0.50 PerfScore 7.25
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x25, [x20, #0x08]
             ; gcrRegs +[x25]
             ldr     w26, [x25, #0x08]
@@ -138,7 +137,7 @@ G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG07
             cmp     w0, #1
             bvs     G_M58385_IG31
-						;; size=48 bbWeight=1 PerfScore 12.50
+						;; size=44 bbWeight=1 PerfScore 12.00
 G_M58385_IG07:        ; bbWeight=1, gcrefRegs=2380000 {x19 x20 x21 x25}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w27, w2, w1, w0
@@ -417,7 +416,7 @@ G_M58385_IG37:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 832, prolog size 44, PerfScore 595.25, instruction count 208, allocated bytes for code 832 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 828, prolog size 44, PerfScore 594.35, instruction count 207, allocated bytes for code 828 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -428,7 +427,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 208 (0x000d0) Actual length = 832 (0x000340)
+  Function Length   : 207 (0x000cf) Actual length = 828 (0x00033c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.48%) : 112597.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -12,7 +12,7 @@
 ;  V00 this         [V00,T09] (  7,  7   )     ref  ->  x20         this class-hnd single-def
 ;  V01 arg1         [V01,T08] ( 13,  9.24)     ref  ->  x19         class-hnd single-def
 ;  V02 arg2         [V02,T16] (  3,  3   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T10] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T10] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T21] (  4,  4   )     ref  ->  x23         class-hnd single-def
 ;  V05 loc2         [V05,T06] ( 15, 14.13)     int  ->  x25        
 ;  V06 loc3         [V06,T07] ( 11, 11.86)     ref  ->   x0         class-hnd
@@ -124,9 +124,8 @@ G_M58385_IG05:        ; bbWeight=0.50, gcrefRegs=380001 {x0 x19 x20 x21}, byrefR
             ; gcr arg pop 0
 						;; size=48 bbWeight=0.50 PerfScore 7.25
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -137,7 +136,7 @@ G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG07
             cmp     w0, #1
             bvs     G_M58385_IG29
-						;; size=48 bbWeight=1 PerfScore 12.50
+						;; size=44 bbWeight=1 PerfScore 12.00
 G_M58385_IG07:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -405,7 +404,7 @@ G_M58385_IG35:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 836, prolog size 40, PerfScore 453.97, instruction count 209, allocated bytes for code 836 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 832, prolog size 40, PerfScore 453.07, instruction count 208, allocated bytes for code 832 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -416,7 +415,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 209 (0x000d1) Actual length = 836 (0x000344)
+  Function Length   : 208 (0x000d0) Actual length = 832 (0x000340)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
benchmarks.run_tiered.linux.arm64.checked.mch
-4 (-1.30%) : 4421.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -12,7 +12,7 @@
 ;  V01 TypeCtx      [V01,T03] (  5,  4   )    long  ->  x20         single-def
 ;  V02 arg1         [V02,T02] (  4,  6.50)     ref  ->  x19         class-hnd single-def
 ;  V03 loc0         [V03,T09] (  4,  3   )     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T08] (  7,  3.50)     int  ->   x0        
+;  V04 loc1         [V04,T08] (  6,  3   )     int  ->   x0        
 ;  V05 loc2         [V05,T06] (  3,  5   )     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T00] (  9, 18.50)     int  ->  x24        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -70,9 +70,8 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w23, [x22, #0x08]
@@ -83,7 +82,7 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             bne     G_M33817_IG06
             cmp     w0, #1
             bvs     G_M33817_IG13
-						;; size=76 bbWeight=0.50 PerfScore 9.50
+						;; size=72 bbWeight=0.50 PerfScore 9.25
 G_M33817_IG06:        ; bbWeight=0.50, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w24, w1, w2, w0
@@ -161,7 +160,7 @@ G_M33817_IG15:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 308, prolog size 24, PerfScore 164.55, instruction count 77, allocated bytes for code 308 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 304, prolog size 24, PerfScore 163.90, instruction count 76, allocated bytes for code 304 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -172,7 +171,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 77 (0x0004d) Actual length = 308 (0x000134)
+  Function Length   : 76 (0x0004c) Actual length = 304 (0x000130)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.00%) : 5039.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -11,7 +11,7 @@
 ;  V00 this         [V00,T04] (  7,  7   )     ref  ->  x20         this class-hnd single-def
 ;  V01 arg1         [V01,T03] (  5,  8   )     ref  ->  x19         class-hnd single-def
 ;  V02 arg2         [V02,T10] (  3,  3   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T06] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T06] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T14] (  4,  4   )     ref  ->  x23         class-hnd single-def
 ;  V05 loc2         [V05,T00] ( 10, 32   )     int  ->  x25        
 ;  V06 loc3         [V06,T01] (  4, 24   )     ref  ->   x0         class-hnd
@@ -77,9 +77,8 @@ G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -90,7 +89,7 @@ G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG06
             cmp     w0, #1
             bvs     G_M58385_IG15
-						;; size=72 bbWeight=1 PerfScore 18.50
+						;; size=68 bbWeight=1 PerfScore 18.00
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -191,7 +190,7 @@ G_M58385_IG17:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 400, prolog size 28, PerfScore 249.95, instruction count 100, allocated bytes for code 400 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 396, prolog size 28, PerfScore 249.05, instruction count 99, allocated bytes for code 396 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -202,7 +201,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 100 (0x00064) Actual length = 400 (0x000190)
+  Function Length   : 99 (0x00063) Actual length = 396 (0x00018c)
   ---- 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
-4 (-0.65%) : 459.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -12,7 +12,7 @@
 ;  V00 this         [V00,T00] (  7,  7   )     ref  ->  x19         this class-hnd single-def
 ;  V01 arg1         [V01,T03] ( 10,  4.36)     ref  ->  x20         class-hnd single-def
 ;  V02 arg2         [V02,T08] (  3,  3   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T02] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T02] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T13] (  8,  4.26)     ref  ->  x23         class-hnd single-def
 ;  V05 loc2         [V05,T07] ( 15,  5.01)     int  ->  x24        
 ;  V06 loc3         [V06,T15] (  8,  3.00)     ref  ->   x0         class-hnd
@@ -89,9 +89,8 @@ G_M58385_IG06:        ; bbWeight=0.95, gcrefRegs=380001 {x0 x19 x20 x21}, byrefR
             ; gcrRegs -[x0]
 						;; size=20 bbWeight=0.95 PerfScore 5.23
 G_M58385_IG07:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x23, [x19, #0x08]
             ; gcrRegs +[x23]
             ldr     w1, [x23, #0x08]
@@ -101,7 +100,7 @@ G_M58385_IG07:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG08
             cmp     w0, #1
             bvs     G_M58385_IG25
-						;; size=44 bbWeight=1 PerfScore 12.00
+						;; size=40 bbWeight=1 PerfScore 11.50
 G_M58385_IG08:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w24, w2, w1, w0
@@ -294,7 +293,7 @@ G_M58385_IG29:        ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 612, prolog size 28, PerfScore 179.05, instruction count 153, allocated bytes for code 612 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 608, prolog size 28, PerfScore 178.15, instruction count 152, allocated bytes for code 608 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -305,7 +304,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 153 (0x00099) Actual length = 612 (0x000264)
+  Function Length   : 152 (0x00098) Actual length = 608 (0x000260)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.60%) : 343233.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -13,7 +13,7 @@
 ;  V01 TypeCtx      [V01,T03] (  4,  3   )    long  ->  x20         single-def
 ;  V02 arg1         [V02,T00] ( 10,  4.86)     ref  ->  x19         class-hnd single-def
 ;  V03 loc0         [V03,T10] (  4,  3.52)     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T01] (  7,  6.20)     int  ->   x0        
+;  V04 loc1         [V04,T01] (  6,  5.31)     int  ->   x0        
 ;  V05 loc2         [V05,T12] (  5,  3.31)     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T06] (  9,  4.37)     int  ->  x23        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -183,9 +183,8 @@ G_M33817_IG17:        ; bbWeight=0.84, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=
             ; gcr arg pop 0
 						;; size=24 bbWeight=0.84 PerfScore 7.16
 G_M33817_IG18:        ; bbWeight=0.89, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w2, [x22, #0x08]
@@ -195,7 +194,7 @@ G_M33817_IG18:        ; bbWeight=0.89, gcrefRegs=280000 {x19 x21}, byrefRegs=000
             bne     G_M33817_IG19
             cmp     w0, #1
             bvs     G_M33817_IG29
-						;; size=44 bbWeight=0.89 PerfScore 10.63
+						;; size=40 bbWeight=0.89 PerfScore 10.19
 G_M33817_IG19:        ; bbWeight=0.89, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w23, w1, w2, w0
@@ -326,7 +325,7 @@ G_M33817_IG32:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 664, prolog size 40, PerfScore 189.47, instruction count 166, allocated bytes for code 664 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 660, prolog size 40, PerfScore 188.63, instruction count 165, allocated bytes for code 660 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -337,7 +336,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 166 (0x000a6) Actual length = 664 (0x000298)
+  Function Length   : 165 (0x000a5) Actual length = 660 (0x000294)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.60%) : 424961.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -13,7 +13,7 @@
 ;  V01 TypeCtx      [V01,T03] (  4,  3   )    long  ->  x20         single-def
 ;  V02 arg1         [V02,T00] ( 10,  4.86)     ref  ->  x19         class-hnd single-def
 ;  V03 loc0         [V03,T10] (  4,  3.52)     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T01] (  7,  6.20)     int  ->   x0        
+;  V04 loc1         [V04,T01] (  6,  5.31)     int  ->   x0        
 ;  V05 loc2         [V05,T12] (  5,  3.31)     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T06] (  9,  4.37)     int  ->  x23        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -183,9 +183,8 @@ G_M33817_IG17:        ; bbWeight=0.84, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=
             ; gcr arg pop 0
 						;; size=24 bbWeight=0.84 PerfScore 7.16
 G_M33817_IG18:        ; bbWeight=0.89, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w2, [x22, #0x08]
@@ -195,7 +194,7 @@ G_M33817_IG18:        ; bbWeight=0.89, gcrefRegs=280000 {x19 x21}, byrefRegs=000
             bne     G_M33817_IG19
             cmp     w0, #1
             bvs     G_M33817_IG29
-						;; size=44 bbWeight=0.89 PerfScore 10.63
+						;; size=40 bbWeight=0.89 PerfScore 10.19
 G_M33817_IG19:        ; bbWeight=0.89, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w23, w1, w2, w0
@@ -326,7 +325,7 @@ G_M33817_IG32:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 664, prolog size 40, PerfScore 189.47, instruction count 166, allocated bytes for code 664 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 660, prolog size 40, PerfScore 188.63, instruction count 165, allocated bytes for code 660 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -337,7 +336,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 166 (0x000a6) Actual length = 664 (0x000298)
+  Function Length   : 165 (0x000a5) Actual length = 660 (0x000294)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.60%) : 360.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -13,7 +13,7 @@
 ;  V01 TypeCtx      [V01,T05] (  4,  3   )    long  ->  x20         single-def
 ;  V02 arg1         [V02,T01] ( 10,  4.68)     ref  ->  x19         class-hnd single-def
 ;  V03 loc0         [V03,T12] (  4,  3.52)     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T02] (  7,  6.20)     int  ->   x0        
+;  V04 loc1         [V04,T02] (  6,  5.31)     int  ->   x0        
 ;  V05 loc2         [V05,T13] (  5,  3.31)     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T09] (  9,  4.37)     int  ->  x23        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -87,9 +87,8 @@ G_M33817_IG06:        ; bbWeight=0.84, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=
             ; gcr arg pop 0
 						;; size=20 bbWeight=0.84 PerfScore 4.63
 G_M33817_IG07:        ; bbWeight=0.89, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w2, [x22, #0x08]
@@ -99,7 +98,7 @@ G_M33817_IG07:        ; bbWeight=0.89, gcrefRegs=280000 {x19 x21}, byrefRegs=000
             bne     G_M33817_IG08
             cmp     w0, #1
             bvs     G_M33817_IG32
-						;; size=44 bbWeight=0.89 PerfScore 10.63
+						;; size=40 bbWeight=0.89 PerfScore 10.19
 G_M33817_IG08:        ; bbWeight=0.89, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w23, w1, w2, w0
@@ -333,7 +332,7 @@ G_M33817_IG35:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 672, prolog size 40, PerfScore 188.14, instruction count 168, allocated bytes for code 672 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 668, prolog size 40, PerfScore 187.30, instruction count 167, allocated bytes for code 668 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -344,7 +343,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 168 (0x000a8) Actual length = 672 (0x0002a0)
+  Function Length   : 167 (0x000a7) Actual length = 668 (0x00029c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+0 (0.00%) : 354527.dasm - test:Main():int

No diffs found?

+0 (0.00%) : 583778.dasm - test:Main():int

No diffs found?

libraries.crossgen2.linux.arm64.checked.mch
-4 (-12.50%) : 29340.dasm - System.Index:get_Value():int:this
@@ -9,7 +9,7 @@
 ;
 ;  V00 this         [V00,T00] (  3,  3   )   byref  ->   x0         this single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+00H]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V02 cse0         [V02,T01] (  4,  4   )     int  ->   x0         "CSE - aggressive"
+;  V02 cse0         [V02,T01] (  3,  3   )     int  ->   x0         "CSE - aggressive"
 ;
 ; Lcl frame size = 0
 
@@ -21,16 +21,15 @@ G_M18211_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre
             ; byrRegs +[x0]
             ldr     w0, [x0]
             ; byrRegs -[x0]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
-						;; size=16 bbWeight=1 PerfScore 4.50
+            cinv    w0, w0, lt
+						;; size=12 bbWeight=1 PerfScore 4.00
 G_M18211_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 32, prolog size 8, PerfScore 11.20, instruction count 8, allocated bytes for code 32 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
+; Total bytes of code 28, prolog size 8, PerfScore 10.30, instruction count 7, allocated bytes for code 28 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
 ; ============================================================
 
 Unwind Info:
@@ -41,7 +40,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
+  Function Length   : 7 (0x00007) Actual length = 28 (0x00001c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-3.57%) : 30324.dasm - System.OrdinalComparer:GetHashCode():int:this
@@ -9,7 +9,7 @@
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  3,  3   )     ref  ->  x19         this class-hnd single-def
-;  V01 loc0         [V01,T02] (  3,  3   )     int  ->   x0        
+;  V01 loc0         [V01,T02] (  2,  2   )     int  ->   x0        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+00H]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T03] (  3,  3   )    long  ->   x2         "Inline stloc first use temp"
 ;  V04 cse0         [V04,T01] (  3,  3   )     ref  ->   x0         "CSE - aggressive"
@@ -48,17 +48,16 @@ G_M30928_IG02:        ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
             blr     x4
             ; byrRegs -[x0]
             ldrb    w1, [x19, #0x08]
-            mvn     w2, w0
             cmp     w1, #0
-            csel    w0, w2, w0, ne
-						;; size=84 bbWeight=1 PerfScore 30.00
+            cinv    w0, w0, ne
+						;; size=80 bbWeight=1 PerfScore 29.50
 G_M30928_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
             ret     lr
 						;; size=12 bbWeight=1 PerfScore 4.00
 
-; Total bytes of code 112, prolog size 12, PerfScore 48.20, instruction count 28, allocated bytes for code 112 (MethodHash=f0e4872f) for method System.OrdinalComparer:GetHashCode():int:this
+; Total bytes of code 108, prolog size 12, PerfScore 47.30, instruction count 27, allocated bytes for code 108 (MethodHash=f0e4872f) for method System.OrdinalComparer:GetHashCode():int:this
 ; ============================================================
 
 Unwind Info:
@@ -69,7 +68,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 28 (0x0001c) Actual length = 112 (0x000070)
+  Function Length   : 27 (0x0001b) Actual length = 108 (0x00006c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-2.38%) : 88117.dasm - Utilities.IndexMap:SourceOf(int):int:this
@@ -10,7 +10,7 @@
 ;  V00 this         [V00,T00] (  5,  4.50)     ref  ->  x19         this class-hnd single-def
 ;  V01 arg1         [V01,T01] (  5,  4   )     int  ->   x1         single-def
 ;  V02 loc0         [V02,T04] (  5,  4   )     int  ->   x0         single-def
-;  V03 loc1         [V03,T03] (  9,  4.50)     int  ->   x0        
+;  V03 loc1         [V03,T03] (  8,  4   )     int  ->   x0        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [sp+00H]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V05 tmp1         [V05,T02] (  3,  6   )     ref  ->   x2         single-def "arr expr"
 ;* V06 tmp2         [V06,T09] (  0,  0   )     ref  ->  zero-ref    single-def "arr expr"
@@ -68,12 +68,11 @@ G_M29209_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=808
             ldr     x2, [x11]
             blr     x2
             ; gcrRegs -[x0]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             sub     w0, w0, #1
             str     w0, [x19, #0x14]
-						;; size=44 bbWeight=0.50 PerfScore 4.50
+						;; size=40 bbWeight=0.50 PerfScore 4.25
 G_M29209_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
@@ -88,7 +87,7 @@ G_M29209_IG07:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             brk_unix #0
 						;; size=20 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 168, prolog size 12, PerfScore 47.55, instruction count 42, allocated bytes for code 168 (MethodHash=5f7a8de6) for method Utilities.IndexMap:SourceOf(int):int:this
+; Total bytes of code 164, prolog size 12, PerfScore 46.90, instruction count 41, allocated bytes for code 164 (MethodHash=5f7a8de6) for method Utilities.IndexMap:SourceOf(int):int:this
 ; ============================================================
 
 Unwind Info:
@@ -99,7 +98,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 42 (0x0002a) Actual length = 168 (0x0000a8)
+  Function Length   : 41 (0x00029) Actual length = 164 (0x0000a4)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-8 (-1.14%) : 30020.dasm - System.Range:ToString():System.String:this
@@ -67,7 +67,7 @@
 ;* V56 tmp47        [V56,T36] (  0,  0   )     int  ->  zero-ref    V01._length(offs=0x08) P-INDEP "field V01._length (fldOffset=0x8)"
 ;* V57 tmp48        [V57    ] (  0,  0   )   byref  ->  zero-ref    V05._reference(offs=0x00) P-INDEP "field V05._reference (fldOffset=0x0)"
 ;* V58 tmp49        [V58    ] (  0,  0   )     int  ->  zero-ref    V05._length(offs=0x08) P-INDEP "field V05._length (fldOffset=0x8)"
-;  V59 tmp50        [V59,T01] ( 12, 12   )     int  ->  registers   V06._value(offs=0x00) P-INDEP "field V06._value (fldOffset=0x0)"
+;  V59 tmp50        [V59,T01] ( 10, 10   )     int  ->  registers   V06._value(offs=0x00) P-INDEP "field V06._value (fldOffset=0x0)"
 ;* V60 tmp51        [V60    ] (  0,  0   )   byref  ->  zero-ref    V08._reference(offs=0x00) P-INDEP "field V08._reference (fldOffset=0x0)"
 ;* V61 tmp52        [V61    ] (  0,  0   )     int  ->  zero-ref    V08._length(offs=0x08) P-INDEP "field V08._length (fldOffset=0x8)"
 ;  V62 tmp53        [V62,T19] (  2,  2   )   byref  ->  x20         single-def V10._reference(offs=0x00) P-INDEP "field V10._reference (fldOffset=0x0)"
@@ -132,9 +132,8 @@ G_M59075_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19
 						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M59075_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref, isz
             ldr     w22, [x19]
-            mvn     w1, w22
             cmp     w22, #0
-            csel    w23, w22, w1, ge
+            cinv    w23, w22, lt
             cmp     w21, #24
             bhi     G_M59075_IG20
             ubfiz   x1, x21, #1, #32
@@ -143,7 +142,7 @@ G_M59075_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20
             mov     w1, #24
             sub     w24, w1, w21
             tbz     w24, #31, G_M59075_IG06
-						;; size=44 bbWeight=1 PerfScore 9.50
+						;; size=40 bbWeight=1 PerfScore 9.00
 G_M59075_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=580000 {x19 x20 x22}, byref
             adrp    x1, [HIGH RELOC #0xD1FFAB1E]      // const ptr
             add     x1, x1, [LOW RELOC #0xD1FFAB1E]
@@ -213,9 +212,8 @@ G_M59075_IG09:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19
 						;; size=24 bbWeight=0.50 PerfScore 2.00
 G_M59075_IG10:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref, isz
             ldr     w1, [x19, #0x04]
-            mvn     w0, w1
             cmp     w1, #0
-            csel    w23, w1, w0, ge
+            cinv    w23, w1, lt
             cmp     w22, #24
             bhi     G_M59075_IG20
             ubfiz   x1, x22, #1, #32
@@ -223,7 +221,7 @@ G_M59075_IG10:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20
             mov     w1, #24
             sub     w21, w1, w22
             tbz     w21, #31, G_M59075_IG12
-						;; size=44 bbWeight=1 PerfScore 9.50
+						;; size=40 bbWeight=1 PerfScore 9.00
 G_M59075_IG11:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref
             adrp    x1, [HIGH RELOC #0xD1FFAB1E]      // const ptr
             add     x1, x1, [LOW RELOC #0xD1FFAB1E]
@@ -352,7 +350,7 @@ G_M59075_IG21:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=20 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 700, prolog size 40, PerfScore 208.50, instruction count 175, allocated bytes for code 700 (MethodHash=d5b6193c) for method System.Range:ToString():System.String:this
+; Total bytes of code 692, prolog size 40, PerfScore 206.70, instruction count 173, allocated bytes for code 692 (MethodHash=d5b6193c) for method System.Range:ToString():System.String:this
 ; ============================================================
 
 Unwind Info:
@@ -363,7 +361,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 175 (0x000af) Actual length = 700 (0x0002bc)
+  Function Length   : 173 (0x000ad) Actual length = 692 (0x0002b4)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.04%) : 46029.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -12,7 +12,7 @@
 ;  V01 TypeCtx      [V01,T04] (  5,  4   )    long  ->  x20         single-def
 ;  V02 arg1         [V02,T03] (  4,  6.50)     ref  ->  x19         class-hnd single-def
 ;  V03 loc0         [V03,T10] (  4,  3   )     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T09] (  7,  3.50)     int  ->   x0        
+;  V04 loc1         [V04,T09] (  6,  3   )     int  ->   x0        
 ;  V05 loc2         [V05,T07] (  3,  5   )     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T00] (  9, 18.50)     int  ->  x24        
 ;* V07 loc4         [V07    ] (  0,  0   )     ref  ->  zero-ref    ld-addr-op class-hnd
@@ -74,9 +74,8 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             ldr     x2, [x11]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w11, w0
             cmp     w0, #0
-            csel    w0, w0, w11, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w23, [x22, #0x08]
@@ -87,7 +86,7 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             bne     G_M33817_IG06
             cmp     w0, #1
             bvs     G_M33817_IG13
-						;; size=88 bbWeight=0.50 PerfScore 11.75
+						;; size=84 bbWeight=0.50 PerfScore 11.50
 G_M33817_IG06:        ; bbWeight=0.50, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w11
             msub    w24, w1, w11, w0
@@ -183,7 +182,7 @@ G_M33817_IG15:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=20 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 384, prolog size 24, PerfScore 160.40, instruction count 96, allocated bytes for code 384 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 380, prolog size 24, PerfScore 159.75, instruction count 95, allocated bytes for code 380 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -194,7 +193,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 96 (0x00060) Actual length = 384 (0x000180)
+  Function Length   : 95 (0x0005f) Actual length = 380 (0x00017c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.92%) : 46031.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -11,7 +11,7 @@
 ;  V00 this         [V00,T03] (  8,  8   )     ref  ->  x19         this class-hnd single-def
 ;  V01 arg1         [V01,T04] (  5,  8   )     ref  ->  x20         class-hnd single-def
 ;  V02 arg2         [V02,T08] (  3,  3   )     ref  ->  x21         class-hnd single-def
-;  V03 loc0         [V03,T06] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T06] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T09] (  4,  4   )     ref  ->  x22         class-hnd single-def
 ;  V05 loc2         [V05,T00] ( 10, 32   )     int  ->  x24        
 ;  V06 loc3         [V06,T01] (  3, 20   )     ref  ->   x0         class-hnd
@@ -55,9 +55,8 @@ G_M58385_IG02:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             ldr     x2, [x11]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x22, [x19, #0x08]
             ; gcrRegs +[x22]
             ldr     w23, [x22, #0x08]
@@ -68,7 +67,7 @@ G_M58385_IG02:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG03
             cmp     w0, #1
             bvs     G_M58385_IG11
-						;; size=88 bbWeight=1 PerfScore 26.00
+						;; size=84 bbWeight=1 PerfScore 25.50
 G_M58385_IG03:        ; bbWeight=1, gcrefRegs=780000 {x19 x20 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w11, w0, w1
             msub    w24, w11, w1, w0
@@ -187,7 +186,7 @@ G_M58385_IG13:        ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
             brk_unix #0
 						;; size=20 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 436, prolog size 28, PerfScore 248.85, instruction count 109, allocated bytes for code 436 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 432, prolog size 28, PerfScore 247.95, instruction count 108, allocated bytes for code 432 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -198,7 +197,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 109 (0x0006d) Actual length = 436 (0x0001b4)
+  Function Length   : 108 (0x0006c) Actual length = 432 (0x0001b0)
   ---- 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
-8 (-2.78%) : 227683.dasm - System.Linq.Enumerable:Take[ubyte](System.Collections.Generic.IEnumerable`1[ubyte],System.Range):System.Collections.Generic.IEnumerable`1[ubyte]
@@ -19,8 +19,8 @@
 ;# V09 OutArgs      [V09    ] (  1,  1   )  struct ( 0) [sp+00H]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V10 tmp1         [V10,T08] (  2,  2   )     int  ->   x1         "Inline return value spill temp"
 ;  V11 tmp2         [V11,T09] (  2,  2   )     int  ->   x2         "Inline return value spill temp"
-;  V12 tmp3         [V12,T02] (  5,  5   )     int  ->   x1         V02._value(offs=0x00) P-INDEP "field V02._value (fldOffset=0x0)"
-;  V13 tmp4         [V13,T03] (  5,  5   )     int  ->   x2         V03._value(offs=0x00) P-INDEP "field V03._value (fldOffset=0x0)"
+;  V12 tmp3         [V12,T02] (  4,  4   )     int  ->   x1         V02._value(offs=0x00) P-INDEP "field V02._value (fldOffset=0x0)"
+;  V13 tmp4         [V13,T03] (  4,  4   )     int  ->   x2         V03._value(offs=0x00) P-INDEP "field V03._value (fldOffset=0x0)"
 ;
 ; Lcl frame size = 16
 
@@ -35,16 +35,14 @@ G_M11152_IG02:        ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byre
             ldp     w1, w2, [fp, #0x18]
             lsr     w3, w1, #31
             lsr     w4, w2, #31
-            mvn     w5, w1
             cmp     w1, #0
-            csel    w1, w1, w5, ge
+            cinv    w1, w1, lt
             str     w1, [fp, #0x14]
-            mvn     w5, w2
             cmp     w2, #0
-            csel    w2, w2, w5, ge
+            cinv    w2, w2, lt
             str     w2, [fp, #0x10]
             cbz     w3, G_M11152_IG07
-						;; size=52 bbWeight=1 PerfScore 11.00
+						;; size=44 bbWeight=1 PerfScore 10.00
 G_M11152_IG03:        ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, isz
             cbz     w1, G_M11152_IG04
             cbz     w4, G_M11152_IG06
@@ -131,7 +129,7 @@ G_M11152_IG14:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             brk_unix #0
 						;; size=28 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 288, prolog size 8, PerfScore 65.30, instruction count 72, allocated bytes for code 288 (MethodHash=22ebd46f) for method System.Linq.Enumerable:Take[ubyte](System.Collections.Generic.IEnumerable`1[ubyte],System.Range):System.Collections.Generic.IEnumerable`1[ubyte]
+; Total bytes of code 280, prolog size 8, PerfScore 63.50, instruction count 70, allocated bytes for code 280 (MethodHash=22ebd46f) for method System.Linq.Enumerable:Take[ubyte](System.Collections.Generic.IEnumerable`1[ubyte],System.Range):System.Collections.Generic.IEnumerable`1[ubyte]
 ; ============================================================
 
 Unwind Info:
@@ -142,7 +140,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 72 (0x00048) Actual length = 288 (0x000120)
+  Function Length   : 70 (0x00046) Actual length = 280 (0x000118)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-8 (-2.74%) : 151769.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float],System.Collections.Generic.IComparer`1[System.Numerics.Vector`1[float]]):int:this
@@ -11,7 +11,7 @@
 ;  V01 arg1         [V01,T05] (  5,  3.50)  simd16  ->  [fp+10H]   HFA(simd16)  single-def
 ;  V02 arg2         [V02,T01] (  6,  4.50)     ref  ->  x20         class-hnd single-def
 ;  V03 loc0         [V03,T03] (  3,  1.50)     int  ->   x0        
-;  V04 loc1         [V04,T02] ( 11,  5.50)     int  ->   x0        
+;  V04 loc1         [V04,T02] (  9,  4.50)     int  ->   x0        
 ;  V05 loc2         [V05,T04] (  3,  1.50)    bool  ->   x1        
 ;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [sp+00H]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V07 tmp1         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "Inlining Arg"
@@ -82,19 +82,17 @@ G_M63635_IG07:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180
             blr     x2
             ; gcrRegs -[x0-x1 x20]
             lsr     w1, w0, #31
-            mvn     w2, w0
             cmp     w1, #0
-            csel    w0, w0, w2, eq
+            cinv    w0, w0, ne
             ldr     x2, [x19, #0x08]
             ; gcrRegs +[x2]
             ldr     w2, [x2, #0x18]
             ; gcrRegs -[x2]
             add     w0, w2, w0
             add     w0, w0, #1
-            mvn     w2, w0
             cmp     w1, #0
-            csel    w0, w0, w2, eq
-						;; size=88 bbWeight=0.50 PerfScore 13.25
+            cinv    w0, w0, ne
+						;; size=80 bbWeight=0.50 PerfScore 12.75
 G_M63635_IG08:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     x19, x20, [sp, #0x20]
             ldp     fp, lr, [sp], #0x30
@@ -135,7 +133,7 @@ G_M63635_IG11:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             brk_unix #0
 						;; size=44 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 292, prolog size 12, PerfScore 72.20, instruction count 73, allocated bytes for code 292 (MethodHash=492e076c) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float],System.Collections.Generic.IComparer`1[System.Numerics.Vector`1[float]]):int:this
+; Total bytes of code 284, prolog size 12, PerfScore 70.90, instruction count 71, allocated bytes for code 284 (MethodHash=492e076c) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.Numerics.Vector`1[float]]:IndexOf(System.Numerics.Vector`1[float],System.Collections.Generic.IComparer`1[System.Numerics.Vector`1[float]]):int:this
 ; ============================================================
 
 Unwind Info:
@@ -146,7 +144,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 73 (0x00049) Actual length = 292 (0x000124)
+  Function Length   : 71 (0x00047) Actual length = 284 (0x00011c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.96%) : 89376.dasm - Utilities.IndexMap:SourceOf(int):int:this
@@ -10,7 +10,7 @@
 ;  V00 this         [V00,T00] (  5,  4.50)     ref  ->  x19         this class-hnd single-def
 ;  V01 arg1         [V01,T01] (  5,  4   )     int  ->   x1         single-def
 ;  V02 loc0         [V02,T04] (  5,  4   )     int  ->   x0         single-def
-;  V03 loc1         [V03,T03] (  9,  4.50)     int  ->   x0        
+;  V03 loc1         [V03,T03] (  8,  4   )     int  ->   x0        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [sp+00H]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V05 tmp1         [V05,T07] (  3,  3   )     ref  ->   x0         class-hnd single-def "Inlining Arg"
 ;* V06 tmp2         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
@@ -75,12 +75,11 @@ G_M29209_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=800
             ldr     x5, [x5]
             blr     x5
             ; gcrRegs -[x0]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             sub     w0, w0, #1
             str     w0, [x19, #0x14]
-						;; size=64 bbWeight=0.50 PerfScore 6.00
+						;; size=60 bbWeight=0.50 PerfScore 5.75
 G_M29209_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
@@ -101,7 +100,7 @@ G_M29209_IG08:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 204, prolog size 12, PerfScore 52.65, instruction count 51, allocated bytes for code 204 (MethodHash=5f7a8de6) for method Utilities.IndexMap:SourceOf(int):int:this
+; Total bytes of code 200, prolog size 12, PerfScore 52.00, instruction count 50, allocated bytes for code 200 (MethodHash=5f7a8de6) for method Utilities.IndexMap:SourceOf(int):int:this
 ; ============================================================
 
 Unwind Info:
@@ -112,7 +111,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 51 (0x00033) Actual length = 204 (0x0000cc)
+  Function Length   : 50 (0x00032) Actual length = 200 (0x0000c8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-8 (-1.56%) : 227682.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Range):System.Collections.Generic.IEnumerable`1[System.__Canon]
@@ -24,8 +24,8 @@
 ;* V14 tmp4         [V14    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
 ;  V15 tmp5         [V15,T20] (  2,  2   )     int  ->  x22         "Inline return value spill temp"
 ;  V16 tmp6         [V16,T21] (  2,  2   )     int  ->  x23         "Inline return value spill temp"
-;  V17 tmp7         [V17,T03] (  5,  5   )     int  ->   x1         V03._value(offs=0x00) P-INDEP "field V03._value (fldOffset=0x0)"
-;  V18 tmp8         [V18,T04] (  5,  5   )     int  ->   x2         V04._value(offs=0x00) P-INDEP "field V04._value (fldOffset=0x0)"
+;  V17 tmp7         [V17,T03] (  4,  4   )     int  ->   x1         V03._value(offs=0x00) P-INDEP "field V03._value (fldOffset=0x0)"
+;  V18 tmp8         [V18,T04] (  4,  4   )     int  ->   x2         V04._value(offs=0x00) P-INDEP "field V04._value (fldOffset=0x0)"
 ;  V19 tmp9         [V19,T22] (  2,  2   )    long  ->   x0         "argument with side effect"
 ;  V20 tmp10        [V20,T23] (  2,  2   )    long  ->   x0         "argument with side effect"
 ;  V21 rat0         [V21,T16] (  3,  2   )    long  ->   x1         "runtime lookup"
@@ -58,14 +58,12 @@ G_M46217_IG02:        ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
             ldp     w1, w2, [fp, #0x18]
             lsr     w20, w1, #31
             lsr     w21, w2, #31
-            mvn     w3, w1
             cmp     w1, #0
-            csel    w22, w1, w3, ge
-            mvn     w1, w2
+            cinv    w22, w1, lt
             cmp     w2, #0
-            csel    w23, w2, w1, ge
+            cinv    w23, w2, lt
             cbz     w20, G_M46217_IG10
-						;; size=44 bbWeight=1 PerfScore 9.00
+						;; size=36 bbWeight=1 PerfScore 8.00
 G_M46217_IG03:        ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
             cbz     w22, G_M46217_IG04
             cbz     w21, G_M46217_IG22
@@ -237,7 +235,7 @@ G_M46217_IG27:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             brk_unix #0
 						;; size=28 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 512, prolog size 24, PerfScore 118.75, instruction count 128, allocated bytes for code 512 (MethodHash=75994b76) for method System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Range):System.Collections.Generic.IEnumerable`1[System.__Canon]
+; Total bytes of code 504, prolog size 24, PerfScore 116.95, instruction count 126, allocated bytes for code 504 (MethodHash=75994b76) for method System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Range):System.Collections.Generic.IEnumerable`1[System.__Canon]
 ; ============================================================
 
 Unwind Info:
@@ -248,7 +246,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 128 (0x00080) Actual length = 512 (0x000200)
+  Function Length   : 126 (0x0007e) Actual length = 504 (0x0001f8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.28%) : 15280.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.Nullable`1[int]]:get_Item(System.__Canon):System.Nullable`1[int]:this
@@ -11,7 +11,7 @@
 ;  V01 TypeCtx      [V01,T03] (  5,  4   )    long  ->  x20         single-def
 ;  V02 arg1         [V02,T02] (  4,  6.50)     ref  ->  x19         class-hnd single-def
 ;  V03 loc0         [V03,T09] (  4,  3   )     ref  ->  x21         class-hnd single-def
-;  V04 loc1         [V04,T08] (  7,  3.50)     int  ->   x0        
+;  V04 loc1         [V04,T08] (  6,  3   )     int  ->   x0        
 ;  V05 loc2         [V05,T06] (  3,  5   )     ref  ->  x22         class-hnd single-def
 ;  V06 loc3         [V06,T00] (  9, 18.50)     int  ->  x24        
 ;* V07 loc4         [V07    ] (  0,  0   )  struct ( 8) zero-ref    do-not-enreg[S] ld-addr-op
@@ -71,9 +71,8 @@ G_M29273_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            cinv    w0, w0, lt
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w23, [x22, #0x08]
@@ -84,7 +83,7 @@ G_M29273_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             bne     G_M29273_IG06
             cmp     w0, #1
             bvs     G_M29273_IG13
-						;; size=76 bbWeight=0.50 PerfScore 9.50
+						;; size=72 bbWeight=0.50 PerfScore 9.25
 G_M29273_IG06:        ; bbWeight=0.50, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w24, w1, w2, w0
@@ -160,7 +159,7 @@ G_M29273_IG15:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 312, prolog size 24, PerfScore 165.45, instruction count 78, allocated bytes for code 312 (MethodHash=2afc8da6) for method System.Reflection.CerHashtable`2[System.__Canon,System.Nullable`1[int]]:get_Item(System.__Canon):System.Nullable`1[int]:this
+; Total bytes of code 308, prolog size 24, PerfScore 164.80, instruction count 77, allocated bytes for code 308 (MethodHash=2afc8da6) for method System.Reflection.CerHashtable`2[System.__Canon,System.Nullable`1[int]]:get_Item(System.__Canon):System.Nullable`1[int]:this
 ; ============================================================
 
 Unwind Info:
@@ -171,7 +170,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 78 (0x0004e) Actual length = 312 (0x000138)
+  Function Length   : 77 (0x0004d) Actual length = 308 (0x000134)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.04%) : 15282.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.Nullable`1[int]]:Insert(System.__Canon,System.Nullable`1[int]):this
@@ -10,7 +10,7 @@
 ;  V00 this         [V00,T05] (  7,  7   )     ref  ->  x20         this class-hnd single-def
 ;  V01 arg1         [V01,T04] (  5,  8   )     ref  ->  x19         class-hnd single-def
 ;  V02 arg2         [V02,T12] (  3,  3   )  struct ( 8) x21         single-def
-;  V03 loc0         [V03,T07] (  7,  7   )     int  ->   x0        
+;  V03 loc0         [V03,T07] (  6,  6   )     int  ->   x0        
 ;  V04 loc1         [V04,T15] (  4,  4   )     ref  ->  x23         class-hnd single-def
 ;  V05 loc2         [V05,T00] ( 11, 33   )     int  ->  x25        
 ;  V06 loc3         [V06,T01] (  4, 24   )     ref  ->   x0         class-hnd
@@ -75,9 +75,8 @@ G_M17873_IG05:        ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            cinv    w0, w0, lt
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -88,7 +87,7 @@ G_M17873_IG05:        ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {
             bne     G_M17873_IG06
             cmp     w0, #1
             bvs     G_M17873_IG12
-						;; size=72 bbWeight=1 PerfScore 18.50
+						;; size=68 bbWeight=1 PerfScore 18.00
 G_M17873_IG06:        ; bbWeight=1, gcrefRegs=980000 {x19 x20 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -178,7 +177,7 @@ G_M17873_IG14:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 384, prolog size 28, PerfScore 253.85, instruction count 96, allocated bytes for code 384 (MethodHash=9fffba2e) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.Nullable`1[int]]:Insert(System.__Canon,System.Nullable`1[int]):this
+; Total bytes of code 380, prolog size 28, PerfScore 252.95, instruction count 95, allocated bytes for code 380 (MethodHash=9fffba2e) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.Nullable`1[int]]:Insert(System.__Canon,System.Nullable`1[int]):this
 ; ============================================================
 
 Unwind Info:
@@ -189,7 +188,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 96 (0x00060) Actual length = 384 (0x000180)
+  Function Length   : 95 (0x0005f) Actual length = 380 (0x00017c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
libraries_tests.pmi.linux.arm64.checked.mch
-4 (-12.50%) : 152586.dasm - System.Index:get_Value():int:this
@@ -8,7 +8,7 @@
 ;
 ;  V00 this         [V00,T00] (  3,  3   )   byref  ->   x0         this single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+00H]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V02 cse0         [V02,T01] (  4,  4   )     int  ->   x0         "CSE - aggressive"
+;  V02 cse0         [V02,T01] (  3,  3   )     int  ->   x0         "CSE - aggressive"
 ;
 ; Lcl frame size = 0
 
@@ -20,16 +20,15 @@ G_M18211_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre
             ; byrRegs +[x0]
             ldr     w0, [x0]
             ; byrRegs -[x0]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
-						;; size=16 bbWeight=1 PerfScore 4.50
+            cinv    w0, w0, lt
+						;; size=12 bbWeight=1 PerfScore 4.00
 G_M18211_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 32, prolog size 8, PerfScore 11.20, instruction count 8, allocated bytes for code 32 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
+; Total bytes of code 28, prolog size 8, PerfScore 10.30, instruction count 7, allocated bytes for code 28 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
 ; ============================================================
 
 Unwind Info:
@@ -40,7 +39,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
+  Function Length   : 7 (0x00007) Actual length = 28 (0x00001c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.08%) : 240274.dasm - System.SpanTests.SpanTests:g__ParseIndex|145_4(System.ReadOnlySpan`1[ushort]):System.Index
@@ -22,7 +22,7 @@
 ;  V12 tmp10        [V12    ] (  2,  2   )     int  ->  [fp+20H]   do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
 ;  V13 tmp11        [V13,T07] (  3,  2   )     int  ->   x0         single-def "Inline stloc first use temp"
 ;* V14 tmp12        [V14    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
-;  V15 tmp13        [V15,T00] (  4,  8   )     int  ->   x0         "Inlining Arg"
+;  V15 tmp13        [V15,T00] (  3,  6   )     int  ->   x0         "Inlining Arg"
 ;  V16 tmp14        [V16,T02] (  5,  3.50)   byref  ->  registers   V00._reference(offs=0x00) P-INDEP "field V00._reference (fldOffset=0x0)"
 ;  V17 tmp15        [V17,T01] (  6,  4.50)     int  ->  registers   V00._length(offs=0x08) P-INDEP "field V00._length (fldOffset=0x8)"
 ;  V18 tmp16        [V18,T06] (  3,  2   )   byref  ->  x20         single-def V03._reference(offs=0x00) P-INDEP "field V03._reference (fldOffset=0x0)"
@@ -122,10 +122,9 @@ G_M61416_IG07:        ; bbWeight=1, gcVars=0000000000000800 {V11}, gcrefRegs=000
             cbnz    w0, G_M61416_IG12
             ldr     w0, [fp, #0x20]	// [V12 tmp10]
             tbnz    w0, #31, G_M61416_IG10
-            mvn     w1, w0
             cmp     w19, #0
-            csel    w0, w0, w1, eq
-						;; size=64 bbWeight=1 PerfScore 15.00
+            cinv    w0, w0, ne
+						;; size=60 bbWeight=1 PerfScore 14.50
 G_M61416_IG08:        ; bbWeight=1, epilog, nogc, extend
             ldr     x21, [sp, #0x38]
             ldp     x19, x20, [sp, #0x28]
@@ -177,7 +176,7 @@ G_M61416_IG12:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, b
             brk_unix #0
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 372, prolog size 20, PerfScore 83.45, instruction count 93, allocated bytes for code 372 (MethodHash=af861017) for method System.SpanTests.SpanTests:<EnumerateLines_Battery>g__ParseIndex|145_4(System.ReadOnlySpan`1[ushort]):System.Index
+; Total bytes of code 368, prolog size 20, PerfScore 82.55, instruction count 92, allocated bytes for code 368 (MethodHash=af861017) for method System.SpanTests.SpanTests:<EnumerateLines_Battery>g__ParseIndex|145_4(System.ReadOnlySpan`1[ushort]):System.Index
 ; ============================================================
 
 Unwind Info:
@@ -188,7 +187,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 93 (0x0005d) Actual length = 372 (0x000174)
+  Function Length   : 92 (0x0005c) Actual length = 368 (0x000170)
   ---- 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)
benchmarks.run.linux.arm64.checked.mch 2 2 0 0 -8 +0
benchmarks.run_pgo.linux.arm64.checked.mch 514 514 0 0 -2,056 +0
benchmarks.run_tiered.linux.arm64.checked.mch 2 2 0 0 -8 +0
coreclr_tests.run.linux.arm64.checked.mch 71 69 0 2 -276 +0
libraries.crossgen2.linux.arm64.checked.mch 9 9 0 0 -40 +0
libraries.pmi.linux.arm64.checked.mch 6 6 0 0 -36 +0
libraries_tests.pmi.linux.arm64.checked.mch 2 2 0 0 -8 +0
606 604 0 2 -2,432 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm64.checked.mch 43,254 7,464 35,790 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo.linux.arm64.checked.mch 127,481 56,231 71,250 0 (0.00%) 0 (0.00%)
benchmarks.run_tiered.linux.arm64.checked.mch 62,692 41,575 21,117 0 (0.00%) 0 (0.00%)
coreclr_tests.run.linux.arm64.checked.mch 629,960 385,926 244,034 3 (0.00%) 3 (0.00%)
libraries.crossgen2.linux.arm64.checked.mch 184,514 14 184,500 0 (0.00%) 0 (0.00%)
libraries.pmi.linux.arm64.checked.mch 257,852 4,770 253,082 0 (0.00%) 0 (0.00%)
libraries_tests.pmi.linux.arm64.checked.mch 372,098 8,024 364,074 0 (0.00%) 0 (0.00%)
1,677,851 504,004 1,173,847 3 (0.00%) 3 (0.00%)

jit-analyze output

@jakobbotsch
Copy link
Member

@SwapnilGaikwad What if you generalize the handling to CSINV instead of CINV? And what if you add CSNEG too? It would result in some nice clean up (we could remove CSNEG_MI) and justify the patch a bit more. Currently the diffs are very small.

@SwapnilGaikwad
Copy link
Contributor Author

SwapnilGaikwad commented Apr 24, 2023

@SwapnilGaikwad What if you generalize the handling to CSINV instead of CINV? And what if you add CSNEG too? It would result in some nice clean up (we could remove CSNEG_MI) and justify the patch a bit more. Currently the diffs are very small.

Cool. I will give CSINV a go and then try the CSNEG.

@kunalspathak
Copy link
Member

Cool. I will give CSINV a go and then try the CSNEG.

@SwapnilGaikwad - did you get a chance to try this?

@SwapnilGaikwad
Copy link
Contributor Author

Cool. I will give CSINV a go and then try the CSNEG.

@SwapnilGaikwad - did you get a chance to try this?

I'll be on it in this week 🙂 👍

@SwapnilGaikwad SwapnilGaikwad marked this pull request as draft May 11, 2023 14:27
@SwapnilGaikwad
Copy link
Contributor Author

SwapnilGaikwad commented May 11, 2023

Added a version that uses a more generic CSINV instead of CINV. It did not show any significant improvements though, reduced additional 12 bytes.

what if you add CSNEG too

I will try this now, so converted the PR to draft.

@SwapnilGaikwad SwapnilGaikwad marked this pull request as ready for review May 18, 2023 15:23
@SwapnilGaikwad
Copy link
Contributor Author

we could remove CSNEG_MI

Added support for csneg and cleaned up the CSNEG_MI and CNEG_LT nodes too!

@SwapnilGaikwad
Copy link
Contributor Author

The asmdiffs didn't show change much.

Diffs are based on 1,551,906 contexts (446,585 MinOpts, 1,105,321 FullOpts).

MISSED contexts: 2,291 (0.15%)

Overall (-3,024 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.linux.arm64.checked.mch 44,165,880 -232
benchmarks.run_pgo.linux.arm64.checked.mch 67,297,512 -1,980
libraries.pmi.linux.arm64.checked.mch 65,399,324 -232
benchmarks.run.linux.arm64.checked.mch 16,841,584 -32
benchmarks.run_tiered.linux.arm64.checked.mch 21,836,612 -28
libraries_tests.pmi.linux.arm64.checked.mch 151,547,268 -204
coreclr_tests.run.linux.arm64.checked.mch 472,410,496 -316
MinOpts (+0 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries_tests.pmi.linux.arm64.checked.mch 5,435,036 +0
coreclr_tests.run.linux.arm64.checked.mch 334,256,636 +0
FullOpts (-3,024 bytes)
Collection Base size (bytes) Diff size (bytes)
libraries.crossgen2.linux.arm64.checked.mch 44,164,244 -232
benchmarks.run_pgo.linux.arm64.checked.mch 42,244,940 -1,980
libraries.pmi.linux.arm64.checked.mch 63,913,128 -232
benchmarks.run.linux.arm64.checked.mch 15,694,420 -32
benchmarks.run_tiered.linux.arm64.checked.mch 4,560,324 -28
libraries_tests.pmi.linux.arm64.checked.mch 146,112,232 -204
coreclr_tests.run.linux.arm64.checked.mch 138,153,860 -316
Example diffs
libraries.crossgen2.linux.arm64.checked.mch
-4 (-12.50%) : 34232.dasm - System.Index:get_Value():int:this
@@ -21,16 +21,15 @@ G_M18211_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre
             ; byrRegs +[x0]
             ldr     w0, [x0]
             ; byrRegs -[x0]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
-						;; size=16 bbWeight=1 PerfScore 4.50
+            csinv   w0, w0, w0, ge
+						;; size=12 bbWeight=1 PerfScore 4.00
 G_M18211_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 32, prolog size 8, PerfScore 11.20, instruction count 8, allocated bytes for code 32 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
+; Total bytes of code 28, prolog size 8, PerfScore 10.30, instruction count 7, allocated bytes for code 28 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
 ; ============================================================
 
 Unwind Info:
@@ -41,7 +40,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
+  Function Length   : 7 (0x00007) Actual length = 28 (0x00001c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-8.33%) : 132371.dasm - ILCompiler.Reflection.ReadyToRun.NibbleReader:ReadInt():int:this
@@ -26,16 +26,15 @@ G_M34184_IG02:        ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byre
             blr     x1
             ; gcrRegs -[x0]
             lsr     w1, w0, #1
-            neg     w2, w1
             tst     w0, #1
-            csel    w0, w2, w1, ne
-						;; size=32 bbWeight=1 PerfScore 7.50
+            csneg   w0, w1, w1, eq
+						;; size=28 bbWeight=1 PerfScore 7.00
 G_M34184_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 48, prolog size 8, PerfScore 15.80, instruction count 12, allocated bytes for code 48 (MethodHash=954a7a77) for method ILCompiler.Reflection.ReadyToRun.NibbleReader:ReadInt():int:this
+; Total bytes of code 44, prolog size 8, PerfScore 14.90, instruction count 11, allocated bytes for code 44 (MethodHash=954a7a77) for method ILCompiler.Reflection.ReadyToRun.NibbleReader:ReadInt():int:this
 ; ============================================================
 
 Unwind Info:
@@ -46,7 +45,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
+  Function Length   : 11 (0x0000b) Actual length = 44 (0x00002c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-8.33%) : 132282.dasm - ILCompiler.Reflection.ReadyToRun.R2RSignatureDecoder`3[System.__Canon,System.__Canon,System.__Canon]:ReadInt():int:this
@@ -26,16 +26,15 @@ G_M61048_IG02:        ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byre
             blr     x1
             ; gcrRegs -[x0]
             lsr     w1, w0, #1
-            neg     w2, w1
             tst     w0, #1
-            csel    w0, w1, w2, eq
-						;; size=32 bbWeight=1 PerfScore 7.50
+            csneg   w0, w1, w1, eq
+						;; size=28 bbWeight=1 PerfScore 7.00
 G_M61048_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 48, prolog size 8, PerfScore 15.80, instruction count 12, allocated bytes for code 48 (MethodHash=9cc31187) for method ILCompiler.Reflection.ReadyToRun.R2RSignatureDecoder`3[System.__Canon,System.__Canon,System.__Canon]:ReadInt():int:this
+; Total bytes of code 44, prolog size 8, PerfScore 14.90, instruction count 11, allocated bytes for code 44 (MethodHash=9cc31187) for method ILCompiler.Reflection.ReadyToRun.R2RSignatureDecoder`3[System.__Canon,System.__Canon,System.__Canon]:ReadInt():int:this
 ; ============================================================
 
 Unwind Info:
@@ -46,7 +45,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 12 (0x0000c) Actual length = 48 (0x000030)
+  Function Length   : 11 (0x0000b) Actual length = 44 (0x00002c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.16%) : 13679.dasm - Microsoft.CodeAnalysis.VisualBasic.LocalRewriter:RewriteDecimalConstant(Microsoft.CodeAnalysis.VisualBasic.BoundExpression,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.VisualBasic.Symbols.MethodSymbol,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.BoundExpression
@@ -321,9 +321,8 @@ G_M16265_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=C80
             ; GC ptr vars -{V46}
             ldr     w20, [fp, #0x38]	// [V08 loc4]
             ldrb    w0, [fp, #0x48]	// [V06 loc2]
-            neg     x11, x20
             cmp     w0, #0
-            csel    x20, x20, x11, eq
+            csneg   x20, x20, x20, eq
             mov     x0, x23
             ; gcrRegs +[x0]
             adrp    x11, [HIGH RELOC #0xD1FFAB1E]      // function address
@@ -487,7 +486,7 @@ G_M16265_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=C80
             mov     x19, x20
             ; gcrRegs +[x19]
             b       G_M16265_IG11
-						;; size=492 bbWeight=0.50 PerfScore 69.25
+						;; size=488 bbWeight=0.50 PerfScore 69.00
 G_M16265_IG09:        ; bbWeight=0.50, gcrefRegs=C80000 {x19 x22 x23}, byrefRegs=0000 {}, byref, isz
             ; gcrRegs -[x20] +[x22-x23]
             mov     x0, x23
@@ -992,7 +991,7 @@ G_M16265_IG13:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             brk_unix #0
 						;; size=20 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 2476, prolog size 40, PerfScore 624.60, instruction count 619, allocated bytes for code 2476 (MethodHash=854ec076) for method Microsoft.CodeAnalysis.VisualBasic.LocalRewriter:RewriteDecimalConstant(Microsoft.CodeAnalysis.VisualBasic.BoundExpression,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.VisualBasic.Symbols.MethodSymbol,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.BoundExpression
+; Total bytes of code 2472, prolog size 40, PerfScore 623.95, instruction count 618, allocated bytes for code 2472 (MethodHash=854ec076) for method Microsoft.CodeAnalysis.VisualBasic.LocalRewriter:RewriteDecimalConstant(Microsoft.CodeAnalysis.VisualBasic.BoundExpression,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.VisualBasic.Symbols.MethodSymbol,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.BoundExpression
 ; ============================================================
 
 Unwind Info:
@@ -1003,7 +1002,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 619 (0x0026b) Actual length = 2476 (0x0009ac)
+  Function Length   : 618 (0x0026a) Actual length = 2472 (0x0009a8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.15%) : 51107.dasm - System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
@@ -847,9 +847,8 @@ G_M17110_IG95:        ; bbWeight=4, gcrefRegs=1400000 {x22 x24}, byrefRegs=90000
             bls     G_M17110_IG86
 						;; size=16 bbWeight=4 PerfScore 10.00
 G_M17110_IG96:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=900000 {x20 x23}, byref
-            neg     w0, w1
             cmp     w25, #0
-            csel    w1, w1, w0, eq
+            csneg   w1, w1, w1, eq
             add     x0, x20, #4
             ; byrRegs +[x0]
             ldr     w11, [x0]
@@ -859,7 +858,7 @@ G_M17110_IG96:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=90
             mov     x3, x27
             ldr     w8, [fp, #0x14]	// [V16 loc11]
             b       G_M17110_IG100
-						;; size=44 bbWeight=0.50 PerfScore 5.25
+						;; size=40 bbWeight=0.50 PerfScore 5.00
 G_M17110_IG97:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=900000 {x20 x23}, byref, isz
             ; byrRegs -[x0]
             mov     x27, x26
@@ -1112,7 +1111,7 @@ G_M17110_IG126:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000
             brk_unix #0
 						;; size=20 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 2652, prolog size 48, PerfScore 1400.45, instruction count 663, allocated bytes for code 2652 (MethodHash=af22bd29) for method System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
+; Total bytes of code 2648, prolog size 48, PerfScore 1399.80, instruction count 662, allocated bytes for code 2648 (MethodHash=af22bd29) for method System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
 ; ============================================================
 
 Unwind Info:
@@ -1123,7 +1122,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 663 (0x00297) Actual length = 2652 (0x000a5c)
+  Function Length   : 662 (0x00296) Actual length = 2648 (0x000a58)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.12%) : 174372.dasm - System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
@@ -1148,9 +1148,8 @@ G_M35017_IG108:        ; bbWeight=4, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400
             cbnz    w0, G_M35017_IG98
 						;; size=32 bbWeight=4 PerfScore 38.00
 G_M35017_IG109:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref
-            neg     w0, w23
             cmp     w28, #0
-            csel    w23, w23, w0, eq
+            csneg   w23, w23, w23, eq
             add     x0, x22, #4
             ; byrRegs +[x0]
             ldr     w11, [x0]
@@ -1159,7 +1158,7 @@ G_M35017_IG109:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2
             ldr     w3, [fp, #0xA4]	// [V16 loc9]
             ldr     x23, [fp, #0xA8]	// [V15 loc8]
             b       G_M35017_IG113
-						;; size=40 bbWeight=0.50 PerfScore 5.75
+						;; size=36 bbWeight=0.50 PerfScore 5.50
 G_M35017_IG110:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref, isz
             ; byrRegs -[x0]
             cmp     x23, x19
@@ -1377,7 +1376,7 @@ G_M35017_IG137:        ; bbWeight=0.50, epilog, nogc, extend
             ret     lr
 						;; size=28 bbWeight=0.50 PerfScore 3.50
 
-; Total bytes of code 3204, prolog size 76, PerfScore 1748.65, instruction count 801, allocated bytes for code 3204 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
+; Total bytes of code 3200, prolog size 76, PerfScore 1748.00, instruction count 800, allocated bytes for code 3200 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
 ; ============================================================
 
 Unwind Info:
@@ -1388,7 +1387,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 801 (0x00321) Actual length = 3204 (0x000c84)
+  Function Length   : 800 (0x00320) Actual length = 3200 (0x000c80)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
benchmarks.run_pgo.linux.arm64.checked.mch
-8 (-2.70%) : 64375.dasm - System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
@@ -65,10 +65,9 @@ G_M9821_IG03:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             cbz     x0, G_M9821_IG07
 						;; size=16 bbWeight=1 PerfScore 3.00
 G_M9821_IG04:        ; bbWeight=0.61, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            neg     w2, w3
             cmp     x0, x4
-            csel    w3, w3, w2, ls
-						;; size=12 bbWeight=0.61 PerfScore 0.92
+            csneg   w3, w3, w3, ls
+						;; size=8 bbWeight=0.61 PerfScore 0.61
 G_M9821_IG05:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, w3
 						;; size=4 bbWeight=1 PerfScore 0.50
@@ -135,11 +134,10 @@ G_M9821_IG13:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
             b       G_M9821_IG03
 						;; size=24 bbWeight=0 PerfScore 0.00
 G_M9821_IG14:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            neg     w0, w3
             cmp     w7, w5
-            csel    w3, w3, w0, ls
+            csneg   w3, w3, w3, ls
             mov     w0, w3
-						;; size=16 bbWeight=0 PerfScore 0.00
+						;; size=12 bbWeight=0 PerfScore 0.00
 G_M9821_IG15:        ; bbWeight=0, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
@@ -150,7 +148,7 @@ G_M9821_IG16:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 296, prolog size 8, PerfScore 59.10, instruction count 74, allocated bytes for code 296 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
+; Total bytes of code 288, prolog size 8, PerfScore 57.99, instruction count 72, allocated bytes for code 288 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
 ; ============================================================
 
 Unwind Info:
@@ -161,7 +159,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 296 (0x000128)
+  Function Length   : 72 (0x00048) Actual length = 288 (0x000120)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.96%) : 48329.dasm - ByteMark:abs_randwc(int):int
@@ -81,10 +81,9 @@ G_M19686_IG03:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[x1 x4]
             sdiv    w1, w3, w0
             msub    w0, w1, w0, w3
-            neg     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
-						;; size=20 bbWeight=1 PerfScore 14.50
+            csneg   w0, w0, w0, ge
+						;; size=16 bbWeight=1 PerfScore 14.00
 G_M19686_IG04:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
@@ -100,7 +99,7 @@ G_M19686_IG07:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 204, prolog size 8, PerfScore 78.40, instruction count 51, allocated bytes for code 204 (MethodHash=b7adb319) for method ByteMark:abs_randwc(int):int
+; Total bytes of code 200, prolog size 8, PerfScore 77.50, instruction count 50, allocated bytes for code 200 (MethodHash=b7adb319) for method ByteMark:abs_randwc(int):int
 ; ============================================================
 
 Unwind Info:
@@ -111,7 +110,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 51 (0x00033) Actual length = 204 (0x0000cc)
+  Function Length   : 50 (0x00032) Actual length = 200 (0x0000c8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.35%) : 102424.dasm - System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
@@ -131,11 +131,10 @@ G_M9821_IG12:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
             b       G_M9821_IG03
 						;; size=24 bbWeight=0 PerfScore 0.00
 G_M9821_IG13:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            neg     w0, w3
             cmp     w7, w5
-            csel    w3, w3, w0, ls
+            csneg   w3, w3, w3, ls
             mov     w0, w3
-						;; size=16 bbWeight=0 PerfScore 0.00
+						;; size=12 bbWeight=0 PerfScore 0.00
 G_M9821_IG14:        ; bbWeight=0, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
@@ -150,7 +149,7 @@ G_M9821_IG16:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 296, prolog size 8, PerfScore 6968384.10, instruction count 74, allocated bytes for code 296 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
+; Total bytes of code 292, prolog size 8, PerfScore 6968383.70, instruction count 73, allocated bytes for code 292 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
 ; ============================================================
 
 Unwind Info:
@@ -161,7 +160,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 296 (0x000128)
+  Function Length   : 73 (0x00049) Actual length = 292 (0x000124)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.48%) : 93646.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -124,9 +124,8 @@ G_M58385_IG05:        ; bbWeight=0.50, gcrefRegs=380001 {x0 x19 x20 x21}, byrefR
             ; gcr arg pop 0
 						;; size=48 bbWeight=0.50 PerfScore 7.25
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            csinv   w0, w0, w0, ge
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -137,7 +136,7 @@ G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG07
             cmp     w0, #1
             bvs     G_M58385_IG26
-						;; size=48 bbWeight=1 PerfScore 12.50
+						;; size=44 bbWeight=1 PerfScore 12.00
 G_M58385_IG07:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -397,7 +396,7 @@ G_M58385_IG32:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 832, prolog size 40, PerfScore 393.86, instruction count 208, allocated bytes for code 832 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 828, prolog size 40, PerfScore 392.96, instruction count 207, allocated bytes for code 828 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -408,7 +407,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 208 (0x000d0) Actual length = 832 (0x000340)
+  Function Length   : 207 (0x000cf) Actual length = 828 (0x00033c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.48%) : 82456.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -124,9 +124,8 @@ G_M58385_IG05:        ; bbWeight=0.50, gcrefRegs=380001 {x0 x19 x20 x21}, byrefR
             ; gcr arg pop 0
 						;; size=48 bbWeight=0.50 PerfScore 7.25
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            csinv   w0, w0, w0, ge
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -137,7 +136,7 @@ G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG07
             cmp     w0, #1
             bvs     G_M58385_IG26
-						;; size=48 bbWeight=1 PerfScore 12.50
+						;; size=44 bbWeight=1 PerfScore 12.00
 G_M58385_IG07:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -397,7 +396,7 @@ G_M58385_IG32:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 832, prolog size 40, PerfScore 393.86, instruction count 208, allocated bytes for code 832 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 828, prolog size 40, PerfScore 392.96, instruction count 207, allocated bytes for code 828 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -408,7 +407,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 208 (0x000d0) Actual length = 832 (0x000340)
+  Function Length   : 207 (0x000cf) Actual length = 828 (0x00033c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.48%) : 56859.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -124,9 +124,8 @@ G_M58385_IG05:        ; bbWeight=0.50, gcrefRegs=380001 {x0 x19 x20 x21}, byrefR
             ; gcr arg pop 0
 						;; size=48 bbWeight=0.50 PerfScore 7.25
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            csinv   w0, w0, w0, ge
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -137,7 +136,7 @@ G_M58385_IG06:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG07
             cmp     w0, #1
             bvs     G_M58385_IG29
-						;; size=48 bbWeight=1 PerfScore 12.50
+						;; size=44 bbWeight=1 PerfScore 12.00
 G_M58385_IG07:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -405,7 +404,7 @@ G_M58385_IG35:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 836, prolog size 40, PerfScore 425.05, instruction count 209, allocated bytes for code 836 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 832, prolog size 40, PerfScore 424.15, instruction count 208, allocated bytes for code 832 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -416,7 +415,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 209 (0x000d1) Actual length = 836 (0x000344)
+  Function Length   : 208 (0x000d0) Actual length = 832 (0x000340)
   ---- 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
-4 (-7.69%) : 157476.dasm - ILCompiler.Reflection.ReadyToRun.NibbleReader:ReadInt():int:this
@@ -26,16 +26,15 @@ G_M34184_IG02:        ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byre
             blr     x1
             ; gcrRegs -[x0]
             lsr     w1, w0, #1
-            neg     w2, w1
             tst     w0, #1
-            csel    w0, w2, w1, ne
-						;; size=36 bbWeight=1 PerfScore 8.00
+            csneg   w0, w1, w1, eq
+						;; size=32 bbWeight=1 PerfScore 7.50
 G_M34184_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 52, prolog size 8, PerfScore 16.70, instruction count 13, allocated bytes for code 52 (MethodHash=954a7a77) for method ILCompiler.Reflection.ReadyToRun.NibbleReader:ReadInt():int:this
+; Total bytes of code 48, prolog size 8, PerfScore 15.80, instruction count 12, allocated bytes for code 48 (MethodHash=954a7a77) for method ILCompiler.Reflection.ReadyToRun.NibbleReader:ReadInt():int:this
 ; ============================================================
 
 Unwind Info:
@@ -46,7 +45,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 13 (0x0000d) Actual length = 52 (0x000034)
+  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)
-4 (-5.26%) : 201926.dasm - System.Numerics.BigInteger:System.Numerics.INumberBase.TryConvertToTruncating[ubyte](System.Numerics.BigInteger,byref):bool
@@ -76,12 +76,11 @@ G_M48139_IG03:        ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0004 {x2},
             bls     G_M48139_IG07
             ldr     w0, [x0, #0x10]
             ; gcrRegs -[x0]
-            neg     w3, w0
             cmp     w1, #0
-            csel    w0, w0, w3, ge
+            csneg   w0, w0, w0, ge
             uxtb    w0, w0
             b       G_M48139_IG05
-						;; size=36 bbWeight=0.50 PerfScore 5.25
+						;; size=32 bbWeight=0.50 PerfScore 5.00
 G_M48139_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref
             uxtb    w0, w1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -99,7 +98,7 @@ G_M48139_IG07:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 76, prolog size 8, PerfScore 19.10, instruction count 19, allocated bytes for code 76 (MethodHash=af8b43f4) for method System.Numerics.BigInteger:System.Numerics.INumberBase<System.Numerics.BigInteger>.TryConvertToTruncating[ubyte](System.Numerics.BigInteger,byref):bool
+; Total bytes of code 72, prolog size 8, PerfScore 18.45, instruction count 18, allocated bytes for code 72 (MethodHash=af8b43f4) for method System.Numerics.BigInteger:System.Numerics.INumberBase<System.Numerics.BigInteger>.TryConvertToTruncating[ubyte](System.Numerics.BigInteger,byref):bool
 ; ============================================================
 
 Unwind Info:
@@ -110,7 +109,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 19 (0x00013) Actual length = 76 (0x00004c)
+  Function Length   : 18 (0x00012) Actual length = 72 (0x000048)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-3.23%) : 17924.dasm - System.Data.SqlTypes.SqlDecimal:.ctor(int):this
@@ -32,10 +32,9 @@ G_M20785_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19},
             orr     w2, w2, #2
             strb    w2, [x19]
             mov     w2, #0xD1FFAB1E
-            neg     w1, w1
             cmp     w0, w2
-            csel    w0, w0, w1, eq
-						;; size=28 bbWeight=0.50 PerfScore 3.25
+            csneg   w0, w0, w1, eq
+						;; size=24 bbWeight=0.50 PerfScore 3.00
 G_M20785_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
             str     w0, [x19, #0x04]
             str     xzr, [x19, #0x0C]
@@ -57,7 +56,7 @@ G_M20785_IG05:        ; bbWeight=1, epilog, nogc, extend
             ret     lr
 						;; size=12 bbWeight=1 PerfScore 4.00
 
-; Total bytes of code 124, prolog size 12, PerfScore 40.65, instruction count 31, allocated bytes for code 124 (MethodHash=e7e2aece) for method System.Data.SqlTypes.SqlDecimal:.ctor(int):this
+; Total bytes of code 120, prolog size 12, PerfScore 40.00, instruction count 30, allocated bytes for code 120 (MethodHash=e7e2aece) for method System.Data.SqlTypes.SqlDecimal:.ctor(int):this
 ; ============================================================
 
 Unwind Info:
@@ -68,7 +67,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 31 (0x0001f) Actual length = 124 (0x00007c)
+  Function Length   : 30 (0x0001e) Actual length = 120 (0x000078)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.41%) : 178352.dasm - Newtonsoft.Json.JsonTextWriter:WriteValueAsync(System.Nullable`1[ubyte],System.Threading.CancellationToken):System.Threading.Tasks.Task:this
@@ -140,13 +140,12 @@ G_M60557_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180
             uxtb    w0, w1
             mov     w21, w0
             lsr     x22, x21, #63
-            neg     x0, x21
             cmp     w22, #0
-            csel    x21, x21, x0, eq
+            csneg   x21, x21, x21, eq
             mov     x0, x20
             ; gcrRegs +[x0]
             cbz     x0, G_M60557_IG12
-						;; size=48 bbWeight=0.50 PerfScore 5.25
+						;; size=44 bbWeight=0.50 PerfScore 5.00
 G_M60557_IG10:        ; bbWeight=0.25, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
             ; gcrRegs -[x0]
             ldr     w0, [x20, #0x20]
@@ -468,7 +467,7 @@ G_M60557_IG40:        ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {
             b       G_M60557_IG27
 						;; size=24 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 968, prolog size 20, PerfScore 244.30, instruction count 242, allocated bytes for code 968 (MethodHash=59cd1372) for method Newtonsoft.Json.JsonTextWriter:WriteValueAsync(System.Nullable`1[ubyte],System.Threading.CancellationToken):System.Threading.Tasks.Task:this
+; Total bytes of code 964, prolog size 20, PerfScore 243.65, instruction count 241, allocated bytes for code 964 (MethodHash=59cd1372) for method Newtonsoft.Json.JsonTextWriter:WriteValueAsync(System.Nullable`1[ubyte],System.Threading.CancellationToken):System.Threading.Tasks.Task:this
 ; ============================================================
 
 Unwind Info:
@@ -479,7 +478,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 242 (0x000f2) Actual length = 968 (0x0003c8)
+  Function Length   : 241 (0x000f1) Actual length = 964 (0x0003c4)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.16%) : 29427.dasm - Microsoft.CodeAnalysis.VisualBasic.LocalRewriter:RewriteDecimalConstant(Microsoft.CodeAnalysis.VisualBasic.BoundExpression,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.VisualBasic.Symbols.MethodSymbol,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.BoundExpression
@@ -389,9 +389,8 @@ G_M16265_IG10:        ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
             ; GC ptr vars -{V54}
             ldr     w20, [fp, #0x38]	// [V08 loc4]
             ldrb    w0, [fp, #0x48]	// [V06 loc2]
-            neg     x1, x20
             cmp     w0, #0
-            csel    x20, x20, x1, eq
+            csneg   x20, x20, x20, eq
             mov     x0, x23
             ; gcrRegs +[x0]
             mov     w1, #23
@@ -404,7 +403,7 @@ G_M16265_IG10:        ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
             mov     x21, x1
             ; gcrRegs +[x21]
             cbz     x21, G_M16265_IG13
-						;; size=56 bbWeight=0.50 PerfScore 9.25
+						;; size=52 bbWeight=0.50 PerfScore 9.00
 G_M16265_IG11:        ; bbWeight=0.25, gcrefRegs=E80002 {x1 x19 x21 x22 x23}, byrefRegs=0000 {}, byref, isz
             ; gcrRegs -[x0]
             ldr     x0, [x21]
@@ -1147,7 +1146,7 @@ G_M16265_IG32:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 2472, prolog size 44, PerfScore 622.45, instruction count 618, allocated bytes for code 2472 (MethodHash=854ec076) for method Microsoft.CodeAnalysis.VisualBasic.LocalRewriter:RewriteDecimalConstant(Microsoft.CodeAnalysis.VisualBasic.BoundExpression,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.VisualBasic.Symbols.MethodSymbol,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.BoundExpression
+; Total bytes of code 2468, prolog size 44, PerfScore 621.80, instruction count 617, allocated bytes for code 2468 (MethodHash=854ec076) for method Microsoft.CodeAnalysis.VisualBasic.LocalRewriter:RewriteDecimalConstant(Microsoft.CodeAnalysis.VisualBasic.BoundExpression,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.VisualBasic.Symbols.MethodSymbol,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.BoundExpression
 ; ============================================================
 
 Unwind Info:
@@ -1158,7 +1157,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 618 (0x0026a) Actual length = 2472 (0x0009a8)
+  Function Length   : 617 (0x00269) Actual length = 2468 (0x0009a4)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.12%) : 201632.dasm - System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
@@ -1153,9 +1153,8 @@ G_M35017_IG115:        ; bbWeight=4, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400
             bls     G_M35017_IG103
 						;; size=20 bbWeight=4 PerfScore 12.00
 G_M35017_IG116:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref
-            neg     w1, w0
             cmp     w28, #0
-            csel    w0, w0, w1, eq
+            csneg   w0, w0, w0, eq
             add     x1, x22, #4
             ; byrRegs +[x1]
             ldr     w2, [x1]
@@ -1164,7 +1163,7 @@ G_M35017_IG116:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2
             mov     x8, x23
             mov     w9, w3
             b       G_M35017_IG120
-						;; size=40 bbWeight=0.50 PerfScore 4.25
+						;; size=36 bbWeight=0.50 PerfScore 4.00
 G_M35017_IG117:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref, isz
             ; byrRegs -[x1]
             cmp     x23, x19
@@ -1433,7 +1432,7 @@ G_M35017_IG149:        ; bbWeight=0, gcrefRegs=4A01000 {x12 x21 x23 x26}, byrefR
             b       G_M35017_IG85
 						;; size=36 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 3264, prolog size 76, PerfScore 1653.15, instruction count 816, allocated bytes for code 3264 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
+; Total bytes of code 3260, prolog size 76, PerfScore 1652.50, instruction count 815, allocated bytes for code 3260 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
 ; ============================================================
 
 Unwind Info:
@@ -1444,7 +1443,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 816 (0x00330) Actual length = 3264 (0x000cc0)
+  Function Length   : 815 (0x0032f) Actual length = 3260 (0x000cbc)
   ---- 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
-8 (-2.50%) : 9874.dasm - System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
@@ -124,11 +124,10 @@ G_M9821_IG11:        ; bbWeight=4, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
 G_M9821_IG12:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sub     w0, w5, w1
             cbz     w0, G_M9821_IG15
-            neg     w6, w3
             cmp     w0, w5
-            csel    w3, w3, w6, ls
+            csneg   w3, w3, w3, ls
             mov     w0, w3
-						;; size=24 bbWeight=0.50 PerfScore 1.75
+						;; size=20 bbWeight=0.50 PerfScore 1.50
 G_M9821_IG13:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
@@ -144,10 +143,9 @@ G_M9821_IG15:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             b       G_M9821_IG17
 						;; size=16 bbWeight=0.50 PerfScore 1.50
 G_M9821_IG16:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            neg     w1, w3
             cmp     x0, x7
-            csel    w3, w3, w1, ls
-						;; size=12 bbWeight=0.50 PerfScore 0.75
+            csneg   w3, w3, w3, ls
+						;; size=8 bbWeight=0.50 PerfScore 0.50
 G_M9821_IG17:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, w3
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -161,7 +159,7 @@ G_M9821_IG19:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 320, prolog size 8, PerfScore 184.75, instruction count 80, allocated bytes for code 320 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
+; Total bytes of code 312, prolog size 8, PerfScore 183.45, instruction count 78, allocated bytes for code 312 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
 ; ============================================================
 
 Unwind Info:
@@ -172,7 +170,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 80 (0x00050) Actual length = 320 (0x000140)
+  Function Length   : 78 (0x0004e) Actual length = 312 (0x000138)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.30%) : 333.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -69,9 +69,8 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            csinv   w0, w0, w0, ge
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w23, [x22, #0x08]
@@ -82,7 +81,7 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             bne     G_M33817_IG06
             cmp     w0, #1
             bvs     G_M33817_IG13
-						;; size=76 bbWeight=0.50 PerfScore 9.50
+						;; size=72 bbWeight=0.50 PerfScore 9.25
 G_M33817_IG06:        ; bbWeight=0.50, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w24, w1, w2, w0
@@ -160,7 +159,7 @@ G_M33817_IG15:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 308, prolog size 24, PerfScore 164.55, instruction count 77, allocated bytes for code 308 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 304, prolog size 24, PerfScore 163.90, instruction count 76, allocated bytes for code 304 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -171,7 +170,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 77 (0x0004d) Actual length = 308 (0x000134)
+  Function Length   : 76 (0x0004c) Actual length = 304 (0x000130)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.25%) : 33699.dasm - V8.Crypto.BigInteger:invDigit():int:this
@@ -111,10 +111,9 @@ G_M64469_IG09:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             sdiv    w3, w0, w1
             msub    w0, w3, w1, w0
             sub     w1, w2, w0
-            neg     w2, w0
             cmp     w0, #0
-            csel    w0, w1, w2, gt
-						;; size=24 bbWeight=0.50 PerfScore 7.50
+            csneg   w0, w1, w0, gt
+						;; size=20 bbWeight=0.50 PerfScore 7.25
 G_M64469_IG10:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
@@ -138,7 +137,7 @@ G_M64469_IG14:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 320, prolog size 8, PerfScore 85.00, instruction count 80, allocated bytes for code 320 (MethodHash=c0e4042a) for method V8.Crypto.BigInteger:invDigit():int:this
+; Total bytes of code 316, prolog size 8, PerfScore 84.35, instruction count 79, allocated bytes for code 316 (MethodHash=c0e4042a) for method V8.Crypto.BigInteger:invDigit():int:this
 ; ============================================================
 
 Unwind Info:
@@ -149,7 +148,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 80 (0x00050) Actual length = 320 (0x000140)
+  Function Length   : 79 (0x0004f) Actual length = 316 (0x00013c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.50%) : 5081.dasm - System.Numerics.BigInteger:op_Modulus(System.Numerics.BigInteger,System.Numerics.BigInteger):System.Numerics.BigInteger
@@ -206,10 +206,9 @@ G_M63534_IG09:        ; bbWeight=0.50, gcrefRegs=280000 {x19 x21}, byrefRegs=000
             ; gcrRegs -[x21]
             ; byrRegs -[x0]
             mov     w1, w0
-            neg     x1, x1
             mov     w0, w0
             cmp     w20, #0
-            csel    x1, x1, x0, lt
+            csneg   x1, x0, x1, ge
             stp     xzr, xzr, [fp, #-0x70]
             sub     x0, fp, #112	// [V28 tmp17]
             movz    x2, #0xD1FFAB1E      // code for <unknown method>
@@ -217,7 +216,7 @@ G_M63534_IG09:        ; bbWeight=0.50, gcrefRegs=280000 {x19 x21}, byrefRegs=000
             movk    x2, #0xD1FFAB1E LSL #32
             ldr     x2, [x2]
             blr     x2
-						;; size=96 bbWeight=0.50 PerfScore 11.00
+						;; size=92 bbWeight=0.50 PerfScore 10.75
 G_M63534_IG10:        ; bbWeight=0.50, nogc, extend
             ldp     x0, x1, [fp, #-0x70]
             stp     x0, x1, [fp, #-0x80]
@@ -401,7 +400,7 @@ G_M63534_IG22:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=24 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 796, prolog size 64, PerfScore 190.35, instruction count 199, allocated bytes for code 796 (MethodHash=6cb107d1) for method System.Numerics.BigInteger:op_Modulus(System.Numerics.BigInteger,System.Numerics.BigInteger):System.Numerics.BigInteger
+; Total bytes of code 792, prolog size 64, PerfScore 189.70, instruction count 198, allocated bytes for code 792 (MethodHash=6cb107d1) for method System.Numerics.BigInteger:op_Modulus(System.Numerics.BigInteger,System.Numerics.BigInteger):System.Numerics.BigInteger
 ; ============================================================
 
 Unwind Info:
@@ -412,7 +411,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 199 (0x000c7) Actual length = 796 (0x00031c)
+  Function Length   : 198 (0x000c6) Actual length = 792 (0x000318)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.16%) : 2090.dasm - System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
@@ -761,9 +761,8 @@ G_M17110_IG79:        ; bbWeight=4, gcrefRegs=1400000 {x22 x24}, byrefRegs=90000
             bls     G_M17110_IG70
 						;; size=16 bbWeight=4 PerfScore 10.00
 G_M17110_IG80:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=900000 {x20 x23}, byref
-            neg     w1, w0
             cmp     w25, #0
-            csel    w0, w0, w1, eq
+            csneg   w0, w0, w0, eq
             add     x1, x20, #4
             ; byrRegs +[x1]
             ldr     w2, [x1]
@@ -773,7 +772,7 @@ G_M17110_IG80:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=90
             mov     x3, x27
             ldr     w8, [fp, #0x14]	// [V16 loc11]
             b       G_M17110_IG84
-						;; size=44 bbWeight=0.50 PerfScore 5.25
+						;; size=40 bbWeight=0.50 PerfScore 5.00
 G_M17110_IG81:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=900000 {x20 x23}, byref, isz
             ; byrRegs -[x1]
             mov     x27, x26
@@ -1017,7 +1016,7 @@ G_M17110_IG109:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 2572, prolog size 48, PerfScore 1392.70, instruction count 643, allocated bytes for code 2572 (MethodHash=af22bd29) for method System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
+; Total bytes of code 2568, prolog size 48, PerfScore 1392.05, instruction count 642, allocated bytes for code 2568 (MethodHash=af22bd29) for method System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
 ; ============================================================
 
 Unwind Info:
@@ -1028,7 +1027,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 643 (0x00283) Actual length = 2572 (0x000a0c)
+  Function Length   : 642 (0x00282) Actual length = 2568 (0x000a08)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.13%) : 2686.dasm - System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
@@ -1152,9 +1152,8 @@ G_M35017_IG114:        ; bbWeight=4, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400
             bls     G_M35017_IG102
 						;; size=20 bbWeight=4 PerfScore 12.00
 G_M35017_IG115:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref
-            neg     w1, w0
             cmp     w28, #0
-            csel    w0, w0, w1, eq
+            csneg   w0, w0, w0, eq
             add     x1, x22, #4
             ; byrRegs +[x1]
             ldr     w2, [x1]
@@ -1163,7 +1162,7 @@ G_M35017_IG115:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2
             mov     x8, x23
             mov     w9, w3
             b       G_M35017_IG119
-						;; size=40 bbWeight=0.50 PerfScore 4.25
+						;; size=36 bbWeight=0.50 PerfScore 4.00
 G_M35017_IG116:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref, isz
             ; byrRegs -[x1]
             cmp     x23, x19
@@ -1396,7 +1395,7 @@ G_M35017_IG145:        ; bbWeight=0.50, epilog, nogc, extend
             ret     lr
 						;; size=28 bbWeight=0.50 PerfScore 3.50
 
-; Total bytes of code 3176, prolog size 76, PerfScore 1639.85, instruction count 794, allocated bytes for code 3176 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
+; Total bytes of code 3172, prolog size 76, PerfScore 1639.20, instruction count 793, allocated bytes for code 3172 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
 ; ============================================================
 
 Unwind Info:
@@ -1407,7 +1406,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 794 (0x0031a) Actual length = 3176 (0x000c68)
+  Function Length   : 793 (0x00319) Actual length = 3172 (0x000c64)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
benchmarks.run_tiered.linux.arm64.checked.mch
-4 (-3.70%) : 32971.dasm - ByteMark:abs_randwc(int):int
@@ -38,10 +38,9 @@ G_M19686_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 G_M19686_IG03:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w19
             msub    w0, w1, w19, w0
-            neg     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
-						;; size=20 bbWeight=1 PerfScore 14.50
+            csneg   w0, w0, w0, ge
+						;; size=16 bbWeight=1 PerfScore 14.00
 G_M19686_IG04:        ; bbWeight=1, epilog, nogc, extend
             ldr     x19, [sp, #0x18]
             ldp     fp, lr, [sp], #0x20
@@ -55,7 +54,7 @@ G_M19686_IG06:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 108, prolog size 12, PerfScore 42.80, instruction count 27, allocated bytes for code 108 (MethodHash=b7adb319) for method ByteMark:abs_randwc(int):int
+; Total bytes of code 104, prolog size 12, PerfScore 41.90, instruction count 26, allocated bytes for code 104 (MethodHash=b7adb319) for method ByteMark:abs_randwc(int):int
 ; ============================================================
 
 Unwind Info:
@@ -66,7 +65,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 27 (0x0001b) Actual length = 108 (0x00006c)
+  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 (-2.50%) : 53106.dasm - System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
@@ -125,11 +125,10 @@ G_M9821_IG11:        ; bbWeight=4, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
 G_M9821_IG12:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sub     w0, w5, w1
             cbz     w0, G_M9821_IG15
-            neg     w6, w3
             cmp     w0, w5
-            csel    w3, w3, w6, ls
+            csneg   w3, w3, w3, ls
             mov     w0, w3
-						;; size=24 bbWeight=0.50 PerfScore 1.75
+						;; size=20 bbWeight=0.50 PerfScore 1.50
 G_M9821_IG13:        ; bbWeight=0.50, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
@@ -145,10 +144,9 @@ G_M9821_IG15:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             b       G_M9821_IG17
 						;; size=16 bbWeight=0.50 PerfScore 1.50
 G_M9821_IG16:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            neg     w1, w3
             cmp     x0, x7
-            csel    w3, w3, w1, ls
-						;; size=12 bbWeight=0.50 PerfScore 0.75
+            csneg   w3, w3, w3, ls
+						;; size=8 bbWeight=0.50 PerfScore 0.50
 G_M9821_IG17:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, w3
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -162,7 +160,7 @@ G_M9821_IG19:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 320, prolog size 8, PerfScore 184.75, instruction count 80, allocated bytes for code 320 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
+; Total bytes of code 312, prolog size 8, PerfScore 183.45, instruction count 78, allocated bytes for code 312 (MethodHash=418ad9a2) for method System.Decimal+DecCalc:VarDecCmpSub(byref,byref):int
 ; ============================================================
 
 Unwind Info:
@@ -173,7 +171,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 80 (0x00050) Actual length = 320 (0x000140)
+  Function Length   : 78 (0x0004e) Actual length = 312 (0x000138)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.30%) : 4266.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
@@ -70,9 +70,8 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w2, w0
             cmp     w0, #0
-            csel    w0, w0, w2, ge
+            csinv   w0, w0, w0, ge
             ldr     x22, [x21, #0x08]
             ; gcrRegs +[x22]
             ldr     w23, [x22, #0x08]
@@ -83,7 +82,7 @@ G_M33817_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=280
             bne     G_M33817_IG06
             cmp     w0, #1
             bvs     G_M33817_IG13
-						;; size=76 bbWeight=0.50 PerfScore 9.50
+						;; size=72 bbWeight=0.50 PerfScore 9.25
 G_M33817_IG06:        ; bbWeight=0.50, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
             sdiv    w1, w0, w2
             msub    w24, w1, w2, w0
@@ -161,7 +160,7 @@ G_M33817_IG15:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 308, prolog size 24, PerfScore 164.55, instruction count 77, allocated bytes for code 308 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
+; Total bytes of code 304, prolog size 24, PerfScore 163.90, instruction count 76, allocated bytes for code 304 (MethodHash=f7327be6) for method System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this
 ; ============================================================
 
 Unwind Info:
@@ -172,7 +171,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 77 (0x0004d) Actual length = 308 (0x000134)
+  Function Length   : 76 (0x0004c) Actual length = 304 (0x000130)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-1.00%) : 4331.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
@@ -77,9 +77,8 @@ G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             ldr     x2, [x2]
             blr     x2
             ; gcrRegs -[x1]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
+            csinv   w0, w0, w0, ge
             ldr     x23, [x20, #0x08]
             ; gcrRegs +[x23]
             ldr     w24, [x23, #0x08]
@@ -90,7 +89,7 @@ G_M58385_IG05:        ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00
             bne     G_M58385_IG06
             cmp     w0, #1
             bvs     G_M58385_IG15
-						;; size=72 bbWeight=1 PerfScore 18.50
+						;; size=68 bbWeight=1 PerfScore 18.00
 G_M58385_IG06:        ; bbWeight=1, gcrefRegs=B80000 {x19 x20 x21 x23}, byrefRegs=0000 {}, byref
             sdiv    w2, w0, w1
             msub    w25, w2, w1, w0
@@ -191,7 +190,7 @@ G_M58385_IG17:        ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 400, prolog size 28, PerfScore 249.95, instruction count 100, allocated bytes for code 400 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
+; Total bytes of code 396, prolog size 28, PerfScore 249.05, instruction count 99, allocated bytes for code 396 (MethodHash=6ea11bee) for method System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this
 ; ============================================================
 
 Unwind Info:
@@ -202,7 +201,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 100 (0x00064) Actual length = 400 (0x000190)
+  Function Length   : 99 (0x00063) Actual length = 396 (0x00018c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.16%) : 32870.dasm - System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
@@ -762,9 +762,8 @@ G_M17110_IG79:        ; bbWeight=4, gcrefRegs=1400000 {x22 x24}, byrefRegs=90000
             bls     G_M17110_IG70
 						;; size=16 bbWeight=4 PerfScore 10.00
 G_M17110_IG80:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=900000 {x20 x23}, byref
-            neg     w1, w0
             cmp     w25, #0
-            csel    w0, w0, w1, eq
+            csneg   w0, w0, w0, eq
             add     x1, x20, #4
             ; byrRegs +[x1]
             ldr     w2, [x1]
@@ -774,7 +773,7 @@ G_M17110_IG80:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=90
             mov     x3, x27
             ldr     w8, [fp, #0x14]	// [V16 loc11]
             b       G_M17110_IG84
-						;; size=44 bbWeight=0.50 PerfScore 5.25
+						;; size=40 bbWeight=0.50 PerfScore 5.00
 G_M17110_IG81:        ; bbWeight=0.50, gcrefRegs=1400000 {x22 x24}, byrefRegs=900000 {x20 x23}, byref, isz
             ; byrRegs -[x1]
             mov     x27, x26
@@ -1018,7 +1017,7 @@ G_M17110_IG109:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 2572, prolog size 48, PerfScore 1392.70, instruction count 643, allocated bytes for code 2572 (MethodHash=af22bd29) for method System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
+; Total bytes of code 2568, prolog size 48, PerfScore 1392.05, instruction count 642, allocated bytes for code 2568 (MethodHash=af22bd29) for method System.Number:TryParseNumber(byref,ulong,int,byref,System.Globalization.NumberFormatInfo):bool
 ; ============================================================
 
 Unwind Info:
@@ -1029,7 +1028,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 643 (0x00283) Actual length = 2572 (0x000a0c)
+  Function Length   : 642 (0x00282) Actual length = 2568 (0x000a08)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.13%) : 26294.dasm - System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
@@ -1153,9 +1153,8 @@ G_M35017_IG114:        ; bbWeight=4, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400
             bls     G_M35017_IG102
 						;; size=20 bbWeight=4 PerfScore 12.00
 G_M35017_IG115:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref
-            neg     w1, w0
             cmp     w28, #0
-            csel    w0, w0, w1, eq
+            csneg   w0, w0, w0, eq
             add     x1, x22, #4
             ; byrRegs +[x1]
             ldr     w2, [x1]
@@ -1164,7 +1163,7 @@ G_M35017_IG115:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2
             mov     x8, x23
             mov     w9, w3
             b       G_M35017_IG119
-						;; size=40 bbWeight=0.50 PerfScore 4.25
+						;; size=36 bbWeight=0.50 PerfScore 4.00
 G_M35017_IG116:        ; bbWeight=0.50, gcrefRegs=4200000 {x21 x26}, byrefRegs=2400000 {x22 x25}, byref, isz
             ; byrRegs -[x1]
             cmp     x23, x19
@@ -1397,7 +1396,7 @@ G_M35017_IG145:        ; bbWeight=0.50, epilog, nogc, extend
             ret     lr
 						;; size=28 bbWeight=0.50 PerfScore 3.50
 
-; Total bytes of code 3176, prolog size 76, PerfScore 1639.85, instruction count 794, allocated bytes for code 3176 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
+; Total bytes of code 3172, prolog size 76, PerfScore 1639.20, instruction count 793, allocated bytes for code 3172 (MethodHash=500a7736) for method System.Globalization.FormatProvider+Number:ParseNumber(byref,ulong,int,byref,System.Text.StringBuilder,System.Globalization.NumberFormatInfo,bool):bool
 ; ============================================================
 
 Unwind Info:
@@ -1408,7 +1407,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 794 (0x0031a) Actual length = 3176 (0x000c68)
+  Function Length   : 793 (0x00319) Actual length = 3172 (0x000c64)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
libraries_tests.pmi.linux.arm64.checked.mch
-4 (-12.50%) : 203467.dasm - System.Linq.Parallel.Tests.SumTests+<>c:b__4_10(int):int:this
@@ -18,16 +18,15 @@ G_M55964_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=8 bbWeight=1 PerfScore 1.50
 G_M55964_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     w0, #0xD1FFAB1E
-            neg     w2, w1
             cmp     w1, #0
-            csel    w0, w0, w2, eq
-						;; size=16 bbWeight=1 PerfScore 2.00
+            csneg   w0, w0, w1, eq
+						;; size=12 bbWeight=1 PerfScore 1.50
 G_M55964_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=58872563) for method System.Linq.Parallel.Tests.SumTests+<>c:<Sum_Int_Overflow>b__4_10(int):int:this
+; Total bytes of code 28, prolog size 8, PerfScore 7.80, instruction count 7, allocated bytes for code 28 (MethodHash=58872563) for method System.Linq.Parallel.Tests.SumTests+<>c:<Sum_Int_Overflow>b__4_10(int):int:this
 ; ============================================================
 
 Unwind Info:
@@ -38,7 +37,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
+  Function Length   : 7 (0x00007) Actual length = 28 (0x00001c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-12.50%) : 155889.dasm - System.Index:get_Value():int:this
@@ -20,16 +20,15 @@ G_M18211_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre
             ; byrRegs +[x0]
             ldr     w0, [x0]
             ; byrRegs -[x0]
-            mvn     w1, w0
             cmp     w0, #0
-            csel    w0, w0, w1, ge
-						;; size=16 bbWeight=1 PerfScore 4.50
+            csinv   w0, w0, w0, ge
+						;; size=12 bbWeight=1 PerfScore 4.00
 G_M18211_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 32, prolog size 8, PerfScore 11.20, instruction count 8, allocated bytes for code 32 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
+; Total bytes of code 28, prolog size 8, PerfScore 10.30, instruction count 7, allocated bytes for code 28 (MethodHash=5541b8dc) for method System.Index:get_Value():int:this
 ; ============================================================
 
 Unwind Info:
@@ -40,7 +39,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 8 (0x00008) Actual length = 32 (0x000020)
+  Function Length   : 7 (0x00007) Actual length = 28 (0x00001c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-6.25%) : 259955.dasm - FluentAssertions.NumericAssertionsExtensions:GetMinValue(long,ulong):long
@@ -24,11 +24,10 @@ G_M848_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, i
 G_M848_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mov     x2, #0xD1FFAB1E
             sub     x1, x1, x0
-            neg     x1, x1
             cmp     x0, #0
-            csel    x1, x2, x1, lt
+            csneg   x1, x2, x1, lt
             b       G_M848_IG05
-						;; size=24 bbWeight=0.50 PerfScore 1.75
+						;; size=20 bbWeight=0.50 PerfScore 1.50
 G_M848_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             sub     x1, x0, x1
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -43,7 +42,7 @@ G_M848_IG06:        ; bbWeight=1, epilog, nogc, extend
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 64, prolog size 8, PerfScore 14.90, instruction count 16, allocated bytes for code 64 (MethodHash=854efcaf) for method FluentAssertions.NumericAssertionsExtensions:GetMinValue(long,ulong):long
+; Total bytes of code 60, prolog size 8, PerfScore 14.25, instruction count 15, allocated bytes for code 60 (MethodHash=854efcaf) for method FluentAssertions.NumericAssertionsExtensions:GetMinValue(long,ulong):long
 ; ============================================================
 
 Unwind Info:
@@ -54,7 +53,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 16 (0x00010) Actual length = 64 (0x000040)
+  Function Length   : 15 (0x0000f) Actual length = 60 (0x00003c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.41%) : 235069.dasm - System.Numerics.Tests.BigIntegerTests_GenericMath:TryConvertToTruncatingUInt16Test()
@@ -113,12 +113,11 @@ G_M7785_IG04:        ; bbWeight=0.50, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, by
             bls     G_M7785_IG10
             ldr     w1, [x1, #0x10]
             ; gcrRegs -[x1]
-            neg     w2, w1
             cmp     w0, #0
-            csel    w1, w1, w2, ge
+            csneg   w1, w1, w1, ge
             uxth    w20, w1
             b       G_M7785_IG06
-						;; size=36 bbWeight=0.50 PerfScore 5.25
+						;; size=32 bbWeight=0.50 PerfScore 5.00
 G_M7785_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             uxth    w20, w0
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -462,7 +461,7 @@ G_M7785_IG10:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 972, prolog size 32, PerfScore 314.20, instruction count 243, allocated bytes for code 972 (MethodHash=742ce196) for method System.Numerics.Tests.BigIntegerTests_GenericMath:TryConvertToTruncatingUInt16Test()
+; Total bytes of code 968, prolog size 32, PerfScore 313.55, instruction count 242, allocated bytes for code 968 (MethodHash=742ce196) for method System.Numerics.Tests.BigIntegerTests_GenericMath:TryConvertToTruncatingUInt16Test()
 ; ============================================================
 
 Unwind Info:
@@ -473,7 +472,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 243 (0x000f3) Actual length = 972 (0x0003cc)
+  Function Length   : 242 (0x000f2) Actual length = 968 (0x0003c8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-0.36%) : 234302.dasm - System.Numerics.Tests.ToStringTest:GeneralFormatter(System.String,int,System.Globalization.NumberFormatInfo):System.String
@@ -131,9 +131,8 @@ G_M57438_IG07:        ; bbWeight=0.50, gcrefRegs=280000 {x19 x21}, byrefRegs=000
             sub     w0, w20, #1
             cmp     w20, #0
             csel    w1, wzr, w0, eq
-            neg     w0, w1
             cmp     w23, #0
-            csel    w1, w1, w0, eq
+            csneg   w1, w1, w1, eq
             mov     x0, x21
             ; gcrRegs +[x0]
             mov     x2, x19
@@ -210,7 +209,7 @@ G_M57438_IG07:        ; bbWeight=0.50, gcrefRegs=280000 {x19 x21}, byrefRegs=000
             ; gcrRegs -[x1 x21]
             mov     x22, x0
             ; gcrRegs +[x22]
-						;; size=252 bbWeight=0.50 PerfScore 33.75
+						;; size=248 bbWeight=0.50 PerfScore 33.50
 G_M57438_IG08:        ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz
             ; gcrRegs -[x0]
             sub     w0, w20, #1
@@ -481,7 +480,7 @@ G_M57438_IG25:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             brk_unix #0
 						;; size=8 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1104, prolog size 20, PerfScore 412.65, instruction count 276, allocated bytes for code 1104 (MethodHash=ba1d1fa1) for method System.Numerics.Tests.ToStringTest:GeneralFormatter(System.String,int,System.Globalization.NumberFormatInfo):System.String
+; Total bytes of code 1100, prolog size 20, PerfScore 412.00, instruction count 275, allocated bytes for code 1100 (MethodHash=ba1d1fa1) for method System.Numerics.Tests.ToStringTest:GeneralFormatter(System.String,int,System.Globalization.NumberFormatInfo):System.String
 ; ============================================================
 
 Unwind Info:
@@ -492,7 +491,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 276 (0x00114) Actual length = 1104 (0x000450)
+  Function Length   : 275 (0x00113) Actual length = 1100 (0x00044c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+0 (0.00%) : 226195.dasm - CoreXml.Test.XLinq.InputSpace:Hamlet(byref,byref)

No diffs found?

coreclr_tests.run.linux.arm64.checked.mch
-4 (-14.29%) : 96726.dasm - JIT.HardwareIntrinsics.Arm.Helpers:Abs(int):uint
@@ -17,16 +17,15 @@ G_M24190_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
 G_M24190_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            neg     w1, w0
             cmp     w0, #0
-            csel    w0, w1, w0, lt
-						;; size=12 bbWeight=1 PerfScore 1.50
+            csneg   w0, w0, w0, ge
+						;; size=8 bbWeight=1 PerfScore 1.00
 G_M24190_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 28, prolog size 8, PerfScore 7.80, instruction count 7, allocated bytes for code 28 (MethodHash=8bbaa181) for method JIT.HardwareIntrinsics.Arm.Helpers:Abs(int):uint
+; Total bytes of code 24, prolog size 8, PerfScore 6.90, instruction count 6, allocated bytes for code 24 (MethodHash=8bbaa181) for method JIT.HardwareIntrinsics.Arm.Helpers:Abs(int):uint
 ; ============================================================
 
 Unwind Info:
@@ -37,7 +36,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 7 (0x00007) Actual length = 28 (0x00001c)
+  Function Length   : 6 (0x00006) Actual length = 24 (0x000018)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-14.29%) : 85975.dasm - JIT.HardwareIntrinsics.Arm.Helpers:Abs(long):ulong
@@ -17,16 +17,15 @@ G_M22270_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             mov     fp, sp
 						;; size=8 bbWeight=1 PerfScore 1.50
 G_M22270_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            neg     x1, x0
             cmp     x0, #0
-            csel    x0, x1, x0, lt
-						;; size=12 bbWeight=1 PerfScore 1.50
+            csneg   x0, x0, x0, ge
+						;; size=8 bbWeight=1 PerfScore 1.00
 G_M22270_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 28, prolog size 8, PerfScore 7.80, instruction count 7, allocated bytes for code 28 (MethodHash=5b1da901) for method JIT.HardwareIntrinsics.Arm.Helpers:Abs(long):ulong
+; Total bytes of code 24, prolog size 8, PerfScore 6.90, instruction count 6, allocated bytes for code 24 (MethodHash=5b1da901) for method JIT.HardwareIntrinsics.Arm.Helpers:Abs(long):ulong
 ; ============================================================
 
 Unwind Info:
@@ -37,7 +36,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 7 (0x00007) Actual length = 28 (0x00001c)
+  Function Length   : 6 (0x00006) Actual length = 24 (0x000018)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-4 (-6.67%) : 479458.dasm - ILGEN_0x1a8938c:Method_0x5f6dc3a1():int
@@ -25,17 +25,16 @@ G_M32934_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             movk    w1, #0xD1FFAB1E LSL #16
             strh    w1, [x0]
             ldrh    w0, [x0]
-            mvn     w1, w0
-            movn    w2, #7
+            movn    w1, #7
             cmp     w0, #7
-            csel    w0, w1, w2, ne
-						;; size=44 bbWeight=1 PerfScore 8.50
+            csinv   w0, w1, w0, eq
+						;; size=40 bbWeight=1 PerfScore 8.00
 G_M32934_IG03:        ; bbWeight=1, epilog, nogc, extend
             ldp     fp, lr, [sp], #0x10
             ret     lr
 						;; size=8 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 60, prolog size 8, PerfScore 18.00, instruction count 15, allocated bytes for code 60 (MethodHash=dc427f59) for method ILGEN_0x1a8938c:Method_0x5f6dc3a1():int
+; Total bytes of code 56, prolog size 8, PerfScore 17.10, instruction count 14, allocated bytes for code 56 (MethodHash=dc427f59) for method ILGEN_0x1a8938c:Method_0x5f6dc3a1():int
 ; ============================================================
 
 Unwind Info:
@@ -46,7 +45,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 15 (0x0000f) Actual length = 60 (0x00003c)
+  Function Length   : 14 (0x0000e) Actual length = 56 (0x000038)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+0 (0.00%) : 196741.dasm - LargeFuncletFrame:.cctor()

No diffs found?

+0 (0.00%) : 484753.dasm - test:Main():int

No diffs found?

+0 (0.00%) : 282904.dasm - test:Main():int

No diffs found?

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
libraries.crossgen2.linux.arm64.checked.mch 56 56 0 0 -232 +0
benchmarks.run_pgo.linux.arm64.checked.mch 494 494 0 0 -1,980 +0
libraries.pmi.linux.arm64.checked.mch 55 55 0 0 -232 +0
benchmarks.run.linux.arm64.checked.mch 7 7 0 0 -32 +0
benchmarks.run_tiered.linux.arm64.checked.mch 6 6 0 0 -28 +0
libraries_tests.pmi.linux.arm64.checked.mch 42 41 0 1 -204 +0
coreclr_tests.run.linux.arm64.checked.mch 79 76 0 3 -316 +0
739 735 0 4 -3,024 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
libraries.crossgen2.linux.arm64.checked.mch 185,669 15 185,654 0 (0.00%) 0 (0.00%)
benchmarks.run_pgo.linux.arm64.checked.mch 115,854 58,261 57,593 1,757 (1.52%) 1,757 (1.52%)
libraries.pmi.linux.arm64.checked.mch 258,054 4,753 253,301 0 (0.00%) 0 (0.00%)
benchmarks.run.linux.arm64.checked.mch 36,519 7,427 29,092 413 (1.13%) 413 (1.13%)
benchmarks.run_tiered.linux.arm64.checked.mch 58,672 43,654 15,018 121 (0.21%) 121 (0.21%)
libraries_tests.pmi.linux.arm64.checked.mch 366,128 8,160 357,968 0 (0.00%) 0 (0.00%)
coreclr_tests.run.linux.arm64.checked.mch 531,010 324,315 206,695 0 (0.00%) 0 (0.00%)
1,551,906 446,585 1,105,321 2,291 (0.15%) 2,291 (0.15%)

jit-analyze output

@SwapnilGaikwad
Copy link
Contributor Author

The failures seems to be known issues and unrelated to the patch.

@SwapnilGaikwad SwapnilGaikwad changed the title Use cinv instead of csel when possible Use cinv and cneg instead of csel when possible May 22, 2023
GenTree* revCond = comp->gtReverseCond(cond);
assert(cond == revCond); // Ensure `gtReverseCond` did not create a new node.
}
select->gtOp1 = cond->AsOp();
BlockRange().Remove(select->gtOp2, true);
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 true case for if (select->OperIs(GT_SELECT)) is not being tested at the moment through tests or spmi replay. Not sure how can we have a coverage for this part.

Copy link
Member

Choose a reason for hiding this comment

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

Yeah, it's hard for the condition to interfere with the operands when we only do this optimization for constant operands. Interference between the condition and operands is what causes this case to occur.

If we generalized it to handle general SELECT(cond, x, ADD(y, 1)) then I think it would be easier to hit. But I don't think we need to worry about that as part of this PR.

@jakobbotsch
Copy link
Member

@SwapnilGaikwad It looks like the tests are failing to compile now, can you push a fix?

@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).

@jakobbotsch
Copy link
Member

The Fuzzlyn failure looks related:

// Generated by Fuzzlyn v1.5 on 2023-05-23 18:03:39
// Run on Arm64 Linux
// Seed: 10523664445013849285
// Reduced from 114.3 KiB to 0.4 KiB in 00:02:06
// Hits JIT assert in Release:
// Assertion failed 'op2 == nullptr || !op2->isContained() || op2->IsIntegralConst(0)' in 'Program:Main(Fuzzlyn.ExecutionServer.IRuntime)' during 'Generate code' (IL size 54; hash 0xade6b36b; FullOpts)
// 
//     File: /__w/1/s/src/coreclr/jit/codegenarm64.cpp Line: 4744
// 
public class C0
{
    public int F3;
}

public class Program
{
    public static C0[] s_5;
    public static C0 s_25;
    public static sbyte s_30;
    public static void Main()
    {
        int vr6 = s_5[0].F3;
        bool vr8 = s_30 < s_25.F3;
        if (vr8)
        {
            vr6 = -(vr6 >> 1);
        }

        System.Console.WriteLine(vr6);
    }
}

@SwapnilGaikwad
Copy link
Contributor Author

I gave Fuzzlyn a go for an hour. It tripped over about 6 times but those individual seeds couldn't reproduce a failure, e.g., 9987102894162552204. Not sure can we consider them false positives. Didn't hit anything beyond that.

@jakobbotsch
Copy link
Member

I gave Fuzzlyn a go for an hour. It tripped over about 6 times but those individual seeds couldn't reproduce a failure, e.g., 9987102894162552204. Not sure can we consider them false positives. Didn't hit anything beyond that.

What do you mean when you say you couldn't reproduce those issues? Did it fail already during reduction, and what did Fuzzlyn say the problem was with those seeds?

@SwapnilGaikwad
Copy link
Contributor Author

When I ran with -run_duratino 60, Fuzzlyn showed a message that error occurred while running a program and emitted the seed number. However, when I tried reproduce the error using the following command, it executed correctly without any errors.
Fuzzlyn --num-programs 1 --host $CORE_ROOT/corerun --seed 9987102894162552204

Adding the --reduce option throws the following error.

$ Fuzzlyn --num-programs 1 --host $CORE_ROOT/corerun --seed 9987102894162552204 -reduce
Unhandled exception. System.InvalidOperationException: Program has no errors
   at Fuzzlyn.Reduction.Reducer.Reduce() in /opt/fuzzlyn/Fuzzlyn/Reduction/Reducer.cs:line 82
   at Fuzzlyn.Program.ReduceProgram(FuzzlynOptions options, String outputPath, String reduceDebugGitDir) in /opt/fuzzlyn/Fuzzlyn/Program.cs:line 211
   at Fuzzlyn.Program.Main(String[] args) in /opt/fuzzlyn/Fuzzlyn/Program.cs:line 148
Aborted (core dumped)

@jakobbotsch
Copy link
Member

@SwapnilGaikwad When Fuzzlyn outputs the seed as part of finding an example, it should also output what error it observed. What did it output here? Just that it is a program that computes the wrong result?

The situation you describe usually indicates that there is some use of uninitialized stack in the program, where launching a new process might affect whether it is reproduced. There is a known issue like that that rarely reproduces on macOS, but I am not familiar with that happening on other platforms. So it is a bit worrying, especially if you can reproduce it at a rate of 6 times per hour. Can you see if the same happens without this PR, in which case we do not need to block the PR on it? And what OS/CPU are you using to run Fuzzlyn?

@SwapnilGaikwad
Copy link
Contributor Author

Hi Jakob,

I think, I saw the following output. I closed the session but copied the partial output with seeds to reproduce the error.
It didn't output anything obvious, such as an assertion failures.

Found example with seed 7140725860732138981 that hits error
Found example with seed 2583858004279235981 that hits error
Found example with seed 3378726335272549415 that hits error
Found example with seed 9147514892870304969 that hits error
Found example with seed 9987102894162552204 that hits error
Found example with seed 9311192523295413741 that hits error

Since then, I ran Fuzzlyn on both main and the patch for over two hours but didn't see any errors.
Just thought of mentioning it to you to check whether you have see such one off errors.
The tests ran on the 80 core N1 machine with Ubuntu 22.04. Not sure if an unrelated issue with a race condition may have hit.

@jakobbotsch
Copy link
Member

Fuzzlyn launches "execution servers" on the host corerun you specify that accepts programs to run. Is it possible those processes were killed by the OOM killer? Can you check in the logs? When the execution server exits unexpectedly Fuzzlyn will read stderr and print the message you are seeing there with the stderr. If stderr was empty, that would be the result. Seems like I should also print the exit code to make this clearer.

In any case seems we don't need to hold this PR up on this.

@SwapnilGaikwad
Copy link
Contributor Author

Didn't find any traces of potential OOM kill unfortunately.

@jakobbotsch jakobbotsch merged commit 86ce145 into dotnet:main May 25, 2023
138 checks passed
@jakobbotsch
Copy link
Member

Thanks!

@SwapnilGaikwad SwapnilGaikwad deleted the github-cinv branch May 26, 2023 12:10
@dotnet dotnet locked as resolved and limited conversation to collaborators Jun 25, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants