-
Notifications
You must be signed in to change notification settings - Fork 5.3k
[RISC-V] Enable constant CSE in RISCV64 #121739
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
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)
MinOpts (+0 bytes)
FullOpts (-35,746 bytes)
Example diffsSystem.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)DetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze outputSystem.Private.CoreLib.mchDetail diffs |
|
Some regressions are caused by the failure to use PC-relative addressing. |
There was a problem hiding this 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
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 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)
MinOpts (+10,528 bytes)
FullOpts (+163,080 bytes)
Example diffsSystem.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)DetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze outputDiffs 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)
MinOpts (+10,528 bytes)
FullOpts (+144,474 bytes)
Example diffsSystem.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)DetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze outputDiffs 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)
MinOpts (+0 bytes)
FullOpts (-18,586 bytes)
Example diffsSystem.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
DetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze output |
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 |
|
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 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 I'm working on adding support for pc-relative addressing in Baseline JIT Diff JIT |
…ck-based local variables being generated via reg t6.
…h a hoisted handle operand
|
I've completed adding support for emitting relative addresses for hoisted CNS_INT nodes. |
|
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)
MinOpts (-211,812 bytes)
FullOpts (-129,020 bytes)
Example diffsbenchmark.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 endJIT.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
DetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze output |
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 public static void MulOverflow()
{
for (int i = 0; i < 39768215; i++)
{
bigArr[i*402653184] = 17;
}
} |
…expected to be placed in callee-saved 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. diffsDiffs 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)
MinOpts (-211,812 bytes)
FullOpts (-130,008 bytes)
Example diffsbenchmark.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 endJIT.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
DetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze output |
|
Looks much better overall.
I wonder what happened here, constant folding prevented maybe? These temporary constants synthesized with |
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. |
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. DiffsDiffs 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)
MinOpts (-211,812 bytes)
FullOpts (-130,212 bytes)
Example diffsbenchmark.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
DetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze output |
@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:
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. |
|
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)
MinOpts (-211,776 bytes)
FullOpts (-101,688 bytes)
Example diffsbenchmark.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 endJIT.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 endDetailsSize improvements/regressions per collection
PerfScore improvements/regressions per collection
Context information
jit-analyze output |
There was a problem hiding this 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.
That may be similar to ARM64_PAGEBASE_REL21, ARM64_PAGEOFFSET_12A which does have an implementation in .NET.


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