Skip to content

Conversation

@namu-lee
Copy link
Contributor

Constant CSE is not enabled by default in RISCV64.

Enabling the constant CSE hoists the instructions used to load large, but repeatedly used constants so they can be shared.

Since generating a large constant requires at least 3 instructions in RISCV64, enabling constant CSE suppresses the emission of several redundant instruction sequences which would otherwise generate the same large constant.

Part of #84834, cc @dotnet/samsung
@SkyShield @credo-quia-absurdum

Copilot AI review requested due to automatic review settings November 18, 2025 11:17
@github-actions github-actions bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Nov 18, 2025
@dotnet-policy-service dotnet-policy-service bot added the community-contribution Indicates that the PR has been added by a community member label Nov 18, 2025
@namu-lee
Copy link
Contributor Author

Diffs are based on 25,990 contexts (673 MinOpts, 25,317 FullOpts).

MISSED contexts: base: 41 (0.16%), diff: 1 (0.00%)

Overall (-35,746 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 8,102,702 -35,746 -1.37%
MinOpts (+0 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 363,614 +0 0.00%
FullOpts (-35,746 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 7,739,088 -35,746 -1.39%
Example diffs
System.Private.CoreLib.mch
-40 (-38.46%) : 19577.dasm - System.ComAwareWeakReference:InitializeCallbacks(ptr,ptr,ptr) (FullOpts)
@@ -11,6 +11,7 @@
 ;  V01 arg1         [V01,T01] (  3,  3   )    long  ->   a1         single-def
 ;  V02 arg2         [V02,T02] (  3,  3   )    long  ->   a2         single-def
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V04 cse0         [V04,T03] (  4,  4   )    long  ->   a3         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -22,32 +23,22 @@ G_M38620_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M38620_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             a0, 0xD1FFAB1E(t6)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             a2, 0xD1FFAB1E(t6)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             a1, 0xD1FFAB1E(t6)
-						;; size=72 bbWeight=1 PerfScore 27.00
+            lui            a3, 0xD1FFAB1E
+            addiw          a3, a3, 0xD1FFAB1E
+            slli           a3, a3, 12
+            addi           a3, a3, 0xD1FFAB1E
+            slli           a3, a3, 3
+            sd             a0, 0xD1FFAB1E(a3)
+            sd             a2, 0xD1FFAB1E(a3)
+            sd             a1, 0xD1FFAB1E(a3)
+						;; size=32 bbWeight=1 PerfScore 17.00
 G_M38620_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 104, prolog size 16, PerfScore 43.50, instruction count 14, allocated bytes for code 104 (MethodHash=8ffd6923) for method System.ComAwareWeakReference:InitializeCallbacks(ptr,ptr,ptr) (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 33.50, instruction count 12, allocated bytes for code 64 (MethodHash=8ffd6923) for method System.ComAwareWeakReference:InitializeCallbacks(ptr,ptr,ptr) (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -58,7 +49,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 52 (0x00034) Actual length = 104 (0x000068)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-40 (-33.33%) : 22849.dasm - System.DateTimeOffset:.cctor() (FullOpts)
@@ -39,6 +39,7 @@
 ;* V28 tmp28        [V28    ] (  0,  0   )    long  ->  zero-ref    "field V07._dateData (fldOffset=0x0)" P-INDEP
 ;* V29 tmp29        [V29    ] (  0,  0   )    long  ->  zero-ref    "field V13._dateData (fldOffset=0x0)" P-INDEP
 ;* V30 tmp30        [V30    ] (  0,  0   )    long  ->  zero-ref    "field V15._dateData (fldOffset=0x0)" P-INDEP
+;  V31 cse0         [V31,T00] (  5,  5   )    long  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -50,29 +51,19 @@ G_M10593_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M10593_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 16
-            sw             zero, 0xD1FFAB1E(t6)
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
             slli           a0, a0, 15
             addi           a0, a0, 0xD1FFAB1E
+            sw             zero, 0xD1FFAB1E(a0)
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             sd             a1, 0xD1FFAB1E(a0)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 16
-            sw             zero, 0xD1FFAB1E(t6)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 15
-            addi           a0, a0, 0xD1FFAB1E
+            sw             zero, 0xD1FFAB1E(a0)
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             sd             a1, 0xD1FFAB1E(a0)
-						;; size=88 bbWeight=1 PerfScore 34.00
+						;; size=48 bbWeight=1 PerfScore 24.00
 G_M10593_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -82,7 +73,7 @@ RWD00  	dq	2BCA2875F4373FFFh
 RWD08  	dq	089F7FF5F7B58000h
 
 
-; Total bytes of code 120, prolog size 16, PerfScore 50.50, instruction count 18, allocated bytes for code 120 (MethodHash=ed90d69e) for method System.DateTimeOffset:.cctor() (FullOpts)
+; Total bytes of code 80, prolog size 16, PerfScore 40.50, instruction count 15, allocated bytes for code 80 (MethodHash=ed90d69e) for method System.DateTimeOffset:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -93,7 +84,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 60 (0x0003c) Actual length = 120 (0x000078)
+  Function Length   : 40 (0x00028) Actual length = 80 (0x000050)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-40 (-32.26%) : 321.dasm - System.TimeSpan:.cctor() (FullOpts)
@@ -15,6 +15,7 @@
 ;* V04 tmp4         [V04    ] (  0,  0   )    long  ->  zero-ref    "field V01._ticks (fldOffset=0x0)" P-INDEP
 ;* V05 tmp5         [V05    ] (  0,  0   )    long  ->  zero-ref    "field V02._ticks (fldOffset=0x0)" P-INDEP
 ;* V06 tmp6         [V06    ] (  0,  0   )    long  ->  zero-ref    "field V03._ticks (fldOffset=0x0)" P-INDEP
+;  V07 cse0         [V07,T00] (  4,  4   )    long  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -26,37 +27,27 @@ G_M15924_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M15924_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             zero, 0xD1FFAB1E(t6)
-            addiw          a0, zero, 0xD1FFAB1E
-            slli           a0, a0, 63
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 12
             addi           a0, a0, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             a0, 0xD1FFAB1E(t6)
-            addiw          a0, zero, 0xD1FFAB1E
-            slli           a0, a0, 63
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             a0, 0xD1FFAB1E(t6)
-						;; size=92 bbWeight=1 PerfScore 32.00
+            slli           a0, a0, 3
+            sd             zero, 0xD1FFAB1E(a0)
+            addiw          a1, zero, 0xD1FFAB1E
+            slli           a1, a1, 63
+            addi           a1, a1, 0xD1FFAB1E
+            sd             a1, 0xD1FFAB1E(a0)
+            addiw          a1, zero, 0xD1FFAB1E
+            slli           a1, a1, 63
+            sd             a1, 0xD1FFAB1E(a0)
+						;; size=52 bbWeight=1 PerfScore 22.00
 G_M15924_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 124, prolog size 16, PerfScore 48.50, instruction count 16, allocated bytes for code 124 (MethodHash=2791c1cb) for method System.TimeSpan:.cctor() (FullOpts)
+; Total bytes of code 84, prolog size 16, PerfScore 38.50, instruction count 14, allocated bytes for code 84 (MethodHash=2791c1cb) for method System.TimeSpan:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -67,7 +58,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 62 (0x0003e) Actual length = 124 (0x00007c)
+  Function Length   : 42 (0x0002a) Actual length = 84 (0x000054)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+40 (+17.54%) : 133.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
@@ -38,6 +38,7 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )     int  ->   a1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=32; lcl=0
@@ -94,8 +95,18 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -112,7 +123,7 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             addi           t6, t6, 0xD1FFAB1E
             slli           t6, t6, 2
             ld             a5, 0xD1FFAB1E(t6)
-						;; size=176 bbWeight=1 PerfScore 54.50
+						;; size=216 bbWeight=1 PerfScore 61.50
 G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             s2, 24(sp)
             ld             s1, 16(sp)
@@ -121,11 +132,10 @@ G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             jr             a5		// <unknown method>
 						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	516D5A0549592C0Fh
-RWD08  	dq	896C02024EA64BAAh
+RWD00  	dq	896C02024EA64BAAh
 
 
-; Total bytes of code 228, prolog size 28, PerfScore 83.50, instruction count 35, allocated bytes for code 228 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
+; Total bytes of code 268, prolog size 28, PerfScore 90.50, instruction count 43, allocated bytes for code 268 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -136,7 +146,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 114 (0x00072) Actual length = 228 (0x0000e4)
+  Function Length   : 134 (0x00086) Actual length = 268 (0x00010c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+30 (+13.16%) : 152.dasm - System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
@@ -38,6 +38,7 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )     int  ->   a1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=32; lcl=0
@@ -94,8 +95,16 @@ G_M31483_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            addiw          a2, a1, 0xD1FFAB1E
+            zext.h         a1, a1
+            slli.uw        a1, a1, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a1, a0, a1
+            slli.uw        a2, a2, 48
+            or             a1, a1, a2
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -112,7 +121,7 @@ G_M31483_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             addi           t6, t6, 0xD1FFAB1E
             slli           t6, t6, 2
             ld             a5, 0xD1FFAB1E(t6)
-						;; size=176 bbWeight=1 PerfScore 54.50
+						;; size=206 bbWeight=1 PerfScore 59.50
 G_M31483_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             s2, 24(sp)
             ld             s1, 16(sp)
@@ -121,11 +130,10 @@ G_M31483_IG03:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             jr             a5		// <unknown method>
 						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	5DB95CEF0866B2B8h
-RWD08  	dq	444A81FD0F0C1226h
+RWD00  	dq	444A81FD0F0C1226h
 
 
-; Total bytes of code 228, prolog size 28, PerfScore 83.50, instruction count 35, allocated bytes for code 228 (MethodHash=51938504) for method System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
+; Total bytes of code 258, prolog size 28, PerfScore 88.50, instruction count 42, allocated bytes for code 258 (MethodHash=51938504) for method System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -136,7 +144,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 114 (0x00072) Actual length = 228 (0x0000e4)
+  Function Length   : 129 (0x00081) Actual length = 258 (0x000102)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+11.76%) : 3688.dasm - System.OrdinalComparer:GetHashCode():int:this (FullOpts)
@@ -12,6 +12,7 @@
 ;  V01 loc0         [V01,T01] (  3,  2   )     int  ->   a0        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V03 tmp1         [V03    ] (  0,  0   )    long  ->  zero-ref    "Inline stloc first use temp"
+;  V04 cse0         [V04,T02] (  2,  2   )     ref  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 Frame info. #outsz=0; #framesz=32; lcl=8
@@ -26,9 +27,14 @@ G_M30928_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             ; gcrRegs +[s1]
 						;; size=24 bbWeight=1 PerfScore 13.50
 G_M30928_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 12
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 3
             addi           a1, zero, 0xD1FFAB1E
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            addi           a0, a0, 0xD1FFAB1E
+            ; byrRegs +[a0]
             lui            a2, 0xD1FFAB1E
             addiw          a2, a2, 0xD1FFAB1E
             lui            a3, 0xD1FFAB1E
@@ -40,10 +46,11 @@ G_M30928_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             slli           t6, t6, 2
             ld             a4, 0xD1FFAB1E(t6)
             jalr           a4		// <unknown method>
+            ; byrRegs -[a0]
             lbu            a1, 0xD1FFAB1E(s1)
             sext.w         a1, a1
             beqz           a1, G_M30928_IG05
-						;; size=68 bbWeight=1 PerfScore 23.50
+						;; size=84 bbWeight=1 PerfScore 27.00
 G_M30928_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[s1]
             not            a0, a0
@@ -60,10 +67,8 @@ G_M30928_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             ld             fp, 8(sp)
             addi           sp, sp, 32
             ret						;; size=20 bbWeight=0.50 PerfScore 4.75
-RWD00  	dq	00002ACB341F29D4h
 
-
-; Total bytes of code 136, prolog size 20, PerfScore 46.75, instruction count 27, allocated bytes for code 136 (MethodHash=f0e4872f) for method System.OrdinalComparer:GetHashCode():int:this (FullOpts)
+; Total bytes of code 152, prolog size 20, PerfScore 50.25, instruction count 28, allocated bytes for code 152 (MethodHash=f0e4872f) for method System.OrdinalComparer:GetHashCode():int:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -74,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 68 (0x00044) Actual length = 136 (0x000088)
+  Function Length   : 76 (0x0004c) Actual length = 152 (0x000098)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
System.Private.CoreLib.mch 2,514 1,242 253 1,019 -39,180 +3,434

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
System.Private.CoreLib.mch 2,514 1,170 416 928 -4.21% +3.86% -0.1364%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
System.Private.CoreLib.mch 25,990 673 25,317 41 (0.16%) 1 (0.00%)

jit-analyze output

System.Private.CoreLib.mch

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 8102702 (overridden on cmd)
Total bytes of diff: 8066956 (overridden on cmd)
Total bytes of delta: -35746 (-0.44 % of base)
    diff is an improvement.
    relative diff is an improvement.
Detail diffs


Top file regressions (bytes):
         324 : 3877.dasm (6.385% of base)
         100 : 965.dasm (5.767% of base)
          92 : 13066.dasm (6.866% of base)
          72 : 19364.dasm (2.490% of base)
          40 : 19115.dasm (2.500% of base)
          40 : 133.dasm (17.544% of base)
          36 : 18266.dasm (1.925% of base)
          36 : 11901.dasm (1.063% of base)
          32 : 18228.dasm (0.921% of base)
          32 : 372.dasm (1.354% of base)
          32 : 22867.dasm (0.341% of base)
          32 : 20980.dasm (1.869% of base)
          32 : 8824.dasm (1.497% of base)
          32 : 11900.dasm (1.524% of base)
          32 : 20134.dasm (0.796% of base)
          30 : 152.dasm (13.158% of base)
          28 : 19928.dasm (0.475% of base)
          28 : 7893.dasm (3.723% of base)
          28 : 19929.dasm (0.511% of base)
          28 : 23220.dasm (1.877% of base)

Top file improvements (bytes):
       -1988 : 17306.dasm (-62.203% of base)
       -1800 : 6067.dasm (-4.805% of base)
        -896 : 6876.dasm (-9.877% of base)
        -896 : 6881.dasm (-9.816% of base)
        -636 : 11286.dasm (-11.964% of base)
        -590 : 23373.dasm (-25.085% of base)
        -590 : 23374.dasm (-26.697% of base)
        -404 : 4154.dasm (-1.194% of base)
        -400 : 4229.dasm (-11.198% of base)
        -392 : 19376.dasm (-5.429% of base)
        -364 : 23315.dasm (-19.528% of base)
        -302 : 402.dasm (-18.505% of base)
        -300 : 19793.dasm (-60.976% of base)
        -292 : 6653.dasm (-11.424% of base)
        -284 : 4161.dasm (-5.104% of base)
        -284 : 4207.dasm (-9.726% of base)
        -284 : 4274.dasm (-11.507% of base)
        -280 : 20708.dasm (-8.318% of base)
        -268 : 6652.dasm (-10.420% of base)
        -240 : 17988.dasm (-53.097% of base)

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

Top method regressions (bytes):
         324 (6.385% of base) : 3877.dasm - System.ThrowHelper:GetResourceString(int):System.String (FullOpts)
         100 (5.767% of base) : 965.dasm - PrepareAll:WriteAndFlushNextMethodToPrepMarker():this (FullOpts)
          92 (6.866% of base) : 13066.dasm - System.Runtime.Intrinsics.Vector128:CreateSequence[int](int,int):System.Runtime.Intrinsics.Vector128`1[int] (FullOpts)
          72 (2.490% of base) : 19364.dasm - System.Array:Reverse(System.Array,int,int) (FullOpts)
          40 (2.500% of base) : 19115.dasm - Interop+procfs:TryReadFile(System.String,byref):bool (FullOpts)
          40 (17.544% of base) : 133.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
          36 (1.925% of base) : 18266.dasm - System.IO.StreamReader:ReadLine():System.String:this (FullOpts)
          36 (1.063% of base) : 11901.dasm - System.Text.UnicodeEncoding:GetChars(ptr,int,ptr,int,System.Text.DecoderNLS):int:this (FullOpts)
          32 (0.921% of base) : 18228.dasm - PMIDriver.PMIDriver:Compute(PMIDriver.PrepAllInfo):PMIDriver.PrepAllResult (FullOpts)
          32 (0.341% of base) : 22867.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (FullOpts)
          32 (0.796% of base) : 20134.dasm - System.Environment:ReadXdgDirectory(System.String,System.String,System.String):System.String (FullOpts)
          32 (1.354% of base) : 372.dasm - System.Runtime.InteropServices.SafeHandle:Dispose(bool):this (FullOpts)
          32 (1.869% of base) : 20980.dasm - System.String:ReplaceLineEndingsCore(System.String):System.String:this (FullOpts)
          32 (1.524% of base) : 11900.dasm - System.Text.UnicodeEncoding:GetCharCount(ptr,int,System.Text.DecoderNLS):int:this (FullOpts)
          32 (1.497% of base) : 8824.dasm - System.Threading.ManualResetEventSlim:Wait(int,System.Threading.CancellationToken):bool:this (FullOpts)
          30 (13.158% of base) : 152.dasm - System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
          28 (3.723% of base) : 7893.dasm - System.Buffers.Text.Utf8Parser:TryCreateDateTimeOffset(System.DateTime,bool,int,int,byref):bool (FullOpts)
          28 (1.877% of base) : 23220.dasm - System.DateTimeFormat:GetAllDateTimes(System.DateTime,char,System.Globalization.DateTimeFormatInfo):System.String[] (FullOpts)
          28 (0.475% of base) : 19928.dasm - System.Enum:GetValuesAsUnderlyingType(System.RuntimeType):System.Array (FullOpts)
          28 (0.511% of base) : 19929.dasm - System.Enum:GetValuesAsUnderlyingTypeNoCopy(System.RuntimeType):System.Array (FullOpts)

Top method improvements (bytes):
       -1988 (-62.203% of base) : 17306.dasm - System.Runtime.InteropServices.ComWrappers:.cctor() (FullOpts)
       -1800 (-4.805% of base) : 6067.dasm - System.Globalization.CultureData:get_RegionNames():System.Collections.Generic.Dictionary`2[System.String,System.String] (FullOpts)
        -896 (-9.877% of base) : 6876.dasm - System.Globalization.Ordinal:EqualsIgnoreCaseUtf8_Vector128(byref,int,byref,int):bool (FullOpts)
        -896 (-9.816% of base) : 6881.dasm - System.Globalization.Ordinal:StartsWithIgnoreCaseUtf8_Vector128(byref,int,byref,int):bool (FullOpts)
        -636 (-11.964% of base) : 11286.dasm - System.Text.Ascii:NarrowUtf16ToAscii_Intrinsified(ptr,ptr,nuint):nuint (FullOpts)
        -590 (-25.085% of base) : 23373.dasm - System.Guid:TryParseExactD[byte](System.ReadOnlySpan`1[byte],byref):bool (FullOpts)
        -590 (-26.697% of base) : 23374.dasm - System.Guid:TryParseExactN[byte](System.ReadOnlySpan`1[byte],byref):bool (FullOpts)
        -404 (-1.194% of base) : 4154.dasm - System.TimeZoneInfo:CacheTransitionsForYear(int):System.ValueTuple`2[int,int]:this (FullOpts)
        -400 (-11.198% of base) : 4229.dasm - System.TimeZoneInfo+AdjustmentRule:.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext):this (FullOpts)
        -392 (-5.429% of base) : 19376.dasm - System.Array:Sort(System.Array,System.Array,int,int,System.Collections.IComparer) (FullOpts)
        -364 (-19.528% of base) : 23315.dasm - System.DateTimeParse:.cctor() (FullOpts)
        -302 (-18.505% of base) : 402.dasm - System.TimeZoneInfo:GetNextNowTransition(System.DateTime):System.TimeZoneInfo+DateTimeNowCache:this (FullOpts)
        -300 (-60.976% of base) : 19793.dasm - System.Decimal:.cctor() (FullOpts)
        -292 (-11.424% of base) : 6653.dasm - System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[char],System.ReadOnlySpan`1[char]):int (FullOpts)
        -284 (-9.726% of base) : 4207.dasm - System.TimeZoneInfo:.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext):this (FullOpts)
        -284 (-5.104% of base) : 4161.dasm - System.TimeZoneInfo:GetAdjustmentRules():System.TimeZoneInfo+AdjustmentRule[]:this (FullOpts)
        -284 (-11.507% of base) : 4274.dasm - System.TimeZoneInfo+TransitionTime:.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext):this (FullOpts)
        -280 (-8.318% of base) : 20708.dasm - System.RuntimeType:IsEnumDefined(System.Object):bool:this (FullOpts)
        -268 (-10.420% of base) : 6652.dasm - System.Globalization.InvariantModeCasing:IndexOfIgnoreCase(System.ReadOnlySpan`1[char],System.ReadOnlySpan`1[char]):int (FullOpts)
        -240 (-53.097% of base) : 17988.dasm - System.Runtime.InteropServices.ReferenceTrackerHost+HostServices:.cctor() (FullOpts)

Top method regressions (percentages):
          40 (17.544% of base) : 133.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
          30 (13.158% of base) : 152.dasm - System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
          16 (11.765% of base) : 3688.dasm - System.OrdinalComparer:GetHashCode():int:this (FullOpts)
          12 (11.321% of base) : 3889.dasm - System.TimeOnly:Add(System.TimeSpan):System.TimeOnly:this (FullOpts)
          12 (11.321% of base) : 3887.dasm - System.TimeOnly:AddTicks(long):System.TimeOnly:this (FullOpts)
          12 (9.231% of base) : 3891.dasm - System.TimeOnly:AddHours(double):System.TimeOnly:this (FullOpts)
          12 (9.231% of base) : 3893.dasm - System.TimeOnly:AddMinutes(double):System.TimeOnly:this (FullOpts)
           8 (8.333% of base) : 1546.dasm - System.Random+CompatSeedImpl:NextInt64():long:this (FullOpts)
          24 (8.000% of base) : 22490.dasm - System.Convert:TryToHexStringLower(System.ReadOnlySpan`1[byte],System.Span`1[byte],byref):bool (FullOpts)
          24 (7.895% of base) : 22489.dasm - System.Convert:TryToHexStringLower(System.ReadOnlySpan`1[byte],System.Span`1[char],byref):bool (FullOpts)
          24 (7.407% of base) : 9311.dasm - System.Threading.TimerQueue:CreateTimerQueues():System.Threading.TimerQueue[] (FullOpts)
           6 (7.317% of base) : 17057.dasm - System.Runtime.InteropServices.Marshal:GetHRForLastWin32Error():int (FullOpts)
          92 (6.866% of base) : 13066.dasm - System.Runtime.Intrinsics.Vector128:CreateSequence[int](int,int):System.Runtime.Intrinsics.Vector128`1[int] (FullOpts)
          12 (6.818% of base) : 10469.dasm - System.Threading.Tasks.TaskCache:CreateInt32Tasks():System.Threading.Tasks.Task`1[int][] (FullOpts)
         324 (6.385% of base) : 3877.dasm - System.ThrowHelper:GetResourceString(int):System.String (FullOpts)
          12 (6.250% of base) : 21294.dasm - System.AppContext:remove_FirstChanceException(System.EventHandler`1[System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs]) (FullOpts)
          12 (6.122% of base) : 21292.dasm - System.AppContext:remove_UnhandledException(System.UnhandledExceptionEventHandler) (FullOpts)
          12 (6.000% of base) : 12544.dasm - System.Runtime.Loader.AssemblyLoadContext:remove_AssemblyResolve(System.ResolveEventHandler) (FullOpts)
          12 (6.000% of base) : 12542.dasm - System.Runtime.Loader.AssemblyLoadContext:remove_ResourceResolve(System.ResolveEventHandler) (FullOpts)
          12 (6.000% of base) : 12540.dasm - System.Runtime.Loader.AssemblyLoadContext:remove_TypeResolve(System.ResolveEventHandler) (FullOpts)

Top method improvements (percentages):
       -1988 (-62.203% of base) : 17306.dasm - System.Runtime.InteropServices.ComWrappers:.cctor() (FullOpts)
        -300 (-60.976% of base) : 19793.dasm - System.Decimal:.cctor() (FullOpts)
        -240 (-53.097% of base) : 17988.dasm - System.Runtime.InteropServices.ReferenceTrackerHost+HostServices:.cctor() (FullOpts)
         -72 (-43.902% of base) : 17338.dasm - System.Runtime.InteropServices.ComWrappers+NativeObjectWrapper:.cctor() (FullOpts)
         -40 (-38.462% of base) : 19577.dasm - System.ComAwareWeakReference:InitializeCallbacks(ptr,ptr,ptr) (FullOpts)
         -40 (-33.333% of base) : 22849.dasm - System.DateTimeOffset:.cctor() (FullOpts)
         -40 (-32.258% of base) : 321.dasm - System.TimeSpan:.cctor() (FullOpts)
         -44 (-31.429% of base) : 18642.dasm - System.Diagnostics.Stopwatch:.cctor() (FullOpts)
         -44 (-29.333% of base) : 3888.dasm - System.TimeOnly:AddTicks(long,byref):System.TimeOnly:this (FullOpts)
         -60 (-26.786% of base) : 17777.dasm - System.Runtime.InteropServices.OSPlatform:.cctor() (FullOpts)
        -590 (-26.697% of base) : 23374.dasm - System.Guid:TryParseExactN[byte](System.ReadOnlySpan`1[byte],byref):bool (FullOpts)
         -40 (-25.641% of base) : 6924.dasm - System.Globalization.PersianCalendar:.cctor() (FullOpts)
         -88 (-25.287% of base) : 24562.dasm - System.LazyHelper:.cctor() (FullOpts)
        -224 (-25.169% of base) : 9452.dasm - System.Threading.PortableThreadPool+BlockingConfig:.cctor() (FullOpts)
        -590 (-25.085% of base) : 23373.dasm - System.Guid:TryParseExactD[byte](System.ReadOnlySpan`1[byte],byref):bool (FullOpts)
        -140 (-24.648% of base) : 68.dasm - System.Text.Ascii:NarrowUtf16ToAscii(ptr,ptr,nuint):nuint (FullOpts)
        -136 (-23.611% of base) : 11696.dasm - System.Text.Latin1Utility:NarrowUtf16ToLatin1(ptr,ptr,nuint):nuint (FullOpts)
         -20 (-22.727% of base) : 17144.dasm - System.Runtime.InteropServices.Marshal:.cctor() (FullOpts)
         -68 (-22.078% of base) : 6216.dasm - System.Globalization.CultureInfo:ClearCachedData():this (FullOpts)
         -20 (-21.739% of base) : 1096.dasm - System.Resources.ResourceManager:.cctor() (FullOpts)


@namu-lee
Copy link
Contributor Author

Some regressions are caused by the failure to use PC-relative addressing.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enables constant Common Subexpression Elimination (CSE) optimization for the RISC-V64 architecture, bringing it to parity with ARM/ARM64 platforms. The optimization reduces redundant instruction sequences when loading large constants that are used multiple times.

  • Extends constant CSE support from ARM/ARM64 to also include RISCV64
  • Adds cost estimation logic for RISC-V64 immediate value loading in the JIT compiler
  • Updates configuration constants and conditional compilation blocks to include TARGET_RISCV64

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 12 comments.

File Description
src/coreclr/jit/optcse.cpp Updates conditional compilation blocks and function logic to enable constant CSE for RISCV64 alongside ARM architectures
src/coreclr/jit/jitconfigvalues.h Renames configuration constants from ARM-specific to ARM_RISCV64 to reflect the expanded platform support
src/coreclr/jit/gentree.cpp Adds comprehensive cost estimation logic for RISC-V64 constant loading by duplicating the algorithm from emitter::emitLoadImmediate
src/coreclr/jit/emitriscv64.cpp Fixes spelling error in comment ("zeroes" → "zeros")

* Adjust costSz and costEx for GT_CNS_INT node

* Add riscv64 in const CSE jitconfigvalues
@namu-lee namu-lee marked this pull request as ready for review November 18, 2025 13:33
@am11
Copy link
Member

am11 commented Nov 18, 2025

Some regressions are caused by the failure to use PC-relative addressing.

Is this something which is fixed by @tomeksowi's #119203? Could you run combined diffs (after merging his branch into yours)?

@am11 am11 added the arch-riscv Related to the RISC-V architecture label Nov 18, 2025
@namu-lee
Copy link
Contributor Author

namu-lee commented Nov 19, 2025

Some regressions are caused by the failure to use PC-relative addressing.

Is this something which is fixed by @tomeksowi's #119203? Could you run combined diffs (after merging his branch into yours)?

It is not clear that it's fixed after merging. The regression gets worse after the merge than before.
I don't know what's wrong, but the test results on the base branch(pc-rel-pointers) in #119203 before merging it into this PR didn't show the improvements reported in tomeksowi's PR.

I suspect the cause might be due to differences in environment variables, but I'm not really sure about it.

The regression actually improved than the base(pc-rel-pointers) after merging it with this PR(hoist-loop), so I think the regressions were not caused by this PR.

Diffs running on the base branch (pc-rel-pointers)

Diffs are based on 12,996 contexts (338 MinOpts, 12,658 FullOpts).

MISSED contexts: 22 (0.17%)

Base JIT options: JitEnablePCRelAddr=0

Overall (+173,608 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 4,063,042 +173,608 +1.64%
MinOpts (+10,528 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 169,954 +10,528 +3.49%
FullOpts (+163,080 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 3,893,088 +163,080 +1.58%
Example diffs
System.Private.CoreLib.mch
+0 (0.00%) : 6.dasm - System.Runtime.CompilerServices.StaticsHelpers:GetGCStaticBase(ptr):byref (FullOpts)
@@ -44,11 +44,11 @@ G_M27708_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 G_M27708_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             ; byrRegs -[a0-a1]
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            ld             a1, 0xD1FFAB1E(t6)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 32
+            srli           a1, a1, 18
+            ld             a1, 0xD1FFAB1E(a1)
 						;; size=20 bbWeight=0.50 PerfScore 3.00
 G_M27708_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ld             ra, 8(sp)
+0 (0.00%) : 10.dasm - System.RuntimeTypeHandle:GetRuntimeTypeFromHandle(nint):System.RuntimeType (FullOpts)
@@ -67,11 +67,11 @@ G_M56642_IG07:        ; bbWeight=0.50, epilog, nogc, extend
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 G_M56642_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             ; gcrRegs -[a0-a1]
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            ld             a1, 0xD1FFAB1E(t6)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 32
+            srli           a1, a1, 18
+            ld             a1, 0xD1FFAB1E(a1)
 						;; size=20 bbWeight=0.50 PerfScore 3.00
 G_M56642_IG09:        ; bbWeight=0.50, epilog, nogc, extend
             ld             ra, 8(sp)
+0 (0.00%) : 14.dasm - System.Runtime.CompilerServices.CastHelpers:ChkCastClassSpecial(ptr,System.Object):System.Object (FullOpts)
@@ -40,17 +40,20 @@ G_M37025_IG03:        ; bbWeight=0.50, gcrefRegs=40000 {s2}, byrefRegs=0000 {},
             slli           a0, a0, 13
             addi           a0, a0, 0xD1FFAB1E
             slli           a0, a0, 2
+            ; gcrRegs +[a0]
             lui            a1, 0xD1FFAB1E
             addiw          a1, a1, 0xD1FFAB1E
             slli           a1, a1, 13
             addi           a1, a1, 0xD1FFAB1E
             slli           a1, a1, 2
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            ld             a2, 0xD1FFAB1E(t6)
+            ; gcrRegs +[a1]
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            slli           a2, a2, 32
+            srli           a2, a2, 18
+            ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// <unknown method>
+            ; gcrRegs -[a0-a1]
             ; gcr arg pop 0
 						;; size=64 bbWeight=0.50 PerfScore 9.50
 G_M37025_IG04:        ; bbWeight=1.50, gcrefRegs=40000 {s2}, byrefRegs=0000 {}, byref, isz
@@ -88,12 +91,12 @@ G_M37025_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=400
             mv             a0, s1
             mv             a1, s2
             ; gcrRegs +[a1]
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            ld             a2, 0xD1FFAB1E(t6)
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            slli           a2, a2, 12
+            addi           a2, a2, 0xD1FFAB1E
+            slli           a2, a2, 3
+            ld             a2, 0xD1FFAB1E(a2)
 						;; size=32 bbWeight=0.50 PerfScore 4.00
 G_M37025_IG09:        ; bbWeight=0.50, epilog, nogc, extend
             ld             s3, 40(sp)
+32 (+61.54%) : 18192.dasm - System.Runtime.CompilerServices.CastHelpers:ThrowInvalidCastException(System.Object,ptr) (FullOpts)
@@ -25,16 +25,25 @@ G_M64730_IG01:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=24 bbWeight=0 PerfScore 0.00
 G_M64730_IG02:        ; bbWeight=0, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ld             a0, 0xD1FFAB1E(s1)
-            auipc          ra, 0xD1FFAB1E
-            jalr           ra		// <unknown method>
+            lui            ra, 0xD1FFAB1E
+            addiw          ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 12
+            addi           ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 3
+            jalr           ra, 0xD1FFAB1E(ra)		// <unknown method>
             mv             a0, zero
-            auipc          ra, 0xD1FFAB1E
-            jalr           ra		// CORINFO_HELP_THROW
-            ; gcrRegs -[s1]
+            ; gcrRegs +[a0]
+            lui            ra, 0xD1FFAB1E
+            addiw          ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 13
+            addi           ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 2
+            jalr           ra, 0xD1FFAB1E(ra)		// CORINFO_HELP_THROW
+            ; gcrRegs -[s1-a0]
             ebreak
-						;; size=28 bbWeight=0 PerfScore 0.00
+						;; size=60 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 52, prolog size 20, PerfScore 0.00, instruction count 11, allocated bytes for code 52 (MethodHash=666c0325) for method System.Runtime.CompilerServices.CastHelpers:ThrowInvalidCastException(System.Object,ptr) (FullOpts)
+; Total bytes of code 84, prolog size 20, PerfScore 0.00, instruction count 13, allocated bytes for code 84 (MethodHash=666c0325) for method System.Runtime.CompilerServices.CastHelpers:ThrowInvalidCastException(System.Object,ptr) (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -45,7 +54,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
+  Function Length   : 42 (0x0002a) Actual length = 84 (0x000054)
   ---- Epilog scopes ----
   No epilogs
   ---- Unwind codes ----
+16 (+44.44%) : 23080.dasm - System.Double:Pow(double,double):double (FullOpts)
@@ -24,11 +24,15 @@ G_M57204_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
-            auipc          t2, 0xD1FFAB1E
-            jr             t2		// <unknown method>
-						;; size=20 bbWeight=1 PerfScore 8.50
+            lui            t6, 0xD1FFAB1E
+            addiw          t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 12
+            addi           t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 3
+            jalr           zero, 0xD1FFAB1E(t6)		// <unknown method>
+						;; size=36 bbWeight=1 PerfScore 12.50
 
-; Total bytes of code 36, prolog size 16, PerfScore 17.50, instruction count 8, allocated bytes for code 36 (MethodHash=6920208b) for method System.Double:Pow(double,double):double (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.50, instruction count 9, allocated bytes for code 52 (MethodHash=6920208b) for method System.Double:Pow(double,double):double (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -39,7 +43,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 18 (0x00012) Actual length = 36 (0x000024)
+  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+44.44%) : 23020.dasm - System.Double:Log10(double):double (FullOpts)
@@ -23,11 +23,15 @@ G_M51936_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
-            auipc          t2, 0xD1FFAB1E
-            jr             t2		// <unknown method>
-						;; size=20 bbWeight=1 PerfScore 8.50
+            lui            t6, 0xD1FFAB1E
+            addiw          t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 12
+            addi           t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 3
+            jalr           zero, 0xD1FFAB1E(t6)		// <unknown method>
+						;; size=36 bbWeight=1 PerfScore 12.50
 
-; Total bytes of code 36, prolog size 16, PerfScore 17.50, instruction count 8, allocated bytes for code 36 (MethodHash=5391351f) for method System.Double:Log10(double):double (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.50, instruction count 9, allocated bytes for code 52 (MethodHash=5391351f) for method System.Double:Log10(double):double (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -38,7 +42,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 18 (0x00012) Actual length = 36 (0x000024)
+  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
System.Private.CoreLib.mch 10,046 0 4,678 5,368 -0 +173,608

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
System.Private.CoreLib.mch 10,046 0 3,165 6,881 0.00% +5.31% +1.2093%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
System.Private.CoreLib.mch 12,996 338 12,658 22 (0.17%) 22 (0.17%)

jit-analyze output

Diffs running after merging the base branch(pc-rel-pointers) into this PR(hoist-loop)

Diffs are based on 12,996 contexts (338 MinOpts, 12,658 FullOpts).

MISSED contexts: base: 22 (0.17%), diff: 1 (0.01%)

Base JIT options: JitEnablePCRelAddr=0

Overall (+155,002 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 4,062,782 +155,002 +1.47%
MinOpts (+10,528 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 169,954 +10,528 +3.49%
FullOpts (+144,474 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 3,892,828 +144,474 +1.40%
Example diffs
System.Private.CoreLib.mch
-44 (-31.43%) : 18642.dasm - System.Diagnostics.Stopwatch:.cctor() (FullOpts)
@@ -8,6 +8,7 @@
 ; Final local variable assignments
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V01 cse0         [V01,T00] (  5,  5   )    long  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -21,32 +22,21 @@ G_M2214_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 G_M2214_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            sd             a0, 0xD1FFAB1E(t6)
-            addi           a0, zero, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            sb             a0, 0xD1FFAB1E(t6)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            ld             a0, 0xD1FFAB1E(t6)
-            fcvt.d.l       ft4, a0
+            slli           a0, a0, 12
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 3
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            sd             a1, 0xD1FFAB1E(a0)
+            addi           a1, zero, 0xD1FFAB1E
+            sb             a1, 0xD1FFAB1E(a0)
+            ld             a1, 0xD1FFAB1E(a0)
+            fcvt.d.l       ft4, a1
             auipc          t6, 0xD1FFAB1E
             fld            ft5, 0xD1FFAB1E(t6)
             fdiv.d         ft4, ft5, ft4
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            fsd            ft4, 0xD1FFAB1E(t6)
-						;; size=108 bbWeight=1 PerfScore 72.50
+            fsd            ft4, 0xD1FFAB1E(a0)
+						;; size=64 bbWeight=1 PerfScore 61.50
 G_M2214_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -55,7 +45,7 @@ G_M2214_IG03:        ; bbWeight=1, epilog, nogc, extend
 RWD00  	dq	416312D000000000h	;     10000000
 
 
-; Total bytes of code 140, prolog size 16, PerfScore 89.00, instruction count 21, allocated bytes for code 140 (MethodHash=b3f5f759) for method System.Diagnostics.Stopwatch:.cctor() (FullOpts)
+; Total bytes of code 96, prolog size 16, PerfScore 78.00, instruction count 18, allocated bytes for code 96 (MethodHash=b3f5f759) for method System.Diagnostics.Stopwatch:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -66,7 +56,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 70 (0x00046) Actual length = 140 (0x00008c)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-44 (-29.33%) : 3888.dasm - System.TimeOnly:AddTicks(long,byref):System.TimeOnly:this (FullOpts)
@@ -8,15 +8,15 @@
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T03] (  3,  3   )   byref  ->   a0         this single-def
-;  V01 arg1         [V01,T00] (  5,  5   )    long  ->   a1         single-def
-;  V02 arg2         [V02,T04] (  3,  3   )   byref  ->   a2         single-def
-;  V03 loc0         [V03,T06] (  4,  3   )    long  ->   a4        
-;  V04 loc1         [V04,T02] (  8,  5.50)    long  ->   a0        
+;  V00 this         [V00,T02] (  3,  3   )   byref  ->   a0         this single-def
+;  V01 arg1         [V01,T00] (  4,  4   )    long  ->   a1         single-def
+;  V02 arg2         [V02,T03] (  3,  3   )   byref  ->   a2         single-def
+;  V03 loc0         [V03,T06] (  4,  3   )    long  ->   a5        
+;  V04 loc1         [V04,T01] (  8,  5.50)    long  ->   a0        
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V06 tmp1         [V06    ] (  0,  0   )  struct (16) zero-ref    "dup spill" <System.ValueTuple`2[long,long]>
 ;* V07 tmp2         [V07    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.TimeOnly>
-;  V08 tmp3         [V08,T05] (  5,  4   )    long  ->   a3         "Inline stloc first use temp"
+;  V08 tmp3         [V08,T04] (  5,  4   )    long  ->   a4         "Inline stloc first use temp"
 ;* V09 tmp4         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[long,long]>
 ;* V10 tmp5         [V10    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V11 tmp6         [V11    ] (  0,  0   )    long  ->  zero-ref    "field V06.Item1 (fldOffset=0x0)" P-INDEP
@@ -24,7 +24,7 @@
 ;* V13 tmp8         [V13    ] (  0,  0   )    long  ->  zero-ref    "field V07._ticks (fldOffset=0x0)" P-INDEP
 ;* V14 tmp9         [V14    ] (  0,  0   )    long  ->  zero-ref    "field V09.Item1 (fldOffset=0x0)" P-INDEP
 ;  V15 tmp10        [V15,T07] (  2,  2   )    long  ->   a1         "field V09.Item2 (fldOffset=0x8)" P-INDEP
-;  V16 rat0         [V16,T01] (  3,  6   )    long  ->   a3         "ReplaceWithLclVar is creating a new local variable"
+;  V16 cse0         [V16,T05] (  5,  4   )    long  ->   a3         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -37,55 +37,41 @@ G_M56108_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M56108_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=1400 {a0 a2}, byref, isz
             ; byrRegs +[a0 a2]
-            auipc          a3, 0xD1FFAB1E
-            ld             a3, 0xD1FFAB1E(a3)
-            mulh           a3, a3, a1
-            add            a3, a3, a1
-            srli           a4, a3, 63
-            srai           a3, a3, 39
-            add            a3, a3, a4
-            lui            a4, 0xD1FFAB1E
-            addiw          a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 14
-            mul            a4, a3, a4
-            sub            a1, a1, a4
-            mv             a4, a3
+            lui            a3, 0xD1FFAB1E
+            addiw          a3, a3, 0xD1FFAB1E
+            slli           a3, a3, 14
+            div            a4, a1, a3
+            mul            a5, a4, a3
+            sub            a1, a1, a5
+            mv             a5, a4
             ld             a0, 0xD1FFAB1E(a0)
             ; byrRegs -[a0]
             add            a0, a1, a0
             blt            a0, zero, G_M56108_IG04
-						;; size=58 bbWeight=1 PerfScore 18.00
+						;; size=38 bbWeight=1 PerfScore 49.00
 G_M56108_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=1000 {a2}, byref, isz
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 14
-            blt            a0, a1, G_M56108_IG05
-            addi           a4, a3, 0xD1FFAB1E
-            lui            a3, 0xD1FFAB1E
-            addiw          a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 14
-            add            a0, a0, a3
+            blt            a0, a3, G_M56108_IG05
+            addi           a5, a4, 0xD1FFAB1E
+            lui            a4, 0xD1FFAB1E
+            addiw          a4, a4, 0xD1FFAB1E
+            slli           a4, a4, 14
+            add            a0, a0, a4
             j              G_M56108_IG05
-						;; size=38 bbWeight=0.50 PerfScore 6.00
+						;; size=26 bbWeight=0.50 PerfScore 4.50
 G_M56108_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=1000 {a2}, byref
-            addi           a4, a3, 0xD1FFAB1E
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 14
-            add            a0, a0, a1
-						;; size=18 bbWeight=0.50 PerfScore 2.00
+            addi           a5, a4, 0xD1FFAB1E
+            add            a0, a0, a3
+						;; size=6 bbWeight=0.50 PerfScore 0.50
 G_M56108_IG05:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=1000 {a2}, byref
-            sw             a4, 0xD1FFAB1E(a2)
+            sw             a5, 0xD1FFAB1E(a2)
 						;; size=4 bbWeight=1 PerfScore 4.00
 G_M56108_IG06:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
-RWD00  	dq	A2E3FF1DE20581E3h
 
-
-; Total bytes of code 150, prolog size 16, PerfScore 46.50, instruction count 31, allocated bytes for code 150 (MethodHash=dbbf24d3) for method System.TimeOnly:AddTicks(long,byref):System.TimeOnly:this (FullOpts)
+; Total bytes of code 106, prolog size 16, PerfScore 74.50, instruction count 24, allocated bytes for code 106 (MethodHash=dbbf24d3) for method System.TimeOnly:AddTicks(long,byref):System.TimeOnly:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -96,7 +82,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 75 (0x0004b) Actual length = 150 (0x000096)
+  Function Length   : 53 (0x00035) Actual length = 106 (0x00006a)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-40 (-25.64%) : 6924.dasm - System.Globalization.PersianCalendar:.cctor() (FullOpts)
@@ -28,8 +28,8 @@
 ;* V17 tmp16        [V17    ] (  0,  0   )     int  ->  zero-ref    "dup spill"
 ;* V18 tmp17        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "field V00._dateData (fldOffset=0x0)" P-INDEP
-;* V20 tmp19        [V20,T00] (  0,  0   )    long  ->  zero-ref    "field V02._dateData (fldOffset=0x0)" P-INDEP
-;* V21 tmp20        [V21,T01] (  0,  0   )    long  ->  zero-ref    "field V03._dateData (fldOffset=0x0)" P-INDEP
+;* V20 tmp19        [V20,T03] (  0,  0   )    long  ->  zero-ref    "field V02._dateData (fldOffset=0x0)" P-INDEP
+;* V21 tmp20        [V21,T04] (  0,  0   )    long  ->  zero-ref    "field V03._dateData (fldOffset=0x0)" P-INDEP
 ;* V22 tmp21        [V22    ] (  0,  0   )    long  ->  zero-ref    "field V04._dateData (fldOffset=0x0)" P-INDEP
 ;* V23 tmp22        [V23    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V24 tmp23        [V24    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
@@ -47,6 +47,11 @@
 ;* V36 tmp35        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
 ;* V37 tmp36        [V37    ] (  0,  0   )   byref  ->  zero-ref    "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V38 tmp37        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
+;  V39 cse0         [V39,T00] (  3,  3   )    long  ->   a0         "CSE #01: aggressive"
+;* V40 cse1         [V40,T02] (  0,  0   )   byref  ->  zero-ref    "CSE #02: aggressive"
+;  V41 cse2         [V41,T01] (  3,  3   )    long  ->   a0         "CSE #05: aggressive"
+;* V42 cse3         [V42,T05] (  0,  0   )    long  ->  zero-ref    "CSE #04: aggressive"
+;* V43 cse4         [V43,T06] (  0,  0   )     int  ->  zero-ref    "CSE #03: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -58,38 +63,28 @@ G_M6342_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M6342_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            addi           a0, zero, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sw             a0, 0xD1FFAB1E(t6)
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             a0, 0xD1FFAB1E(t6)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 13
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 2
-            sd             a0, 0xD1FFAB1E(t6)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 13
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 2
-            sd             a0, 0xD1FFAB1E(t6)
-						;; size=124 bbWeight=1 PerfScore 42.50
+            slli           a0, a0, 12
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 3
+            addi           a1, zero, 0xD1FFAB1E
+            sw             a1, 0xD1FFAB1E(a0)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            sd             a1, 0xD1FFAB1E(a0)
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 13
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 2
+            auipc          a1, 0xD1FFAB1E
+            ld             a1, 0xD1FFAB1E(a1)
+            sd             a1, 0xD1FFAB1E(a0)
+            auipc          a1, 0xD1FFAB1E
+            ld             a1, 0xD1FFAB1E(a1)
+            sd             a1, 0xD1FFAB1E(a0)
+						;; size=84 bbWeight=1 PerfScore 32.50
 G_M6342_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -99,7 +94,7 @@ RWD00  	dq	02B876DE15224000h
 RWD08  	dq	2BCA2875F4373FFFh
 
 
-; Total bytes of code 156, prolog size 16, PerfScore 59.00, instruction count 20, allocated bytes for code 156 (MethodHash=a9d8e739) for method System.Globalization.PersianCalendar:.cctor() (FullOpts)
+; Total bytes of code 116, prolog size 16, PerfScore 49.00, instruction count 18, allocated bytes for code 116 (MethodHash=a9d8e739) for method System.Globalization.PersianCalendar:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -110,7 +105,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 78 (0x0004e) Actual length = 156 (0x00009c)
+  Function Length   : 58 (0x0003a) Actual length = 116 (0x000074)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+32 (+61.54%) : 18192.dasm - System.Runtime.CompilerServices.CastHelpers:ThrowInvalidCastException(System.Object,ptr) (FullOpts)
@@ -25,16 +25,25 @@ G_M64730_IG01:        ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=24 bbWeight=0 PerfScore 0.00
 G_M64730_IG02:        ; bbWeight=0, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ld             a0, 0xD1FFAB1E(s1)
-            auipc          ra, 0xD1FFAB1E
-            jalr           ra		// <unknown method>
+            lui            ra, 0xD1FFAB1E
+            addiw          ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 12
+            addi           ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 3
+            jalr           ra, 0xD1FFAB1E(ra)		// <unknown method>
             mv             a0, zero
-            auipc          ra, 0xD1FFAB1E
-            jalr           ra		// CORINFO_HELP_THROW
-            ; gcrRegs -[s1]
+            ; gcrRegs +[a0]
+            lui            ra, 0xD1FFAB1E
+            addiw          ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 13
+            addi           ra, ra, 0xD1FFAB1E
+            slli           ra, ra, 2
+            jalr           ra, 0xD1FFAB1E(ra)		// CORINFO_HELP_THROW
+            ; gcrRegs -[s1-a0]
             ebreak
-						;; size=28 bbWeight=0 PerfScore 0.00
+						;; size=60 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 52, prolog size 20, PerfScore 0.00, instruction count 11, allocated bytes for code 52 (MethodHash=666c0325) for method System.Runtime.CompilerServices.CastHelpers:ThrowInvalidCastException(System.Object,ptr) (FullOpts)
+; Total bytes of code 84, prolog size 20, PerfScore 0.00, instruction count 13, allocated bytes for code 84 (MethodHash=666c0325) for method System.Runtime.CompilerServices.CastHelpers:ThrowInvalidCastException(System.Object,ptr) (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -45,7 +54,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
+  Function Length   : 42 (0x0002a) Actual length = 84 (0x000054)
   ---- Epilog scopes ----
   No epilogs
   ---- Unwind codes ----
+16 (+44.44%) : 23080.dasm - System.Double:Pow(double,double):double (FullOpts)
@@ -24,11 +24,15 @@ G_M57204_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
-            auipc          t2, 0xD1FFAB1E
-            jr             t2		// <unknown method>
-						;; size=20 bbWeight=1 PerfScore 8.50
+            lui            t6, 0xD1FFAB1E
+            addiw          t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 12
+            addi           t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 3
+            jalr           zero, 0xD1FFAB1E(t6)		// <unknown method>
+						;; size=36 bbWeight=1 PerfScore 12.50
 
-; Total bytes of code 36, prolog size 16, PerfScore 17.50, instruction count 8, allocated bytes for code 36 (MethodHash=6920208b) for method System.Double:Pow(double,double):double (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.50, instruction count 9, allocated bytes for code 52 (MethodHash=6920208b) for method System.Double:Pow(double,double):double (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -39,7 +43,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 18 (0x00012) Actual length = 36 (0x000024)
+  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+44.44%) : 23020.dasm - System.Double:Log10(double):double (FullOpts)
@@ -23,11 +23,15 @@ G_M51936_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
-            auipc          t2, 0xD1FFAB1E
-            jr             t2		// <unknown method>
-						;; size=20 bbWeight=1 PerfScore 8.50
+            lui            t6, 0xD1FFAB1E
+            addiw          t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 12
+            addi           t6, t6, 0xD1FFAB1E
+            slli           t6, t6, 3
+            jalr           zero, 0xD1FFAB1E(t6)		// <unknown method>
+						;; size=36 bbWeight=1 PerfScore 12.50
 
-; Total bytes of code 36, prolog size 16, PerfScore 17.50, instruction count 8, allocated bytes for code 36 (MethodHash=5391351f) for method System.Double:Log10(double):double (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.50, instruction count 9, allocated bytes for code 52 (MethodHash=5391351f) for method System.Double:Log10(double):double (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -38,7 +42,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 18 (0x00012) Actual length = 36 (0x000024)
+  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
System.Private.CoreLib.mch 10,066 204 4,590 5,272 -10,600 +165,602

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
System.Private.CoreLib.mch 10,066 355 3,125 6,586 -4.64% +5.38% +1.0753%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
System.Private.CoreLib.mch 12,996 338 12,658 22 (0.17%) 1 (0.01%)

jit-analyze output

Diffs running on this PR(hoist-loop)

Diffs are based on 12,996 contexts (338 MinOpts, 12,658 FullOpts).

MISSED contexts: base: 22 (0.17%), diff: 1 (0.01%)

Overall (-18,586 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 4,062,782 -18,586 -1.34%
MinOpts (+0 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 169,954 +0 0.00%
FullOpts (-18,586 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
System.Private.CoreLib.mch 3,892,828 -18,586 -1.36%
Example diffs
System.Private.CoreLib.mch
-44 (-31.43%) : 18642.dasm - System.Diagnostics.Stopwatch:.cctor() (FullOpts)
@@ -8,6 +8,7 @@
 ; Final local variable assignments
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V01 cse0         [V01,T00] (  5,  5   )    long  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -21,32 +22,21 @@ G_M2214_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 G_M2214_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            sd             a0, 0xD1FFAB1E(t6)
-            addi           a0, zero, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            sb             a0, 0xD1FFAB1E(t6)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            ld             a0, 0xD1FFAB1E(t6)
-            fcvt.d.l       ft4, a0
+            slli           a0, a0, 12
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 3
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            sd             a1, 0xD1FFAB1E(a0)
+            addi           a1, zero, 0xD1FFAB1E
+            sb             a1, 0xD1FFAB1E(a0)
+            ld             a1, 0xD1FFAB1E(a0)
+            fcvt.d.l       ft4, a1
             auipc          t6, 0xD1FFAB1E
             fld            ft5, 0xD1FFAB1E(t6)
             fdiv.d         ft4, ft5, ft4
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 32
-            srli           t6, t6, 18
-            fsd            ft4, 0xD1FFAB1E(t6)
-						;; size=108 bbWeight=1 PerfScore 72.50
+            fsd            ft4, 0xD1FFAB1E(a0)
+						;; size=64 bbWeight=1 PerfScore 61.50
 G_M2214_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -55,7 +45,7 @@ G_M2214_IG03:        ; bbWeight=1, epilog, nogc, extend
 RWD00  	dq	416312D000000000h	;     10000000
 
 
-; Total bytes of code 140, prolog size 16, PerfScore 89.00, instruction count 21, allocated bytes for code 140 (MethodHash=b3f5f759) for method System.Diagnostics.Stopwatch:.cctor() (FullOpts)
+; Total bytes of code 96, prolog size 16, PerfScore 78.00, instruction count 18, allocated bytes for code 96 (MethodHash=b3f5f759) for method System.Diagnostics.Stopwatch:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -66,7 +56,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 70 (0x00046) Actual length = 140 (0x00008c)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-44 (-29.33%) : 3888.dasm - System.TimeOnly:AddTicks(long,byref):System.TimeOnly:this (FullOpts)
@@ -8,15 +8,15 @@
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T03] (  3,  3   )   byref  ->   a0         this single-def
-;  V01 arg1         [V01,T00] (  5,  5   )    long  ->   a1         single-def
-;  V02 arg2         [V02,T04] (  3,  3   )   byref  ->   a2         single-def
-;  V03 loc0         [V03,T06] (  4,  3   )    long  ->   a4        
-;  V04 loc1         [V04,T02] (  8,  5.50)    long  ->   a0        
+;  V00 this         [V00,T02] (  3,  3   )   byref  ->   a0         this single-def
+;  V01 arg1         [V01,T00] (  4,  4   )    long  ->   a1         single-def
+;  V02 arg2         [V02,T03] (  3,  3   )   byref  ->   a2         single-def
+;  V03 loc0         [V03,T06] (  4,  3   )    long  ->   a5        
+;  V04 loc1         [V04,T01] (  8,  5.50)    long  ->   a0        
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V06 tmp1         [V06    ] (  0,  0   )  struct (16) zero-ref    "dup spill" <System.ValueTuple`2[long,long]>
 ;* V07 tmp2         [V07    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.TimeOnly>
-;  V08 tmp3         [V08,T05] (  5,  4   )    long  ->   a3         "Inline stloc first use temp"
+;  V08 tmp3         [V08,T04] (  5,  4   )    long  ->   a4         "Inline stloc first use temp"
 ;* V09 tmp4         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[long,long]>
 ;* V10 tmp5         [V10    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;* V11 tmp6         [V11    ] (  0,  0   )    long  ->  zero-ref    "field V06.Item1 (fldOffset=0x0)" P-INDEP
@@ -24,7 +24,7 @@
 ;* V13 tmp8         [V13    ] (  0,  0   )    long  ->  zero-ref    "field V07._ticks (fldOffset=0x0)" P-INDEP
 ;* V14 tmp9         [V14    ] (  0,  0   )    long  ->  zero-ref    "field V09.Item1 (fldOffset=0x0)" P-INDEP
 ;  V15 tmp10        [V15,T07] (  2,  2   )    long  ->   a1         "field V09.Item2 (fldOffset=0x8)" P-INDEP
-;  V16 rat0         [V16,T01] (  3,  6   )    long  ->   a3         "ReplaceWithLclVar is creating a new local variable"
+;  V16 cse0         [V16,T05] (  5,  4   )    long  ->   a3         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -37,55 +37,41 @@ G_M56108_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M56108_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=1400 {a0 a2}, byref, isz
             ; byrRegs +[a0 a2]
-            auipc          a3, 0xD1FFAB1E
-            ld             a3, 0xD1FFAB1E(a3)
-            mulh           a3, a3, a1
-            add            a3, a3, a1
-            srli           a4, a3, 63
-            srai           a3, a3, 39
-            add            a3, a3, a4
-            lui            a4, 0xD1FFAB1E
-            addiw          a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 14
-            mul            a4, a3, a4
-            sub            a1, a1, a4
-            mv             a4, a3
+            lui            a3, 0xD1FFAB1E
+            addiw          a3, a3, 0xD1FFAB1E
+            slli           a3, a3, 14
+            div            a4, a1, a3
+            mul            a5, a4, a3
+            sub            a1, a1, a5
+            mv             a5, a4
             ld             a0, 0xD1FFAB1E(a0)
             ; byrRegs -[a0]
             add            a0, a1, a0
             blt            a0, zero, G_M56108_IG04
-						;; size=58 bbWeight=1 PerfScore 18.00
+						;; size=38 bbWeight=1 PerfScore 49.00
 G_M56108_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=1000 {a2}, byref, isz
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 14
-            blt            a0, a1, G_M56108_IG05
-            addi           a4, a3, 0xD1FFAB1E
-            lui            a3, 0xD1FFAB1E
-            addiw          a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 14
-            add            a0, a0, a3
+            blt            a0, a3, G_M56108_IG05
+            addi           a5, a4, 0xD1FFAB1E
+            lui            a4, 0xD1FFAB1E
+            addiw          a4, a4, 0xD1FFAB1E
+            slli           a4, a4, 14
+            add            a0, a0, a4
             j              G_M56108_IG05
-						;; size=38 bbWeight=0.50 PerfScore 6.00
+						;; size=26 bbWeight=0.50 PerfScore 4.50
 G_M56108_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=1000 {a2}, byref
-            addi           a4, a3, 0xD1FFAB1E
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 14
-            add            a0, a0, a1
-						;; size=18 bbWeight=0.50 PerfScore 2.00
+            addi           a5, a4, 0xD1FFAB1E
+            add            a0, a0, a3
+						;; size=6 bbWeight=0.50 PerfScore 0.50
 G_M56108_IG05:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=1000 {a2}, byref
-            sw             a4, 0xD1FFAB1E(a2)
+            sw             a5, 0xD1FFAB1E(a2)
 						;; size=4 bbWeight=1 PerfScore 4.00
 G_M56108_IG06:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
-RWD00  	dq	A2E3FF1DE20581E3h
 
-
-; Total bytes of code 150, prolog size 16, PerfScore 46.50, instruction count 31, allocated bytes for code 150 (MethodHash=dbbf24d3) for method System.TimeOnly:AddTicks(long,byref):System.TimeOnly:this (FullOpts)
+; Total bytes of code 106, prolog size 16, PerfScore 74.50, instruction count 24, allocated bytes for code 106 (MethodHash=dbbf24d3) for method System.TimeOnly:AddTicks(long,byref):System.TimeOnly:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -96,7 +82,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 75 (0x0004b) Actual length = 150 (0x000096)
+  Function Length   : 53 (0x00035) Actual length = 106 (0x00006a)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-40 (-25.64%) : 6924.dasm - System.Globalization.PersianCalendar:.cctor() (FullOpts)
@@ -28,8 +28,8 @@
 ;* V17 tmp16        [V17    ] (  0,  0   )     int  ->  zero-ref    "dup spill"
 ;* V18 tmp17        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;* V19 tmp18        [V19    ] (  0,  0   )    long  ->  zero-ref    "field V00._dateData (fldOffset=0x0)" P-INDEP
-;* V20 tmp19        [V20,T00] (  0,  0   )    long  ->  zero-ref    "field V02._dateData (fldOffset=0x0)" P-INDEP
-;* V21 tmp20        [V21,T01] (  0,  0   )    long  ->  zero-ref    "field V03._dateData (fldOffset=0x0)" P-INDEP
+;* V20 tmp19        [V20,T03] (  0,  0   )    long  ->  zero-ref    "field V02._dateData (fldOffset=0x0)" P-INDEP
+;* V21 tmp20        [V21,T04] (  0,  0   )    long  ->  zero-ref    "field V03._dateData (fldOffset=0x0)" P-INDEP
 ;* V22 tmp21        [V22    ] (  0,  0   )    long  ->  zero-ref    "field V04._dateData (fldOffset=0x0)" P-INDEP
 ;* V23 tmp22        [V23    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V05._reference (fldOffset=0x0)" P-INDEP
 ;* V24 tmp23        [V24    ] (  0,  0   )     int  ->  zero-ref    "field V05._length (fldOffset=0x8)" P-INDEP
@@ -47,6 +47,11 @@
 ;* V36 tmp35        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
 ;* V37 tmp36        [V37    ] (  0,  0   )   byref  ->  zero-ref    "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V38 tmp37        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
+;  V39 cse0         [V39,T00] (  3,  3   )    long  ->   a0         "CSE #01: aggressive"
+;* V40 cse1         [V40,T02] (  0,  0   )   byref  ->  zero-ref    "CSE #02: aggressive"
+;  V41 cse2         [V41,T01] (  3,  3   )    long  ->   a0         "CSE #05: aggressive"
+;* V42 cse3         [V42,T05] (  0,  0   )    long  ->  zero-ref    "CSE #04: aggressive"
+;* V43 cse4         [V43,T06] (  0,  0   )     int  ->  zero-ref    "CSE #03: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -58,38 +63,28 @@ G_M6342_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M6342_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            addi           a0, zero, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sw             a0, 0xD1FFAB1E(t6)
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 12
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 3
-            sd             a0, 0xD1FFAB1E(t6)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 13
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 2
-            sd             a0, 0xD1FFAB1E(t6)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
-            lui            t6, 0xD1FFAB1E
-            addiw          t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 13
-            addi           t6, t6, 0xD1FFAB1E
-            slli           t6, t6, 2
-            sd             a0, 0xD1FFAB1E(t6)
-						;; size=124 bbWeight=1 PerfScore 42.50
+            slli           a0, a0, 12
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 3
+            addi           a1, zero, 0xD1FFAB1E
+            sw             a1, 0xD1FFAB1E(a0)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            sd             a1, 0xD1FFAB1E(a0)
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 13
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 2
+            auipc          a1, 0xD1FFAB1E
+            ld             a1, 0xD1FFAB1E(a1)
+            sd             a1, 0xD1FFAB1E(a0)
+            auipc          a1, 0xD1FFAB1E
+            ld             a1, 0xD1FFAB1E(a1)
+            sd             a1, 0xD1FFAB1E(a0)
+						;; size=84 bbWeight=1 PerfScore 32.50
 G_M6342_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -99,7 +94,7 @@ RWD00  	dq	02B876DE15224000h
 RWD08  	dq	2BCA2875F4373FFFh
 
 
-; Total bytes of code 156, prolog size 16, PerfScore 59.00, instruction count 20, allocated bytes for code 156 (MethodHash=a9d8e739) for method System.Globalization.PersianCalendar:.cctor() (FullOpts)
+; Total bytes of code 116, prolog size 16, PerfScore 49.00, instruction count 18, allocated bytes for code 116 (MethodHash=a9d8e739) for method System.Globalization.PersianCalendar:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -110,7 +105,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 78 (0x0004e) Actual length = 156 (0x00009c)
+  Function Length   : 58 (0x0003a) Actual length = 116 (0x000074)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+30 (+13.16%) : 152.dasm - System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
@@ -38,6 +38,7 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )     int  ->   a1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=32; lcl=0
@@ -94,8 +95,16 @@ G_M31483_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            addiw          a2, a1, 0xD1FFAB1E
+            zext.h         a1, a1
+            slli.uw        a1, a1, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a1, a0, a1
+            slli.uw        a2, a2, 48
+            or             a1, a1, a2
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -112,7 +121,7 @@ G_M31483_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             addi           t6, t6, 0xD1FFAB1E
             slli           t6, t6, 2
             ld             a5, 0xD1FFAB1E(t6)
-						;; size=176 bbWeight=1 PerfScore 54.50
+						;; size=206 bbWeight=1 PerfScore 59.50
 G_M31483_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             s2, 24(sp)
             ld             s1, 16(sp)
@@ -121,11 +130,10 @@ G_M31483_IG03:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             jr             a5		// <unknown method>
 						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	5DB95CEF0866B2B8h
-RWD08  	dq	444A81FD0F0C1226h
+RWD00  	dq	444A81FD0F0C1226h
 
 
-; Total bytes of code 228, prolog size 28, PerfScore 83.50, instruction count 35, allocated bytes for code 228 (MethodHash=51938504) for method System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
+; Total bytes of code 258, prolog size 28, PerfScore 88.50, instruction count 42, allocated bytes for code 258 (MethodHash=51938504) for method System.Buffers.ArrayPoolEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -136,7 +144,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 114 (0x00072) Actual length = 228 (0x0000e4)
+  Function Length   : 129 (0x00081) Actual length = 258 (0x000102)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+11.76%) : 3688.dasm - System.OrdinalComparer:GetHashCode():int:this (FullOpts)
@@ -12,6 +12,7 @@
 ;  V01 loc0         [V01,T01] (  3,  2   )     int  ->   a0        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V03 tmp1         [V03    ] (  0,  0   )    long  ->  zero-ref    "Inline stloc first use temp"
+;  V04 cse0         [V04,T02] (  2,  2   )     ref  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 Frame info. #outsz=0; #framesz=32; lcl=8
@@ -26,9 +27,14 @@ G_M30928_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             ; gcrRegs +[s1]
 						;; size=24 bbWeight=1 PerfScore 13.50
 G_M30928_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 12
+            addi           a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 3
             addi           a1, zero, 0xD1FFAB1E
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            addi           a0, a0, 0xD1FFAB1E
+            ; byrRegs +[a0]
             lui            a2, 0xD1FFAB1E
             addiw          a2, a2, 0xD1FFAB1E
             lui            a3, 0xD1FFAB1E
@@ -40,10 +46,11 @@ G_M30928_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             slli           t6, t6, 2
             ld             a4, 0xD1FFAB1E(t6)
             jalr           a4		// <unknown method>
+            ; byrRegs -[a0]
             lbu            a1, 0xD1FFAB1E(s1)
             sext.w         a1, a1
             beqz           a1, G_M30928_IG05
-						;; size=68 bbWeight=1 PerfScore 23.50
+						;; size=84 bbWeight=1 PerfScore 27.00
 G_M30928_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[s1]
             not            a0, a0
@@ -60,10 +67,8 @@ G_M30928_IG05:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             ld             fp, 8(sp)
             addi           sp, sp, 32
             ret						;; size=20 bbWeight=0.50 PerfScore 4.75
-RWD00  	dq	00002ACB341F29D4h
 
-
-; Total bytes of code 136, prolog size 20, PerfScore 46.75, instruction count 27, allocated bytes for code 136 (MethodHash=f0e4872f) for method System.OrdinalComparer:GetHashCode():int:this (FullOpts)
+; Total bytes of code 152, prolog size 20, PerfScore 50.25, instruction count 28, allocated bytes for code 152 (MethodHash=f0e4872f) for method System.OrdinalComparer:GetHashCode():int:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -74,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 68 (0x00044) Actual length = 136 (0x000088)
+  Function Length   : 76 (0x0004c) Actual length = 152 (0x000098)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+8.33%) : 1546.dasm - System.Random+CompatSeedImpl:NextInt64():long:this (FullOpts)
@@ -10,20 +10,27 @@
 ;  V00 this         [V00,T01] (  3, 10   )     ref  ->   s1         this class-hnd single-def <System.Random+CompatSeedImpl>
 ;  V01 loc0         [V01,T00] (  3, 17   )    long  ->   a0        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V03 cse0         [V03,T02] (  2,  9   )    long  ->   s2         hoist "CSE #01: aggressive"
 ;
-; Lcl frame size = 8
-Frame info. #outsz=0; #framesz=32; lcl=8
+; Lcl frame size = 0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M45547_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 8(sp)
-            sd             ra, 16(sp)
-            sd             s1, 24(sp)
-            addi           fp, sp, 8
+            sd             fp, 0(sp)
+            sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
+            mv             fp, sp
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=24 bbWeight=1 PerfScore 13.50
-G_M45547_IG02:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
+						;; size=28 bbWeight=1 PerfScore 17.50
+G_M45547_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
+            addiw          s2, zero, 0xD1FFAB1E
+            slli           s2, s2, 63
+            addi           s2, s2, 0xD1FFAB1E
+						;; size=12 bbWeight=1 PerfScore 3.00
+G_M45547_IG03:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             mv             a0, s1
             ; gcrRegs +[a0]
             lui            t6, 0xD1FFAB1E
@@ -35,20 +42,18 @@ G_M45547_IG02:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             jalr           a1		// System.Random+CompatSeedImpl:NextUInt64():ulong:this
             ; gcrRegs -[a0]
             srli           a0, a0, 1
-            addiw          a1, zero, 0xD1FFAB1E
-            slli           a1, a1, 63
-            addi           a1, a1, 0xD1FFAB1E
-            beq            a0, a1, G_M45547_IG02
-						;; size=52 bbWeight=8 PerfScore 140.00
-G_M45547_IG03:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+            beq            a0, s2, G_M45547_IG03
+						;; size=40 bbWeight=8 PerfScore 116.00
+G_M45547_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
             ; gcrRegs -[s1]
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=1 PerfScore 9.50
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 96, prolog size 20, PerfScore 163.00, instruction count 18, allocated bytes for code 96 (MethodHash=f2254e14) for method System.Random+CompatSeedImpl:NextInt64():long:this (FullOpts)
+; Total bytes of code 104, prolog size 24, PerfScore 148.00, instruction count 20, allocated bytes for code 104 (MethodHash=f2254e14) for method System.Random+CompatSeedImpl:NextInt64():long:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -59,19 +64,19 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
+  Function Length   : 52 (0x00034) Actual length = 104 (0x000068)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
-    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
-    ---- Epilog start at index 3 ----
-    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
-    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
-    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    E1          set_fp; move fp, sp
+    ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
+    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
+    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
-    E4          end
 
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
System.Private.CoreLib.mch 1,265 624 136 505 -20,324 +1,738

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
System.Private.CoreLib.mch 1,265 583 223 459 -4.22% +3.66% -0.1352%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
System.Private.CoreLib.mch 12,996 338 12,658 22 (0.17%) 1 (0.01%)

jit-analyze output

@tomeksowi
Copy link
Member

tomeksowi commented Nov 19, 2025

It is not clear that it's fixed after merging. The regression gets worse after the merge than before. I don't know what's wrong, but the test results on the base branch(pc-rel-pointers) in #119203 before merging it into this PR didn't show the improvements reported in tomeksowi's PR.

I suspect the cause might be due to differences in environment variables, but I'm not really sure about it.

The reason may be that when generating asm diffs, nearly all pointers end up out of range because we're in PMI replay. I remember having to force IsAddressInRange to true temporarily to get more accurate diffs. Maybe I should check for RunningSuperPmiReplay in there...

@namu-lee
Copy link
Contributor Author

namu-lee commented Dec 10, 2025

I finally figured out the reason why absolute addresses are being generated for constants transformed by CSE.

In the baseline JIT, the address calculation node N006(CNS_INT) is marked as contained and emitted via emitter::emitIns_R_AI, which is called from emitter::emitInsLoadStoreOp.

In contrast, in the diff JIT, constant CSE transforms this into N005(CNS_INT) and N007(STORE_LCL_VAR). Since N005 isn't marked as contained and CodeGen::genCodeForStoreLclVar doesn't support pc-relative addressing for contained operands, an absolute address is emitted by emitter::emitLoadImmediate.

I'm working on adding support for pc-relative addressing in CodeGen::genCodeForStoreLclVar and marking the hoisted node as contained to fix this.

Baseline JIT

N004 (  1,  4) [000000] -----+-----                    t0 =    CNS_INT   int    -0x41103532 REG a0 $41
N006 (  1,  4) [000001] Hc---+-----                    t1 =    CNS_INT(h) long   0xd1ffab1e static Fseq[<unknown field>] REG NA $c0
                                                            /--*  t1     long   
                                                            +--*  t0     int    
N008 (  6, 11) [000002] IA--G+-----                         *  STOREIND  int    REG NA $VN.Void
N010 (???,???) [000008] -----------                            IL_OFFSET void   INLRT @ 0x00A[E--] REG NA
N012 (  1,  4) [000003] -----+-----                    t3 =    CNS_INT   int    1 REG a0 $42
N014 (  1,  4) [000004] Hc---+-----                    t4 =    CNS_INT(h) long   0xd1ffab1e static Fseq[<unknown field>] REG NA $c2
                                                            /--*  t4     long   
                                                            +--*  t3     int    
N016 (  6, 11) [000005] IA--G+-----                         *  STOREIND  int    REG NA $VN.Void

Diff JIT

N005 (  5, 20) [000001] H----+-----                    t1 =    CNS_INT(h) long   0xd1ffab1e static Fseq[<unknown field>] REG a0 $c0
                                                            /--*  t1     long   
N007 (  5, 20) [000007] DA---------                         *  STORE_LCL_VAR long   V01 cse0         d:1 a0 REG a0 $VN.Void
N009 (  1,  1) [000008] -----------                    t8 =    LCL_VAR   long   V01 cse0         u:1 a0 REG a0 $c0
N011 (  2,  8) [000000] -----+-----                    t0 =    CNS_INT   int    -0x41103532 REG a1 $41
                                                            /--*  t8     long   
                                                            +--*  t0     int    
N013 ( 12, 32) [000002] IA--G+-----                         *  STOREIND  int    REG NA $VN.Void
N015 (???,???) [000014] -----------                            IL_OFFSET void   INLRT @ 0x00A[E--] REG NA
N017 (  1,  1) [000010] -----------                   t10 =    LCL_VAR   long   V01 cse0         u:1 a0 (last use) REG a0 $c0
                                                            /--*  t10    long   
N019 (  3,  6) [000012] -c-----N---                   t12 = *  LEA(b+4)  long   REG NA
N021 (  1,  4) [000003] -----+-----                    t3 =    CNS_INT   int    1 REG a1 $42
                                                            /--*  t12    long   
                                                            +--*  t3     int    
N023 (  6,  8) [000005] IA--G+-----                         *  STOREIND  int    REG NA $VN.Void

@namu-lee
Copy link
Contributor Author

namu-lee commented Dec 13, 2025

I've completed adding support for emitting relative addresses for hoisted CNS_INT nodes.
Hoisted CNS_INT nodes (only handles) which can be located relative to the PC are now contained in GT_STORE_LCL_VAR nodes and handled in the CodeGen::genCodeForStoreLclVar instead of CodeGen::genSetRegToConst.

@namu-lee
Copy link
Contributor Author

Diffs are based on 133,433 contexts (104,312 MinOpts, 29,121 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 2 (0.00%)

Overall (-340,832 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 1,022,706 -9,202 -1.89%
JIT.opt.mch 8,101,340 -217,488 -9.07%
System.mch 33,602,076 -114,142 -1.82%
MinOpts (-211,812 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 404,260 -336 -0.88%
JIT.opt.mch 4,911,242 -138,164 -9.79%
System.mch 31,388,366 -73,312 -1.40%
FullOpts (-129,020 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 618,446 -8,866 -2.09%
JIT.opt.mch 3,190,098 -79,324 -3.45%
System.mch 2,213,710 -40,830 -3.54%
Example diffs
benchmark.mch
-48 (-22.22%) : 2479.dasm - NDhrystone:.cctor() (FullOpts)
@@ -12,16 +12,20 @@
 ;* V01 tmp1         [V01    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
 ;* V03 tmp3         [V03    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
+;  V04 cse0         [V04,T00] (  4,  4   )    long  ->   s1         "CSE #01: aggressive"
+;  V05 cse1         [V05,T01] (  3,  3   )    long  ->   s2         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M4492_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
@@ -32,71 +36,57 @@ G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWARR_1_VC
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
             mv             t4, a0
             ; gcrRegs +[t4]
+            mv             t3, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=184 bbWeight=1 PerfScore 56.00
+						;; size=120 bbWeight=1 PerfScore 34.50
 G_M4492_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 216, prolog size 16, PerfScore 72.50, instruction count 24, allocated bytes for code 216 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
+; Total bytes of code 168, prolog size 24, PerfScore 63.00, instruction count 30, allocated bytes for code 168 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 108 (0x0006c) Actual length = 216 (0x0000d8)
+  Function Length   : 84 (0x00054) Actual length = 168 (0x0000a8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -104,11 +94,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
-32 (-21.62%) : 576.dasm - System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
@@ -12,7 +12,8 @@
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V03 tmp1         [V03    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V04 tmp2         [V04    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
-;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a2         "CSE #01: moderate"
+;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a3         "CSE #01: moderate"
+;  V06 cse1         [V06,T03] (  3,  1.50)    long  ->   a2         "CSE #02: moderate"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -31,20 +32,12 @@ G_M32674_IG03:        ; bbWeight=0.50, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}
             beqz           a0, G_M32674_IG04
             beqz           a1, G_M32674_IG04
             ld             a2, 0xD1FFAB1E(a0)
-            lui            a3, 0xD1FFAB1E
-            addiw          a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 14
-            addi           a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 1
+            auipc          a3, 0xD1FFAB1E
+            mv             a3, a3
             beq            a2, a3, G_M32674_IG04
-            ld             a3, 0xD1FFAB1E(a1)
-            lui            a4, 0xD1FFAB1E
-            addiw          a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 14
-            addi           a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 1
-            bne            a3, a4, G_M32674_IG06
-						;; size=64 bbWeight=0.50 PerfScore 14.00
+            ld             a4, 0xD1FFAB1E(a1)
+            bne            a4, a3, G_M32674_IG06
+						;; size=32 bbWeight=0.50 PerfScore 9.25
 G_M32674_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0-a1]
             mv             a0, zero
@@ -75,7 +68,7 @@ G_M32674_IG09:        ; bbWeight=0.50, epilog, nogc, extend
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 148, prolog size 16, PerfScore 40.25, instruction count 29, allocated bytes for code 148 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
+; Total bytes of code 116, prolog size 16, PerfScore 35.50, instruction count 28, allocated bytes for code 116 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 58 (0x0003a) Actual length = 116 (0x000074)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-48 (-16.90%) : 1408.dasm - System.Threading.CancellationTokenSource:.cctor() (FullOpts)
@@ -12,51 +12,43 @@
 ;  V01 tmp1         [V01,T01] (  3,  6   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;  V03 tmp3         [V03,T00] (  6, 12   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+;  V04 cse0         [V04,T02] (  4,  4   )    long  ->   s2         "CSE #02: aggressive"
+;  V05 cse1         [V05,T03] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M38012_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             addi           t3, zero, 0xD1FFAB1E
             fence          3, 3
             sw             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             t3, s2
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
@@ -89,35 +81,33 @@ G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             slli           t3, t3, 15
             addi           t3, t3, 0xD1FFAB1E
             sd             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=252 bbWeight=1 PerfScore 87.00
+						;; size=188 bbWeight=1 PerfScore 65.50
 G_M38012_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 284, prolog size 16, PerfScore 103.50, instruction count 33, allocated bytes for code 284 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
+; Total bytes of code 236, prolog size 24, PerfScore 94.00, instruction count 39, allocated bytes for code 236 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 142 (0x0008e) Actual length = 284 (0x00011c)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -125,11 +115,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
+24 (+11.32%) : 132.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
@@ -12,7 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Guid>
 ;* V03 tmp2         [V03    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[S] "Inlining Arg" <System.Guid>
-;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
+;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
 ;  V05 tmp4         [V05,T02] (  2,  4   )     ref  ->   t4         class-hnd exact single-def "NewArr temp" <nint[]>
 ;* V06 tmp5         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <<unknown class>>
@@ -38,38 +38,35 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
+;  V31 cse1         [V31,T04] (  3,  3   )     int  ->   a1         "CSE #02: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M4783_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             sd             zero, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             ; gcr arg pop 0
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            addi           a0, s2, 0xD1FFAB1E
             ; gcrRegs -[a0]
             addi           a1, zero, 0xD1FFAB1E
             auipc          ra, 0xD1FFAB1E
@@ -78,7 +75,7 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
-            addi           t3, s2, 0xD1FFAB1E
+            addi           t3, s3, 0xD1FFAB1E
             ; byrRegs +[t3]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
@@ -86,16 +83,26 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -110,43 +117,43 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a4]
             auipc          a5, 0xD1FFAB1E
             ld             a5, 0xD1FFAB1E(a5)
-						;; size=160 bbWeight=1 PerfScore 49.50
+						;; size=176 bbWeight=1 PerfScore 48.00
 G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a5		// <unknown method>
-						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	516D5A0549592C0Fh
-RWD08  	dq	896C02024EA64BAAh
+						;; size=28 bbWeight=1 PerfScore 13.50
+RWD00  	dq	896C02024EA64BAAh
 
 
-; Total bytes of code 212, prolog size 28, PerfScore 78.50, instruction count 34, allocated bytes for code 212 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
+; Total bytes of code 236, prolog size 32, PerfScore 83.00, instruction count 45, allocated bytes for code 236 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 106 (0x0006a) Actual length = 212 (0x0000d4)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+16 (+8.51%) : 2201.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
+8 (+6.67%) : 862.dasm - System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
@@ -10,22 +10,25 @@
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V01 tmp1         [V01,T00] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.AppDomain>
+;  V02 cse0         [V02,T01] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M33691_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+            addi           sp, sp, -32
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M33691_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             bnez           a0, G_M33691_IG04
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=16 bbWeight=1 PerfScore 6.00
 G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -54,39 +57,39 @@ G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             ; byrRegs -[a0]
 						;; size=68 bbWeight=0.50 PerfScore 11.25
 G_M33691_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
-						;; size=8 bbWeight=1 PerfScore 2.00
+						;; size=4 bbWeight=1 PerfScore 2.00
 G_M33691_IG05:        ; bbWeight=1, epilog, nogc, extend
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 32
+            ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 120, prolog size 16, PerfScore 35.25, instruction count 19, allocated bytes for code 120 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
+; Total bytes of code 128, prolog size 20, PerfScore 41.75, instruction count 22, allocated bytes for code 128 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 60 (0x0003c) Actual length = 120 (0x000078)
+  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
     E4          end
JIT.opt.mch
-24 (-27.27%) : 22189.dasm - JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
@@ -27,30 +27,24 @@ G_M6536_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             beqz           a0, G_M6536_IG04
 						;; size=12 bbWeight=1 PerfScore 4.50
 G_M6536_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M6536_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M6536_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M6536_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 26.75, instruction count 14, allocated bytes for code 88 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 22.25, instruction count 14, allocated bytes for code 64 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -61,7 +55,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-27.27%) : 22190.dasm - JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
@@ -29,30 +29,24 @@ G_M19854_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0400 {a0}, byre
             beqz           a0, G_M19854_IG04
 						;; size=12 bbWeight=1 PerfScore 7.00
 G_M19854_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M19854_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M19854_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M19854_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 29.25, instruction count 14, allocated bytes for code 88 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 24.75, instruction count 14, allocated bytes for code 64 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -63,7 +57,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-32 (-25.81%) : 20987.dasm - Tests:Equals_0(System.String) (FullOpts)
@@ -12,6 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )     ref  ->  zero-ref    single-def "spilling varStr"
 ;  V03 tmp2         [V03,T01] (  4,  3   )     int  ->   a0         "spilling unroll qmark"
+;  V04 cse0         [V04,T02] (  3,  3   )     ref  ->   a2         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -25,50 +26,40 @@ G_M17322_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ; gcrRegs +[a1]
 						;; size=20 bbWeight=1 PerfScore 9.50
 G_M17322_IG02:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
-            ; gcrRegs +[a0]
-            beq            a1, a0, G_M17322_IG06
-						;; size=24 bbWeight=1 PerfScore 8.50
-G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            ; gcrRegs -[a0]
+            auipc          a2, 0xD1FFAB1E
+            mv             a2, a2
+            ; gcrRegs +[a2]
+            beq            a1, a2, G_M17322_IG06
+						;; size=12 bbWeight=1 PerfScore 4.00
+G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             bnez           a1, G_M17322_IG05
 						;; size=4 bbWeight=0.25 PerfScore 0.88
-G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             sext.w         a0, zero
             j              G_M17322_IG07
 						;; size=8 bbWeight=0.12 PerfScore 0.25
-G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             lw             a0, 0xD1FFAB1E(a1)
             sext.w         a0, a0
             sltiu          a0, a0, 1
             j              G_M17322_IG07
 						;; size=16 bbWeight=0.12 PerfScore 0.56
-G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
+G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.25 PerfScore 0.12
-G_M17322_IG07:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 12
-            addi           a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 3
-            ; gcrRegs +[a2]
+G_M17322_IG07:        ; bbWeight=1, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
             jalr           a3		// <unknown method>
             ; gcrRegs -[a1-a2]
-						;; size=32 bbWeight=1 PerfScore 10.00
+						;; size=12 bbWeight=1 PerfScore 5.00
 G_M17322_IG08:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 124, prolog size 16, PerfScore 37.31, instruction count 22, allocated bytes for code 124 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
+; Total bytes of code 92, prolog size 16, PerfScore 27.81, instruction count 21, allocated bytes for code 92 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -79,7 +70,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 62 (0x0003e) Actual length = 124 (0x00007c)
+  Function Length   : 46 (0x0002e) Actual length = 92 (0x00005c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+24 (+11.32%) : 132.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
@@ -12,7 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Guid>
 ;* V03 tmp2         [V03    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[S] "Inlining Arg" <System.Guid>
-;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
+;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
 ;  V05 tmp4         [V05,T02] (  2,  4   )     ref  ->   t4         class-hnd exact single-def "NewArr temp" <nint[]>
 ;* V06 tmp5         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <<unknown class>>
@@ -38,38 +38,35 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
+;  V31 cse1         [V31,T04] (  3,  3   )     int  ->   a1         "CSE #02: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M4783_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             sd             zero, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             ; gcr arg pop 0
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            addi           a0, s2, 0xD1FFAB1E
             ; gcrRegs -[a0]
             addi           a1, zero, 0xD1FFAB1E
             auipc          ra, 0xD1FFAB1E
@@ -78,7 +75,7 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
-            addi           t3, s2, 0xD1FFAB1E
+            addi           t3, s3, 0xD1FFAB1E
             ; byrRegs +[t3]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
@@ -86,16 +83,26 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -110,43 +117,43 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a4]
             auipc          a5, 0xD1FFAB1E
             ld             a5, 0xD1FFAB1E(a5)
-						;; size=160 bbWeight=1 PerfScore 49.50
+						;; size=176 bbWeight=1 PerfScore 48.00
 G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a5		// <unknown method>
-						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	516D5A0549592C0Fh
-RWD08  	dq	896C02024EA64BAAh
+						;; size=28 bbWeight=1 PerfScore 13.50
+RWD00  	dq	896C02024EA64BAAh
 
 
-; Total bytes of code 212, prolog size 28, PerfScore 78.50, instruction count 34, allocated bytes for code 212 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
+; Total bytes of code 236, prolog size 32, PerfScore 83.00, instruction count 45, allocated bytes for code 236 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 106 (0x0006a) Actual length = 212 (0x0000d4)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+8 (+9.09%) : 2422.dasm - ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
@@ -8,6 +8,7 @@
 ; Final local variable assignments
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V01 cse0         [V01,T00] (  4,  3   )    long  ->   a1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -19,10 +20,14 @@ G_M40797_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M40797_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 13
+            addi           a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 2
+            ld             a0, 0xD1FFAB1E(a1)
             beqz           a0, G_M40797_IG05
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=28 bbWeight=1 PerfScore 10.50
 G_M40797_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -33,19 +38,17 @@ G_M40797_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 G_M40797_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
-            auipc          a1, 0xD1FFAB1E
             sd             a0, 0xD1FFAB1E(a1)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(a1)
             sltiu          a0, a0, 1
-						;; size=24 bbWeight=0.50 PerfScore 3.50
+						;; size=16 bbWeight=0.50 PerfScore 3.50
 G_M40797_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 88, prolog size 16, PerfScore 25.75, instruction count 19, allocated bytes for code 88 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
+; Total bytes of code 96, prolog size 16, PerfScore 30.75, instruction count 20, allocated bytes for code 96 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -56,7 +59,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+14 (+8.86%) : 4872.dasm - Tests:MulOverflow() (FullOpts)
@@ -8,38 +8,42 @@
 ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;* V00 loc0         [V00,T04] (  0,  0   )     int  ->  zero-ref   
+;* V00 loc0         [V00,T06] (  0,  0   )     int  ->  zero-ref   
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <byte[]>
 ;  V03 tmp2         [V03,T01] (  2, 32   )     ref  ->   a0         "arr expr"
-;* V04 cse0         [V04,T03] (  0,  0   )     int  ->  zero-ref    "CSE #01: aggressive"
-;  V05 rat0         [V05,T00] (  5, 33   )     int  ->   s1         "Strength reduced derived IV"
-;  V06 rat1         [V06,T02] (  4, 25   )     int  ->   s2         "Trip count IV"
+;* V04 cse0         [V04,T05] (  0,  0   )     int  ->  zero-ref    "CSE #03: aggressive"
+;  V05 cse1         [V05,T03] (  2,  9   )    long  ->   s1         hoist "CSE #01: aggressive"
+;  V06 cse2         [V06,T04] (  2,  9   )    long  ->   s2         hoist "CSE #02: aggressive"
+;* V07 cse3         [V07,T07] (  0,  0   )     int  ->  zero-ref    hoist "CSE #04: aggressive"
+;  V08 rat0         [V08,T00] (  5, 33   )     int  ->   s3         "Strength reduced derived IV"
+;  V09 rat1         [V09,T02] (  4, 25   )     int  ->   s4         "Trip count IV"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+Frame info. #outsz=0; #framesz=48; lcl=0
 
 G_M1388_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
+            addi           sp, sp, -48
             sd             fp, 0(sp)
             sd             ra, 8(sp)
             sd             s1, 16(sp)
             sd             s2, 24(sp)
+            sd             s3, 32(sp)
+            sd             s4, 40(sp)
             mv             fp, sp
-						;; size=24 bbWeight=1 PerfScore 17.00
+						;; size=32 bbWeight=1 PerfScore 25.00
 G_M1388_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            sext.w         s1, zero
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
             lui            s2, 0xD1FFAB1E
             addiw          s2, s2, 0xD1FFAB1E
-						;; size=12 bbWeight=1 PerfScore 2.50
+            sext.w         s3, zero
+            lui            s4, 0xD1FFAB1E
+            addiw          s4, s4, 0xD1FFAB1E
+						;; size=28 bbWeight=1 PerfScore 5.00
 G_M1388_IG03:        ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
+            mv             a0, s1
+            mv             a1, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWARR_1_VC
             ; gcrRegs +[a0]
@@ -47,27 +51,29 @@ G_M1388_IG03:        ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             lui            a1, 0xD1FFAB1E
             addiw          a1, a1, 0xD1FFAB1E
             sext.w         a2, a1
-            sext.w         a3, s1
+            sext.w         a3, s3
             bgeu           a3, a2, G_M1388_IG05
-            add.uw         a0, s1, a0
+            add.uw         a0, s3, a0
             ; gcrRegs -[a0]
             ; byrRegs +[a0]
             addi           a1, zero, 0xD1FFAB1E
             sb             a1, 0xD1FFAB1E(a0)
             lui            a0, 0xD1FFAB1E
             ; byrRegs -[a0]
-            addw           s1, s1, a0
-            addiw          s2, s2, 0xD1FFAB1E
-            sext.w         a0, s2
+            addw           s3, s3, a0
+            addiw          s4, s4, 0xD1FFAB1E
+            sext.w         a0, s4
             bnez           a0, G_M1388_IG03
-						;; size=86 bbWeight=8 PerfScore 228.00
+						;; size=68 bbWeight=8 PerfScore 180.00
 G_M1388_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+            ld             s4, 40(sp)
+            ld             s3, 32(sp)
             ld             s2, 24(sp)
             ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 32
-            ret						;; size=24 bbWeight=1 PerfScore 11.50
+            addi           sp, sp, 48
+            ret						;; size=32 bbWeight=1 PerfScore 15.50
 G_M1388_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_RNGCHKFAIL
@@ -75,18 +81,18 @@ G_M1388_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}
             ebreak
 						;; size=12 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 158, prolog size 24, PerfScore 259.00, instruction count 31, allocated bytes for code 158 (MethodHash=12a0fa93) for method Tests:MulOverflow() (FullOpts)
+; Total bytes of code 172, prolog size 32, PerfScore 225.50, instruction count 37, allocated bytes for code 172 (MethodHash=12a0fa93) for method Tests:MulOverflow() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 6
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 79 (0x0004f) Actual length = 158 (0x00009e)
+  Function Length   : 86 (0x00056) Actual length = 172 (0x0000ac)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -94,11 +100,15 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 13 05      save_reg X#19 Z#5 (0x05); sd s4, sp, 40
+    D0 12 04      save_reg X#18 Z#4 (0x04); sd s3, sp, 32
     D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
     D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
+    E4          end
+    E4          end
     E4          end
     E4          end
 
System.mch
-28 (-35.00%) : 15276.dasm - System.CommandLine.LocalizationResources+<>c:b__10_0(System.String):System.String:this (FullOpts)
@@ -10,6 +10,7 @@
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.CommandLine.LocalizationResources+<>c>
 ;  V01 arg1         [V01,T00] (  3,  3   )     ref  ->   a1         class-hnd single-def <System.String>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V03 cse0         [V03,T01] (  3,  3   )     ref  ->   a2         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -22,21 +23,14 @@ G_M18717_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M18717_IG02:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a1]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
-            ; gcrRegs +[a0]
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 13
-            addi           a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 2
+            auipc          a2, 0xD1FFAB1E
+            mv             a2, a2
             ; gcrRegs +[a2]
+            mv             a0, a2
+            ; gcrRegs +[a0]
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
-						;; size=48 bbWeight=1 PerfScore 12.00
+						;; size=20 bbWeight=1 PerfScore 3.00
 G_M18717_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -44,7 +38,7 @@ G_M18717_IG03:        ; bbWeight=1, epilog, nogc, extend
             jr             a3		// <unknown method>
 						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 80, prolog size 16, PerfScore 28.50, instruction count 11, allocated bytes for code 80 (MethodHash=79f7b6e2) for method System.CommandLine.LocalizationResources+<>c:<UnrecognizedArgument>b__10_0(System.String):System.String:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 19.50, instruction count 11, allocated bytes for code 52 (MethodHash=79f7b6e2) for method System.CommandLine.LocalizationResources+<>c:<UnrecognizedArgument>b__10_0(System.String):System.String:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -55,7 +49,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 40 (0x00028) Actual length = 80 (0x000050)
+  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-26.09%) : 48317.dasm - System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
@@ -29,25 +29,19 @@ G_M58429_IG02:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, b
 						;; size=4 bbWeight=1 PerfScore 3.50
 G_M58429_IG03:        ; bbWeight=0.50, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M58429_IG04:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, byref, isz
             bnez           a1, G_M58429_IG06
 						;; size=4 bbWeight=1 PerfScore 3.50
 G_M58429_IG05:        ; bbWeight=0.50, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a1]
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 12
-            addi           a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 3
+            auipc          a1, 0xD1FFAB1E
+            mv             a1, a1
             ; gcrRegs +[a1]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M58429_IG06:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, byref
             addi           a2, zero, 0xD1FFAB1E
             auipc          a3, 0xD1FFAB1E
@@ -60,7 +54,7 @@ G_M58429_IG07:        ; bbWeight=1, epilog, nogc, extend
             jr             a3		// <unknown method>
 						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 92, prolog size 16, PerfScore 31.00, instruction count 14, allocated bytes for code 92 (MethodHash=6d0f1bc2) for method System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
+; Total bytes of code 68, prolog size 16, PerfScore 26.50, instruction count 14, allocated bytes for code 68 (MethodHash=6d0f1bc2) for method System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -71,7 +65,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 46 (0x0002e) Actual length = 92 (0x00005c)
+  Function Length   : 34 (0x00022) Actual length = 68 (0x000044)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-32 (-25.00%) : 46753.dasm - System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
@@ -10,6 +10,7 @@
 ;  V00 this         [V00,T01] (  4,  4   )     ref  ->   a0         this class-hnd single-def <System.Configuration.IdnElement>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V02 tmp1         [V02,T00] (  4,  6.50)     ref  ->   s1         single-def "inline UNBOX clone1"
+;  V03 cse0         [V03,T02] (  3,  2.25)    long  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 Frame info. #outsz=0; #framesz=32; lcl=8
@@ -32,27 +33,19 @@ G_M55376_IG02:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byre
             mv             s1, a0
             ; gcrRegs +[s1]
             ld             a1, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs -[a0]
             beq            a1, a0, G_M55376_IG04
-						;; size=48 bbWeight=1 PerfScore 18.00
+						;; size=36 bbWeight=1 PerfScore 13.50
 G_M55376_IG03:        ; bbWeight=0.25, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             mv             a1, s1
             ; gcrRegs +[a1]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// CORINFO_HELP_UNBOX
             ; gcrRegs -[a1]
-						;; size=36 bbWeight=0.25 PerfScore 2.62
+						;; size=16 bbWeight=0.25 PerfScore 1.38
 G_M55376_IG04:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             lw             a0, 0xD1FFAB1E(s1)
 						;; size=4 bbWeight=1 PerfScore 2.00
@@ -63,7 +56,7 @@ G_M55376_IG05:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 128, prolog size 20, PerfScore 45.12, instruction count 22, allocated bytes for code 128 (MethodHash=e65c27af) for method System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
+; Total bytes of code 96, prolog size 20, PerfScore 39.38, instruction count 21, allocated bytes for code 96 (MethodHash=e65c27af) for method System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -74,7 +67,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+24 (+11.54%) : 47128.dasm - System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
@@ -10,21 +10,23 @@
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->   s1         this class-hnd single-def <System.Configuration.ConfigurationElement>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Configuration.ConfigurationValues>
+;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Configuration.ConfigurationValues>
+;  V03 cse0         [V03,T02] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M63202_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M63202_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             fence          3, 3
             auipc          a0, 0xD1FFAB1E
@@ -34,8 +36,13 @@ G_M63202_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             beqz           a0, G_M63202_IG05
 						;; size=24 bbWeight=1 PerfScore 11.50
 G_M63202_IG03:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
-            auipc          t4, 0xD1FFAB1E
-            ld             t4, 0xD1FFAB1E(t4)
+            lui            s2, 0xD1FFAB1E
+            addiw          s2, s2, 0xD1FFAB1E
+            slli           s2, s2, 15
+            addi           s2, s2, 0xD1FFAB1E
+            lui            t3, 0xD1FFAB1E
+            add            t3, s2, t3
+            ld             t4, 0xD1FFAB1E(t3)
             ; gcrRegs +[t4]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
@@ -51,37 +58,37 @@ G_M63202_IG03:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            ld             a1, 0xD1FFAB1E(s2)
             ; gcrRegs +[a1]
-            mv             a0, s2
+            mv             a0, s3
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// <unknown method>
             ; gcrRegs -[a0-a1]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             mv             a0, s1
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
-						;; size=104 bbWeight=1 PerfScore 31.00
+						;; size=120 bbWeight=1 PerfScore 36.50
 G_M63202_IG04:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a1		// System.Configuration.ConfigurationElement:ApplyValidator(System.Configuration.ConfigurationElement)
-						;; size=24 bbWeight=1 PerfScore 11.50
+						;; size=28 bbWeight=1 PerfScore 13.50
 G_M63202_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, gcvars, byref, isz
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -93,30 +100,30 @@ G_M63202_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0200 {
             j              G_M63202_IG03
 						;; size=28 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 208, prolog size 24, PerfScore 71.50, instruction count 36, allocated bytes for code 208 (MethodHash=07c6091d) for method System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
+; Total bytes of code 232, prolog size 28, PerfScore 83.00, instruction count 41, allocated bytes for code 232 (MethodHash=07c6091d) for method System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 104 (0x00068) Actual length = 208 (0x0000d0)
+  Function Length   : 116 (0x00074) Actual length = 232 (0x0000e8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+24 (+11.32%) : 132.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
@@ -12,7 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Guid>
 ;* V03 tmp2         [V03    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[S] "Inlining Arg" <System.Guid>
-;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
+;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
 ;  V05 tmp4         [V05,T02] (  2,  4   )     ref  ->   t4         class-hnd exact single-def "NewArr temp" <nint[]>
 ;* V06 tmp5         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <<unknown class>>
@@ -38,38 +38,35 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
+;  V31 cse1         [V31,T04] (  3,  3   )     int  ->   a1         "CSE #02: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M4783_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             sd             zero, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             ; gcr arg pop 0
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            addi           a0, s2, 0xD1FFAB1E
             ; gcrRegs -[a0]
             addi           a1, zero, 0xD1FFAB1E
             auipc          ra, 0xD1FFAB1E
@@ -78,7 +75,7 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
-            addi           t3, s2, 0xD1FFAB1E
+            addi           t3, s3, 0xD1FFAB1E
             ; byrRegs +[t3]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
@@ -86,16 +83,26 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -110,43 +117,43 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a4]
             auipc          a5, 0xD1FFAB1E
             ld             a5, 0xD1FFAB1E(a5)
-						;; size=160 bbWeight=1 PerfScore 49.50
+						;; size=176 bbWeight=1 PerfScore 48.00
 G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a5		// <unknown method>
-						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	516D5A0549592C0Fh
-RWD08  	dq	896C02024EA64BAAh
+						;; size=28 bbWeight=1 PerfScore 13.50
+RWD00  	dq	896C02024EA64BAAh
 
 
-; Total bytes of code 212, prolog size 28, PerfScore 78.50, instruction count 34, allocated bytes for code 212 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
+; Total bytes of code 236, prolog size 32, PerfScore 83.00, instruction count 45, allocated bytes for code 236 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 106 (0x0006a) Actual length = 212 (0x0000d4)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+20 (+9.09%) : 48045.dasm - System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
@@ -8,71 +8,78 @@
 ; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T03] (  8,  7   )     ref  ->   s1         this class-hnd single-def <System.Configuration.SectionInformation>
+;  V00 this         [V00,T04] (  8,  7   )     ref  ->   s1         this class-hnd single-def <System.Configuration.SectionInformation>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;  V02 tmp1         [V02,T05] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "impAppendStmt" <System.Configuration.MgmtConfigurationRecord>
+;  V02 tmp1         [V02,T06] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "impAppendStmt" <System.Configuration.MgmtConfigurationRecord>
 ;* V03 tmp2         [V03    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V04 tmp3         [V04    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V05 tmp4         [V05,T06] (  3,  2   )     ref  ->   t4         class-hnd "Inline return value spill temp" <System.Configuration.ProtectedConfigurationProvider>
-;  V06 tmp5         [V06,T04] (  4,  4   )     ref  ->   s2         class-hnd exact single-def "Inlining Arg" <System.String>
-;* V07 tmp6         [V07,T09] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V05 tmp4         [V05,T07] (  3,  2   )     ref  ->   t4         class-hnd "Inline return value spill temp" <System.Configuration.ProtectedConfigurationProvider>
+;  V06 tmp5         [V06,T05] (  4,  4   )     ref  ->   s3         class-hnd exact single-def "Inlining Arg" <System.String>
+;* V07 tmp6         [V07,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V08 tmp7         [V08,T00] (  3, 34   )   byref  ->   a0         single-def "Inlining Arg"
 ;  V09 tmp8         [V09,T01] (  4, 32   )     int  ->   a1         "Inline stloc first use temp"
 ;* V10 tmp9         [V10    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;  V11 tmp10        [V11,T02] (  2, 16   )     int  ->   a5         "Inline stloc first use temp"
-;  V12 tmp11        [V12,T07] (  2,  2   )     ref  ->   a0         single-def "argument with side effect"
-;  V13 cse0         [V13,T08] (  3,  1.50)     ref  ->   a0         "CSE #01: moderate"
+;  V12 tmp11        [V12,T08] (  2,  2   )     ref  ->   a0         single-def "argument with side effect"
+;  V13 cse0         [V13,T09] (  3,  1.50)     ref  ->   a0         "CSE #02: moderate"
+;  V14 cse1         [V14,T03] (  4, 11   )     int  ->   s2         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M28210_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M28210_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             fence          3, 3
             lw             a0, 0xD1FFAB1E(s1)
-            slli           a0, a0, 52
-            blt            a0, zero, G_M28210_IG10
-						;; size=16 bbWeight=1 PerfScore 11.00
+            lui            s2, 0xD1FFAB1E
+            addiw          s2, s2, 0xD1FFAB1E
+            and            a0, a0, s2
+            sext.w         a0, a0
+            sext.w         a0, a0
+            sext.w         a1, s2
+            beq            a0, a1, G_M28210_IG10
+						;; size=36 bbWeight=1 PerfScore 14.50
 G_M28210_IG03:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             beqz           a0, G_M28210_IG10
-            ld             s2, 0xD1FFAB1E(s1)
-            ; gcrRegs +[s2]
+            ld             s3, 0xD1FFAB1E(s1)
+            ; gcrRegs +[s3]
             lb             zero, 0xD1FFAB1E(a0)
-            beqz           s2, G_M28210_IG04
-            lw             a1, 0xD1FFAB1E(s2)
+            beqz           s3, G_M28210_IG04
+            lw             a1, 0xD1FFAB1E(s3)
             sext.w         a1, a1
             bnez           a1, G_M28210_IG05
 						;; size=32 bbWeight=0.50 PerfScore 10.00
 G_M28210_IG04:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
-            ; gcrRegs -[a0 s2]
+            ; gcrRegs -[a0 s3]
             mv             t4, zero
             ; gcrRegs +[t4]
             j              G_M28210_IG06
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M28210_IG05:        ; bbWeight=0.50, gcrefRegs=40600 {s1 a0 s2}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[t4] +[a0 s2]
+G_M28210_IG05:        ; bbWeight=0.50, gcrefRegs=80600 {s1 a0 s3}, byrefRegs=0000 {}, byref
+            ; gcrRegs -[t4] +[a0 s3]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             jalr           a1		// System.Configuration.BaseConfigurationRecord:get_ProtectedConfig():System.Configuration.ProtectedConfigurationSection:this
             ; gcr arg pop 0
-            mv             a1, s2
+            mv             a1, s3
             ; gcrRegs +[a1]
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             lw             zero, 0xD1FFAB1E(a0)
             jalr           a2		// System.Configuration.ProtectedConfigurationSection:GetProviderFromName(System.String):System.Configuration.ProtectedConfigurationProvider:this
-            ; gcrRegs -[a1 s2]
+            ; gcrRegs -[a1 s3]
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
@@ -91,12 +98,10 @@ G_M28210_IG06:        ; bbWeight=1, gcrefRegs=20000200 {s1 t4}, byrefRegs=0000 {
 G_M28210_IG07:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0400 {a0}, byref
             fence          3, 3
             lw             a1, 0xD1FFAB1E(a0)
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            or             a2, a1, a2
+            or             a2, a1, s2
             sext.w         a2, a2
             sext.w         a3, a1
-						;; size=28 bbWeight=8 PerfScore 84.00
+						;; size=20 bbWeight=8 PerfScore 68.00
 G_M28210_IG08:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0400 {a0}, byref, isz
             lr.w.aqrl      a5, (a0)
             bne            a5, a3, G_M28210_IG09
@@ -114,37 +119,38 @@ G_M28210_IG10:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; gcrRegs +[a0]
 						;; size=4 bbWeight=1 PerfScore 2.00
 G_M28210_IG11:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
-            ret						;; size=24 bbWeight=1 PerfScore 11.50
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
+            ret						;; size=28 bbWeight=1 PerfScore 13.50
 
-; Total bytes of code 220, prolog size 28, PerfScore 320.50, instruction count 51, allocated bytes for code 220 (MethodHash=dea791cd) for method System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
+; Total bytes of code 240, prolog size 32, PerfScore 314.00, instruction count 56, allocated bytes for code 240 (MethodHash=dea791cd) for method System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 110 (0x0006e) Actual length = 220 (0x0000dc)
+  Function Length   : 120 (0x00078) Actual length = 240 (0x0000f0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmark.mch 433 275 27 131 -9,548 +346
JIT.opt.mch 13,677 13,299 63 315 -218,560 +1,072
System.mch 6,919 4,299 76 2,544 -115,024 +882
21,029 17,873 166 2,990 -343,132 +2,300

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
benchmark.mch 433 259 65 109 -4.04% +3.84% -0.5064%
JIT.opt.mch 13,677 13,187 225 265 -9.47% +5.23% -0.2940%
System.mch 6,919 3,882 202 2,835 -3.43% +4.41% -0.5592%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmark.mch 2,501 1,005 1,496 0 (0.00%) 0 (0.00%)
JIT.opt.mch 36,110 17,045 19,065 0 (0.00%) 0 (0.00%)
System.mch 94,822 86,262 8,560 0 (0.00%) 2 (0.00%)
133,433 104,312 29,121 0 (0.00%) 2 (0.00%)

jit-analyze output

@am11
Copy link
Member

am11 commented Dec 13, 2025

Hoisted CNS_INT nodes (only handles) which can be located relative to the PC are now contained in GT_STORE_LCL_VAR nodes and handled in the CodeGen::genCodeForStoreLclVar instead of CodeGen::genSetRegToConst.

PC-relative CNS_INT emission improves duplicated block-local constants, but hoisting loop-invariant constants into locals can increase callee-saved pressure and regress small loops. We likely need a heuristic to avoid hoisting when it forces additional sN registers. e.g. there is 8.9% regressions in this stress code:

    public static void MulOverflow()
    {
        for (int i = 0; i < 39768215; i++)
        {
            bigArr[i*402653184] = 17;
        }
    }

@namu-lee
Copy link
Contributor Author

namu-lee commented Dec 15, 2025

We likely need a heuristic to avoid hoisting when it forces additional sN registers.

I've added a heuristic to prevent hoisting the constants that would likely end up in callee-saved registers. Regressions due to the hoisted constants are now removed.

diffs

Diffs are based on 133,433 contexts (104,312 MinOpts, 29,121 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 2 (0.00%)

Overall (-341,820 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 1,022,706 -9,322 -1.78%
JIT.opt.mch 8,101,340 -217,634 -9.07%
System.mch 33,602,076 -114,864 -1.82%
MinOpts (-211,812 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 404,260 -336 -0.89%
JIT.opt.mch 4,911,242 -138,164 -9.79%
System.mch 31,388,366 -73,312 -1.41%
FullOpts (-130,008 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 618,446 -8,986 -1.96%
JIT.opt.mch 3,190,098 -79,470 -3.38%
System.mch 2,213,710 -41,552 -3.49%
Example diffs
benchmark.mch
-48 (-22.22%) : 2479.dasm - NDhrystone:.cctor() (FullOpts)
@@ -12,16 +12,20 @@
 ;* V01 tmp1         [V01    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
 ;* V03 tmp3         [V03    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
+;  V04 cse0         [V04,T00] (  4,  4   )    long  ->   s1         "CSE #01: aggressive"
+;  V05 cse1         [V05,T01] (  3,  3   )    long  ->   s2         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M4492_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
@@ -32,71 +36,57 @@ G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWARR_1_VC
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
             mv             t4, a0
             ; gcrRegs +[t4]
+            mv             t3, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=184 bbWeight=1 PerfScore 56.00
+						;; size=120 bbWeight=1 PerfScore 34.50
 G_M4492_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 216, prolog size 16, PerfScore 72.50, instruction count 24, allocated bytes for code 216 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
+; Total bytes of code 168, prolog size 24, PerfScore 63.00, instruction count 30, allocated bytes for code 168 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 108 (0x0006c) Actual length = 216 (0x0000d8)
+  Function Length   : 84 (0x00054) Actual length = 168 (0x0000a8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -104,11 +94,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
-32 (-21.62%) : 576.dasm - System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
@@ -12,7 +12,8 @@
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V03 tmp1         [V03    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V04 tmp2         [V04    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
-;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a2         "CSE #01: moderate"
+;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a3         "CSE #01: moderate"
+;  V06 cse1         [V06,T03] (  3,  1.50)    long  ->   a2         "CSE #02: moderate"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -31,20 +32,12 @@ G_M32674_IG03:        ; bbWeight=0.50, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}
             beqz           a0, G_M32674_IG04
             beqz           a1, G_M32674_IG04
             ld             a2, 0xD1FFAB1E(a0)
-            lui            a3, 0xD1FFAB1E
-            addiw          a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 14
-            addi           a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 1
+            auipc          a3, 0xD1FFAB1E
+            mv             a3, a3
             beq            a2, a3, G_M32674_IG04
-            ld             a3, 0xD1FFAB1E(a1)
-            lui            a4, 0xD1FFAB1E
-            addiw          a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 14
-            addi           a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 1
-            bne            a3, a4, G_M32674_IG06
-						;; size=64 bbWeight=0.50 PerfScore 14.00
+            ld             a4, 0xD1FFAB1E(a1)
+            bne            a4, a3, G_M32674_IG06
+						;; size=32 bbWeight=0.50 PerfScore 9.25
 G_M32674_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0-a1]
             mv             a0, zero
@@ -75,7 +68,7 @@ G_M32674_IG09:        ; bbWeight=0.50, epilog, nogc, extend
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 148, prolog size 16, PerfScore 40.25, instruction count 29, allocated bytes for code 148 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
+; Total bytes of code 116, prolog size 16, PerfScore 35.50, instruction count 28, allocated bytes for code 116 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 58 (0x0003a) Actual length = 116 (0x000074)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-48 (-16.90%) : 1408.dasm - System.Threading.CancellationTokenSource:.cctor() (FullOpts)
@@ -12,51 +12,43 @@
 ;  V01 tmp1         [V01,T01] (  3,  6   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;  V03 tmp3         [V03,T00] (  6, 12   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+;  V04 cse0         [V04,T02] (  4,  4   )    long  ->   s2         "CSE #02: aggressive"
+;  V05 cse1         [V05,T03] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M38012_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             addi           t3, zero, 0xD1FFAB1E
             fence          3, 3
             sw             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             t3, s2
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
@@ -89,35 +81,33 @@ G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             slli           t3, t3, 15
             addi           t3, t3, 0xD1FFAB1E
             sd             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=252 bbWeight=1 PerfScore 87.00
+						;; size=188 bbWeight=1 PerfScore 65.50
 G_M38012_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 284, prolog size 16, PerfScore 103.50, instruction count 33, allocated bytes for code 284 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
+; Total bytes of code 236, prolog size 24, PerfScore 94.00, instruction count 39, allocated bytes for code 236 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 142 (0x0008e) Actual length = 284 (0x00011c)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -125,11 +115,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
+24 (+11.32%) : 132.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
@@ -12,7 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Guid>
 ;* V03 tmp2         [V03    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[S] "Inlining Arg" <System.Guid>
-;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
+;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
 ;  V05 tmp4         [V05,T02] (  2,  4   )     ref  ->   t4         class-hnd exact single-def "NewArr temp" <nint[]>
 ;* V06 tmp5         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <<unknown class>>
@@ -38,38 +38,35 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
+;  V31 cse1         [V31,T04] (  3,  3   )     int  ->   a1         "CSE #02: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M4783_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             sd             zero, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             ; gcr arg pop 0
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            addi           a0, s2, 0xD1FFAB1E
             ; gcrRegs -[a0]
             addi           a1, zero, 0xD1FFAB1E
             auipc          ra, 0xD1FFAB1E
@@ -78,7 +75,7 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
-            addi           t3, s2, 0xD1FFAB1E
+            addi           t3, s3, 0xD1FFAB1E
             ; byrRegs +[t3]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
@@ -86,16 +83,26 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -110,43 +117,43 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a4]
             auipc          a5, 0xD1FFAB1E
             ld             a5, 0xD1FFAB1E(a5)
-						;; size=160 bbWeight=1 PerfScore 49.50
+						;; size=176 bbWeight=1 PerfScore 48.00
 G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a5		// <unknown method>
-						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	516D5A0549592C0Fh
-RWD08  	dq	896C02024EA64BAAh
+						;; size=28 bbWeight=1 PerfScore 13.50
+RWD00  	dq	896C02024EA64BAAh
 
 
-; Total bytes of code 212, prolog size 28, PerfScore 78.50, instruction count 34, allocated bytes for code 212 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
+; Total bytes of code 236, prolog size 32, PerfScore 83.00, instruction count 45, allocated bytes for code 236 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 106 (0x0006a) Actual length = 212 (0x0000d4)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+16 (+8.51%) : 2201.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
+8 (+6.67%) : 862.dasm - System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
@@ -10,22 +10,25 @@
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V01 tmp1         [V01,T00] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.AppDomain>
+;  V02 cse0         [V02,T01] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M33691_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+            addi           sp, sp, -32
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M33691_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             bnez           a0, G_M33691_IG04
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=16 bbWeight=1 PerfScore 6.00
 G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -54,39 +57,39 @@ G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             ; byrRegs -[a0]
 						;; size=68 bbWeight=0.50 PerfScore 11.25
 G_M33691_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
-						;; size=8 bbWeight=1 PerfScore 2.00
+						;; size=4 bbWeight=1 PerfScore 2.00
 G_M33691_IG05:        ; bbWeight=1, epilog, nogc, extend
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 32
+            ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 120, prolog size 16, PerfScore 35.25, instruction count 19, allocated bytes for code 120 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
+; Total bytes of code 128, prolog size 20, PerfScore 41.75, instruction count 22, allocated bytes for code 128 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 60 (0x0003c) Actual length = 120 (0x000078)
+  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
     E4          end
JIT.opt.mch
-24 (-27.27%) : 22189.dasm - JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
@@ -27,30 +27,24 @@ G_M6536_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             beqz           a0, G_M6536_IG04
 						;; size=12 bbWeight=1 PerfScore 4.50
 G_M6536_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M6536_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M6536_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M6536_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 26.75, instruction count 14, allocated bytes for code 88 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 22.25, instruction count 14, allocated bytes for code 64 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -61,7 +55,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-27.27%) : 22190.dasm - JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
@@ -29,30 +29,24 @@ G_M19854_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0400 {a0}, byre
             beqz           a0, G_M19854_IG04
 						;; size=12 bbWeight=1 PerfScore 7.00
 G_M19854_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M19854_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M19854_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M19854_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 29.25, instruction count 14, allocated bytes for code 88 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 24.75, instruction count 14, allocated bytes for code 64 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -63,7 +57,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-32 (-25.81%) : 20987.dasm - Tests:Equals_0(System.String) (FullOpts)
@@ -12,6 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )     ref  ->  zero-ref    single-def "spilling varStr"
 ;  V03 tmp2         [V03,T01] (  4,  3   )     int  ->   a0         "spilling unroll qmark"
+;  V04 cse0         [V04,T02] (  3,  3   )     ref  ->   a2         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -25,50 +26,40 @@ G_M17322_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ; gcrRegs +[a1]
 						;; size=20 bbWeight=1 PerfScore 9.50
 G_M17322_IG02:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
-            ; gcrRegs +[a0]
-            beq            a1, a0, G_M17322_IG06
-						;; size=24 bbWeight=1 PerfScore 8.50
-G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            ; gcrRegs -[a0]
+            auipc          a2, 0xD1FFAB1E
+            mv             a2, a2
+            ; gcrRegs +[a2]
+            beq            a1, a2, G_M17322_IG06
+						;; size=12 bbWeight=1 PerfScore 4.00
+G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             bnez           a1, G_M17322_IG05
 						;; size=4 bbWeight=0.25 PerfScore 0.88
-G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             sext.w         a0, zero
             j              G_M17322_IG07
 						;; size=8 bbWeight=0.12 PerfScore 0.25
-G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             lw             a0, 0xD1FFAB1E(a1)
             sext.w         a0, a0
             sltiu          a0, a0, 1
             j              G_M17322_IG07
 						;; size=16 bbWeight=0.12 PerfScore 0.56
-G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
+G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.25 PerfScore 0.12
-G_M17322_IG07:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 12
-            addi           a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 3
-            ; gcrRegs +[a2]
+G_M17322_IG07:        ; bbWeight=1, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
             jalr           a3		// <unknown method>
             ; gcrRegs -[a1-a2]
-						;; size=32 bbWeight=1 PerfScore 10.00
+						;; size=12 bbWeight=1 PerfScore 5.00
 G_M17322_IG08:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 124, prolog size 16, PerfScore 37.31, instruction count 22, allocated bytes for code 124 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
+; Total bytes of code 92, prolog size 16, PerfScore 27.81, instruction count 21, allocated bytes for code 92 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -79,7 +70,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 62 (0x0003e) Actual length = 124 (0x00007c)
+  Function Length   : 46 (0x0002e) Actual length = 92 (0x00005c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+24 (+11.32%) : 132.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
@@ -12,7 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Guid>
 ;* V03 tmp2         [V03    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[S] "Inlining Arg" <System.Guid>
-;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
+;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
 ;  V05 tmp4         [V05,T02] (  2,  4   )     ref  ->   t4         class-hnd exact single-def "NewArr temp" <nint[]>
 ;* V06 tmp5         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <<unknown class>>
@@ -38,38 +38,35 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
+;  V31 cse1         [V31,T04] (  3,  3   )     int  ->   a1         "CSE #02: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M4783_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             sd             zero, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             ; gcr arg pop 0
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            addi           a0, s2, 0xD1FFAB1E
             ; gcrRegs -[a0]
             addi           a1, zero, 0xD1FFAB1E
             auipc          ra, 0xD1FFAB1E
@@ -78,7 +75,7 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
-            addi           t3, s2, 0xD1FFAB1E
+            addi           t3, s3, 0xD1FFAB1E
             ; byrRegs +[t3]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
@@ -86,16 +83,26 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -110,43 +117,43 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a4]
             auipc          a5, 0xD1FFAB1E
             ld             a5, 0xD1FFAB1E(a5)
-						;; size=160 bbWeight=1 PerfScore 49.50
+						;; size=176 bbWeight=1 PerfScore 48.00
 G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a5		// <unknown method>
-						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	516D5A0549592C0Fh
-RWD08  	dq	896C02024EA64BAAh
+						;; size=28 bbWeight=1 PerfScore 13.50
+RWD00  	dq	896C02024EA64BAAh
 
 
-; Total bytes of code 212, prolog size 28, PerfScore 78.50, instruction count 34, allocated bytes for code 212 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
+; Total bytes of code 236, prolog size 32, PerfScore 83.00, instruction count 45, allocated bytes for code 236 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 106 (0x0006a) Actual length = 212 (0x0000d4)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+8 (+9.09%) : 2422.dasm - ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
@@ -8,6 +8,7 @@
 ; Final local variable assignments
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V01 cse0         [V01,T00] (  4,  3   )    long  ->   a1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -19,10 +20,14 @@ G_M40797_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M40797_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 13
+            addi           a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 2
+            ld             a0, 0xD1FFAB1E(a1)
             beqz           a0, G_M40797_IG05
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=28 bbWeight=1 PerfScore 10.50
 G_M40797_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -33,19 +38,17 @@ G_M40797_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 G_M40797_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
-            auipc          a1, 0xD1FFAB1E
             sd             a0, 0xD1FFAB1E(a1)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(a1)
             sltiu          a0, a0, 1
-						;; size=24 bbWeight=0.50 PerfScore 3.50
+						;; size=16 bbWeight=0.50 PerfScore 3.50
 G_M40797_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 88, prolog size 16, PerfScore 25.75, instruction count 19, allocated bytes for code 88 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
+; Total bytes of code 96, prolog size 16, PerfScore 30.75, instruction count 20, allocated bytes for code 96 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -56,7 +59,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+8.51%) : 3232.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
System.mch
-28 (-35.00%) : 15276.dasm - System.CommandLine.LocalizationResources+<>c:b__10_0(System.String):System.String:this (FullOpts)
@@ -10,6 +10,7 @@
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.CommandLine.LocalizationResources+<>c>
 ;  V01 arg1         [V01,T00] (  3,  3   )     ref  ->   a1         class-hnd single-def <System.String>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V03 cse0         [V03,T01] (  3,  3   )     ref  ->   a2         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -22,21 +23,14 @@ G_M18717_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M18717_IG02:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a1]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
-            ; gcrRegs +[a0]
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 13
-            addi           a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 2
+            auipc          a2, 0xD1FFAB1E
+            mv             a2, a2
             ; gcrRegs +[a2]
+            mv             a0, a2
+            ; gcrRegs +[a0]
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
-						;; size=48 bbWeight=1 PerfScore 12.00
+						;; size=20 bbWeight=1 PerfScore 3.00
 G_M18717_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -44,7 +38,7 @@ G_M18717_IG03:        ; bbWeight=1, epilog, nogc, extend
             jr             a3		// <unknown method>
 						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 80, prolog size 16, PerfScore 28.50, instruction count 11, allocated bytes for code 80 (MethodHash=79f7b6e2) for method System.CommandLine.LocalizationResources+<>c:<UnrecognizedArgument>b__10_0(System.String):System.String:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 19.50, instruction count 11, allocated bytes for code 52 (MethodHash=79f7b6e2) for method System.CommandLine.LocalizationResources+<>c:<UnrecognizedArgument>b__10_0(System.String):System.String:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -55,7 +49,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 40 (0x00028) Actual length = 80 (0x000050)
+  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-26.09%) : 48317.dasm - System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
@@ -29,25 +29,19 @@ G_M58429_IG02:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, b
 						;; size=4 bbWeight=1 PerfScore 3.50
 G_M58429_IG03:        ; bbWeight=0.50, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M58429_IG04:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, byref, isz
             bnez           a1, G_M58429_IG06
 						;; size=4 bbWeight=1 PerfScore 3.50
 G_M58429_IG05:        ; bbWeight=0.50, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a1]
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 12
-            addi           a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 3
+            auipc          a1, 0xD1FFAB1E
+            mv             a1, a1
             ; gcrRegs +[a1]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M58429_IG06:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, byref
             addi           a2, zero, 0xD1FFAB1E
             auipc          a3, 0xD1FFAB1E
@@ -60,7 +54,7 @@ G_M58429_IG07:        ; bbWeight=1, epilog, nogc, extend
             jr             a3		// <unknown method>
 						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 92, prolog size 16, PerfScore 31.00, instruction count 14, allocated bytes for code 92 (MethodHash=6d0f1bc2) for method System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
+; Total bytes of code 68, prolog size 16, PerfScore 26.50, instruction count 14, allocated bytes for code 68 (MethodHash=6d0f1bc2) for method System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -71,7 +65,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 46 (0x0002e) Actual length = 92 (0x00005c)
+  Function Length   : 34 (0x00022) Actual length = 68 (0x000044)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-32 (-25.00%) : 46753.dasm - System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
@@ -10,6 +10,7 @@
 ;  V00 this         [V00,T01] (  4,  4   )     ref  ->   a0         this class-hnd single-def <System.Configuration.IdnElement>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V02 tmp1         [V02,T00] (  4,  6.50)     ref  ->   s1         single-def "inline UNBOX clone1"
+;  V03 cse0         [V03,T02] (  3,  2.25)    long  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 Frame info. #outsz=0; #framesz=32; lcl=8
@@ -32,27 +33,19 @@ G_M55376_IG02:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byre
             mv             s1, a0
             ; gcrRegs +[s1]
             ld             a1, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs -[a0]
             beq            a1, a0, G_M55376_IG04
-						;; size=48 bbWeight=1 PerfScore 18.00
+						;; size=36 bbWeight=1 PerfScore 13.50
 G_M55376_IG03:        ; bbWeight=0.25, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             mv             a1, s1
             ; gcrRegs +[a1]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// CORINFO_HELP_UNBOX
             ; gcrRegs -[a1]
-						;; size=36 bbWeight=0.25 PerfScore 2.62
+						;; size=16 bbWeight=0.25 PerfScore 1.38
 G_M55376_IG04:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             lw             a0, 0xD1FFAB1E(s1)
 						;; size=4 bbWeight=1 PerfScore 2.00
@@ -63,7 +56,7 @@ G_M55376_IG05:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 128, prolog size 20, PerfScore 45.12, instruction count 22, allocated bytes for code 128 (MethodHash=e65c27af) for method System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
+; Total bytes of code 96, prolog size 20, PerfScore 39.38, instruction count 21, allocated bytes for code 96 (MethodHash=e65c27af) for method System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -74,7 +67,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+24 (+11.54%) : 47128.dasm - System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
@@ -10,21 +10,23 @@
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->   s1         this class-hnd single-def <System.Configuration.ConfigurationElement>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Configuration.ConfigurationValues>
+;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Configuration.ConfigurationValues>
+;  V03 cse0         [V03,T02] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M63202_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M63202_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             fence          3, 3
             auipc          a0, 0xD1FFAB1E
@@ -34,8 +36,13 @@ G_M63202_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             beqz           a0, G_M63202_IG05
 						;; size=24 bbWeight=1 PerfScore 11.50
 G_M63202_IG03:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
-            auipc          t4, 0xD1FFAB1E
-            ld             t4, 0xD1FFAB1E(t4)
+            lui            s2, 0xD1FFAB1E
+            addiw          s2, s2, 0xD1FFAB1E
+            slli           s2, s2, 15
+            addi           s2, s2, 0xD1FFAB1E
+            lui            t3, 0xD1FFAB1E
+            add            t3, s2, t3
+            ld             t4, 0xD1FFAB1E(t3)
             ; gcrRegs +[t4]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
@@ -51,37 +58,37 @@ G_M63202_IG03:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            ld             a1, 0xD1FFAB1E(s2)
             ; gcrRegs +[a1]
-            mv             a0, s2
+            mv             a0, s3
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// <unknown method>
             ; gcrRegs -[a0-a1]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             mv             a0, s1
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
-						;; size=104 bbWeight=1 PerfScore 31.00
+						;; size=120 bbWeight=1 PerfScore 36.50
 G_M63202_IG04:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a1		// System.Configuration.ConfigurationElement:ApplyValidator(System.Configuration.ConfigurationElement)
-						;; size=24 bbWeight=1 PerfScore 11.50
+						;; size=28 bbWeight=1 PerfScore 13.50
 G_M63202_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, gcvars, byref, isz
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -93,30 +100,30 @@ G_M63202_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0200 {
             j              G_M63202_IG03
 						;; size=28 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 208, prolog size 24, PerfScore 71.50, instruction count 36, allocated bytes for code 208 (MethodHash=07c6091d) for method System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
+; Total bytes of code 232, prolog size 28, PerfScore 83.00, instruction count 41, allocated bytes for code 232 (MethodHash=07c6091d) for method System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 104 (0x00068) Actual length = 208 (0x0000d0)
+  Function Length   : 116 (0x00074) Actual length = 232 (0x0000e8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+24 (+11.32%) : 132.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
@@ -12,7 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Guid>
 ;* V03 tmp2         [V03    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[S] "Inlining Arg" <System.Guid>
-;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
+;  V04 tmp3         [V04,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.Tracing.TraceLoggingEventHandleTable>
 ;  V05 tmp4         [V05,T02] (  2,  4   )     ref  ->   t4         class-hnd exact single-def "NewArr temp" <nint[]>
 ;* V06 tmp5         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <<unknown class>>
@@ -38,38 +38,35 @@
 ;* V27 tmp26        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[013..014)"
 ;* V28 tmp27        [V28    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[014..015)"
 ;* V29 tmp28        [V29    ] (  0,  0   )   ubyte  ->  zero-ref    "V03.[015..016)"
+;  V30 cse0         [V30,T03] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
+;  V31 cse1         [V31,T04] (  3,  3   )     int  ->   a1         "CSE #02: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M4783_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             sd             zero, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             ; gcr arg pop 0
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            addi           a0, s2, 0xD1FFAB1E
             ; gcrRegs -[a0]
             addi           a1, zero, 0xD1FFAB1E
             auipc          ra, 0xD1FFAB1E
@@ -78,7 +75,7 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
-            addi           t3, s2, 0xD1FFAB1E
+            addi           t3, s3, 0xD1FFAB1E
             ; byrRegs +[t3]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
@@ -86,16 +83,26 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1
@@ -110,43 +117,43 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a4]
             auipc          a5, 0xD1FFAB1E
             ld             a5, 0xD1FFAB1E(a5)
-						;; size=160 bbWeight=1 PerfScore 49.50
+						;; size=176 bbWeight=1 PerfScore 48.00
 G_M4783_IG03:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a5		// <unknown method>
-						;; size=24 bbWeight=1 PerfScore 11.50
-RWD00  	dq	516D5A0549592C0Fh
-RWD08  	dq	896C02024EA64BAAh
+						;; size=28 bbWeight=1 PerfScore 13.50
+RWD00  	dq	896C02024EA64BAAh
 
 
-; Total bytes of code 212, prolog size 28, PerfScore 78.50, instruction count 34, allocated bytes for code 212 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
+; Total bytes of code 236, prolog size 32, PerfScore 83.00, instruction count 45, allocated bytes for code 236 (MethodHash=d472ed50) for method System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 106 (0x0006a) Actual length = 212 (0x0000d4)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+20 (+9.09%) : 48045.dasm - System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
@@ -8,71 +8,78 @@
 ; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T03] (  8,  7   )     ref  ->   s1         this class-hnd single-def <System.Configuration.SectionInformation>
+;  V00 this         [V00,T04] (  8,  7   )     ref  ->   s1         this class-hnd single-def <System.Configuration.SectionInformation>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;  V02 tmp1         [V02,T05] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "impAppendStmt" <System.Configuration.MgmtConfigurationRecord>
+;  V02 tmp1         [V02,T06] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "impAppendStmt" <System.Configuration.MgmtConfigurationRecord>
 ;* V03 tmp2         [V03    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V04 tmp3         [V04    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V05 tmp4         [V05,T06] (  3,  2   )     ref  ->   t4         class-hnd "Inline return value spill temp" <System.Configuration.ProtectedConfigurationProvider>
-;  V06 tmp5         [V06,T04] (  4,  4   )     ref  ->   s2         class-hnd exact single-def "Inlining Arg" <System.String>
-;* V07 tmp6         [V07,T09] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V05 tmp4         [V05,T07] (  3,  2   )     ref  ->   t4         class-hnd "Inline return value spill temp" <System.Configuration.ProtectedConfigurationProvider>
+;  V06 tmp5         [V06,T05] (  4,  4   )     ref  ->   s3         class-hnd exact single-def "Inlining Arg" <System.String>
+;* V07 tmp6         [V07,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V08 tmp7         [V08,T00] (  3, 34   )   byref  ->   a0         single-def "Inlining Arg"
 ;  V09 tmp8         [V09,T01] (  4, 32   )     int  ->   a1         "Inline stloc first use temp"
 ;* V10 tmp9         [V10    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;  V11 tmp10        [V11,T02] (  2, 16   )     int  ->   a5         "Inline stloc first use temp"
-;  V12 tmp11        [V12,T07] (  2,  2   )     ref  ->   a0         single-def "argument with side effect"
-;  V13 cse0         [V13,T08] (  3,  1.50)     ref  ->   a0         "CSE #01: moderate"
+;  V12 tmp11        [V12,T08] (  2,  2   )     ref  ->   a0         single-def "argument with side effect"
+;  V13 cse0         [V13,T09] (  3,  1.50)     ref  ->   a0         "CSE #02: moderate"
+;  V14 cse1         [V14,T03] (  4, 11   )     int  ->   s2         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M28210_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M28210_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             fence          3, 3
             lw             a0, 0xD1FFAB1E(s1)
-            slli           a0, a0, 52
-            blt            a0, zero, G_M28210_IG10
-						;; size=16 bbWeight=1 PerfScore 11.00
+            lui            s2, 0xD1FFAB1E
+            addiw          s2, s2, 0xD1FFAB1E
+            and            a0, a0, s2
+            sext.w         a0, a0
+            sext.w         a0, a0
+            sext.w         a1, s2
+            beq            a0, a1, G_M28210_IG10
+						;; size=36 bbWeight=1 PerfScore 14.50
 G_M28210_IG03:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             beqz           a0, G_M28210_IG10
-            ld             s2, 0xD1FFAB1E(s1)
-            ; gcrRegs +[s2]
+            ld             s3, 0xD1FFAB1E(s1)
+            ; gcrRegs +[s3]
             lb             zero, 0xD1FFAB1E(a0)
-            beqz           s2, G_M28210_IG04
-            lw             a1, 0xD1FFAB1E(s2)
+            beqz           s3, G_M28210_IG04
+            lw             a1, 0xD1FFAB1E(s3)
             sext.w         a1, a1
             bnez           a1, G_M28210_IG05
 						;; size=32 bbWeight=0.50 PerfScore 10.00
 G_M28210_IG04:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
-            ; gcrRegs -[a0 s2]
+            ; gcrRegs -[a0 s3]
             mv             t4, zero
             ; gcrRegs +[t4]
             j              G_M28210_IG06
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M28210_IG05:        ; bbWeight=0.50, gcrefRegs=40600 {s1 a0 s2}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[t4] +[a0 s2]
+G_M28210_IG05:        ; bbWeight=0.50, gcrefRegs=80600 {s1 a0 s3}, byrefRegs=0000 {}, byref
+            ; gcrRegs -[t4] +[a0 s3]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             jalr           a1		// System.Configuration.BaseConfigurationRecord:get_ProtectedConfig():System.Configuration.ProtectedConfigurationSection:this
             ; gcr arg pop 0
-            mv             a1, s2
+            mv             a1, s3
             ; gcrRegs +[a1]
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             lw             zero, 0xD1FFAB1E(a0)
             jalr           a2		// System.Configuration.ProtectedConfigurationSection:GetProviderFromName(System.String):System.Configuration.ProtectedConfigurationProvider:this
-            ; gcrRegs -[a1 s2]
+            ; gcrRegs -[a1 s3]
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
@@ -91,12 +98,10 @@ G_M28210_IG06:        ; bbWeight=1, gcrefRegs=20000200 {s1 t4}, byrefRegs=0000 {
 G_M28210_IG07:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0400 {a0}, byref
             fence          3, 3
             lw             a1, 0xD1FFAB1E(a0)
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            or             a2, a1, a2
+            or             a2, a1, s2
             sext.w         a2, a2
             sext.w         a3, a1
-						;; size=28 bbWeight=8 PerfScore 84.00
+						;; size=20 bbWeight=8 PerfScore 68.00
 G_M28210_IG08:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0400 {a0}, byref, isz
             lr.w.aqrl      a5, (a0)
             bne            a5, a3, G_M28210_IG09
@@ -114,37 +119,38 @@ G_M28210_IG10:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; gcrRegs +[a0]
 						;; size=4 bbWeight=1 PerfScore 2.00
 G_M28210_IG11:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
-            ret						;; size=24 bbWeight=1 PerfScore 11.50
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
+            ret						;; size=28 bbWeight=1 PerfScore 13.50
 
-; Total bytes of code 220, prolog size 28, PerfScore 320.50, instruction count 51, allocated bytes for code 220 (MethodHash=dea791cd) for method System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
+; Total bytes of code 240, prolog size 32, PerfScore 314.00, instruction count 56, allocated bytes for code 240 (MethodHash=dea791cd) for method System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 110 (0x0006e) Actual length = 220 (0x0000dc)
+  Function Length   : 120 (0x00078) Actual length = 240 (0x0000f0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmark.mch 427 272 26 129 -9,644 +322
JIT.opt.mch 13,674 13,297 55 322 -218,620 +986
System.mch 6,877 4,294 74 2,509 -115,696 +832
20,978 17,863 155 2,960 -343,960 +2,140

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
benchmark.mch 427 255 64 108 -3.87% +3.81% -0.4683%
JIT.opt.mch 13,674 13,177 225 272 -9.47% +5.25% -0.2864%
System.mch 6,877 3,875 201 2,801 -3.41% +4.40% -0.5497%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmark.mch 2,501 1,005 1,496 0 (0.00%) 0 (0.00%)
JIT.opt.mch 36,110 17,045 19,065 0 (0.00%) 0 (0.00%)
System.mch 94,822 86,262 8,560 0 (0.00%) 2 (0.00%)
133,433 104,312 29,121 0 (0.00%) 2 (0.00%)

jit-analyze output

@tomeksowi
Copy link
Member

tomeksowi commented Dec 15, 2025

Looks much better overall.

+24 (+11.32%) : 132.dasm - System.Diagnostics.Tracing.RuntimeEventSource:.ctor():this (FullOpts)

@@ -86,16 +83,26 @@ G_M4783_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             ; byrRegs -[t3]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             addi           a1, zero, 0xD1FFAB1E
             sw             a1, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            lui            a2, 0xD1FFAB1E
+            addiw          a2, a2, 0xD1FFAB1E
+            addw           a2, a1, a2
+            zext.h         a2, a2
+            slli.uw        a2, a2, 32
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            or             a2, a0, a2
+            slli.uw        a1, a1, 48
+            or             a1, a2, a1
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             mv             a0, s1

I wonder what happened here, constant folding prevented maybe? These temporary constants synthesized with lui+addiw in a0 and a2 aren't reused in other places. Can it be avoided without complicating the logic too much?

@namu-lee
Copy link
Contributor Author

namu-lee commented Dec 16, 2025

I wonder what happened here, constant folding prevented maybe?

Yes, constant folding for CAST node failed because its operand was ADD inserted by CSE. It might be better to simply stop applying constant CSE on field lists.

@namu-lee
Copy link
Contributor Author

Can it be avoided without complicating the logic too much?

Removed bloated code generation for CALLs by disabling constant CSE for operands of FIELD_LISTs. Later, it might be better to improve constant folding to fold LCL_VARs defined as CNS_INT as a more general solution.

Diffs

Diffs are based on 133,433 contexts (104,312 MinOpts, 29,121 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 2 (0.00%)

Overall (-342,024 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 1,022,706 -9,390 -1.82%
JIT.opt.mch 8,101,340 -217,702 -9.07%
System.mch 33,602,076 -114,932 -1.81%
MinOpts (-211,812 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 404,260 -336 -0.90%
JIT.opt.mch 4,911,242 -138,164 -9.79%
System.mch 31,388,366 -73,312 -1.40%
FullOpts (-130,212 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 618,446 -9,054 -2.01%
JIT.opt.mch 3,190,098 -79,538 -3.39%
System.mch 2,213,710 -41,620 -3.50%
Example diffs
benchmark.mch
-48 (-22.22%) : 2479.dasm - NDhrystone:.cctor() (FullOpts)
@@ -12,16 +12,20 @@
 ;* V01 tmp1         [V01    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
 ;* V03 tmp3         [V03    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
+;  V04 cse0         [V04,T00] (  4,  4   )    long  ->   s1         "CSE #01: aggressive"
+;  V05 cse1         [V05,T01] (  3,  3   )    long  ->   s2         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M4492_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
@@ -32,71 +36,57 @@ G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWARR_1_VC
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
             mv             t4, a0
             ; gcrRegs +[t4]
+            mv             t3, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=184 bbWeight=1 PerfScore 56.00
+						;; size=120 bbWeight=1 PerfScore 34.50
 G_M4492_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 216, prolog size 16, PerfScore 72.50, instruction count 24, allocated bytes for code 216 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
+; Total bytes of code 168, prolog size 24, PerfScore 63.00, instruction count 30, allocated bytes for code 168 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 108 (0x0006c) Actual length = 216 (0x0000d8)
+  Function Length   : 84 (0x00054) Actual length = 168 (0x0000a8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -104,11 +94,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
-32 (-21.62%) : 576.dasm - System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
@@ -12,7 +12,8 @@
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V03 tmp1         [V03    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V04 tmp2         [V04    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
-;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a2         "CSE #01: moderate"
+;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a3         "CSE #01: moderate"
+;  V06 cse1         [V06,T03] (  3,  1.50)    long  ->   a2         "CSE #02: moderate"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -31,20 +32,12 @@ G_M32674_IG03:        ; bbWeight=0.50, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}
             beqz           a0, G_M32674_IG04
             beqz           a1, G_M32674_IG04
             ld             a2, 0xD1FFAB1E(a0)
-            lui            a3, 0xD1FFAB1E
-            addiw          a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 14
-            addi           a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 1
+            auipc          a3, 0xD1FFAB1E
+            mv             a3, a3
             beq            a2, a3, G_M32674_IG04
-            ld             a3, 0xD1FFAB1E(a1)
-            lui            a4, 0xD1FFAB1E
-            addiw          a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 14
-            addi           a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 1
-            bne            a3, a4, G_M32674_IG06
-						;; size=64 bbWeight=0.50 PerfScore 14.00
+            ld             a4, 0xD1FFAB1E(a1)
+            bne            a4, a3, G_M32674_IG06
+						;; size=32 bbWeight=0.50 PerfScore 9.25
 G_M32674_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0-a1]
             mv             a0, zero
@@ -75,7 +68,7 @@ G_M32674_IG09:        ; bbWeight=0.50, epilog, nogc, extend
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 148, prolog size 16, PerfScore 40.25, instruction count 29, allocated bytes for code 148 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
+; Total bytes of code 116, prolog size 16, PerfScore 35.50, instruction count 28, allocated bytes for code 116 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 58 (0x0003a) Actual length = 116 (0x000074)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-48 (-16.90%) : 1408.dasm - System.Threading.CancellationTokenSource:.cctor() (FullOpts)
@@ -12,51 +12,43 @@
 ;  V01 tmp1         [V01,T01] (  3,  6   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;  V03 tmp3         [V03,T00] (  6, 12   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+;  V04 cse0         [V04,T02] (  4,  4   )    long  ->   s2         "CSE #02: aggressive"
+;  V05 cse1         [V05,T03] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M38012_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             addi           t3, zero, 0xD1FFAB1E
             fence          3, 3
             sw             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             t3, s2
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
@@ -89,35 +81,33 @@ G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             slli           t3, t3, 15
             addi           t3, t3, 0xD1FFAB1E
             sd             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=252 bbWeight=1 PerfScore 87.00
+						;; size=188 bbWeight=1 PerfScore 65.50
 G_M38012_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 284, prolog size 16, PerfScore 103.50, instruction count 33, allocated bytes for code 284 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
+; Total bytes of code 236, prolog size 24, PerfScore 94.00, instruction count 39, allocated bytes for code 236 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 142 (0x0008e) Actual length = 284 (0x00011c)
+  Function Length   : 118 (0x00076) Actual length = 236 (0x0000ec)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -125,11 +115,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
+16 (+8.51%) : 2201.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
+8 (+6.67%) : 862.dasm - System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
@@ -10,22 +10,25 @@
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V01 tmp1         [V01,T00] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.AppDomain>
+;  V02 cse0         [V02,T01] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M33691_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+            addi           sp, sp, -32
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M33691_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             bnez           a0, G_M33691_IG04
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=16 bbWeight=1 PerfScore 6.00
 G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -54,39 +57,39 @@ G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             ; byrRegs -[a0]
 						;; size=68 bbWeight=0.50 PerfScore 11.25
 G_M33691_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
-						;; size=8 bbWeight=1 PerfScore 2.00
+						;; size=4 bbWeight=1 PerfScore 2.00
 G_M33691_IG05:        ; bbWeight=1, epilog, nogc, extend
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 32
+            ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 120, prolog size 16, PerfScore 35.25, instruction count 19, allocated bytes for code 120 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
+; Total bytes of code 128, prolog size 20, PerfScore 41.75, instruction count 22, allocated bytes for code 128 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 60 (0x0003c) Actual length = 120 (0x000078)
+  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
     E4          end
+36 (+6.08%) : 1419.dasm - System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1+ConfiguredValueTaskAwaiter[int]:System.Runtime.CompilerServices.IStateMachineBoxAwareAwaiter.AwaitUnsafeOnCompleted(System.Runtime.CompilerServices.IAsyncStateMachineBox):this (FullOpts)
@@ -11,46 +11,48 @@
 ;  V00 this         [V00,T00] (  7,  5   )   byref  ->   s1         this single-def
 ;  V01 arg1         [V01,T01] (  7,  4.50)     ref  ->   s2         class-hnd single-def <System.Runtime.CompilerServices.IAsyncStateMachineBox>
 ;  V02 loc0         [V02,T02] (  7,  5   )     ref  ->   s3         class-hnd single-def <System.Object>
-;  V03 loc1         [V03,T05] (  3,  2.50)     ref  ->   a0         class-hnd single-def <<unknown class>>
+;  V03 loc1         [V03,T06] (  3,  2.50)     ref  ->   a0         class-hnd single-def <<unknown class>>
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;* V05 tmp1         [V05,T11] (  0,  0   )     int  ->  zero-ref   
+;* V05 tmp1         [V05,T12] (  0,  0   )     int  ->  zero-ref   
 ;* V06 tmp2         [V06    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def "updating class info" <<unknown class>>
-;  V07 tmp3         [V07,T08] (  2,  2   )     int  ->   a3         "impAppendStmt"
+;  V07 tmp3         [V07,T09] (  2,  2   )     int  ->   a3         "impAppendStmt"
 ;* V08 tmp4         [V08    ] (  0,  0   )     ref  ->  zero-ref    single-def
-;  V09 tmp5         [V09,T09] (  2,  1   )     ref  ->   a1         single-def
+;  V09 tmp5         [V09,T10] (  2,  1   )     ref  ->   a1         single-def
 ;* V10 tmp6         [V10    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V11 tmp7         [V11    ] (  0,  0   )     int  ->  zero-ref   
 ;* V12 tmp8         [V12    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V13 tmp9         [V13    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V14 tmp10        [V14    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V15 tmp11        [V15    ] (  0,  0   )     int  ->  zero-ref   
-;  V16 tmp12        [V16,T10] (  2,  1   )     int  ->   a4        
+;  V16 tmp12        [V16,T11] (  2,  1   )     int  ->   a4        
 ;* V17 tmp13        [V17    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V18 tmp14        [V18    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
-;  V19 tmp15        [V19,T03] (  4,  4   )     ref  ->   s3         class-hnd exact single-def "Inlining Arg" <System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult]>
+;  V19 tmp15        [V19,T03] (  4,  4   )     ref  ->   s4         class-hnd exact single-def "Inlining Arg" <System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult]>
 ;  V20 tmp16        [V20,T04] (  3,  3   )   ubyte  ->   s1         "Inlining Arg"
 ;* V21 tmp17        [V21    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V22 tmp18        [V22    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V23 tmp19        [V23    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Threading.Tasks.TplEventSource>
-;  V24 tmp20        [V24,T06] (  2,  2   )     ref  ->   a1         single-def "argument with side effect"
-;  V25 tmp21        [V25,T07] (  2,  2   )     ref  ->   a1         single-def "argument with side effect"
+;  V24 tmp20        [V24,T07] (  2,  2   )     ref  ->   a1         single-def "argument with side effect"
+;  V25 tmp21        [V25,T08] (  2,  2   )     ref  ->   a1         single-def "argument with side effect"
+;  V26 cse0         [V26,T05] (  5,  2.50)    long  ->  registers   multi-def "CSE #03: aggressive"
 ;
-; Lcl frame size = 8
-Frame info. #outsz=0; #framesz=48; lcl=8
+; Lcl frame size = 0
+Frame info. #outsz=0; #framesz=48; lcl=0
 
 G_M21260_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -48
-            sd             fp, 8(sp)
-            sd             ra, 16(sp)
-            sd             s1, 24(sp)
-            sd             s2, 32(sp)
-            sd             s3, 40(sp)
-            addi           fp, sp, 8
+            sd             fp, 0(sp)
+            sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
+            sd             s3, 32(sp)
+            sd             s4, 40(sp)
+            mv             fp, sp
             mv             s1, a0
             ; byrRegs +[s1]
             mv             s2, a1
             ; gcrRegs +[s2]
-						;; size=36 bbWeight=1 PerfScore 22.00
+						;; size=40 bbWeight=1 PerfScore 26.00
 G_M21260_IG02:        ; bbWeight=1, gcrefRegs=40000 {s2}, byrefRegs=0200 {s1}, byref, isz
             ld             s3, 0xD1FFAB1E(s1)
             ; gcrRegs +[s3]
@@ -117,7 +119,10 @@ G_M21260_IG05:        ; bbWeight=0.50, gcrefRegs=C0000 {s2 s3}, byrefRegs=0200 {
             ; gcrRegs -[a0]
             bnez           s3, G_M21260_IG10
             auipc          s3, 0xD1FFAB1E
-            ld             s3, 0xD1FFAB1E(s3)
+            mv             s3, s3
+            ; gcrRegs -[s3]
+            ld             s4, 0xD1FFAB1E(s3)
+            ; gcrRegs +[s4]
             lbu            s1, 0xD1FFAB1E(s1)
             ; byrRegs -[s1]
             bnez           s2, G_M21260_IG06
@@ -138,10 +143,9 @@ G_M21260_IG05:        ; bbWeight=0.50, gcrefRegs=C0000 {s2 s3}, byrefRegs=0200 {
             jalr           a2		// <unknown method>
             ; gcrRegs -[a0-a1]
             ; gcr arg pop 0
-						;; size=72 bbWeight=0.50 PerfScore 13.50
-G_M21260_IG06:        ; bbWeight=0.50, gcrefRegs=C0000 {s2 s3}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+						;; size=76 bbWeight=0.50 PerfScore 13.75
+G_M21260_IG06:        ; bbWeight=0.50, gcrefRegs=140000 {s2 s4}, byrefRegs=0000 {}, byref, isz
+            ld             a0, 0xD1FFAB1E(s3)
             ; gcrRegs +[a0]
             lbu            a0, 0xD1FFAB1E(a0)
             ; gcrRegs -[a0]
@@ -151,24 +155,25 @@ G_M21260_IG06:        ; bbWeight=0.50, gcrefRegs=C0000 {s2 s3}, byrefRegs=0000 {
             lbu            a0, 0xD1FFAB1E(a0)
             sext.w         a0, a0
             bnez           a0, G_M21260_IG08
-            mv             a0, s3
+            mv             a0, s4
             ; gcrRegs +[a0]
             mv             a1, s2
             ; gcrRegs +[a1]
             sext.w         a2, s1
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
-						;; size=56 bbWeight=0.50 PerfScore 9.75
+						;; size=52 bbWeight=0.50 PerfScore 9.75
 G_M21260_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s3, 40(sp)
-            ld             s2, 32(sp)
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s4, 40(sp)
+            ld             s3, 32(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 48
             jr             a3		// <unknown method>
-						;; size=28 bbWeight=0.50 PerfScore 6.75
-G_M21260_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=C0000 {s2 s3}, byrefRegs=0000 {}, gcvars, byref
+						;; size=32 bbWeight=0.50 PerfScore 7.75
+G_M21260_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=140000 {s2 s4}, byrefRegs=0000 {}, gcvars, byref
             ; gcrRegs -[a0-a1]
             mv             a0, s2
             ; gcrRegs +[a0]
@@ -183,7 +188,7 @@ G_M21260_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=C00
             ; gcr arg pop 0
             mv             a1, a0
             ; gcrRegs +[a1]
-            mv             a0, s3
+            mv             a0, s4
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// <unknown method>
@@ -191,27 +196,32 @@ G_M21260_IG08:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=C00
             ; gcr arg pop 0
             mv             a1, a0
             ; gcrRegs +[a1]
-            mv             a0, s3
+            mv             a0, s4
             sext.w         a2, s1
             mv             a3, zero
             auipc          a4, 0xD1FFAB1E
             ld             a4, 0xD1FFAB1E(a4)
 						;; size=76 bbWeight=0.50 PerfScore 9.75
 G_M21260_IG09:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s3, 40(sp)
-            ld             s2, 32(sp)
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s4, 40(sp)
+            ld             s3, 32(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 48
             jr             a4		// <unknown method>
-						;; size=28 bbWeight=0.50 PerfScore 6.75
+						;; size=32 bbWeight=0.50 PerfScore 7.75
 G_M21260_IG10:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=C0000 {s2 s3}, byrefRegs=0200 {s1}, gcvars, byref
-            ; gcrRegs -[a0-a1] +[s2]
+            ; gcrRegs -[a0-a1 s4] +[s2-s3]
             ; byrRegs +[s1]
             lh             a3, 0xD1FFAB1E(s1)
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            lui            a0, 0xD1FFAB1E
+            addiw          a0, a0, 0xD1FFAB1E
+            slli           a0, a0, 15
+            addi           a0, a0, 0xD1FFAB1E
+            mv             s4, a0
+            ld             a1, 0xD1FFAB1E(s4)
             ; gcrRegs +[a1]
             lbu            a0, 0xD1FFAB1E(s1)
             sext.w         a0, a0
@@ -226,16 +236,17 @@ G_M21260_IG10:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=C00
             addi           t5, t5, 0xD1FFAB1E
             auipc          a5, 0xD1FFAB1E
             ld             a5, 0xD1FFAB1E(a5)
-						;; size=56 bbWeight=0.50 PerfScore 8.00
+						;; size=72 bbWeight=0.50 PerfScore 10.25
 G_M21260_IG11:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s3, 40(sp)
-            ld             s2, 32(sp)
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s4, 40(sp)
+            ld             s3, 32(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 48
             jr             a5		// <unknown method>
-						;; size=28 bbWeight=0.50 PerfScore 6.75
+						;; size=32 bbWeight=0.50 PerfScore 7.75
 G_M21260_IG12:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=40400 {a0 s2}, byrefRegs=0200 {s1}, gcvars, byref
             ; gcrRegs -[a1-a2 s3]
             lbu            a2, 0xD1FFAB1E(s1)
@@ -245,48 +256,53 @@ G_M21260_IG12:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=404
             ld             a3, 0xD1FFAB1E(a3)
 						;; size=16 bbWeight=0.50 PerfScore 2.75
 G_M21260_IG13:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s3, 40(sp)
-            ld             s2, 32(sp)
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s4, 40(sp)
+            ld             s3, 32(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 48
             jr             a3		// System.Runtime.CompilerServices.TaskAwaiter:UnsafeOnCompletedInternal(System.Threading.Tasks.Task,System.Runtime.CompilerServices.IAsyncStateMachineBox,bool)
-						;; size=28 bbWeight=0.50 PerfScore 6.75
+						;; size=32 bbWeight=0.50 PerfScore 7.75
 
-; Total bytes of code 592, prolog size 36, PerfScore 131.75, instruction count 99, allocated bytes for code 592 (MethodHash=8614acf3) for method System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1+ConfiguredValueTaskAwaiter[int]:System.Runtime.CompilerServices.IStateMachineBoxAwareAwaiter.AwaitUnsafeOnCompleted(System.Runtime.CompilerServices.IAsyncStateMachineBox):this (FullOpts)
+; Total bytes of code 628, prolog size 40, PerfScore 142.25, instruction count 107, allocated bytes for code 628 (MethodHash=8614acf3) for method System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1+ConfiguredValueTaskAwaiter[int]:System.Runtime.CompilerServices.IStateMachineBoxAwareAwaiter.AwaitUnsafeOnCompleted(System.Runtime.CompilerServices.IAsyncStateMachineBox):this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 5
+  Code Words        : 6
   Epilog Count      : 4
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 296 (0x00128) Actual length = 592 (0x000250)
+  Function Length   : 314 (0x0013a) Actual length = 628 (0x000274)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Scope 1
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Scope 2
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
...
JIT.opt.mch
-24 (-27.27%) : 22189.dasm - JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
@@ -27,30 +27,24 @@ G_M6536_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             beqz           a0, G_M6536_IG04
 						;; size=12 bbWeight=1 PerfScore 4.50
 G_M6536_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M6536_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M6536_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M6536_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 26.75, instruction count 14, allocated bytes for code 88 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 22.25, instruction count 14, allocated bytes for code 64 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -61,7 +55,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-27.27%) : 22190.dasm - JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
@@ -29,30 +29,24 @@ G_M19854_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0400 {a0}, byre
             beqz           a0, G_M19854_IG04
 						;; size=12 bbWeight=1 PerfScore 7.00
 G_M19854_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M19854_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M19854_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M19854_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 29.25, instruction count 14, allocated bytes for code 88 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 24.75, instruction count 14, allocated bytes for code 64 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -63,7 +57,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-32 (-25.81%) : 20987.dasm - Tests:Equals_0(System.String) (FullOpts)
@@ -12,6 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )     ref  ->  zero-ref    single-def "spilling varStr"
 ;  V03 tmp2         [V03,T01] (  4,  3   )     int  ->   a0         "spilling unroll qmark"
+;  V04 cse0         [V04,T02] (  3,  3   )     ref  ->   a2         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -25,50 +26,40 @@ G_M17322_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ; gcrRegs +[a1]
 						;; size=20 bbWeight=1 PerfScore 9.50
 G_M17322_IG02:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
-            ; gcrRegs +[a0]
-            beq            a1, a0, G_M17322_IG06
-						;; size=24 bbWeight=1 PerfScore 8.50
-G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            ; gcrRegs -[a0]
+            auipc          a2, 0xD1FFAB1E
+            mv             a2, a2
+            ; gcrRegs +[a2]
+            beq            a1, a2, G_M17322_IG06
+						;; size=12 bbWeight=1 PerfScore 4.00
+G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             bnez           a1, G_M17322_IG05
 						;; size=4 bbWeight=0.25 PerfScore 0.88
-G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             sext.w         a0, zero
             j              G_M17322_IG07
 						;; size=8 bbWeight=0.12 PerfScore 0.25
-G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             lw             a0, 0xD1FFAB1E(a1)
             sext.w         a0, a0
             sltiu          a0, a0, 1
             j              G_M17322_IG07
 						;; size=16 bbWeight=0.12 PerfScore 0.56
-G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
+G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.25 PerfScore 0.12
-G_M17322_IG07:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 12
-            addi           a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 3
-            ; gcrRegs +[a2]
+G_M17322_IG07:        ; bbWeight=1, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
             jalr           a3		// <unknown method>
             ; gcrRegs -[a1-a2]
-						;; size=32 bbWeight=1 PerfScore 10.00
+						;; size=12 bbWeight=1 PerfScore 5.00
 G_M17322_IG08:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 124, prolog size 16, PerfScore 37.31, instruction count 22, allocated bytes for code 124 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
+; Total bytes of code 92, prolog size 16, PerfScore 27.81, instruction count 21, allocated bytes for code 92 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -79,7 +70,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 62 (0x0003e) Actual length = 124 (0x00007c)
+  Function Length   : 46 (0x0002e) Actual length = 92 (0x00005c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+9.09%) : 2422.dasm - ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
@@ -8,6 +8,7 @@
 ; Final local variable assignments
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V01 cse0         [V01,T00] (  4,  3   )    long  ->   a1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -19,10 +20,14 @@ G_M40797_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M40797_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 13
+            addi           a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 2
+            ld             a0, 0xD1FFAB1E(a1)
             beqz           a0, G_M40797_IG05
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=28 bbWeight=1 PerfScore 10.50
 G_M40797_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -33,19 +38,17 @@ G_M40797_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 G_M40797_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
-            auipc          a1, 0xD1FFAB1E
             sd             a0, 0xD1FFAB1E(a1)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(a1)
             sltiu          a0, a0, 1
-						;; size=24 bbWeight=0.50 PerfScore 3.50
+						;; size=16 bbWeight=0.50 PerfScore 3.50
 G_M40797_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 88, prolog size 16, PerfScore 25.75, instruction count 19, allocated bytes for code 88 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
+; Total bytes of code 96, prolog size 16, PerfScore 30.75, instruction count 20, allocated bytes for code 96 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -56,7 +59,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+8.51%) : 3232.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
+24 (+6.67%) : 20554.dasm - TestOrr.Program:CheckOrr():int (FullOpts)
@@ -9,17 +9,19 @@
 ;
 ;  V00 loc0         [V00,T00] (  8,  4.50)   ubyte  ->   s1        
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V02 cse0         [V02,T01] (  4,  4   )     int  ->   s2         "CSE #01: aggressive"
 ;
-; Lcl frame size = 8
-Frame info. #outsz=0; #framesz=32; lcl=8
+; Lcl frame size = 0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M64610_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 8(sp)
-            sd             ra, 16(sp)
-            sd             s1, 24(sp)
-            addi           fp, sp, 8
-						;; size=20 bbWeight=1 PerfScore 13.00
+            sd             fp, 0(sp)
+            sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
+            mv             fp, sp
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M64610_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         s1, zero
             addi           a0, zero, 0xD1FFAB1E
@@ -62,15 +64,16 @@ G_M64610_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M64610_IG08:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             addi           a0, zero, 0xD1FFAB1E
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
+            lui            s2, 0xD1FFAB1E
+            addiw          s2, s2, 0xD1FFAB1E
+            sext.w         a1, s2
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// <unknown method>
             sext.w         a0, a0
             addi           a1, zero, 0xD1FFAB1E
             beq            a0, a1, G_M64610_IG10
-						;; size=36 bbWeight=1 PerfScore 12.00
+						;; size=40 bbWeight=1 PerfScore 12.50
 G_M64610_IG09:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             addi           s1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -91,6 +94,7 @@ G_M64610_IG11:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
 G_M64610_IG12:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
+            addw           a0, s2, a0
             addi           a1, zero, 0xD1FFAB1E
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
@@ -98,8 +102,9 @@ G_M64610_IG12:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             sext.w         a0, a0
             lui            a1, 0xD1FFAB1E
             addiw          a1, a1, 0xD1FFAB1E
+            addw           a1, s2, a1
             beq            a0, a1, G_M64610_IG14
-						;; size=40 bbWeight=1 PerfScore 13.50
+						;; size=48 bbWeight=1 PerfScore 14.50
 G_M64610_IG13:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             addi           s1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -123,22 +128,24 @@ G_M64610_IG15:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             addi           a0, zero, 0xD1FFAB1E
 						;; size=12 bbWeight=0.50 PerfScore 2.25
 G_M64610_IG16:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
 G_M64610_IG17:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M64610_IG18:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
 
-; Total bytes of code 360, prolog size 20, PerfScore 112.50, instruction count 74, allocated bytes for code 360 (MethodHash=2ca0039d) for method TestOrr.Program:CheckOrr():int (FullOpts)
+; Total bytes of code 384, prolog size 24, PerfScore 120.00, instruction count 80, allocated bytes for code 384 (MethodHash=2ca0039d) for method TestOrr.Program:CheckOrr():int (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -149,22 +156,22 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 180 (0x000b4) Actual length = 360 (0x000168)
+  Function Length   : 192 (0x000c0) Actual length = 384 (0x000180)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Scope 1
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
-    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
-    ---- Epilog start at index 3 ----
-    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
-    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
-    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    E1          set_fp; move fp, sp
+    ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
+    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
+    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
-    E4          end
 
System.mch
-28 (-35.00%) : 15276.dasm - System.CommandLine.LocalizationResources+<>c:b__10_0(System.String):System.String:this (FullOpts)
@@ -10,6 +10,7 @@
 ;* V00 this         [V00    ] (  0,  0   )     ref  ->  zero-ref    this class-hnd single-def <System.CommandLine.LocalizationResources+<>c>
 ;  V01 arg1         [V01,T00] (  3,  3   )     ref  ->   a1         class-hnd single-def <System.String>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V03 cse0         [V03,T01] (  3,  3   )     ref  ->   a2         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -22,21 +23,14 @@ G_M18717_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M18717_IG02:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
             ; gcrRegs +[a1]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
-            ; gcrRegs +[a0]
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 13
-            addi           a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 2
+            auipc          a2, 0xD1FFAB1E
+            mv             a2, a2
             ; gcrRegs +[a2]
+            mv             a0, a2
+            ; gcrRegs +[a0]
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
-						;; size=48 bbWeight=1 PerfScore 12.00
+						;; size=20 bbWeight=1 PerfScore 3.00
 G_M18717_IG03:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
@@ -44,7 +38,7 @@ G_M18717_IG03:        ; bbWeight=1, epilog, nogc, extend
             jr             a3		// <unknown method>
 						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 80, prolog size 16, PerfScore 28.50, instruction count 11, allocated bytes for code 80 (MethodHash=79f7b6e2) for method System.CommandLine.LocalizationResources+<>c:<UnrecognizedArgument>b__10_0(System.String):System.String:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 19.50, instruction count 11, allocated bytes for code 52 (MethodHash=79f7b6e2) for method System.CommandLine.LocalizationResources+<>c:<UnrecognizedArgument>b__10_0(System.String):System.String:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -55,7 +49,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 40 (0x00028) Actual length = 80 (0x000050)
+  Function Length   : 26 (0x0001a) Actual length = 52 (0x000034)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-26.09%) : 48317.dasm - System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
@@ -29,25 +29,19 @@ G_M58429_IG02:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, b
 						;; size=4 bbWeight=1 PerfScore 3.50
 G_M58429_IG03:        ; bbWeight=0.50, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M58429_IG04:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, byref, isz
             bnez           a1, G_M58429_IG06
 						;; size=4 bbWeight=1 PerfScore 3.50
 G_M58429_IG05:        ; bbWeight=0.50, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a1]
-            lui            a1, 0xD1FFAB1E
-            addiw          a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 12
-            addi           a1, a1, 0xD1FFAB1E
-            slli           a1, a1, 3
+            auipc          a1, 0xD1FFAB1E
+            mv             a1, a1
             ; gcrRegs +[a1]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M58429_IG06:        ; bbWeight=1, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}, byref
             addi           a2, zero, 0xD1FFAB1E
             auipc          a3, 0xD1FFAB1E
@@ -60,7 +54,7 @@ G_M58429_IG07:        ; bbWeight=1, epilog, nogc, extend
             jr             a3		// <unknown method>
 						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 92, prolog size 16, PerfScore 31.00, instruction count 14, allocated bytes for code 92 (MethodHash=6d0f1bc2) for method System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
+; Total bytes of code 68, prolog size 16, PerfScore 26.50, instruction count 14, allocated bytes for code 68 (MethodHash=6d0f1bc2) for method System.Configuration.StringUtil:EqualsOrBothNullOrEmpty(System.String,System.String):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -71,7 +65,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 46 (0x0002e) Actual length = 92 (0x00005c)
+  Function Length   : 34 (0x00022) Actual length = 68 (0x000044)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-32 (-25.00%) : 46753.dasm - System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
@@ -10,6 +10,7 @@
 ;  V00 this         [V00,T01] (  4,  4   )     ref  ->   a0         this class-hnd single-def <System.Configuration.IdnElement>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V02 tmp1         [V02,T00] (  4,  6.50)     ref  ->   s1         single-def "inline UNBOX clone1"
+;  V03 cse0         [V03,T02] (  3,  2.25)    long  ->   a0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 Frame info. #outsz=0; #framesz=32; lcl=8
@@ -32,27 +33,19 @@ G_M55376_IG02:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byre
             mv             s1, a0
             ; gcrRegs +[s1]
             ld             a1, 0xD1FFAB1E(s1)
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs -[a0]
             beq            a1, a0, G_M55376_IG04
-						;; size=48 bbWeight=1 PerfScore 18.00
+						;; size=36 bbWeight=1 PerfScore 13.50
 G_M55376_IG03:        ; bbWeight=0.25, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             mv             a1, s1
             ; gcrRegs +[a1]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// CORINFO_HELP_UNBOX
             ; gcrRegs -[a1]
-						;; size=36 bbWeight=0.25 PerfScore 2.62
+						;; size=16 bbWeight=0.25 PerfScore 1.38
 G_M55376_IG04:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
             lw             a0, 0xD1FFAB1E(s1)
 						;; size=4 bbWeight=1 PerfScore 2.00
@@ -63,7 +56,7 @@ G_M55376_IG05:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 128, prolog size 20, PerfScore 45.12, instruction count 22, allocated bytes for code 128 (MethodHash=e65c27af) for method System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
+; Total bytes of code 96, prolog size 20, PerfScore 39.38, instruction count 21, allocated bytes for code 96 (MethodHash=e65c27af) for method System.Configuration.IdnElement:get_Enabled():int:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -74,7 +67,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+24 (+11.54%) : 47128.dasm - System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
@@ -10,21 +10,23 @@
 ;
 ;  V00 this         [V00,T00] (  5,  5   )     ref  ->   s1         this class-hnd single-def <System.Configuration.ConfigurationElement>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->   s2         class-hnd exact single-def "NewObj constructor temp" <System.Configuration.ConfigurationValues>
+;  V02 tmp1         [V02,T01] (  3,  6   )     ref  ->   s3         class-hnd exact single-def "NewObj constructor temp" <System.Configuration.ConfigurationValues>
+;  V03 cse0         [V03,T02] (  3,  3   )    long  ->   s2         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M63202_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M63202_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             fence          3, 3
             auipc          a0, 0xD1FFAB1E
@@ -34,8 +36,13 @@ G_M63202_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             beqz           a0, G_M63202_IG05
 						;; size=24 bbWeight=1 PerfScore 11.50
 G_M63202_IG03:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref
-            auipc          t4, 0xD1FFAB1E
-            ld             t4, 0xD1FFAB1E(t4)
+            lui            s2, 0xD1FFAB1E
+            addiw          s2, s2, 0xD1FFAB1E
+            slli           s2, s2, 15
+            addi           s2, s2, 0xD1FFAB1E
+            lui            t3, 0xD1FFAB1E
+            add            t3, s2, t3
+            ld             t4, 0xD1FFAB1E(t3)
             ; gcrRegs +[t4]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
@@ -51,37 +58,37 @@ G_M63202_IG03:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            mv             s2, a0
-            ; gcrRegs +[s2]
-            auipc          a1, 0xD1FFAB1E
-            ld             a1, 0xD1FFAB1E(a1)
+            mv             s3, a0
+            ; gcrRegs +[s3]
+            ld             a1, 0xD1FFAB1E(s2)
             ; gcrRegs +[a1]
-            mv             a0, s2
+            mv             a0, s3
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             jalr           a2		// <unknown method>
             ; gcrRegs -[a0-a1]
             addi           t3, s1, 0xD1FFAB1E
             ; byrRegs +[t3]
-            mv             t4, s2
+            mv             t4, s3
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
-            ; gcrRegs -[s2 t4]
+            ; gcrRegs -[s3 t4]
             ; byrRegs -[t3]
             mv             a0, s1
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
-						;; size=104 bbWeight=1 PerfScore 31.00
+						;; size=120 bbWeight=1 PerfScore 36.50
 G_M63202_IG04:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
             jr             a1		// System.Configuration.ConfigurationElement:ApplyValidator(System.Configuration.ConfigurationElement)
-						;; size=24 bbWeight=1 PerfScore 11.50
+						;; size=28 bbWeight=1 PerfScore 13.50
 G_M63202_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, gcvars, byref, isz
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -93,30 +100,30 @@ G_M63202_IG05:        ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0200 {
             j              G_M63202_IG03
 						;; size=28 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 208, prolog size 24, PerfScore 71.50, instruction count 36, allocated bytes for code 208 (MethodHash=07c6091d) for method System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
+; Total bytes of code 232, prolog size 28, PerfScore 83.00, instruction count 41, allocated bytes for code 232 (MethodHash=07c6091d) for method System.Configuration.ConfigurationElement:.ctor():this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 104 (0x00068) Actual length = 208 (0x0000d0)
+  Function Length   : 116 (0x00074) Actual length = 232 (0x0000e8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+20 (+9.09%) : 48045.dasm - System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
@@ -8,71 +8,78 @@
 ; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T03] (  8,  7   )     ref  ->   s1         this class-hnd single-def <System.Configuration.SectionInformation>
+;  V00 this         [V00,T04] (  8,  7   )     ref  ->   s1         this class-hnd single-def <System.Configuration.SectionInformation>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;  V02 tmp1         [V02,T05] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "impAppendStmt" <System.Configuration.MgmtConfigurationRecord>
+;  V02 tmp1         [V02,T06] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "impAppendStmt" <System.Configuration.MgmtConfigurationRecord>
 ;* V03 tmp2         [V03    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
 ;* V04 tmp3         [V04    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V05 tmp4         [V05,T06] (  3,  2   )     ref  ->   t4         class-hnd "Inline return value spill temp" <System.Configuration.ProtectedConfigurationProvider>
-;  V06 tmp5         [V06,T04] (  4,  4   )     ref  ->   s2         class-hnd exact single-def "Inlining Arg" <System.String>
-;* V07 tmp6         [V07,T09] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
+;  V05 tmp4         [V05,T07] (  3,  2   )     ref  ->   t4         class-hnd "Inline return value spill temp" <System.Configuration.ProtectedConfigurationProvider>
+;  V06 tmp5         [V06,T05] (  4,  4   )     ref  ->   s3         class-hnd exact single-def "Inlining Arg" <System.String>
+;* V07 tmp6         [V07,T10] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V08 tmp7         [V08,T00] (  3, 34   )   byref  ->   a0         single-def "Inlining Arg"
 ;  V09 tmp8         [V09,T01] (  4, 32   )     int  ->   a1         "Inline stloc first use temp"
 ;* V10 tmp9         [V10    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
 ;  V11 tmp10        [V11,T02] (  2, 16   )     int  ->   a5         "Inline stloc first use temp"
-;  V12 tmp11        [V12,T07] (  2,  2   )     ref  ->   a0         single-def "argument with side effect"
-;  V13 cse0         [V13,T08] (  3,  1.50)     ref  ->   a0         "CSE #01: moderate"
+;  V12 tmp11        [V12,T08] (  2,  2   )     ref  ->   a0         single-def "argument with side effect"
+;  V13 cse0         [V13,T09] (  3,  1.50)     ref  ->   a0         "CSE #02: moderate"
+;  V14 cse1         [V14,T03] (  4, 11   )     int  ->   s2         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=32; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=48; lcl=8
 
 G_M28210_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -32
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            sd             s1, 16(sp)
-            sd             s2, 24(sp)
-            mv             fp, sp
+            addi           sp, sp, -48
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            sd             s2, 32(sp)
+            sd             s3, 40(sp)
+            addi           fp, sp, 8
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=28 bbWeight=1 PerfScore 17.50
+						;; size=32 bbWeight=1 PerfScore 21.50
 G_M28210_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             fence          3, 3
             lw             a0, 0xD1FFAB1E(s1)
-            slli           a0, a0, 52
-            blt            a0, zero, G_M28210_IG10
-						;; size=16 bbWeight=1 PerfScore 11.00
+            lui            s2, 0xD1FFAB1E
+            addiw          s2, s2, 0xD1FFAB1E
+            and            a0, a0, s2
+            sext.w         a0, a0
+            sext.w         a0, a0
+            sext.w         a1, s2
+            beq            a0, a1, G_M28210_IG10
+						;; size=36 bbWeight=1 PerfScore 14.50
 G_M28210_IG03:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
             ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             beqz           a0, G_M28210_IG10
-            ld             s2, 0xD1FFAB1E(s1)
-            ; gcrRegs +[s2]
+            ld             s3, 0xD1FFAB1E(s1)
+            ; gcrRegs +[s3]
             lb             zero, 0xD1FFAB1E(a0)
-            beqz           s2, G_M28210_IG04
-            lw             a1, 0xD1FFAB1E(s2)
+            beqz           s3, G_M28210_IG04
+            lw             a1, 0xD1FFAB1E(s3)
             sext.w         a1, a1
             bnez           a1, G_M28210_IG05
 						;; size=32 bbWeight=0.50 PerfScore 10.00
 G_M28210_IG04:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
-            ; gcrRegs -[a0 s2]
+            ; gcrRegs -[a0 s3]
             mv             t4, zero
             ; gcrRegs +[t4]
             j              G_M28210_IG06
 						;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M28210_IG05:        ; bbWeight=0.50, gcrefRegs=40600 {s1 a0 s2}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[t4] +[a0 s2]
+G_M28210_IG05:        ; bbWeight=0.50, gcrefRegs=80600 {s1 a0 s3}, byrefRegs=0000 {}, byref
+            ; gcrRegs -[t4] +[a0 s3]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             jalr           a1		// System.Configuration.BaseConfigurationRecord:get_ProtectedConfig():System.Configuration.ProtectedConfigurationSection:this
             ; gcr arg pop 0
-            mv             a1, s2
+            mv             a1, s3
             ; gcrRegs +[a1]
             auipc          a2, 0xD1FFAB1E
             ld             a2, 0xD1FFAB1E(a2)
             lw             zero, 0xD1FFAB1E(a0)
             jalr           a2		// System.Configuration.ProtectedConfigurationSection:GetProviderFromName(System.String):System.Configuration.ProtectedConfigurationProvider:this
-            ; gcrRegs -[a1 s2]
+            ; gcrRegs -[a1 s3]
             ; gcr arg pop 0
             mv             t4, a0
             ; gcrRegs +[t4]
@@ -91,12 +98,10 @@ G_M28210_IG06:        ; bbWeight=1, gcrefRegs=20000200 {s1 t4}, byrefRegs=0000 {
 G_M28210_IG07:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0400 {a0}, byref
             fence          3, 3
             lw             a1, 0xD1FFAB1E(a0)
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            or             a2, a1, a2
+            or             a2, a1, s2
             sext.w         a2, a2
             sext.w         a3, a1
-						;; size=28 bbWeight=8 PerfScore 84.00
+						;; size=20 bbWeight=8 PerfScore 68.00
 G_M28210_IG08:        ; bbWeight=8, gcrefRegs=0200 {s1}, byrefRegs=0400 {a0}, byref, isz
             lr.w.aqrl      a5, (a0)
             bne            a5, a3, G_M28210_IG09
@@ -114,37 +119,38 @@ G_M28210_IG10:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; gcrRegs +[a0]
 						;; size=4 bbWeight=1 PerfScore 2.00
 G_M28210_IG11:        ; bbWeight=1, epilog, nogc, extend
-            ld             s2, 24(sp)
-            ld             s1, 16(sp)
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 32
-            ret						;; size=24 bbWeight=1 PerfScore 11.50
+            ld             s3, 40(sp)
+            ld             s2, 32(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 48
+            ret						;; size=28 bbWeight=1 PerfScore 13.50
 
-; Total bytes of code 220, prolog size 28, PerfScore 320.50, instruction count 51, allocated bytes for code 220 (MethodHash=dea791cd) for method System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
+; Total bytes of code 240, prolog size 32, PerfScore 314.00, instruction count 56, allocated bytes for code 240 (MethodHash=dea791cd) for method System.Configuration.SectionInformation:get_ProtectionProvider():System.Configuration.ProtectedConfigurationProvider:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 4
+  Code Words        : 5
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 110 (0x0006e) Actual length = 220 (0x0000dc)
+  Function Length   : 120 (0x00078) Actual length = 240 (0x0000f0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
-    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 12 05      save_reg X#18 Z#5 (0x05); sd s3, sp, 40
+    D0 11 04      save_reg X#17 Z#4 (0x04); sd s2, sp, 32
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    03          alloc_s #3 (0x03); addi sp, sp, -48 (0x030)
     E4          end
 
+16 (+8.51%) : 9414.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmark.mch 426 274 24 128 -9,674 +284
JIT.opt.mch 13,673 13,299 53 321 -218,650 +948
System.mch 6,913 4,296 72 2,545 -115,726 +794
21,012 17,869 149 2,994 -344,050 +2,026

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
benchmark.mch 426 257 62 107 -3.87% +3.79% -0.4784%
JIT.opt.mch 13,673 13,179 223 271 -9.47% +5.26% -0.2872%
System.mch 6,913 3,877 199 2,837 -3.41% +4.40% -0.5514%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmark.mch 2,501 1,005 1,496 0 (0.00%) 0 (0.00%)
JIT.opt.mch 36,110 17,045 19,065 0 (0.00%) 0 (0.00%)
System.mch 94,822 86,262 8,560 0 (0.00%) 2 (0.00%)
133,433 104,312 29,121 0 (0.00%) 2 (0.00%)

jit-analyze output

@am11
Copy link
Member

am11 commented Dec 16, 2025

image

@namu-lee, (in case you didn't knew) the CI merges dotnet/runtime's main branch to PR branch after the checkout. So it's better to use the same approach for diff computation/analysis and merge upstream main in your branch from time to time for clean diffs. e.g. Zbs changes were merged a few hours ago in main which may impact your results. You can use the button on UI:

image

Another option is use main merge point of main in your branch as a base for jit-diff etc.

@namu-lee
Copy link
Contributor Author

Another option is use main merge point of main in your branch as a base for jit-diff etc.

Thank you for the information. I was actually using the latest merge point of main in my branch as the baseline for asmdiffs. I didn't realize that #115335 (Zbs) has been merged, so I will re-analyze the diffs after merging the upstream to see if there is any interaction with this PR.

@namu-lee
Copy link
Contributor Author

Re-analyzed diffs after merging the upstream branch. No significant changes found.

Diffs are based on 125,653 contexts (103,293 MinOpts, 22,360 FullOpts).

Overall (-313,464 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 1,028,444 -9,398 -1.79%
JIT.opt.mch 7,989,286 -221,744 -9.08%
System.mch 31,885,194 -82,322 -1.43%
MinOpts (-211,776 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 389,002 -336 -0.93%
JIT.opt.mch 4,765,006 -138,160 -9.79%
System.mch 31,209,320 -73,280 -1.40%
FullOpts (-101,688 bytes)
Collection Base size (bytes) Diff size (bytes) PerfScore in Diffs
benchmark.mch 639,442 -9,062 -1.96%
JIT.opt.mch 3,224,280 -83,584 -3.47%
System.mch 675,874 -9,042 -1.93%
Example diffs
benchmark.mch
-48 (-22.22%) : 2327.dasm - NDhrystone:.cctor() (FullOpts)
@@ -12,16 +12,20 @@
 ;* V01 tmp1         [V01    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewArr temp" <int[]>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
 ;* V03 tmp3         [V03    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <NDhrystone+Record>
+;  V04 cse0         [V04,T00] (  4,  4   )    long  ->   s1         "CSE #01: aggressive"
+;  V05 cse1         [V05,T01] (  3,  3   )    long  ->   s2         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M4492_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             lui            a0, 0xD1FFAB1E
             addiw          a0, a0, 0xD1FFAB1E
@@ -32,71 +36,57 @@ G_M4492_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWARR_1_VC
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
             mv             t4, a0
             ; gcrRegs +[t4]
+            mv             t3, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            mv             a0, s2
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s1, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=184 bbWeight=1 PerfScore 56.00
+						;; size=120 bbWeight=1 PerfScore 34.50
 G_M4492_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 216, prolog size 16, PerfScore 72.50, instruction count 24, allocated bytes for code 216 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
+; Total bytes of code 168, prolog size 24, PerfScore 63.00, instruction count 30, allocated bytes for code 168 (MethodHash=cb22ee73) for method NDhrystone:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 108 (0x0006c) Actual length = 216 (0x0000d8)
+  Function Length   : 84 (0x00054) Actual length = 168 (0x0000a8)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -104,11 +94,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
-32 (-21.62%) : 576.dasm - System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
@@ -12,7 +12,8 @@
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V03 tmp1         [V03    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V04 tmp2         [V04    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
-;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a2         "CSE #01: moderate"
+;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a3         "CSE #01: moderate"
+;  V06 cse1         [V06,T03] (  3,  1.50)    long  ->   a2         "CSE #02: moderate"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -31,20 +32,12 @@ G_M32674_IG03:        ; bbWeight=0.50, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}
             beqz           a0, G_M32674_IG04
             beqz           a1, G_M32674_IG04
             ld             a2, 0xD1FFAB1E(a0)
-            lui            a3, 0xD1FFAB1E
-            addiw          a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 14
-            addi           a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 1
+            auipc          a3, 0xD1FFAB1E
+            mv             a3, a3
             beq            a2, a3, G_M32674_IG04
-            ld             a3, 0xD1FFAB1E(a1)
-            lui            a4, 0xD1FFAB1E
-            addiw          a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 14
-            addi           a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 1
-            bne            a3, a4, G_M32674_IG06
-						;; size=64 bbWeight=0.50 PerfScore 14.00
+            ld             a4, 0xD1FFAB1E(a1)
+            bne            a4, a3, G_M32674_IG06
+						;; size=32 bbWeight=0.50 PerfScore 9.25
 G_M32674_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0-a1]
             mv             a0, zero
@@ -75,7 +68,7 @@ G_M32674_IG09:        ; bbWeight=0.50, epilog, nogc, extend
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 148, prolog size 16, PerfScore 40.25, instruction count 29, allocated bytes for code 148 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
+; Total bytes of code 116, prolog size 16, PerfScore 35.50, instruction count 28, allocated bytes for code 116 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 58 (0x0003a) Actual length = 116 (0x000074)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-48 (-16.67%) : 1425.dasm - System.Threading.CancellationTokenSource:.cctor() (FullOpts)
@@ -12,51 +12,43 @@
 ;  V01 tmp1         [V01,T01] (  3,  6   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;* V02 tmp2         [V02    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "NewObj constructor temp" <System.Threading.CancellationTokenSource>
 ;  V03 tmp3         [V03,T00] (  6, 12   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+;  V04 cse0         [V04,T02] (  4,  4   )    long  ->   s2         "CSE #02: aggressive"
+;  V05 cse1         [V05,T03] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M38012_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
+            addi           sp, sp, -32
             sd             fp, 0(sp)
             sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
             mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+						;; size=24 bbWeight=1 PerfScore 17.00
 G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
             addi           t3, zero, 0xD1FFAB1E
             fence          3, 3
             sw             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            auipc          s2, 0xD1FFAB1E
+            mv             s2, s2
+            mv             t3, s2
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 14
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 1
+            mv             a0, s1
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_NEWSFAST
             ; gcrRegs +[a0]
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
@@ -90,35 +82,33 @@ G_M38012_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             addi           t3, t3, 0xD1FFAB1E
             slli           t3, t3, 1
             sd             t3, 0xD1FFAB1E(a0)
-            lui            t3, 0xD1FFAB1E
-            addiw          t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 14
-            addi           t3, t3, 0xD1FFAB1E
-            slli           t3, t3, 1
+            addi           t3, s2, 0xD1FFAB1E
             mv             t4, a0
             ; gcrRegs +[t4]
             auipc          ra, 0xD1FFAB1E
             jalr           ra		// CORINFO_HELP_ASSIGN_REF
             ; gcrRegs -[a0 t4]
-						;; size=256 bbWeight=1 PerfScore 88.00
+						;; size=192 bbWeight=1 PerfScore 66.50
 G_M38012_IG03:        ; bbWeight=1, epilog, nogc, extend
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
             ld             ra, 8(sp)
             ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            addi           sp, sp, 32
+            ret						;; size=24 bbWeight=1 PerfScore 11.50
 
-; Total bytes of code 288, prolog size 16, PerfScore 104.50, instruction count 33, allocated bytes for code 288 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
+; Total bytes of code 240, prolog size 24, PerfScore 95.00, instruction count 39, allocated bytes for code 240 (MethodHash=e2016b83) for method System.Threading.CancellationTokenSource:.cctor() (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 144 (0x00090) Actual length = 288 (0x000120)
+  Function Length   : 120 (0x00078) Actual length = 240 (0x0000f0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -126,11 +116,11 @@ Unwind Info:
   ---- Unwind codes ----
     E1          set_fp; move fp, sp
     ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
     D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
     D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
-    E4          end
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
 
+16 (+8.51%) : 2220.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
+12 (+8.11%) : 1270.dasm - System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
@@ -11,23 +11,27 @@
 ;  V00 this         [V00,T00] (  4,  3.50)     ref  ->   s1         this class-hnd single-def <System.Threading.WaitSubsystem+WaitableObject>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V02 tmp1         [V02,T01] (  3,  3   )     ref  ->   s1         class-hnd exact single-def "Inlining Arg" <System.Threading.WaitSubsystem+WaitableObject+OwnershipInfo>
-;  V03 cse0         [V03,T02] (  3,  1.50)     ref  ->   s1         "CSE #01: moderate"
+;  V03 cse0         [V03,T02] (  3,  2.50)     ref  ->   s2         "CSE #03: aggressive"
+;  V04 cse1         [V04,T03] (  3,  1.50)     ref  ->   s1         "CSE #01: moderate"
 ;
-; Lcl frame size = 8
-Frame info. #outsz=0; #framesz=32; lcl=8
+; Lcl frame size = 0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M62429_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 8(sp)
-            sd             ra, 16(sp)
-            sd             s1, 24(sp)
-            addi           fp, sp, 8
+            sd             fp, 0(sp)
+            sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
+            mv             fp, sp
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=24 bbWeight=1 PerfScore 13.50
+						;; size=28 bbWeight=1 PerfScore 17.50
 G_M62429_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s2, 0xD1FFAB1E
+            ld             s2, 0xD1FFAB1E(s2)
+            ; gcrRegs +[s2]
+            mv             a0, s2
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
@@ -41,41 +45,42 @@ G_M62429_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; gcrRegs -[a0]
             sext.w         a0, a0
             beqz           a0, G_M62429_IG04
-						;; size=44 bbWeight=1 PerfScore 16.50
-G_M62429_IG03:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
+						;; size=48 bbWeight=1 PerfScore 17.00
+G_M62429_IG03:        ; bbWeight=0.50, gcrefRegs=40200 {s1 s2}, byrefRegs=0000 {}, byref, isz
             ld             s1, 0xD1FFAB1E(s1)
             bnez           s1, G_M62429_IG06
 						;; size=8 bbWeight=0.50 PerfScore 2.75
 G_M62429_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[s1]
+            ; gcrRegs -[s1 s2]
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M62429_IG05:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
-G_M62429_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, gcvars, byref
-            ; gcrRegs +[s1]
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
+G_M62429_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=40200 {s1 s2}, byrefRegs=0000 {}, gcvars, byref
+            ; gcrRegs +[s1 s2]
             lb             zero, 0xD1FFAB1E(s1)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            mv             a0, s2
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             jalr           a1		// System.Threading.LowLevelLock:VerifyIsLocked():this
-            ; gcrRegs -[a0]
+            ; gcrRegs -[a0 s2]
             lbu            a0, 0xD1FFAB1E(s1)
-						;; size=28 bbWeight=0.50 PerfScore 6.50
+						;; size=24 bbWeight=0.50 PerfScore 5.75
 G_M62429_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
 
-; Total bytes of code 148, prolog size 20, PerfScore 49.00, instruction count 32, allocated bytes for code 148 (MethodHash=00f50c22) for method System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
+; Total bytes of code 160, prolog size 24, PerfScore 54.75, instruction count 36, allocated bytes for code 160 (MethodHash=00f50c22) for method System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,22 +91,22 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 80 (0x00050) Actual length = 160 (0x0000a0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Scope 1
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
-    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
-    ---- Epilog start at index 3 ----
-    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
-    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
-    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    E1          set_fp; move fp, sp
+    ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
+    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
+    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
-    E4          end
 
+8 (+6.67%) : 862.dasm - System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
@@ -10,22 +10,25 @@
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V01 tmp1         [V01,T00] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.AppDomain>
+;  V02 cse0         [V02,T01] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M33691_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+            addi           sp, sp, -32
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M33691_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             bnez           a0, G_M33691_IG04
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=16 bbWeight=1 PerfScore 6.00
 G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -54,39 +57,39 @@ G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             ; byrRegs -[a0]
 						;; size=68 bbWeight=0.50 PerfScore 11.25
 G_M33691_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
-						;; size=8 bbWeight=1 PerfScore 2.00
+						;; size=4 bbWeight=1 PerfScore 2.00
 G_M33691_IG05:        ; bbWeight=1, epilog, nogc, extend
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 32
+            ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 120, prolog size 16, PerfScore 35.25, instruction count 19, allocated bytes for code 120 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
+; Total bytes of code 128, prolog size 20, PerfScore 41.75, instruction count 22, allocated bytes for code 128 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 60 (0x0003c) Actual length = 120 (0x000078)
+  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
     E4          end
JIT.opt.mch
-24 (-27.27%) : 32169.dasm - JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
@@ -29,30 +29,24 @@ G_M19854_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0400 {a0}, byre
             beqz           a0, G_M19854_IG04
 						;; size=12 bbWeight=1 PerfScore 7.00
 G_M19854_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M19854_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M19854_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M19854_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 29.25, instruction count 14, allocated bytes for code 88 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 24.75, instruction count 14, allocated bytes for code 64 (MethodHash=7d5db271) for method JitInliningTest.Args1:f1c(byref):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -63,7 +57,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-27.27%) : 32168.dasm - JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
@@ -27,30 +27,24 @@ G_M6536_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             beqz           a0, G_M6536_IG04
 						;; size=12 bbWeight=1 PerfScore 4.50
 G_M6536_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
             j              G_M6536_IG05
-						;; size=24 bbWeight=0.50 PerfScore 3.25
+						;; size=12 bbWeight=0.50 PerfScore 1.00
 G_M6536_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
+            auipc          a0, 0xD1FFAB1E
+            mv             a0, a0
             ; gcrRegs +[a0]
-						;; size=20 bbWeight=0.50 PerfScore 2.50
+						;; size=8 bbWeight=0.50 PerfScore 0.25
 G_M6536_IG05:        ; bbWeight=1, gcrefRegs=0400 {a0}, byrefRegs=0000 {}, byref, epilog, nogc
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 88, prolog size 16, PerfScore 26.75, instruction count 14, allocated bytes for code 88 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
+; Total bytes of code 64, prolog size 16, PerfScore 22.25, instruction count 14, allocated bytes for code 64 (MethodHash=0ab0e677) for method JitInliningTest.Args1:f1a(bool):System.String (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -61,7 +55,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 32 (0x00020) Actual length = 64 (0x000040)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-32 (-25.81%) : 2099.dasm - Tests:Equals_0(System.String) (FullOpts)
@@ -12,6 +12,7 @@
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V02 tmp1         [V02    ] (  0,  0   )     ref  ->  zero-ref    single-def "spilling varStr"
 ;  V03 tmp2         [V03,T01] (  4,  3   )     int  ->   a0         "spilling unroll qmark"
+;  V04 cse0         [V04,T02] (  3,  3   )     ref  ->   a2         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -25,50 +26,40 @@ G_M17322_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ; gcrRegs +[a1]
 						;; size=20 bbWeight=1 PerfScore 9.50
 G_M17322_IG02:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 12
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 3
-            ; gcrRegs +[a0]
-            beq            a1, a0, G_M17322_IG06
-						;; size=24 bbWeight=1 PerfScore 8.50
-G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
-            ; gcrRegs -[a0]
+            auipc          a2, 0xD1FFAB1E
+            mv             a2, a2
+            ; gcrRegs +[a2]
+            beq            a1, a2, G_M17322_IG06
+						;; size=12 bbWeight=1 PerfScore 4.00
+G_M17322_IG03:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             bnez           a1, G_M17322_IG05
 						;; size=4 bbWeight=0.25 PerfScore 0.88
-G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG04:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             sext.w         a0, zero
             j              G_M17322_IG07
 						;; size=8 bbWeight=0.12 PerfScore 0.25
-G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref, isz
+G_M17322_IG05:        ; bbWeight=0.12, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref, isz
             lw             a0, 0xD1FFAB1E(a1)
             sext.w         a0, a0
             sltiu          a0, a0, 1
             j              G_M17322_IG07
 						;; size=16 bbWeight=0.12 PerfScore 0.56
-G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
+G_M17322_IG06:        ; bbWeight=0.25, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.25 PerfScore 0.12
-G_M17322_IG07:        ; bbWeight=1, gcrefRegs=0800 {a1}, byrefRegs=0000 {}, byref
-            lui            a2, 0xD1FFAB1E
-            addiw          a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 12
-            addi           a2, a2, 0xD1FFAB1E
-            slli           a2, a2, 3
-            ; gcrRegs +[a2]
+G_M17322_IG07:        ; bbWeight=1, gcrefRegs=1800 {a1 a2}, byrefRegs=0000 {}, byref
             auipc          a3, 0xD1FFAB1E
             ld             a3, 0xD1FFAB1E(a3)
             jalr           a3		// <unknown method>
             ; gcrRegs -[a1-a2]
-						;; size=32 bbWeight=1 PerfScore 10.00
+						;; size=12 bbWeight=1 PerfScore 5.00
 G_M17322_IG08:        ; bbWeight=1, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 124, prolog size 16, PerfScore 37.31, instruction count 22, allocated bytes for code 124 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
+; Total bytes of code 92, prolog size 16, PerfScore 27.81, instruction count 21, allocated bytes for code 92 (MethodHash=e977bc55) for method Tests:Equals_0(System.String) (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -79,7 +70,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 62 (0x0003e) Actual length = 124 (0x00007c)
+  Function Length   : 46 (0x0002e) Actual length = 92 (0x00005c)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+9.09%) : 34081.dasm - ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
@@ -8,6 +8,7 @@
 ; Final local variable assignments
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;  V01 cse0         [V01,T00] (  4,  3   )    long  ->   a1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -19,10 +20,14 @@ G_M40797_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
             mv             fp, sp
 						;; size=16 bbWeight=1 PerfScore 9.00
 G_M40797_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            lui            a1, 0xD1FFAB1E
+            addiw          a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 13
+            addi           a1, a1, 0xD1FFAB1E
+            slli           a1, a1, 2
+            ld             a0, 0xD1FFAB1E(a1)
             beqz           a0, G_M40797_IG05
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=28 bbWeight=1 PerfScore 10.50
 G_M40797_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
@@ -33,19 +38,17 @@ G_M40797_IG04:        ; bbWeight=0.50, epilog, nogc, extend
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 G_M40797_IG05:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
-            auipc          a1, 0xD1FFAB1E
             sd             a0, 0xD1FFAB1E(a1)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(a1)
             sltiu          a0, a0, 1
-						;; size=24 bbWeight=0.50 PerfScore 3.50
+						;; size=16 bbWeight=0.50 PerfScore 3.50
 G_M40797_IG06:        ; bbWeight=0.50, epilog, nogc, extend
             ld             ra, 8(sp)
             ld             fp, 0(sp)
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 88, prolog size 16, PerfScore 25.75, instruction count 19, allocated bytes for code 88 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
+; Total bytes of code 96, prolog size 16, PerfScore 30.75, instruction count 20, allocated bytes for code 96 (MethodHash=dd5260a2) for method ZeroOffsetFieldSeqs:ProblemWithStaticUnions():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -56,7 +59,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 44 (0x0002c) Actual length = 88 (0x000058)
+  Function Length   : 48 (0x00030) Actual length = 96 (0x000060)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+8.51%) : 2886.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
+12 (+8.11%) : 1511.dasm - System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
@@ -11,23 +11,27 @@
 ;  V00 this         [V00,T00] (  4,  3.50)     ref  ->   s1         this class-hnd single-def <System.Threading.WaitSubsystem+WaitableObject>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V02 tmp1         [V02,T01] (  3,  3   )     ref  ->   s1         class-hnd exact single-def "Inlining Arg" <System.Threading.WaitSubsystem+WaitableObject+OwnershipInfo>
-;  V03 cse0         [V03,T02] (  3,  1.50)     ref  ->   s1         "CSE #01: moderate"
+;  V03 cse0         [V03,T02] (  3,  2.50)     ref  ->   s2         "CSE #03: aggressive"
+;  V04 cse1         [V04,T03] (  3,  1.50)     ref  ->   s1         "CSE #01: moderate"
 ;
-; Lcl frame size = 8
-Frame info. #outsz=0; #framesz=32; lcl=8
+; Lcl frame size = 0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M62429_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 8(sp)
-            sd             ra, 16(sp)
-            sd             s1, 24(sp)
-            addi           fp, sp, 8
+            sd             fp, 0(sp)
+            sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
+            mv             fp, sp
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=24 bbWeight=1 PerfScore 13.50
+						;; size=28 bbWeight=1 PerfScore 17.50
 G_M62429_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s2, 0xD1FFAB1E
+            ld             s2, 0xD1FFAB1E(s2)
+            ; gcrRegs +[s2]
+            mv             a0, s2
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
@@ -41,41 +45,42 @@ G_M62429_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; gcrRegs -[a0]
             sext.w         a0, a0
             beqz           a0, G_M62429_IG04
-						;; size=44 bbWeight=1 PerfScore 16.50
-G_M62429_IG03:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
+						;; size=48 bbWeight=1 PerfScore 17.00
+G_M62429_IG03:        ; bbWeight=0.50, gcrefRegs=40200 {s1 s2}, byrefRegs=0000 {}, byref, isz
             ld             s1, 0xD1FFAB1E(s1)
             bnez           s1, G_M62429_IG06
 						;; size=8 bbWeight=0.50 PerfScore 2.75
 G_M62429_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[s1]
+            ; gcrRegs -[s1 s2]
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M62429_IG05:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
-G_M62429_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, gcvars, byref
-            ; gcrRegs +[s1]
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
+G_M62429_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=40200 {s1 s2}, byrefRegs=0000 {}, gcvars, byref
+            ; gcrRegs +[s1 s2]
             lb             zero, 0xD1FFAB1E(s1)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            mv             a0, s2
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             jalr           a1		// System.Threading.LowLevelLock:VerifyIsLocked():this
-            ; gcrRegs -[a0]
+            ; gcrRegs -[a0 s2]
             lbu            a0, 0xD1FFAB1E(s1)
-						;; size=28 bbWeight=0.50 PerfScore 6.50
+						;; size=24 bbWeight=0.50 PerfScore 5.75
 G_M62429_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
 
-; Total bytes of code 148, prolog size 20, PerfScore 49.00, instruction count 32, allocated bytes for code 148 (MethodHash=00f50c22) for method System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
+; Total bytes of code 160, prolog size 24, PerfScore 54.75, instruction count 36, allocated bytes for code 160 (MethodHash=00f50c22) for method System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,22 +91,22 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 80 (0x00050) Actual length = 160 (0x0000a0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Scope 1
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
-    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
-    ---- Epilog start at index 3 ----
-    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
-    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
-    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    E1          set_fp; move fp, sp
+    ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
+    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
+    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
-    E4          end
 
System.mch
-32 (-21.62%) : 984.dasm - System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
@@ -12,7 +12,8 @@
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;* V03 tmp1         [V03    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V04 tmp2         [V04    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
-;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a2         "CSE #01: moderate"
+;  V05 cse0         [V05,T02] (  3,  1.50)    long  ->   a3         "CSE #01: moderate"
+;  V06 cse1         [V06,T03] (  3,  1.50)    long  ->   a2         "CSE #02: moderate"
 ;
 ; Lcl frame size = 0
 Frame info. #outsz=0; #framesz=16; lcl=0
@@ -31,20 +32,12 @@ G_M32674_IG03:        ; bbWeight=0.50, gcrefRegs=0C00 {a0 a1}, byrefRegs=0000 {}
             beqz           a0, G_M32674_IG04
             beqz           a1, G_M32674_IG04
             ld             a2, 0xD1FFAB1E(a0)
-            lui            a3, 0xD1FFAB1E
-            addiw          a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 14
-            addi           a3, a3, 0xD1FFAB1E
-            slli           a3, a3, 1
+            auipc          a3, 0xD1FFAB1E
+            mv             a3, a3
             beq            a2, a3, G_M32674_IG04
-            ld             a3, 0xD1FFAB1E(a1)
-            lui            a4, 0xD1FFAB1E
-            addiw          a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 14
-            addi           a4, a4, 0xD1FFAB1E
-            slli           a4, a4, 1
-            bne            a3, a4, G_M32674_IG06
-						;; size=64 bbWeight=0.50 PerfScore 14.00
+            ld             a4, 0xD1FFAB1E(a1)
+            bne            a4, a3, G_M32674_IG06
+						;; size=32 bbWeight=0.50 PerfScore 9.25
 G_M32674_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0-a1]
             mv             a0, zero
@@ -75,7 +68,7 @@ G_M32674_IG09:        ; bbWeight=0.50, epilog, nogc, extend
             addi           sp, sp, 16
             ret						;; size=16 bbWeight=0.50 PerfScore 3.75
 
-; Total bytes of code 148, prolog size 16, PerfScore 40.25, instruction count 29, allocated bytes for code 148 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
+; Total bytes of code 116, prolog size 16, PerfScore 35.50, instruction count 28, allocated bytes for code 116 (MethodHash=a9f2805d) for method System.Type:op_Equality(System.Type,System.Type):bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,7 +79,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 58 (0x0003a) Actual length = 116 (0x000074)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-17.65%) : 39141.dasm - System.Resources.Extensions.PreserializedResourceWriter:get_ResourceSetTypeName():System.String:this (MinOpts)
@@ -40,27 +40,21 @@ G_M59343_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ; gcrRegs -[a0]
             sext.w         a0, a0
             bnez           a0, G_M59343_IG05
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
-            ; gcrRegs +[a0]
-            sd             a0, -16(fp)
+            auipc          t6, 0xD1FFAB1E
+            mv             t6, t6
+            ; gcrRegs +[t6]
+            sd             t6, -16(fp)
             j              G_M59343_IG06
-						;; size=44 bbWeight=1 PerfScore 19.50
+						;; size=32 bbWeight=1 PerfScore 15.00
 G_M59343_IG05:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
-            ; gcrRegs +[a0]
-            sd             a0, -16(fp)
-						;; size=24 bbWeight=1 PerfScore 9.00
+            ; gcrRegs -[t6]
+            auipc          t6, 0xD1FFAB1E
+            mv             t6, t6
+            ; gcrRegs +[t6]
+            sd             t6, -16(fp)
+						;; size=12 bbWeight=1 PerfScore 4.50
 G_M59343_IG06:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[a0]
+            ; gcrRegs -[t6]
             ld             a0, -16(fp)
             ; gcrRegs +[a0]
 						;; size=4 bbWeight=1 PerfScore 2.00
@@ -70,7 +64,7 @@ G_M59343_IG07:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 136, prolog size 24, PerfScore 63.00, instruction count 24, allocated bytes for code 136 (MethodHash=6b031830) for method System.Resources.Extensions.PreserializedResourceWriter:get_ResourceSetTypeName():System.String:this (MinOpts)
+; Total bytes of code 112, prolog size 24, PerfScore 54.00, instruction count 24, allocated bytes for code 112 (MethodHash=6b031830) for method System.Resources.Extensions.PreserializedResourceWriter:get_ResourceSetTypeName():System.String:this (MinOpts)
 ; ============================================================
 
 Unwind Info:
@@ -81,7 +75,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 68 (0x00044) Actual length = 136 (0x000088)
+  Function Length   : 56 (0x00038) Actual length = 112 (0x000070)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-24 (-17.65%) : 21315.dasm - System.Linq.Expressions.Interpreter.EnterTryCatchFinallyInstruction:get_InstructionName():System.String:this (MinOpts)
@@ -40,27 +40,21 @@ G_M10074_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
             ; gcrRegs -[a0]
             sext.w         a0, a0
             bnez           a0, G_M10074_IG05
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
-            ; gcrRegs +[a0]
-            sd             a0, -16(fp)
+            auipc          t6, 0xD1FFAB1E
+            mv             t6, t6
+            ; gcrRegs +[t6]
+            sd             t6, -16(fp)
             j              G_M10074_IG06
-						;; size=44 bbWeight=1 PerfScore 19.50
+						;; size=32 bbWeight=1 PerfScore 15.00
 G_M10074_IG05:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[a0]
-            lui            a0, 0xD1FFAB1E
-            addiw          a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 13
-            addi           a0, a0, 0xD1FFAB1E
-            slli           a0, a0, 2
-            ; gcrRegs +[a0]
-            sd             a0, -16(fp)
-						;; size=24 bbWeight=1 PerfScore 9.00
+            ; gcrRegs -[t6]
+            auipc          t6, 0xD1FFAB1E
+            mv             t6, t6
+            ; gcrRegs +[t6]
+            sd             t6, -16(fp)
+						;; size=12 bbWeight=1 PerfScore 4.50
 G_M10074_IG06:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[a0]
+            ; gcrRegs -[t6]
             ld             a0, -16(fp)
             ; gcrRegs +[a0]
 						;; size=4 bbWeight=1 PerfScore 2.00
@@ -70,7 +64,7 @@ G_M10074_IG07:        ; bbWeight=1, epilog, nogc, extend
             addi           sp, sp, 32
             ret						;; size=16 bbWeight=1 PerfScore 7.50
 
-; Total bytes of code 136, prolog size 24, PerfScore 63.00, instruction count 24, allocated bytes for code 136 (MethodHash=6ca4d8a5) for method System.Linq.Expressions.Interpreter.EnterTryCatchFinallyInstruction:get_InstructionName():System.String:this (MinOpts)
+; Total bytes of code 112, prolog size 24, PerfScore 54.00, instruction count 24, allocated bytes for code 112 (MethodHash=6ca4d8a5) for method System.Linq.Expressions.Interpreter.EnterTryCatchFinallyInstruction:get_InstructionName():System.String:this (MinOpts)
 ; ============================================================
 
 Unwind Info:
@@ -81,7 +75,7 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 68 (0x00044) Actual length = 136 (0x000088)
+  Function Length   : 56 (0x00038) Actual length = 112 (0x000070)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+16 (+8.51%) : 6642.dasm - System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
@@ -12,26 +12,29 @@
 ;  V01 tmp1         [V01,T00] (  3,  3   )     int  ->   a0         "dup spill"
 ;* V02 tmp2         [V02    ] (  0,  0   )     int  ->  zero-ref   
 ;* V03 tmp3         [V03    ] (  0,  0   )     int  ->  zero-ref   
-;  V04 tmp4         [V04,T02] (  3,  1.50)     int  ->   a1        
-;  V05 tmp5         [V05,T03] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
+;  V04 tmp4         [V04,T03] (  3,  1.50)     int  ->   a1        
+;  V05 tmp5         [V05,T04] (  3,  1.50)   ubyte  ->   a0         "Inline return value spill temp"
 ;  V06 tmp6         [V06    ] (  2,  1   )   ubyte  ->  [fp-0x08]   do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #01: aggressive"
+;  V07 cse0         [V07,T01] (  3,  2.50)     int  ->   a1         "CSE #02: aggressive"
+;  V08 cse1         [V08,T02] (  3,  2.50)    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 16
-Frame info. #outsz=0; #framesz=32; lcl=16
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M9193_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 16(sp)
-            sd             ra, 24(sp)
-            addi           fp, sp, 16
-						;; size=16 bbWeight=1 PerfScore 9.00
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M9193_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a1, 0xD1FFAB1E
-            lw             a1, 0xD1FFAB1E(a1)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            lw             a1, 0xD1FFAB1E(s1)
             sext.w         a0, a1
             blt            a0, zero, G_M9193_IG11
-						;; size=16 bbWeight=1 PerfScore 6.00
+						;; size=20 bbWeight=1 PerfScore 6.50
 G_M9193_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
             sext.w         a1, a1
             blt            zero, a1, G_M9193_IG09
@@ -65,44 +68,46 @@ G_M9193_IG06:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre
             addi           a1, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG07:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a2, 0xD1FFAB1E
-            sw             a1, 0xD1FFAB1E(a2)
+            sw             a1, 0xD1FFAB1E(s1)
             andi           a0, a0, 255
-						;; size=12 bbWeight=0.50 PerfScore 2.25
+						;; size=8 bbWeight=0.50 PerfScore 2.25
 G_M9193_IG08:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG09:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             addi           a0, zero, 0xD1FFAB1E
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG10:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 G_M9193_IG11:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M9193_IG12:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             ra, 24(sp)
-            ld             fp, 16(sp)
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
             addi           sp, sp, 32
-            ret						;; size=16 bbWeight=0.50 PerfScore 3.75
+            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
 
-; Total bytes of code 188, prolog size 16, PerfScore 43.75, instruction count 40, allocated bytes for code 188 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
+; Total bytes of code 204, prolog size 20, PerfScore 51.25, instruction count 45, allocated bytes for code 204 (MethodHash=7444dc16) for method System.LocalAppContextSwitches:GetDefaultShowILOffsetSetting():bool (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 3
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 94 (0x0005e) Actual length = 188 (0x0000bc)
+  Function Length   : 102 (0x00066) Actual length = 204 (0x0000cc)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,11 +119,13 @@ Unwind Info:
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
   Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E2 00 02      add_fp 2 (0x02); addi fp, sp, #16
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
     ---- Epilog start at index 3 ----
-    D0 00 03      save_reg X#0 Z#3 (0x03); sd ra, sp, 24
-    D0 07 02      save_reg X#7 Z#2 (0x02); sd fp, sp, 16
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
+    E4          end
 
+12 (+8.11%) : 1421.dasm - System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
@@ -11,23 +11,27 @@
 ;  V00 this         [V00,T00] (  4,  3.50)     ref  ->   s1         this class-hnd single-def <System.Threading.WaitSubsystem+WaitableObject>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V02 tmp1         [V02,T01] (  3,  3   )     ref  ->   s1         class-hnd exact single-def "Inlining Arg" <System.Threading.WaitSubsystem+WaitableObject+OwnershipInfo>
-;  V03 cse0         [V03,T02] (  3,  1.50)     ref  ->   s1         "CSE #01: moderate"
+;  V03 cse0         [V03,T02] (  3,  2.50)     ref  ->   s2         "CSE #03: aggressive"
+;  V04 cse1         [V04,T03] (  3,  1.50)     ref  ->   s1         "CSE #01: moderate"
 ;
-; Lcl frame size = 8
-Frame info. #outsz=0; #framesz=32; lcl=8
+; Lcl frame size = 0
+Frame info. #outsz=0; #framesz=32; lcl=0
 
 G_M62429_IG01:        ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
             addi           sp, sp, -32
-            sd             fp, 8(sp)
-            sd             ra, 16(sp)
-            sd             s1, 24(sp)
-            addi           fp, sp, 8
+            sd             fp, 0(sp)
+            sd             ra, 8(sp)
+            sd             s1, 16(sp)
+            sd             s2, 24(sp)
+            mv             fp, sp
             mv             s1, a0
             ; gcrRegs +[s1]
-						;; size=24 bbWeight=1 PerfScore 13.50
+						;; size=28 bbWeight=1 PerfScore 17.50
 G_M62429_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s2, 0xD1FFAB1E
+            ld             s2, 0xD1FFAB1E(s2)
+            ; gcrRegs +[s2]
+            mv             a0, s2
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
@@ -41,41 +45,42 @@ G_M62429_IG02:        ; bbWeight=1, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byre
             ; gcrRegs -[a0]
             sext.w         a0, a0
             beqz           a0, G_M62429_IG04
-						;; size=44 bbWeight=1 PerfScore 16.50
-G_M62429_IG03:        ; bbWeight=0.50, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, byref, isz
+						;; size=48 bbWeight=1 PerfScore 17.00
+G_M62429_IG03:        ; bbWeight=0.50, gcrefRegs=40200 {s1 s2}, byrefRegs=0000 {}, byref, isz
             ld             s1, 0xD1FFAB1E(s1)
             bnez           s1, G_M62429_IG06
 						;; size=8 bbWeight=0.50 PerfScore 2.75
 G_M62429_IG04:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            ; gcrRegs -[s1]
+            ; gcrRegs -[s1 s2]
             mv             a0, zero
 						;; size=4 bbWeight=0.50 PerfScore 0.25
 G_M62429_IG05:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
-G_M62429_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0200 {s1}, byrefRegs=0000 {}, gcvars, byref
-            ; gcrRegs +[s1]
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
+G_M62429_IG06:        ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=40200 {s1 s2}, byrefRegs=0000 {}, gcvars, byref
+            ; gcrRegs +[s1 s2]
             lb             zero, 0xD1FFAB1E(s1)
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            mv             a0, s2
             ; gcrRegs +[a0]
             auipc          a1, 0xD1FFAB1E
             ld             a1, 0xD1FFAB1E(a1)
             jalr           a1		// System.Threading.LowLevelLock:VerifyIsLocked():this
-            ; gcrRegs -[a0]
+            ; gcrRegs -[a0 s2]
             lbu            a0, 0xD1FFAB1E(s1)
-						;; size=28 bbWeight=0.50 PerfScore 6.50
+						;; size=24 bbWeight=0.50 PerfScore 5.75
 G_M62429_IG07:        ; bbWeight=0.50, epilog, nogc, extend
-            ld             s1, 24(sp)
-            ld             ra, 16(sp)
-            ld             fp, 8(sp)
+            ld             s2, 24(sp)
+            ld             s1, 16(sp)
+            ld             ra, 8(sp)
+            ld             fp, 0(sp)
             addi           sp, sp, 32
-            ret						;; size=20 bbWeight=0.50 PerfScore 4.75
+            ret						;; size=24 bbWeight=0.50 PerfScore 5.75
 
-; Total bytes of code 148, prolog size 20, PerfScore 49.00, instruction count 32, allocated bytes for code 148 (MethodHash=00f50c22) for method System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
+; Total bytes of code 160, prolog size 24, PerfScore 54.75, instruction count 36, allocated bytes for code 160 (MethodHash=00f50c22) for method System.Threading.WaitSubsystem+WaitableObject:get_IsAbandonedMutex():bool:this (FullOpts)
 ; ============================================================
 
 Unwind Info:
@@ -86,22 +91,22 @@ Unwind Info:
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 74 (0x0004a) Actual length = 148 (0x000094)
+  Function Length   : 80 (0x00050) Actual length = 160 (0x0000a0)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Scope 1
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 3 (0x03)
+  Epilog Start Index         : 1 (0x01)
   ---- Unwind codes ----
-    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
-    ---- Epilog start at index 3 ----
-    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
-    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
-    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    E1          set_fp; move fp, sp
+    ---- Epilog start at index 1 ----
+    D0 11 03      save_reg X#17 Z#3 (0x03); sd s2, sp, 24
+    D0 08 02      save_reg X#8 Z#2 (0x02); sd s1, sp, 16
+    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
+    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
     02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
-    E4          end
 
+8 (+6.67%) : 524.dasm - System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
@@ -10,22 +10,25 @@
 ;
 ;# V00 OutArgs      [V00    ] (  1,  1   )  struct ( 0) [sp+0x00]   do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
 ;  V01 tmp1         [V01,T00] (  3,  3   )     ref  ->   a0         class-hnd exact single-def "NewObj constructor temp" <System.AppDomain>
+;  V02 cse0         [V02,T01] (  3,  3   )    long  ->   s1         "CSE #01: aggressive"
 ;
-; Lcl frame size = 0
-Frame info. #outsz=0; #framesz=16; lcl=0
+; Lcl frame size = 8
+Frame info. #outsz=0; #framesz=32; lcl=8
 
 G_M33691_IG01:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
-            addi           sp, sp, -16
-            sd             fp, 0(sp)
-            sd             ra, 8(sp)
-            mv             fp, sp
-						;; size=16 bbWeight=1 PerfScore 9.00
+            addi           sp, sp, -32
+            sd             fp, 8(sp)
+            sd             ra, 16(sp)
+            sd             s1, 24(sp)
+            addi           fp, sp, 8
+						;; size=20 bbWeight=1 PerfScore 13.00
 G_M33691_IG02:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            auipc          s1, 0xD1FFAB1E
+            mv             s1, s1
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
             bnez           a0, G_M33691_IG04
-						;; size=12 bbWeight=1 PerfScore 5.50
+						;; size=16 bbWeight=1 PerfScore 6.00
 G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
             ; gcrRegs -[a0]
             lui            a0, 0xD1FFAB1E
@@ -54,39 +57,39 @@ G_M33691_IG03:        ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
             ; byrRegs -[a0]
 						;; size=68 bbWeight=0.50 PerfScore 11.25
 G_M33691_IG04:        ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
-            auipc          a0, 0xD1FFAB1E
-            ld             a0, 0xD1FFAB1E(a0)
+            ld             a0, 0xD1FFAB1E(s1)
             ; gcrRegs +[a0]
-						;; size=8 bbWeight=1 PerfScore 2.00
+						;; size=4 bbWeight=1 PerfScore 2.00
 G_M33691_IG05:        ; bbWeight=1, epilog, nogc, extend
-            ld             ra, 8(sp)
-            ld             fp, 0(sp)
-            addi           sp, sp, 16
-            ret						;; size=16 bbWeight=1 PerfScore 7.50
+            ld             s1, 24(sp)
+            ld             ra, 16(sp)
+            ld             fp, 8(sp)
+            addi           sp, sp, 32
+            ret						;; size=20 bbWeight=1 PerfScore 9.50
 
-; Total bytes of code 120, prolog size 16, PerfScore 35.25, instruction count 19, allocated bytes for code 120 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
+; Total bytes of code 128, prolog size 20, PerfScore 41.75, instruction count 22, allocated bytes for code 128 (MethodHash=03547c64) for method System.AppDomain:get_CurrentDomain():System.AppDomain (FullOpts)
 ; ============================================================
 
 Unwind Info:
   >> Start offset   : 0x000000 (not in unwind data)
   >>   End offset   : 0xd1ffab1e (not in unwind data)
-  Code Words        : 3
+  Code Words        : 4
   Epilog Count      : 1
   E bit             : 0
   X bit             : 0
   Vers              : 0
-  Function Length   : 60 (0x0003c) Actual length = 120 (0x000078)
+  Function Length   : 64 (0x00040) Actual length = 128 (0x000080)
   ---- Epilog scopes ----
   ---- Scope 0
   Epilog Start Offset        : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-  Epilog Start Index         : 1 (0x01)
+  Epilog Start Index         : 3 (0x03)
   ---- Unwind codes ----
-    E1          set_fp; move fp, sp
-    ---- Epilog start at index 1 ----
-    D0 00 01      save_reg X#0 Z#1 (0x01); sd ra, sp, 8
-    D0 07 00      save_reg X#7 Z#0 (0x00); sd fp, sp, 0
-    01          alloc_s #1 (0x01); addi sp, sp, -16 (0x010)
-    E4          end
+    E2 00 01      add_fp 1 (0x01); addi fp, sp, #8
+    ---- Epilog start at index 3 ----
+    D0 08 03      save_reg X#8 Z#3 (0x03); sd s1, sp, 24
+    D0 00 02      save_reg X#0 Z#2 (0x02); sd ra, sp, 16
+    D0 07 01      save_reg X#7 Z#1 (0x01); sd fp, sp, 8
+    02          alloc_s #2 (0x02); addi sp, sp, -32 (0x020)
     E4          end
     E4          end
     E4          end
Details

Size improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmark.mch 430 277 29 124 -9,734 +336
JIT.opt.mch 13,667 13,296 59 312 -222,764 +1,020
System.mch 5,946 3,454 33 2,459 -82,718 +396
20,043 17,027 121 2,895 -315,216 +1,752

PerfScore improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same PerfScore Improvements (PerfScore) Regressions (PerfScore) PerfScore Overall in FullOpts
benchmark.mch 430 261 65 104 -3.88% +4.02% -0.4625%
JIT.opt.mch 13,667 13,182 223 262 -9.48% +5.35% -0.2925%
System.mch 5,946 3,106 67 2,773 -2.81% +4.07% -0.4243%

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmark.mch 2,494 957 1,537 0 (0.00%) 0 (0.00%)
JIT.opt.mch 35,747 16,593 19,154 0 (0.00%) 0 (0.00%)
System.mch 87,412 85,743 1,669 0 (0.00%) 0 (0.00%)
125,653 103,293 22,360 0 (0.00%) 0 (0.00%)

jit-analyze output

Copy link
Member

@tomeksowi tomeksowi left a comment

Choose a reason for hiding this comment

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

Looks good, the remaining inefficiencies are few enough to make this PR worth it.

If you're looking for further optimization ideas in this area, separating auipc so the page offset can be reused by many I- or S-type instructions, but this would require changing the recorded relocations to something closer to the native ELF, which is a bigger change.

https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#pc-relative-symbol-addresses

That may be similar to ARM64_PAGEBASE_REL21, ARM64_PAGEOFFSET_12A which does have an implementation in .NET.

@namu-lee namu-lee requested a review from jakobbotsch December 17, 2025 16:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

arch-riscv Related to the RISC-V architecture area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI community-contribution Indicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants