Assembly Diffs

linux arm

Diffs are based on 1,910,835 contexts (830,139 MinOpts, 1,080,696 FullOpts).

MISSED contexts: base: 71,332 (3.36%), diff: 214,008 (10.07%)

Overall (-83,756 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 9,001,894 -1,330
benchmarks.run_pgo.linux.arm.checked.mch 44,895,420 -32,684
benchmarks.run_tiered.linux.arm.checked.mch 13,975,686 -936
coreclr_tests.run.linux.arm.checked.mch 297,649,552 -2,656
libraries.pmi.linux.arm.checked.mch 36,552,836 -10,380
libraries_tests.run.linux.arm.Release.mch 203,563,396 -20,844
librariestestsnotieredcompilation.run.linux.arm.Release.mch 76,220,792 -12,598
realworld.run.linux.arm.checked.mch 10,142,178 -2,328

FullOpts (-83,756 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 8,615,300 -1,330
benchmarks.run_pgo.linux.arm.checked.mch 33,017,088 -32,684
benchmarks.run_tiered.linux.arm.checked.mch 5,762,530 -936
coreclr_tests.run.linux.arm.checked.mch 85,198,920 -2,656
libraries.pmi.linux.arm.checked.mch 36,446,612 -10,380
libraries_tests.run.linux.arm.Release.mch 82,582,680 -20,844
librariestestsnotieredcompilation.run.linux.arm.Release.mch 66,150,024 -12,598
realworld.run.linux.arm.checked.mch 9,707,138 -2,328

Example diffs

benchmarks.run.linux.arm.checked.mch

-28 (-51.85%) : 7898.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.Canon,System.Canon]:b10_1(System.Canon):System.__Canon:this (FullOpts)

@@ -2,57 +2,40 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> r4 this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r1 class-hnd single-def <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r4 this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.__Canon>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M11807_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M11807_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M11807_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M11807_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2+0x04] - cmp r3, r2 - beq SHORT G_M11807_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M11807_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M11807_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1] + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0+0x04]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M11807_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=18 bbWeight=1 PerfScore 7.00 +G_M11807_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 54, prolog size 14, PerfScore 12.25, instruction count 21, allocated bytes for code 54 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 26, prolog size 4, PerfScore 11.00, instruction count 11, allocated bytes for code 26 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -64,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
+ Function Length : 13 (0x0000d) Actual length = 26 (0x00001a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-22 (-47.83%) : 3931.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -2,58 +2,39 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) int -> r0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M8451_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M8451_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 9.75, instruction count 17, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -65,11 +46,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

-32 (-41.03%) : 412.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -2,64 +2,50 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> r1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) int -> r4 "CSE - aggressive"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C] - mov r4, r0 - ;; size=16 bbWeight=1 PerfScore 5.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r0, [r0]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04] + ;; size=4 bbWeight=1 PerfScore 2.00 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr r4, [r0+0x20] + ldr r0, [r4]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[r0]
+ ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
+ ; gcr arg pop 0
mov r1, r0 ; gcrRegs +[r1]
- mov r0, r1 - cmp r0, 0 - beq SHORT G_M13946_IG05 - ;; size=34 bbWeight=1 PerfScore 13.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4+0x20] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M13946_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+ ldr r0, [r4]
; gcrRegs -[r0]
- mov r0, r2
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=40 bbWeight=1 PerfScore 14.00 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 78, prolog size 14, PerfScore 21.75, instruction count 29, allocated bytes for code 78 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 46, prolog size 4, PerfScore 17.00, instruction count 17, allocated bytes for code 46 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -71,11 +57,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 39 (0x00027) Actual length = 78 (0x00004e)
+ Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+10 (+10.42%) : 17815.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)

@@ -8,78 +8,72 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> r4
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> r4
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> r1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> r3 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r5 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> r7 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) int -> r6 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r5 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r7 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) int -> r6 "CSE - aggressive" +; TEMP_01 ref -> [r11-0x14]
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M36328_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - add r11, sp, 16 - ;; size=8 bbWeight=1 PerfScore 2.00
+ push {r2,r3,r4,r5,r6,r7,r11,lr} + add r11, sp, 24 + movs r1, 0 + str r1, [sp+0x04] + ;; size=12 bbWeight=1 PerfScore 4.00
G_M36328_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movs r4, 0
- movw r0, 0xd1ff - movt r0, 0xd1ff - ldr r5, [r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + ldr r5, [r1]
cmp r5, 0
- ble SHORT G_M36328_IG07
+ ble SHORT G_M36328_IG04
movw r6, 0xd1ff movt r6, 0xd1ff ldr r7, [r6] ; gcrRegs +[r7]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M36328_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
mov r1, r7 ; gcrRegs +[r1]
- mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M36328_IG06 - ;; size=8 bbWeight=4 PerfScore 16.00 -G_M36328_IG04: ; bbWeight=1, gcrefRegs=008A {r1 r3 r7}, byrefRegs=0000 {}, byref, isz - ldr r0, [r3] - movw r2, 0xd1ff - movt r2, 0xd1ff - cmp r0, r2 - beq SHORT G_M36328_IG06 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M36328_IG05: ; bbWeight=0.50, gcrefRegs=0082 {r1 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - mov r0, r2
+ movw r0, 0xd1ff + movt r0, 0xd1ff
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M36328_IG06: ; bbWeight=4, gcrefRegs=0088 {r3 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M36328_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
+ mov r1, r7 + ; gcrRegs +[r1] + movw r0, 0xd1ff + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + str r0, [sp+0x04]
sub r0, r6, 28
- mov r1, r3
+ ; gcrRegs -[r0] + ldr r1, [sp+0x04]
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r3]
+ ; gcrRegs -[r1]
adds r4, r4, 1 cmp r4, r5 blt SHORT G_M36328_IG03
- ;; size=22 bbWeight=4 PerfScore 32.00 -G_M36328_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=4 PerfScore 60.00 +G_M36328_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r7]
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 96, prolog size 8, PerfScore 67.50, instruction count 34, allocated bytes for code 96 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (FullOpts)
+; Total bytes of code 106, prolog size 12, PerfScore 80.00, instruction count 35, allocated bytes for code 106 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (FullOpts)
; ============================================================ Unwind Info: @@ -91,11 +85,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 96 (0x000060)
+ Function Length : 53 (0x00035) Actual length = 106 (0x00006a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end FF end

+10 (+10.64%) : 40859.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)

@@ -8,78 +8,72 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> r4
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> r4
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> r1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> r3 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r5 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> r7 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) int -> r6 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r5 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r7 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) int -> r6 "CSE - aggressive" +; TEMP_01 ref -> [r11-0x14]
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M896_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - add r11, sp, 16 - ;; size=8 bbWeight=1 PerfScore 2.00
+ push {r2,r3,r4,r5,r6,r7,r11,lr} + add r11, sp, 24 + movs r1, 0 + str r1, [sp+0x04] + ;; size=12 bbWeight=1 PerfScore 4.00
G_M896_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movs r4, 0
- movw r0, 0xd1ff - movt r0, 0xd1ff - ldr r5, [r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + ldr r5, [r1]
cmp r5, 0
- ble SHORT G_M896_IG07
+ ble SHORT G_M896_IG04
movw r6, 0xd1ff movt r6, 0xd1ff ldr r7, [r6] ; gcrRegs +[r7]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M896_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
mov r1, r7 ; gcrRegs +[r1]
- mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M896_IG06 - ;; size=8 bbWeight=4 PerfScore 16.00 -G_M896_IG04: ; bbWeight=1, gcrefRegs=008A {r1 r3 r7}, byrefRegs=0000 {}, byref, isz - ldr r0, [r3] - movw r2, 0xd1ff - movt r2, 0xd1ff - cmp r0, r2 - beq SHORT G_M896_IG06 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M896_IG05: ; bbWeight=0.50, gcrefRegs=0082 {r1 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - mov r0, r2
+ movw r0, 0xd1ff + movt r0, 0xd1ff
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M896_IG06: ; bbWeight=4, gcrefRegs=0088 {r3 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M896_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
+ mov r1, r7 + ; gcrRegs +[r1] + movw r0, 0xd1ff + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + str r0, [sp+0x04]
adds r0, r6, 4
- mov r1, r3
+ ; gcrRegs -[r0] + ldr r1, [sp+0x04]
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r3]
+ ; gcrRegs -[r1]
adds r4, r4, 1 cmp r4, r5 blt SHORT G_M896_IG03
- ;; size=20 bbWeight=4 PerfScore 32.00 -G_M896_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=42 bbWeight=4 PerfScore 60.00 +G_M896_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r7]
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 94, prolog size 8, PerfScore 67.50, instruction count 34, allocated bytes for code 94 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
+; Total bytes of code 104, prolog size 12, PerfScore 80.00, instruction count 35, allocated bytes for code 104 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
; ============================================================ Unwind Info: @@ -91,11 +85,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 47 (0x0002f) Actual length = 94 (0x00005e)
+ Function Length : 52 (0x00034) Actual length = 104 (0x000068)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end FF end

+10 (+10.64%) : 44815.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)

@@ -8,78 +8,72 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> r4
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> r4
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> r1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> r3 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r5 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> r7 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) int -> r6 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r5 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r7 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) int -> r6 "CSE - aggressive" +; TEMP_01 ref -> [r11-0x14]
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M40467_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - add r11, sp, 16 - ;; size=8 bbWeight=1 PerfScore 2.00
+ push {r2,r3,r4,r5,r6,r7,r11,lr} + add r11, sp, 24 + movs r1, 0 + str r1, [sp+0x04] + ;; size=12 bbWeight=1 PerfScore 4.00
G_M40467_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movs r4, 0
- movw r0, 0xd1ff - movt r0, 0xd1ff - ldr r5, [r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + ldr r5, [r1]
cmp r5, 0
- ble SHORT G_M40467_IG07
+ ble SHORT G_M40467_IG04
movw r6, 0xd1ff movt r6, 0xd1ff ldr r7, [r6] ; gcrRegs +[r7]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
mov r1, r7 ; gcrRegs +[r1]
- mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M40467_IG06 - ;; size=8 bbWeight=4 PerfScore 16.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=008A {r1 r3 r7}, byrefRegs=0000 {}, byref, isz - ldr r0, [r3] - movw r2, 0xd1ff - movt r2, 0xd1ff - cmp r0, r2 - beq SHORT G_M40467_IG06 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=0082 {r1 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - mov r0, r2
+ movw r0, 0xd1ff + movt r0, 0xd1ff
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=0088 {r3 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
+ mov r1, r7 + ; gcrRegs +[r1] + movw r0, 0xd1ff + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + str r0, [sp+0x04]
adds r0, r6, 4
- mov r1, r3
+ ; gcrRegs -[r0] + ldr r1, [sp+0x04]
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r3]
+ ; gcrRegs -[r1]
adds r4, r4, 1 cmp r4, r5 blt SHORT G_M40467_IG03
- ;; size=20 bbWeight=4 PerfScore 32.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=42 bbWeight=4 PerfScore 60.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r7]
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 94, prolog size 8, PerfScore 67.50, instruction count 34, allocated bytes for code 94 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
+; Total bytes of code 104, prolog size 12, PerfScore 80.00, instruction count 35, allocated bytes for code 104 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
; ============================================================ Unwind Info: @@ -91,11 +85,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 47 (0x0002f) Actual length = 94 (0x00005e)
+ Function Length : 52 (0x00034) Actual length = 104 (0x000068)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end FF end

benchmarks.run_pgo.linux.arm.checked.mch

-22 (-47.83%) : 131625.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -3,58 +3,39 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 204 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) int -> r0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M8451_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M8451_IG05 - ;; size=10 bbWeight=0.50 PerfScore 2.50 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.25 PerfScore 1.00 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 11.50, instruction count 17, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

-22 (-47.83%) : 84130.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -3,58 +3,39 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 100 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) int -> r0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M8451_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M8451_IG05 - ;; size=10 bbWeight=0.50 PerfScore 2.50 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.25 PerfScore 1.00 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 11.50, instruction count 17, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

-22 (-47.83%) : 152610.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -3,58 +3,39 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 128 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) int -> r0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M8451_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M8451_IG05 - ;; size=10 bbWeight=0.50 PerfScore 2.50 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.25 PerfScore 1.00 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 11.50, instruction count 17, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

+26 (+16.88%) : 24428.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -5,7 +5,7 @@ ; optimized using Dynamic PGO ; r11 based frame ; partially interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 4
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 4
; 4 inlinees with PGO data; 10 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; @@ -14,62 +14,79 @@ ; V02 tmp1 [V02,T06] ( 3, 2 ) ref -> r0 "guarded devirt return temp" ;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> ; V04 tmp3 [V04,T05] ( 4, 2 ) ubyte -> r3 "Inline return value spill temp"
-;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T09] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T07] ( 3, 2 ) int -> r7 -; V09 tmp8 [V09,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V12 tmp11 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V13 tmp12 [V13,T03] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" -;* V14 tmp13 [V14,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V15 tmp14 [V15,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V16 tmp15 [V16 ] ( 0, 0 ) int -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 tmp16 [V17,T04] ( 3, 3 ) int -> r0 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V18 cse0 [V18,T01] ( 3, 3 ) int -> r5 "CSE - aggressive" -; V19 cse1 [V19,T02] ( 3, 3 ) int -> r6 "CSE - aggressive"
+; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T07] ( 3, 2 ) int -> r6 +; V08 tmp7 [V08,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V11 tmp10 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V12 tmp11 [V12,T03] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" +;* V13 tmp12 [V13,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V14 tmp13 [V14 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 tmp14 [V15,T04] ( 3, 3 ) int -> r0 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> r5 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr}
+ push {r3,r4,r5,r6,r11,lr}
add r11, sp, 16 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r5, [r4] - movw r6, 0xd1ff - movt r6, 0xd1ff - cmp r5, r6 - bne SHORT G_M8853_IG11 - ldr r0, [r4+0x0C]
+ ldrsb r0, [r4] + mov r5, r4 + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M8853_IG05 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ldr r0, [r5] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + beq SHORT G_M8853_IG05 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ; gcrRegs -[r5] + movs r5, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M8853_IG11 + ldr r0, [r5+0x0C]
ands r3, r0, 2 cmp r3, 0 bne SHORT G_M8853_IG10 ldr r0, [r0] and r0, r0, 0xf0000 cmp r0, 0xc0000
- beq SHORT G_M8853_IG03 - movs r7, 0 - b SHORT G_M8853_IG04 - ;; size=40 bbWeight=1 PerfScore 15.00 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - movs r7, 1
+ beq SHORT G_M8853_IG06 + movs r6, 0 + b SHORT G_M8853_IG07 + ;; size=30 bbWeight=1 PerfScore 12.00 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + movs r6, 1
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - uxtb r3, r7
+G_M8853_IG07: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + uxtb r3, r6
cmp r3, 0 bne SHORT G_M8853_IG14 ;; size=6 bbWeight=1 PerfScore 3.00
-G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG08: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
movw r0, 0xd1ff movt r0, 0xd1ff cmp r4, r0
- beq SHORT G_M8853_IG07 - cmp r5, r6 - bne SHORT G_M8853_IG09
+ beq SHORT G_M8853_IG16 + ldr r0, [r4] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M8853_IG18
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -77,34 +94,17 @@ G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M8853_IG06: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - pop {r4,r5,r6,r7,r11,pc}
+ ;; size=40 bbWeight=1 PerfScore 14.00 +G_M8853_IG09: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M8853_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[r0] - movs r0, 0 - ;; size=2 bbWeight=0 PerfScore 0.00 -G_M8853_IG08: ; bbWeight=0, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc} - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M8853_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r4] - mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r4] - ldr r3, [r3+0x58] - ldr r3, [r3+0x10] - blx r3 // <unknown method> - ; gcrRegs -[r4] - b SHORT G_M8853_IG06 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG10: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - movs r7, 0 - b SHORT G_M8853_IG04
+G_M8853_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r4-r5] + movs r6, 0 + b SHORT G_M8853_IG07
;; size=4 bbWeight=0 PerfScore 0.00 G_M8853_IG11: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ; gcrRegs -[r5]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -123,7 +123,7 @@ G_M8853_IG12: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ;; size=2 bbWeight=0 PerfScore 0.00 G_M8853_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz cmp r3, 0
- beq SHORT G_M8853_IG05
+ beq SHORT G_M8853_IG08
;; size=4 bbWeight=0 PerfScore 0.00 G_M8853_IG14: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[r4] @@ -131,10 +131,27 @@ G_M8853_IG14: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movt r0, 0xd1ff ;; size=8 bbWeight=0 PerfScore 0.00 G_M8853_IG15: ; bbWeight=0, epilog, nogc, extend
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
+G_M8853_IG16: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + movs r0, 0 + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M8853_IG17: ; bbWeight=0, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc} + ;; size=4 bbWeight=0 PerfScore 0.00 +G_M8853_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r4] + mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4] + ldr r3, [r3+0x58] + ldr r3, [r3+0x10] + blx r3 // <unknown method> + ; gcrRegs -[r4] + b SHORT G_M8853_IG09 + ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 154, prolog size 8, PerfScore 34.00, instruction count 60, allocated bytes for code 154 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 180, prolog size 8, PerfScore 40.75, instruction count 70, allocated bytes for code 180 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -146,7 +163,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 77 (0x0004d) Actual length = 154 (0x00009a)
+ Function Length : 90 (0x0005a) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -162,7 +179,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 78 pop {r3,r4,r5,r6,r11,lr} ; opsize 32
FF end FF end

+28 (+18.42%) : 82477.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -14,62 +14,67 @@ ; V02 tmp1 [V02,T05] ( 3, 2 ) ref -> r0 "guarded devirt return temp" ;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> ; V04 tmp3 [V04,T06] ( 3, 2 ) ubyte -> r3 "Inline return value spill temp"
-;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T09] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T07] ( 3, 2 ) int -> r7 -; V09 tmp8 [V09,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V12 tmp11 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V13 tmp12 [V13,T01] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" -;* V14 tmp13 [V14,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V15 tmp14 [V15,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V16 tmp15 [V16 ] ( 0, 0 ) int -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 tmp16 [V17,T04] ( 3, 3 ) int -> r0 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V18 cse0 [V18,T02] ( 3, 3 ) int -> r5 "CSE - aggressive" -; V19 cse1 [V19,T03] ( 3, 3 ) int -> r6 "CSE - aggressive"
+; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T07] ( 3, 2 ) int -> r6 +; V08 tmp7 [V08,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V11 tmp10 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V12 tmp11 [V12,T03] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" +;* V13 tmp12 [V13,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V14 tmp13 [V14 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 tmp14 [V15,T04] ( 3, 3 ) int -> r0 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> r5 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr}
+ push {r3,r4,r5,r6,r11,lr}
add r11, sp, 16 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r5, [r4] - movw r6, 0xd1ff - movt r6, 0xd1ff - cmp r5, r6 - bne SHORT G_M8853_IG11 - ldr r0, [r4+0x0C]
+ ldrsb r0, [r4] + mov r5, r4 + ; gcrRegs +[r5] + cmp r5, 0 + bne SHORT G_M8853_IG10 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M8853_IG03: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + cmp r5, 0 + beq SHORT G_M8853_IG15 + ldr r0, [r5+0x0C]
ands r3, r0, 2 cmp r3, 0
- bne SHORT G_M8853_IG15
+ bne SHORT G_M8853_IG14
ldr r0, [r0] and r0, r0, 0xf0000 cmp r0, 0xc0000
- beq SHORT G_M8853_IG03 - movs r7, 0 - b SHORT G_M8853_IG04 - ;; size=40 bbWeight=1 PerfScore 15.00 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - movs r7, 1
+ beq SHORT G_M8853_IG04 + movs r6, 0 + b SHORT G_M8853_IG05 + ;; size=30 bbWeight=1 PerfScore 12.00 +G_M8853_IG04: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + movs r6, 1
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - uxtb r3, r7
+G_M8853_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + uxtb r3, r6
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
cmp r3, 0
- bne SHORT G_M8853_IG09
+ bne SHORT G_M8853_IG12
movw r0, 0xd1ff movt r0, 0xd1ff cmp r4, r0
- beq SHORT G_M8853_IG07 - cmp r5, r6 - bne SHORT G_M8853_IG14
+ beq SHORT G_M8853_IG08 + ldr r0, [r4] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M8853_IG18
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -77,26 +82,45 @@ G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=34 bbWeight=1 PerfScore 13.00 -G_M8853_IG06: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - pop {r4,r5,r6,r7,r11,pc}
+ ;; size=44 bbWeight=1 PerfScore 16.00 +G_M8853_IG07: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M8853_IG07: ; bbWeight=0.92, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M8853_IG08: ; bbWeight=0.92, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0] movs r0, 0 ;; size=2 bbWeight=0.92 PerfScore 0.92
-G_M8853_IG08: ; bbWeight=0.92, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG09: ; bbWeight=0.92, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0.92 PerfScore 0.92
-G_M8853_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M8853_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r4-r5] + ldr r0, [r5] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + beq SHORT G_M8853_IG03 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M8853_IG11: ; bbWeight=0.25, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + movs r5, 0 + b SHORT G_M8853_IG03 + ;; size=4 bbWeight=0.25 PerfScore 0.50 +G_M8853_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r4]
movw r0, 0xd1ff movt r0, 0xd1ff ;; size=8 bbWeight=0 PerfScore 0.00
-G_M8853_IG10: ; bbWeight=0, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG13: ; bbWeight=0, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r4]
+G_M8853_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r4-r5] + movs r6, 0 + b SHORT G_M8853_IG05 + ;; size=4 bbWeight=0 PerfScore 0.00 +G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -106,17 +130,17 @@ G_M8853_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byre ; gcrRegs -[r0] and r0, r0, 32 cmp r0, 32
- beq SHORT G_M8853_IG12
+ beq SHORT G_M8853_IG16
movs r3, 0
- b SHORT G_M8853_IG13
+ b SHORT G_M8853_IG17
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG12: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M8853_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movs r3, 1 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M8853_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M8853_IG05
+G_M8853_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + b SHORT G_M8853_IG06
;; size=2 bbWeight=0 PerfScore 0.00
-G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG18: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -124,15 +148,10 @@ G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ldr r3, [r3+0x10] blx r3 // <unknown method> ; gcrRegs -[r4]
- b SHORT G_M8853_IG06
+ b SHORT G_M8853_IG07
;; size=12 bbWeight=0 PerfScore 0.00
-G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - movs r7, 0 - b SHORT G_M8853_IG04 - ;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 152, prolog size 8, PerfScore 35.85, instruction count 59, allocated bytes for code 152 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 180, prolog size 8, PerfScore 42.85, instruction count 70, allocated bytes for code 180 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -144,7 +163,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 76 (0x0004c) Actual length = 152 (0x000098)
+ Function Length : 90 (0x0005a) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -160,7 +179,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 78 pop {r3,r4,r5,r6,r11,lr} ; opsize 32
FF end FF end

+28 (+18.42%) : 92934.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -14,62 +14,67 @@ ; V02 tmp1 [V02,T05] ( 3, 2 ) ref -> r0 "guarded devirt return temp" ;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> ; V04 tmp3 [V04,T06] ( 3, 2 ) ubyte -> r3 "Inline return value spill temp"
-;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T09] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T07] ( 3, 2 ) int -> r7 -; V09 tmp8 [V09,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V12 tmp11 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V13 tmp12 [V13,T01] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" -;* V14 tmp13 [V14,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V15 tmp14 [V15,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V16 tmp15 [V16 ] ( 0, 0 ) int -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 tmp16 [V17,T04] ( 3, 3 ) int -> r0 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V18 cse0 [V18,T02] ( 3, 3 ) int -> r5 "CSE - aggressive" -; V19 cse1 [V19,T03] ( 3, 3 ) int -> r6 "CSE - aggressive"
+; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T07] ( 3, 2 ) int -> r6 +; V08 tmp7 [V08,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V11 tmp10 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V12 tmp11 [V12,T03] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" +;* V13 tmp12 [V13,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V14 tmp13 [V14 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 tmp14 [V15,T04] ( 3, 3 ) int -> r0 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> r5 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr}
+ push {r3,r4,r5,r6,r11,lr}
add r11, sp, 16 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r5, [r4] - movw r6, 0xd1ff - movt r6, 0xd1ff - cmp r5, r6 - bne SHORT G_M8853_IG13 - ldr r0, [r4+0x0C]
+ ldrsb r0, [r4] + mov r5, r4 + ; gcrRegs +[r5] + cmp r5, 0 + bne SHORT G_M8853_IG10 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M8853_IG03: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + cmp r5, 0 + beq SHORT G_M8853_IG15 + ldr r0, [r5+0x0C]
ands r3, r0, 2 cmp r3, 0
- bne SHORT G_M8853_IG12
+ bne SHORT G_M8853_IG14
ldr r0, [r0] and r0, r0, 0xf0000 cmp r0, 0xc0000
- beq SHORT G_M8853_IG03 - movs r7, 0 - b SHORT G_M8853_IG04 - ;; size=40 bbWeight=1 PerfScore 15.00 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - movs r7, 1
+ beq SHORT G_M8853_IG04 + movs r6, 0 + b SHORT G_M8853_IG05 + ;; size=30 bbWeight=1 PerfScore 12.00 +G_M8853_IG04: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + movs r6, 1
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - uxtb r3, r7
+G_M8853_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + uxtb r3, r6
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
cmp r3, 0
- bne SHORT G_M8853_IG09
+ bne SHORT G_M8853_IG12
movw r0, 0xd1ff movt r0, 0xd1ff cmp r4, r0
- beq SHORT G_M8853_IG07 - cmp r5, r6 - bne SHORT G_M8853_IG11
+ beq SHORT G_M8853_IG08 + ldr r0, [r4] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M8853_IG18
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -77,41 +82,45 @@ G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=34 bbWeight=1 PerfScore 13.00 -G_M8853_IG06: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - pop {r4,r5,r6,r7,r11,pc}
+ ;; size=44 bbWeight=1 PerfScore 16.00 +G_M8853_IG07: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M8853_IG07: ; bbWeight=0.94, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M8853_IG08: ; bbWeight=0.94, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0] movs r0, 0 ;; size=2 bbWeight=0.94 PerfScore 0.94
-G_M8853_IG08: ; bbWeight=0.94, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG09: ; bbWeight=0.94, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0.94 PerfScore 0.94
-G_M8853_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M8853_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r4-r5] + ldr r0, [r5] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + beq SHORT G_M8853_IG03 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M8853_IG11: ; bbWeight=0.25, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + movs r5, 0 + b SHORT G_M8853_IG03 + ;; size=4 bbWeight=0.25 PerfScore 0.50 +G_M8853_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r4]
movw r0, 0xd1ff movt r0, 0xd1ff ;; size=8 bbWeight=0 PerfScore 0.00
-G_M8853_IG10: ; bbWeight=0, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG13: ; bbWeight=0, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r4] - mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r4] - ldr r3, [r3+0x58] - ldr r3, [r3+0x10] - blx r3 // <unknown method> - ; gcrRegs -[r4] - b SHORT G_M8853_IG06 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG12: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - movs r7, 0 - b SHORT G_M8853_IG04
+G_M8853_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r4-r5] + movs r6, 0 + b SHORT G_M8853_IG05
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -121,18 +130,28 @@ G_M8853_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ; gcrRegs -[r0] and r0, r0, 32 cmp r0, 32
- beq SHORT G_M8853_IG14
+ beq SHORT G_M8853_IG16
movs r3, 0
- b SHORT G_M8853_IG15
+ b SHORT G_M8853_IG17
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M8853_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movs r3, 1 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M8853_IG05
+G_M8853_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + b SHORT G_M8853_IG06
;; size=2 bbWeight=0 PerfScore 0.00
+G_M8853_IG18: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4] + ldr r3, [r3+0x58] + ldr r3, [r3+0x10] + blx r3 // <unknown method> + ; gcrRegs -[r4] + b SHORT G_M8853_IG07 + ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 152, prolog size 8, PerfScore 35.88, instruction count 59, allocated bytes for code 152 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 180, prolog size 8, PerfScore 42.88, instruction count 70, allocated bytes for code 180 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -144,7 +163,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 76 (0x0004c) Actual length = 152 (0x000098)
+ Function Length : 90 (0x0005a) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -160,7 +179,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 78 pop {r3,r4,r5,r6,r11,lr} ; opsize 32
FF end FF end

benchmarks.run_tiered.linux.arm.checked.mch

-22 (-47.83%) : 17158.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -2,58 +2,39 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) int -> r0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M8451_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M8451_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 9.75, instruction count 17, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -65,11 +46,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

-32 (-41.03%) : 2774.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -2,64 +2,50 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> r1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) int -> r4 "CSE - aggressive"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C] - mov r4, r0 - ;; size=16 bbWeight=1 PerfScore 5.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r0, [r0]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04] + ;; size=4 bbWeight=1 PerfScore 2.00 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr r4, [r0+0x20] + ldr r0, [r4]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[r0]
+ ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
+ ; gcr arg pop 0
mov r1, r0 ; gcrRegs +[r1]
- mov r0, r1 - cmp r0, 0 - beq SHORT G_M13946_IG05 - ;; size=34 bbWeight=1 PerfScore 13.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4+0x20] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M13946_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+ ldr r0, [r4]
; gcrRegs -[r0]
- mov r0, r2
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=40 bbWeight=1 PerfScore 14.00 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 78, prolog size 14, PerfScore 21.75, instruction count 29, allocated bytes for code 78 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 46, prolog size 4, PerfScore 17.00, instruction count 17, allocated bytes for code 46 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -71,11 +57,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 39 (0x00027) Actual length = 78 (0x00004e)
+ Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-40.00%) : 17969.dasm - System.Threading.AsyncLocal`1[System.Canon]:get_Value():System.Canon:this (Tier1)

@@ -2,64 +2,50 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> r4 this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> -; V01 loc0 [V01,T02] ( 3, 2.12) ref -> r1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 4, 4 ) ref -> r4 this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> +; V01 loc0 [V01,T01] ( 2, 2 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M1970_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M1970_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M1970_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Threading.ExecutionContext:GetLocalValue(System.Threading.IAsyncLocal):System.Object
+ ; gcr arg pop 0
mov r1, r0 ; gcrRegs +[r1]
- mov r0, r1 - cmp r0, 0 - beq SHORT G_M1970_IG05 - ;; size=22 bbWeight=1 PerfScore 9.00 -G_M1970_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M1970_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M1970_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref
+ ldr r0, [r4]
; gcrRegs -[r0]
- mov r0, r2
+ ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M1970_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=34 bbWeight=1 PerfScore 13.00 +G_M1970_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 70, prolog size 14, PerfScore 18.25, instruction count 27, allocated bytes for code 70 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
+; Total bytes of code 42, prolog size 4, PerfScore 17.00, instruction count 17, allocated bytes for code 42 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -71,11 +57,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 35 (0x00023) Actual length = 70 (0x000046)
+ Function Length : 21 (0x00015) Actual length = 42 (0x00002a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+10 (+10.42%) : 40071.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)

@@ -8,78 +8,72 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> r4
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> r4
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> r1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> r3 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r5 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> r7 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) int -> r6 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r5 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r7 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) int -> r6 "CSE - aggressive" +; TEMP_01 ref -> [r11-0x14]
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M36328_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - add r11, sp, 16 - ;; size=8 bbWeight=1 PerfScore 2.00
+ push {r2,r3,r4,r5,r6,r7,r11,lr} + add r11, sp, 24 + movs r1, 0 + str r1, [sp+0x04] + ;; size=12 bbWeight=1 PerfScore 4.00
G_M36328_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movs r4, 0
- movw r0, 0xd1ff - movt r0, 0xd1ff - ldr r5, [r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + ldr r5, [r1]
cmp r5, 0
- ble SHORT G_M36328_IG07
+ ble SHORT G_M36328_IG04
movw r6, 0xd1ff movt r6, 0xd1ff ldr r7, [r6] ; gcrRegs +[r7]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M36328_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
mov r1, r7 ; gcrRegs +[r1]
- mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M36328_IG06 - ;; size=8 bbWeight=4 PerfScore 16.00 -G_M36328_IG04: ; bbWeight=1, gcrefRegs=008A {r1 r3 r7}, byrefRegs=0000 {}, byref, isz - ldr r0, [r3] - movw r2, 0xd1ff - movt r2, 0xd1ff - cmp r0, r2 - beq SHORT G_M36328_IG06 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M36328_IG05: ; bbWeight=0.50, gcrefRegs=0082 {r1 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - mov r0, r2
+ movw r0, 0xd1ff + movt r0, 0xd1ff
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M36328_IG06: ; bbWeight=4, gcrefRegs=0088 {r3 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M36328_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
+ mov r1, r7 + ; gcrRegs +[r1] + movw r0, 0xd1ff + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + str r0, [sp+0x04]
sub r0, r6, 28
- mov r1, r3
+ ; gcrRegs -[r0] + ldr r1, [sp+0x04]
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r3]
+ ; gcrRegs -[r1]
adds r4, r4, 1 cmp r4, r5 blt SHORT G_M36328_IG03
- ;; size=22 bbWeight=4 PerfScore 32.00 -G_M36328_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=4 PerfScore 60.00 +G_M36328_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r7]
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 96, prolog size 8, PerfScore 67.50, instruction count 34, allocated bytes for code 96 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
+; Total bytes of code 106, prolog size 12, PerfScore 80.00, instruction count 35, allocated bytes for code 106 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -91,11 +85,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 96 (0x000060)
+ Function Length : 53 (0x00035) Actual length = 106 (0x00006a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end FF end

+10 (+10.64%) : 74966.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)

@@ -8,78 +8,72 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> r4
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> r4
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> r1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> r3 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r5 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> r7 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) int -> r6 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r5 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r7 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) int -> r6 "CSE - aggressive" +; TEMP_01 ref -> [r11-0x14]
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M40467_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - add r11, sp, 16 - ;; size=8 bbWeight=1 PerfScore 2.00
+ push {r2,r3,r4,r5,r6,r7,r11,lr} + add r11, sp, 24 + movs r1, 0 + str r1, [sp+0x04] + ;; size=12 bbWeight=1 PerfScore 4.00
G_M40467_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movs r4, 0
- movw r0, 0xd1ff - movt r0, 0xd1ff - ldr r5, [r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + ldr r5, [r1]
cmp r5, 0
- ble SHORT G_M40467_IG07
+ ble SHORT G_M40467_IG04
movw r6, 0xd1ff movt r6, 0xd1ff ldr r7, [r6] ; gcrRegs +[r7]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
mov r1, r7 ; gcrRegs +[r1]
- mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M40467_IG06 - ;; size=8 bbWeight=4 PerfScore 16.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=008A {r1 r3 r7}, byrefRegs=0000 {}, byref, isz - ldr r0, [r3] - movw r2, 0xd1ff - movt r2, 0xd1ff - cmp r0, r2 - beq SHORT G_M40467_IG06 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=0082 {r1 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - mov r0, r2
+ movw r0, 0xd1ff + movt r0, 0xd1ff
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=0088 {r3 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
+ mov r1, r7 + ; gcrRegs +[r1] + movw r0, 0xd1ff + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + str r0, [sp+0x04]
adds r0, r6, 4
- mov r1, r3
+ ; gcrRegs -[r0] + ldr r1, [sp+0x04]
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r3]
+ ; gcrRegs -[r1]
adds r4, r4, 1 cmp r4, r5 blt SHORT G_M40467_IG03
- ;; size=20 bbWeight=4 PerfScore 32.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=42 bbWeight=4 PerfScore 60.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r7]
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 94, prolog size 8, PerfScore 67.50, instruction count 34, allocated bytes for code 94 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
+; Total bytes of code 104, prolog size 12, PerfScore 80.00, instruction count 35, allocated bytes for code 104 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -91,11 +85,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 47 (0x0002f) Actual length = 94 (0x00005e)
+ Function Length : 52 (0x00034) Actual length = 104 (0x000068)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end FF end

+10 (+10.64%) : 71803.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)

@@ -8,78 +8,72 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> r4
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> r4
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> r1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> r3 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r5 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> r7 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) int -> r6 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r5 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r7 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) int -> r6 "CSE - aggressive" +; TEMP_01 ref -> [r11-0x14]
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M896_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - add r11, sp, 16 - ;; size=8 bbWeight=1 PerfScore 2.00
+ push {r2,r3,r4,r5,r6,r7,r11,lr} + add r11, sp, 24 + movs r1, 0 + str r1, [sp+0x04] + ;; size=12 bbWeight=1 PerfScore 4.00
G_M896_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movs r4, 0
- movw r0, 0xd1ff - movt r0, 0xd1ff - ldr r5, [r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + ldr r5, [r1]
cmp r5, 0
- ble SHORT G_M896_IG07
+ ble SHORT G_M896_IG04
movw r6, 0xd1ff movt r6, 0xd1ff ldr r7, [r6] ; gcrRegs +[r7]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M896_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
mov r1, r7 ; gcrRegs +[r1]
- mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M896_IG06 - ;; size=8 bbWeight=4 PerfScore 16.00 -G_M896_IG04: ; bbWeight=1, gcrefRegs=008A {r1 r3 r7}, byrefRegs=0000 {}, byref, isz - ldr r0, [r3] - movw r2, 0xd1ff - movt r2, 0xd1ff - cmp r0, r2 - beq SHORT G_M896_IG06 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M896_IG05: ; bbWeight=0.50, gcrefRegs=0082 {r1 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - mov r0, r2
+ movw r0, 0xd1ff + movt r0, 0xd1ff
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M896_IG06: ; bbWeight=4, gcrefRegs=0088 {r3 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M896_IG03: ; bbWeight=4, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
+ mov r1, r7 + ; gcrRegs +[r1] + movw r0, 0xd1ff + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + str r0, [sp+0x04]
adds r0, r6, 4
- mov r1, r3
+ ; gcrRegs -[r0] + ldr r1, [sp+0x04]
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r3]
+ ; gcrRegs -[r1]
adds r4, r4, 1 cmp r4, r5 blt SHORT G_M896_IG03
- ;; size=20 bbWeight=4 PerfScore 32.00 -G_M896_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=42 bbWeight=4 PerfScore 60.00 +G_M896_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r7]
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 94, prolog size 8, PerfScore 67.50, instruction count 34, allocated bytes for code 94 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
+; Total bytes of code 104, prolog size 12, PerfScore 80.00, instruction count 35, allocated bytes for code 104 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -91,11 +85,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 47 (0x0002f) Actual length = 94 (0x00005e)
+ Function Length : 52 (0x00034) Actual length = 104 (0x000068)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end FF end

coreclr_tests.run.linux.arm.checked.mch

-30 (-44.12%) : 228171.dasm - Program+TestDelegateFatFunctionPointers:OtherGenericSystem.__Canon:System.__Canon:this (FullOpts)

@@ -2,65 +2,51 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Program+TestDelegateFatFunctionPointers>
-; V01 TypeCtx [V01,T01] ( 5, 4.25) int -> r4 single-def -; V02 arg1 [V02,T02] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> r1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T04] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
+; V04 tmp1 [V04,T02] ( 2, 4 ) ref -> r1 single-def "argument with side effect" +; V05 cse0 [V05,T03] ( 3, 3 ) int -> r4 "CSE - aggressive"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M51557_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r1, [r11-0x0C] - mov r4, r1 - ;; size=16 bbWeight=1 PerfScore 5.00 -G_M51557_IG02: ; bbWeight=1, gcrefRegs=0004 {r2}, byrefRegs=0000 {}, byref, isz
+ push {r2,r3,r4,lr} + str r1, [sp+0x04] + ;; size=4 bbWeight=1 PerfScore 2.00 +G_M51557_IG02: ; bbWeight=1, gcrefRegs=0004 {r2}, byrefRegs=0000 {}, byref
; gcrRegs +[r2]
- ldr r0, [r4+0x20] - ldr r0, [r0]
+ ldr r0, [r1+0x20] + ldr r4, [r0] + mov r0, r4
mov r1, r2 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_ISINSTANCEOFANY ; gcrRegs -[r1-r2] +[r0]
+ ; gcr arg pop 0
mov r1, r0 ; gcrRegs +[r1]
- mov r0, r1 - cmp r0, 0 - beq SHORT G_M51557_IG05 - ;; size=24 bbWeight=1 PerfScore 10.00 -G_M51557_IG03: ; bbWeight=0.25, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4+0x20] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M51557_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M51557_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+ mov r0, r4
; gcrRegs -[r0]
- mov r0, r2
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M51557_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=32 bbWeight=1 PerfScore 12.00 +G_M51557_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 68, prolog size 14, PerfScore 18.75, instruction count 26, allocated bytes for code 68 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 38, prolog size 4, PerfScore 15.00, instruction count 15, allocated bytes for code 38 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -72,11 +58,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 68 (0x000044)
+ Function Length : 19 (0x00013) Actual length = 38 (0x000026)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-41.18%) : 232644.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.Canon]:b11_1(System.Object):this (FullOpts)

@@ -2,65 +2,47 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> r4 this class-hnd single-def <System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r4 this class-hnd single-def <System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M10356_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M10356_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M10356_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M10356_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M10356_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M10356_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M10356_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1] + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M10356_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] ldr r2, [r0] blx r3 // System.Net.Sockets.SocketAsyncContext+AsyncOperation:TryCancel():ubyte:this ; gcrRegs -[r0]
- ;; size=14 bbWeight=1 PerfScore 5.00 -G_M10356_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=32 bbWeight=1 PerfScore 12.00 +G_M10356_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 68, prolog size 14, PerfScore 17.25, instruction count 26, allocated bytes for code 68 (MethodHash=959bd78b) for method System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
+; Total bytes of code 40, prolog size 4, PerfScore 16.00, instruction count 16, allocated bytes for code 40 (MethodHash=959bd78b) for method System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
; ============================================================ Unwind Info: @@ -72,11 +54,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 68 (0x000044)
+ Function Length : 20 (0x00014) Actual length = 40 (0x000028)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-32 (-41.03%) : 227873.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -2,64 +2,50 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> r1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) int -> r4 "CSE - aggressive"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C] - mov r4, r0 - ;; size=16 bbWeight=1 PerfScore 5.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r0, [r0]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04] + ;; size=4 bbWeight=1 PerfScore 2.00 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr r4, [r0+0x20] + ldr r0, [r4]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[r0]
+ ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
+ ; gcr arg pop 0
mov r1, r0 ; gcrRegs +[r1]
- mov r0, r1 - cmp r0, 0 - beq SHORT G_M13946_IG05 - ;; size=34 bbWeight=1 PerfScore 13.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4+0x20] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M13946_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+ ldr r0, [r4]
; gcrRegs -[r0]
- mov r0, r2
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=40 bbWeight=1 PerfScore 14.00 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 78, prolog size 14, PerfScore 21.75, instruction count 29, allocated bytes for code 78 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 46, prolog size 4, PerfScore 17.00, instruction count 17, allocated bytes for code 46 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -71,11 +57,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 39 (0x00027) Actual length = 78 (0x00004e)
+ Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+18 (+2.43%) : 95699.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:g_AssertThrowsCorrectException|61(System.Action) (FullOpts)

@@ -10,73 +10,71 @@ ; ; V00 arg0 [V00,T00] ( 4, 4 ) ref -> r3 class-hnd single-def <System.Action> ;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <<unknown class>>
-; V02 loc1 [V02,T10] ( 3, 0 ) ubyte -> r0
+; V02 loc1 [V02,T08] ( 3, 0 ) ubyte -> r0
;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <<unknown class>> ; V04 loc3 [V04 ] ( 25, 0 ) struct (24) [sp+0x00] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Runtime.CompilerServices.DefaultInterpolatedStringHandler> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V06 tmp1 [V06,T03] ( 4, 0 ) ref -> r4 class-hnd single-def "impSpillSpecialSideEff" <<unknown class>>
-; V07 tmp2 [V07,T15] ( 2, 0 ) ref -> r1 class-hnd single-def "impSpillSpecialSideEff" <<unknown class>>
+; V07 tmp2 [V07,T13] ( 2, 0 ) ref -> r1 class-hnd single-def "impSpillSpecialSideEff" <<unknown class>>
; V08 tmp3 [V08,T02] ( 5, 0 ) ref -> r4 class-hnd single-def "dup spill" <<unknown class>> ;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref single-def
-; V10 tmp5 [V10,T11] ( 3, 0 ) int -> r0 -; V11 tmp6 [V11,T07] ( 2, 0 ) ref -> r0 class-hnd "spilling QMark2" <<unknown class>> -; V12 tmp7 [V12,T08] ( 2, 0 ) ref -> r4 class-hnd "spilling QMark2" <<unknown class>> -;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> -;* V14 tmp9 [V14 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[ushort]> -; V15 tmp10 [V15,T04] ( 4, 0 ) int -> r0 "Inlining Arg" -;* V16 tmp11 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> -; V17 tmp12 [V17,T12] ( 3, 0 ) int -> r6 "Inlining Arg" -; V18 tmp13 [V18,T16] ( 2, 0 ) byref -> r5 single-def "Inlining Arg" -;* V19 tmp14 [V19 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V20 tmp15 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V21 tmp16 [V21,T24] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -;* V22 tmp17 [V22 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]> -;* V23 tmp18 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" -; V24 tmp19 [V24,T17] ( 2, 0 ) byref -> r1 single-def "Inlining Arg" -;* V25 tmp20 [V25 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[ushort]> -; V26 tmp21 [V26,T05] ( 4, 0 ) int -> r0 "Inlining Arg" -;* V27 tmp22 [V27 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> -; V28 tmp23 [V28,T13] ( 3, 0 ) int -> r6 "Inlining Arg" -; V29 tmp24 [V29,T18] ( 2, 0 ) byref -> r5 single-def "Inlining Arg" -;* V30 tmp25 [V30 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V31 tmp26 [V31 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V32 tmp27 [V32,T25] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -;* V33 tmp28 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]> -;* V34 tmp29 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" -; V35 tmp30 [V35,T19] ( 2, 0 ) byref -> r1 single-def "Inlining Arg" -;* V36 tmp31 [V36 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[ushort]> -; V37 tmp32 [V37,T06] ( 4, 0 ) int -> r4 "Inlining Arg" -;* V38 tmp33 [V38 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> -; V39 tmp34 [V39,T14] ( 3, 0 ) int -> r4 "Inlining Arg" -; V40 tmp35 [V40,T20] ( 2, 0 ) byref -> r5 single-def "Inlining Arg" -;* V41 tmp36 [V41 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V42 tmp37 [V42 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V43 tmp38 [V43,T26] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -;* V44 tmp39 [V44 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]> -;* V45 tmp40 [V45 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" -; V46 tmp41 [V46,T21] ( 2, 0 ) byref -> r1 single-def "Inlining Arg" -;* V47 tmp42 [V47 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP -;* V48 tmp43 [V48 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x4)" P-INDEP -;* V49 tmp44 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP -;* V50 tmp45 [V50 ] ( 0, 0 ) int -> zero-ref single-def "field V16._length (fldOffset=0x4)" P-INDEP -;* V51 tmp46 [V51 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP -;* V52 tmp47 [V52 ] ( 0, 0 ) int -> zero-ref single-def "field V22._length (fldOffset=0x4)" P-INDEP -;* V53 tmp48 [V53 ] ( 0, 0 ) byref -> zero-ref "field V25._reference (fldOffset=0x0)" P-INDEP -;* V54 tmp49 [V54 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x4)" P-INDEP -;* V55 tmp50 [V55 ] ( 0, 0 ) byref -> zero-ref single-def "field V27._reference (fldOffset=0x0)" P-INDEP -;* V56 tmp51 [V56 ] ( 0, 0 ) int -> zero-ref single-def "field V27._length (fldOffset=0x4)" P-INDEP -;* V57 tmp52 [V57 ] ( 0, 0 ) byref -> zero-ref single-def "field V33._reference (fldOffset=0x0)" P-INDEP -;* V58 tmp53 [V58 ] ( 0, 0 ) int -> zero-ref single-def "field V33._length (fldOffset=0x4)" P-INDEP -;* V59 tmp54 [V59 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP -;* V60 tmp55 [V60 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x4)" P-INDEP -;* V61 tmp56 [V61 ] ( 0, 0 ) byref -> zero-ref single-def "field V38._reference (fldOffset=0x0)" P-INDEP -;* V62 tmp57 [V62 ] ( 0, 0 ) int -> zero-ref single-def "field V38._length (fldOffset=0x4)" P-INDEP -;* V63 tmp58 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP -;* V64 tmp59 [V64 ] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x4)" P-INDEP -; V65 tmp60 [V65,T09] ( 3, 0 ) ref -> r0 single-def "argument with side effect" -; V66 tmp61 [V66,T22] ( 2, 0 ) ref -> r1 single-def "argument with side effect" -; V67 tmp62 [V67,T23] ( 2, 0 ) ref -> r1 single-def "argument with side effect" -; V68 PSPSym [V68,T01] ( 1, 1 ) int -> [sp+0x1C] do-not-enreg[V] "PSPSym"
+; V10 tmp5 [V10,T09] ( 3, 0 ) int -> r0 +;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> +;* V12 tmp7 [V12 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[ushort]> +; V13 tmp8 [V13,T04] ( 4, 0 ) int -> r0 "Inlining Arg" +;* V14 tmp9 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> +; V15 tmp10 [V15,T10] ( 3, 0 ) int -> r6 "Inlining Arg" +; V16 tmp11 [V16,T14] ( 2, 0 ) byref -> r5 single-def "Inlining Arg" +;* V17 tmp12 [V17 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V18 tmp13 [V18 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V19 tmp14 [V19,T22] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +;* V20 tmp15 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]> +;* V21 tmp16 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +; V22 tmp17 [V22,T15] ( 2, 0 ) byref -> r1 single-def "Inlining Arg" +;* V23 tmp18 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[ushort]> +; V24 tmp19 [V24,T05] ( 4, 0 ) int -> r0 "Inlining Arg" +;* V25 tmp20 [V25 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> +; V26 tmp21 [V26,T11] ( 3, 0 ) int -> r6 "Inlining Arg" +; V27 tmp22 [V27,T16] ( 2, 0 ) byref -> r5 single-def "Inlining Arg" +;* V28 tmp23 [V28 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V29 tmp24 [V29 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V30 tmp25 [V30,T23] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +;* V31 tmp26 [V31 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]> +;* V32 tmp27 [V32 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +; V33 tmp28 [V33,T17] ( 2, 0 ) byref -> r1 single-def "Inlining Arg" +;* V34 tmp29 [V34 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[ushort]> +; V35 tmp30 [V35,T06] ( 4, 0 ) int -> r4 "Inlining Arg" +;* V36 tmp31 [V36 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> +; V37 tmp32 [V37,T12] ( 3, 0 ) int -> r4 "Inlining Arg" +; V38 tmp33 [V38,T18] ( 2, 0 ) byref -> r5 single-def "Inlining Arg" +;* V39 tmp34 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V40 tmp35 [V40 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V41 tmp36 [V41,T24] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +;* V42 tmp37 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]> +;* V43 tmp38 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +; V44 tmp39 [V44,T19] ( 2, 0 ) byref -> r1 single-def "Inlining Arg" +;* V45 tmp40 [V45 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP +;* V46 tmp41 [V46 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x4)" P-INDEP +;* V47 tmp42 [V47 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP +;* V48 tmp43 [V48 ] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x4)" P-INDEP +;* V49 tmp44 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP +;* V50 tmp45 [V50 ] ( 0, 0 ) int -> zero-ref single-def "field V20._length (fldOffset=0x4)" P-INDEP +;* V51 tmp46 [V51 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP +;* V52 tmp47 [V52 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP +;* V53 tmp48 [V53 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP +;* V54 tmp49 [V54 ] ( 0, 0 ) int -> zero-ref single-def "field V25._length (fldOffset=0x4)" P-INDEP +;* V55 tmp50 [V55 ] ( 0, 0 ) byref -> zero-ref single-def "field V31._reference (fldOffset=0x0)" P-INDEP +;* V56 tmp51 [V56 ] ( 0, 0 ) int -> zero-ref single-def "field V31._length (fldOffset=0x4)" P-INDEP +;* V57 tmp52 [V57 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP +;* V58 tmp53 [V58 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP +;* V59 tmp54 [V59 ] ( 0, 0 ) byref -> zero-ref single-def "field V36._reference (fldOffset=0x0)" P-INDEP +;* V60 tmp55 [V60 ] ( 0, 0 ) int -> zero-ref single-def "field V36._length (fldOffset=0x4)" P-INDEP +;* V61 tmp56 [V61 ] ( 0, 0 ) byref -> zero-ref single-def "field V42._reference (fldOffset=0x0)" P-INDEP +;* V62 tmp57 [V62 ] ( 0, 0 ) int -> zero-ref single-def "field V42._length (fldOffset=0x4)" P-INDEP +; V63 tmp58 [V63,T07] ( 3, 0 ) ref -> r0 single-def "argument with side effect" +; V64 tmp59 [V64,T20] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V65 tmp60 [V65,T21] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V66 PSPSym [V66,T01] ( 1, 1 ) int -> [sp+0x1C] do-not-enreg[V] "PSPSym"
; ; Lcl frame size = 32 @@ -163,21 +161,33 @@ G_M36108_IG07: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ; gcr arg pop 0 cmp r0, 0 bne SHORT G_M36108_IG08
- mov r0, r4 - ldr r0, [r0]
+ mov r1, r4 + ; gcrRegs +[r1] + movw r0, 0xd1ff
; gcrRegs -[r0]
- movw r1, 0xd1ff - movt r1, 0xd1ff - cmp r0, r1 - beq SHORT G_M36108_IG08 - ldr r0, [r4] - movw r1, 0xd1ff - movt r1, 0xd1ff - cmp r0, r1 - bne SHORT G_M36108_IG09 - ;; size=54 bbWeight=0 PerfScore 0.00
+ movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + cmp r0, 0 + bne SHORT G_M36108_IG08 + mov r1, r4 + ; gcrRegs +[r1] + movw r0, 0xd1ff + ; gcrRegs -[r0] + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[r1 r4] +[r0] + ; gcr arg pop 0 + cmp r0, 0 + beq SHORT G_M36108_IG09 + ;; size=72 bbWeight=0 PerfScore 0.00
G_M36108_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r4]
+ ; gcrRegs -[r0]
movs r0, 1 b SHORT G_M36108_IG10 ;; size=4 bbWeight=0 PerfScore 0.00 @@ -459,7 +469,7 @@ G_M36108_IG29: ; bbWeight=0, funclet epilog, nogc, extend pop {r2,r3,r4,r5,r6,r10,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 742, prolog size 30, PerfScore 17.00, instruction count 252, allocated bytes for code 742 (MethodHash=e9c572f3) for method DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
+; Total bytes of code 760, prolog size 30, PerfScore 17.00, instruction count 257, allocated bytes for code 760 (MethodHash=e9c572f3) for method DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
; ============================================================ Unwind Info: @@ -492,7 +502,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ Function Length : 68 (0x00044) Actual length = 136 (0x000088)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

+28 (+18.42%) : 328825.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -11,65 +11,82 @@ ; ; V00 arg0 [V00,T00] ( 11, 7 ) ref -> r4 class-hnd single-def <System.Type> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T05] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
+; V02 tmp1 [V02,T06] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V04 tmp3 [V04,T06] ( 3, 2 ) ubyte -> r3 "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T09] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T07] ( 3, 2 ) int -> r7 -; V09 tmp8 [V09,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V12 tmp11 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V13 tmp12 [V13,T01] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" -;* V14 tmp13 [V14,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V15 tmp14 [V15,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V16 tmp15 [V16 ] ( 0, 0 ) int -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 tmp16 [V17,T04] ( 3, 3 ) int -> r0 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V18 cse0 [V18,T02] ( 3, 3 ) int -> r5 "CSE - aggressive" -; V19 cse1 [V19,T03] ( 3, 3 ) int -> r6 "CSE - aggressive"
+; V04 tmp3 [V04,T05] ( 4, 2 ) ubyte -> r3 "Inline return value spill temp" +; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T07] ( 3, 2 ) int -> r6 +; V08 tmp7 [V08,T08] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V11 tmp10 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V12 tmp11 [V12,T03] ( 2, 4 ) byref -> r0 single-def "Inlining Arg" +;* V13 tmp12 [V13,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V14 tmp13 [V14 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 tmp14 [V15,T04] ( 3, 3 ) int -> r0 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> r5 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr}
+ push {r3,r4,r5,r6,r11,lr}
add r11, sp, 16 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r5, [r4] - movw r6, 0xd1ff - movt r6, 0xd1ff - cmp r5, r6 - bne SHORT G_M8853_IG11 - ldr r0, [r4+0x0C]
+ ldrsb r0, [r4] + mov r5, r4 + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M8853_IG05 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ldr r0, [r5] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + beq SHORT G_M8853_IG05 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ; gcrRegs -[r5] + movs r5, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M8853_IG14 + ldr r0, [r5+0x0C]
ands r3, r0, 2 cmp r3, 0
- bne SHORT G_M8853_IG15
+ bne SHORT G_M8853_IG13
ldr r0, [r0] and r0, r0, 0xf0000 cmp r0, 0xc0000
- beq SHORT G_M8853_IG03 - movs r7, 0 - b SHORT G_M8853_IG04 - ;; size=40 bbWeight=1 PerfScore 15.00 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - movs r7, 1
+ beq SHORT G_M8853_IG06 + movs r6, 0 + b SHORT G_M8853_IG07 + ;; size=30 bbWeight=1 PerfScore 12.00 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + movs r6, 1
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - uxtb r3, r7 - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG07: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + uxtb r3, r6
cmp r3, 0
- bne SHORT G_M8853_IG09
+ bne SHORT G_M8853_IG17 + ;; size=6 bbWeight=1 PerfScore 3.00 +G_M8853_IG08: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
movw r0, 0xd1ff movt r0, 0xd1ff cmp r4, r0
- beq SHORT G_M8853_IG07 - cmp r5, r6 - bne SHORT G_M8853_IG14
+ beq SHORT G_M8853_IG10 + ldr r0, [r4] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M8853_IG12
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -77,62 +94,65 @@ G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=34 bbWeight=1 PerfScore 13.00 -G_M8853_IG06: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - pop {r4,r5,r6,r7,r11,pc}
+ ;; size=40 bbWeight=1 PerfScore 14.00 +G_M8853_IG09: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M8853_IG07: ; bbWeight=0.56, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M8853_IG10: ; bbWeight=0.56, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0] movs r0, 0 ;; size=2 bbWeight=0.56 PerfScore 0.56
-G_M8853_IG08: ; bbWeight=0.56, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG11: ; bbWeight=0.56, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0.56 PerfScore 0.56
-G_M8853_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - movw r0, 0xd1ff - movt r0, 0xd1ff - ;; size=8 bbWeight=0 PerfScore 0.00 -G_M8853_IG10: ; bbWeight=0, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc} - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M8853_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4] mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4]
+ ldr r3, [r3+0x58] + ldr r3, [r3+0x10] + blx r3 // <unknown method> + ; gcrRegs -[r4] + b SHORT G_M8853_IG09 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M8853_IG13: ; bbWeight=0, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0] +[r4-r5] + movs r6, 0 + b SHORT G_M8853_IG07 + ;; size=4 bbWeight=0 PerfScore 0.00 +G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4]
ldr r3, [r3+0x44] ldr r3, [r3+0x0C] blx r3 // <unknown method> ; gcrRegs -[r0] and r0, r0, 32 cmp r0, 32
- beq SHORT G_M8853_IG12
+ beq SHORT G_M8853_IG15
movs r3, 0
- b SHORT G_M8853_IG13
+ b SHORT G_M8853_IG16
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG12: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movs r3, 1 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M8853_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M8853_IG05 - ;; size=2 bbWeight=0 PerfScore 0.00 -G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r4] - ldr r3, [r3+0x58] - ldr r3, [r3+0x10] - blx r3 // <unknown method>
+G_M8853_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + cmp r3, 0 + beq SHORT G_M8853_IG08 + ;; size=4 bbWeight=0 PerfScore 0.00 +G_M8853_IG17: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r4]
- b SHORT G_M8853_IG06 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - movs r7, 0 - b SHORT G_M8853_IG04
+ movw r0, 0xd1ff + movt r0, 0xd1ff + ;; size=8 bbWeight=0 PerfScore 0.00 +G_M8853_IG18: ; bbWeight=0, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 152, prolog size 8, PerfScore 35.12, instruction count 59, allocated bytes for code 152 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 180, prolog size 8, PerfScore 41.88, instruction count 70, allocated bytes for code 180 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -144,7 +164,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 76 (0x0004c) Actual length = 152 (0x000098)
+ Function Length : 90 (0x0005a) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -160,7 +180,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 78 pop {r3,r4,r5,r6,r11,lr} ; opsize 32
FF end FF end

+46 (+766.67%) : 108122.dasm - T:TestEntryPoint():int (FullOpts)

@@ -2,48 +2,86 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; sp based frame
+; r11 based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-;* V00 loc0 [V00,T03] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
+;* V00 loc0 [V00,T01] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <<unknown class>>
-;* V03 tmp2 [V03,T00] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V04 tmp3 [V04,T02] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05,T01] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <<unknown class>>
+;* V03 tmp2 [V03,T02] ( 0, 0 ) ref -> zero-ref single-def "arr expr" +; V04 rat0 [V04,T00] ( 5, 7.50) ref -> r0 class-hnd "replacement local" <<unknown class>>
;
-; Lcl frame size = 4
+; Lcl frame size = 0
-G_M32114_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG - push {r3,lr} - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M32114_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M32114_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG + push {r11,lr} + mov r11, sp + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M32114_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + movw r0, 0xd1ff + movt r0, 0xd1ff + cmp r0, 0 + beq SHORT G_M32114_IG05 + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M32114_IG03: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + ldr r3, [r0] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M32114_IG05 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M32114_IG04: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0] + movs r0, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M32114_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + cmp r0, 0 + beq SHORT G_M32114_IG08 + ;; size=4 bbWeight=1 PerfScore 2.00 +G_M32114_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0]
movs r0, 100
- ;; size=2 bbWeight=1 PerfScore 1.00 -G_M32114_IG03: ; bbWeight=1, epilog, nogc, extend - pop {r3,pc} - ;; size=2 bbWeight=1 PerfScore 1.00
+ ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M32114_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop {r11,pc} + ;; size=4 bbWeight=0.50 PerfScore 0.50 +G_M32114_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + mov r0, -1 + ;; size=4 bbWeight=0.50 PerfScore 0.50 +G_M32114_IG09: ; bbWeight=0.50, epilog, nogc, extend + pop {r11,pc} + ;; size=4 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 6, prolog size 2, PerfScore 3.00, instruction count 3, allocated bytes for code 6 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
+; Total bytes of code 52, prolog size 6, PerfScore 12.75, instruction count 18, allocated bytes for code 52 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 1
- Epilog Count : 0
+ Epilog Count : 2
F bit : 0
- E bit : 1
+ E bit : 0
X bit : 0 Vers : 0
- Function Length : 3 (0x00003) Actual length = 6 (0x000006) - --- One epilog, unwind codes at 0
+ 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) + Condition : 14 (0xe) (always) + Epilog Start Index : 0 (0x00) + ---- Scope 1 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 0 (0x00)
---- Unwind codes ---- ---- Epilog start at index 0 ----
- ED 08 pop {r3,lr} ; opsize 16
+ A8 00 pop {r11,lr} ; opsize 32
FF end FF end

libraries.pmi.linux.arm.checked.mch

-28 (-51.85%) : 267626.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c11[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary2[System.String,System.Object]):System.Canon:this (FullOpts)

@@ -2,57 +2,40 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> r4 this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r4 this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M31417_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M31417_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M31417_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M31417_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M31417_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M31417_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M31417_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1] + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M31417_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=18 bbWeight=1 PerfScore 7.00 +G_M31417_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 54, prolog size 14, PerfScore 12.25, instruction count 21, allocated bytes for code 54 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
+; Total bytes of code 26, prolog size 4, PerfScore 11.00, instruction count 11, allocated bytes for code 26 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -64,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
+ Function Length : 13 (0x0000d) Actual length = 26 (0x00001a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-50.00%) : 169514.dasm - CSharpx.Either+<>cDisplayClass13_0`1[System.Canon]:b0():System.Canon:this (FullOpts)

@@ -2,58 +2,40 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> r4 this class-hnd single-def <CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]>
+; V00 this [V00,T00] ( 4, 4 ) ref -> r4 this class-hnd single-def <CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M12636_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M12636_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M12636_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
ldr r1, [r4+0x04] ; gcrRegs +[r1]
- mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M12636_IG05 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M12636_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M12636_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M12636_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M12636_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=20 bbWeight=1 PerfScore 8.00 +G_M12636_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 56, prolog size 14, PerfScore 13.25, instruction count 22, allocated bytes for code 56 (MethodHash=bbb7cea3) for method CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
+; Total bytes of code 28, prolog size 4, PerfScore 12.00, instruction count 12, allocated bytes for code 28 (MethodHash=bbb7cea3) for method CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -65,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 28 (0x0001c) Actual length = 56 (0x000038)
+ Function Length : 14 (0x0000e) Actual length = 28 (0x00001c)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-22 (-47.83%) : 25951.dasm - Microsoft.FSharp.Core.Operators+Unchecked:UnboxSystem.__Canon:System.__Canon (FullOpts)

@@ -2,57 +2,38 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M7606_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M7606_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M7606_IG03: ; bbWeight=0.25, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M7606_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M7606_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M7606_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M7606_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M7606_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 9.75, instruction count 17, allocated bytes for code 46 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -64,11 +45,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

+46 (+2.41%) : 107676.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)

@@ -5,13 +5,13 @@ ; r11 based frame ; partially interruptible ; No matching PGO data
-; 0 inlinees with PGO data; 102 single block inlinees; 20 inlinees without PGO data
+; 0 inlinees with PGO data; 103 single block inlinees; 21 inlinees without PGO data
; Final local variable assignments ; ; V00 this [V00,T00] ( 46, 43.50) ref -> r4 this class-hnd single-def <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner> ; V01 loc0 [V01,T13] ( 13, 7 ) ref -> r0 class-hnd <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> ; V02 loc1 [V02,T01] ( 28, 33 ) int -> r5
-; V03 loc2 [V03,T03] ( 21, 15.50) ref -> r6 class-hnd exact single-def <System.Text.StringBuilder>
+; V03 loc2 [V03,T03] ( 24, 17 ) ref -> r6 class-hnd exact single-def <System.Text.StringBuilder>
; V04 loc3 [V04,T02] ( 7, 18 ) ushort -> r0 ;* V05 loc4 [V05 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> ; V06 loc5 [V06 ] ( 6, 22 ) struct ( 8) [sp+0x08] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner+XmlCharResult> @@ -19,170 +19,154 @@ ;* V08 tmp1 [V08 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> ;* V09 tmp2 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> ;* V10 tmp3 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String>
-; V11 tmp4 [V11,T56] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String>
+; V11 tmp4 [V11,T57] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String>
;* V12 tmp5 [V12 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> ;* V13 tmp6 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> ; V14 tmp7 [V14,T30] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> ; V15 tmp8 [V15,T14] ( 6, 3 ) ref -> r8 class-hnd "Inline stloc first use temp" <System.String> ;* V16 tmp9 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String>
-; V17 tmp10 [V17,T18] ( 3, 3 ) byref -> r1 "dup spill"
+; V17 tmp10 [V17,T19] ( 3, 3 ) byref -> r1 "dup spill"
; V18 tmp11 [V18,T31] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> ;* V19 tmp12 [V19 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ; V20 tmp13 [V20,T40] ( 2, 2 ) ushort -> r1 "Inlining Arg"
-; V21 tmp14 [V21,T19] ( 3, 3 ) byref -> r0 "dup spill"
+; V21 tmp14 [V21,T20] ( 3, 3 ) byref -> r0 "dup spill"
;* V22 tmp15 [V22 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V23 tmp16 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> ; V24 tmp17 [V24,T52] ( 3, 1.50) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> ;* V25 tmp18 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> ; V26 tmp19 [V26,T07] ( 9, 9 ) ref -> r10 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax>
-;* V27 tmp20 [V27 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V28 tmp21 [V28 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V29 tmp22 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.GreenNode> -; V30 tmp23 [V30,T41] ( 2, 2 ) int -> r1 "Inlining Arg" -;* V31 tmp24 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -; V32 tmp25 [V32,T57] ( 2, 1 ) ref -> r0 class-hnd "Inline stloc first use temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -;* V33 tmp26 [V33 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V34 tmp27 [V34 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V35 tmp28 [V35 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V36 tmp29 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -;* V37 tmp30 [V37 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V38 tmp31 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> -;* V39 tmp32 [V39 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V40 tmp33 [V40,T58] ( 2, 1 ) ref -> r10 class-hnd exact "Inline stloc first use temp" <System.String> -;* V41 tmp34 [V41 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V42 tmp35 [V42 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V43 tmp36 [V43,T32] ( 2, 2 ) ref -> r9 class-hnd exact "impAppendStmt" <System.String> -; V44 tmp37 [V44,T15] ( 6, 3 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> -;* V45 tmp38 [V45 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V46 tmp39 [V46,T20] ( 3, 3 ) byref -> r1 "dup spill" -; V47 tmp40 [V47,T33] ( 2, 2 ) ref -> r9 class-hnd exact "impAppendStmt" <System.String> -;* V48 tmp41 [V48 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" -; V49 tmp42 [V49,T42] ( 2, 2 ) ushort -> r1 "Inlining Arg" -; V50 tmp43 [V50,T21] ( 3, 3 ) byref -> r0 "dup spill" -;* V51 tmp44 [V51 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" -;* V52 tmp45 [V52 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V53 tmp46 [V53,T53] ( 3, 1.50) ref -> r10 class-hnd "Inline stloc first use temp" <System.String> -;* V54 tmp47 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V55 tmp48 [V55,T08] ( 9, 9 ) ref -> r4 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> -;* V56 tmp49 [V56 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V57 tmp50 [V57 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V58 tmp51 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.GreenNode> -; V59 tmp52 [V59,T43] ( 2, 2 ) int -> r1 "Inlining Arg" -;* V60 tmp53 [V60 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -; V61 tmp54 [V61,T59] ( 2, 1 ) ref -> r0 class-hnd "Inline stloc first use temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -;* V62 tmp55 [V62 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V63 tmp56 [V63 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V65 tmp58 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -;* V66 tmp59 [V66 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V67 tmp60 [V67 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> -;* V68 tmp61 [V68 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V69 tmp62 [V69,T60] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String> -;* V70 tmp63 [V70 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V71 tmp64 [V71 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V72 tmp65 [V72,T34] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> -; V73 tmp66 [V73,T16] ( 6, 3 ) ref -> r8 class-hnd "Inline stloc first use temp" <System.String> -;* V74 tmp67 [V74 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V75 tmp68 [V75,T22] ( 3, 3 ) byref -> r1 "dup spill" -; V76 tmp69 [V76,T35] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> -;* V77 tmp70 [V77 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" -; V78 tmp71 [V78,T44] ( 2, 2 ) ushort -> r1 "Inlining Arg" -; V79 tmp72 [V79,T23] ( 3, 3 ) byref -> r0 "dup spill" -;* V80 tmp73 [V80 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V27 tmp20 [V27,T41] ( 2, 2 ) int -> r1 "Inlining Arg" +;* V28 tmp21 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> +; V29 tmp22 [V29,T58] ( 2, 1 ) ref -> r0 class-hnd "Inline stloc first use temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> +;* V30 tmp23 [V30 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V31 tmp24 [V31 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V32 tmp25 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +;* V33 tmp26 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> +; V34 tmp27 [V34,T59] ( 2, 1 ) ref -> r10 class-hnd exact "Inline stloc first use temp" <System.String> +;* V35 tmp28 [V35 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V36 tmp29 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V37 tmp30 [V37,T32] ( 2, 2 ) ref -> r9 class-hnd exact "impAppendStmt" <System.String> +; V38 tmp31 [V38,T15] ( 6, 3 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> +;* V39 tmp32 [V39 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V40 tmp33 [V40,T21] ( 3, 3 ) byref -> r1 "dup spill" +; V41 tmp34 [V41,T33] ( 2, 2 ) ref -> r9 class-hnd exact "impAppendStmt" <System.String> +;* V42 tmp35 [V42 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +; V43 tmp36 [V43,T42] ( 2, 2 ) ushort -> r1 "Inlining Arg" +; V44 tmp37 [V44,T22] ( 3, 3 ) byref -> r0 "dup spill" +;* V45 tmp38 [V45 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +;* V46 tmp39 [V46 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V47 tmp40 [V47,T53] ( 3, 1.50) ref -> r10 class-hnd "Inline stloc first use temp" <System.String> +;* V48 tmp41 [V48 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V49 tmp42 [V49,T08] ( 9, 9 ) ref -> r4 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +; V50 tmp43 [V50,T43] ( 2, 2 ) int -> r1 "Inlining Arg" +;* V51 tmp44 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> +; V52 tmp45 [V52,T60] ( 2, 1 ) ref -> r0 class-hnd "Inline stloc first use temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> +;* V53 tmp46 [V53 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V54 tmp47 [V54 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V55 tmp48 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +;* V56 tmp49 [V56 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> +; V57 tmp50 [V57,T61] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String> +;* V58 tmp51 [V58 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V59 tmp52 [V59 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V60 tmp53 [V60,T34] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> +; V61 tmp54 [V61,T16] ( 6, 3 ) ref -> r8 class-hnd "Inline stloc first use temp" <System.String> +;* V62 tmp55 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V63 tmp56 [V63,T23] ( 3, 3 ) byref -> r1 "dup spill" +; V64 tmp57 [V64,T35] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> +;* V65 tmp58 [V65 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +; V66 tmp59 [V66,T44] ( 2, 2 ) ushort -> r1 "Inlining Arg" +; V67 tmp60 [V67,T24] ( 3, 3 ) byref -> r0 "dup spill" +;* V68 tmp61 [V68 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +;* V69 tmp62 [V69 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V70 tmp63 [V70,T54] ( 3, 1.50) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> +;* V71 tmp64 [V71 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V72 tmp65 [V72,T09] ( 9, 9 ) ref -> r10 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +; V73 tmp66 [V73,T45] ( 2, 2 ) int -> r1 "Inlining Arg" +;* V74 tmp67 [V74,T51] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V75 tmp68 [V75,T04] ( 3, 12 ) int -> r1 "Inlining Arg" +;* V76 tmp69 [V76 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V77 tmp70 [V77 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +;* V78 tmp71 [V78 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> +; V79 tmp72 [V79,T62] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String> +;* V80 tmp73 [V80 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]>
;* V81 tmp74 [V81 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String>
-; V82 tmp75 [V82,T54] ( 3, 1.50) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> -;* V83 tmp76 [V83 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V84 tmp77 [V84,T09] ( 9, 9 ) ref -> r10 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> -;* V85 tmp78 [V85 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V86 tmp79 [V86 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V87 tmp80 [V87 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.GreenNode> -; V88 tmp81 [V88,T45] ( 2, 2 ) int -> r1 "Inlining Arg" -;* V89 tmp82 [V89,T51] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V90 tmp83 [V90,T04] ( 3, 12 ) int -> r1 "Inlining Arg" -;* V91 tmp84 [V91 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V92 tmp85 [V92 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> -;* V93 tmp86 [V93 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V94 tmp87 [V94,T61] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String> -;* V95 tmp88 [V95 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V96 tmp89 [V96 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V97 tmp90 [V97,T36] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> -; V98 tmp91 [V98,T17] ( 6, 3 ) ref -> r8 class-hnd "Inline stloc first use temp" <System.String> -;* V99 tmp92 [V99 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V100 tmp93 [V100,T24] ( 3, 3 ) byref -> r1 "dup spill" -; V101 tmp94 [V101,T37] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> -;* V102 tmp95 [V102 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" -; V103 tmp96 [V103,T46] ( 2, 2 ) ushort -> r1 "Inlining Arg" -; V104 tmp97 [V104,T25] ( 3, 3 ) byref -> r0 "dup spill" -;* V105 tmp98 [V105 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" -;* V106 tmp99 [V106 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V107 tmp100 [V107,T55] ( 3, 1.50) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> -;* V108 tmp101 [V108 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V109 tmp102 [V109,T10] ( 9, 9 ) ref -> r10 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> -;* V110 tmp103 [V110 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V111 tmp104 [V111 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V112 tmp105 [V112 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.GreenNode> -; V113 tmp106 [V113,T47] ( 2, 2 ) int -> r1 "Inlining Arg" -;* V114 tmp107 [V114 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -; V115 tmp108 [V115,T62] ( 2, 1 ) ref -> r0 class-hnd "Inline stloc first use temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> -;* V116 tmp109 [V116 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V117 tmp110 [V117 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V118 tmp111 [V118 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V119 tmp112 [V119 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken>
+; V82 tmp75 [V82,T36] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> +; V83 tmp76 [V83,T17] ( 6, 3 ) ref -> r8 class-hnd "Inline stloc first use temp" <System.String> +;* V84 tmp77 [V84 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V85 tmp78 [V85,T25] ( 3, 3 ) byref -> r1 "dup spill" +; V86 tmp79 [V86,T37] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> +;* V87 tmp80 [V87 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +; V88 tmp81 [V88,T46] ( 2, 2 ) ushort -> r1 "Inlining Arg" +; V89 tmp82 [V89,T26] ( 3, 3 ) byref -> r0 "dup spill" +;* V90 tmp83 [V90 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +;* V91 tmp84 [V91 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V92 tmp85 [V92,T55] ( 3, 1.50) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> +;* V93 tmp86 [V93 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V94 tmp87 [V94,T10] ( 9, 9 ) ref -> r10 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +; V95 tmp88 [V95,T47] ( 2, 2 ) int -> r1 "Inlining Arg" +;* V96 tmp89 [V96 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> +; V97 tmp90 [V97,T63] ( 2, 1 ) ref -> r0 class-hnd "Inline stloc first use temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken> +;* V98 tmp91 [V98 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V99 tmp92 [V99 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V100 tmp93 [V100 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +;* V101 tmp94 [V101 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> +; V102 tmp95 [V102,T64] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String> +;* V103 tmp96 [V103 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> +;* V104 tmp97 [V104 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V105 tmp98 [V105,T38] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> +; V106 tmp99 [V106,T18] ( 6, 3 ) ref -> r8 class-hnd "Inline stloc first use temp" <System.String> +;* V107 tmp100 [V107 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V108 tmp101 [V108,T27] ( 3, 3 ) byref -> r1 "dup spill" +; V109 tmp102 [V109,T39] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> +;* V110 tmp103 [V110 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +; V111 tmp104 [V111,T48] ( 2, 2 ) ushort -> r1 "Inlining Arg" +; V112 tmp105 [V112,T28] ( 3, 3 ) byref -> r0 "dup spill" +;* V113 tmp106 [V113 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" +;* V114 tmp107 [V114 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V115 tmp108 [V115,T56] ( 3, 1.50) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> +;* V116 tmp109 [V116 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V117 tmp110 [V117,T11] ( 9, 9 ) ref -> r10 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> +; V118 tmp111 [V118,T49] ( 2, 2 ) int -> r1 "Inlining Arg" +;* V119 tmp112 [V119 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]>
;* V120 tmp113 [V120 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> ;* V121 tmp114 [V121 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax>
-;* V122 tmp115 [V122 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V123 tmp116 [V123,T63] ( 2, 1 ) ref -> r9 class-hnd exact "Inline stloc first use temp" <System.String>
+; V122 tmp115 [V122,T29] ( 4, 2 ) ref -> r9 class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V123 tmp116 [V123,T65] ( 2, 1 ) ref -> r10 class-hnd exact single-def "Inline stloc first use temp" <System.String>
;* V124 tmp117 [V124 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]>
-;* V125 tmp118 [V125 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V126 tmp119 [V126,T38] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> -; V127 tmp120 [V127,T28] ( 5, 2.50) ref -> r8 class-hnd "Inline stloc first use temp" <System.String> -;* V128 tmp121 [V128 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V129 tmp122 [V129,T26] ( 3, 3 ) byref -> r1 "dup spill" -; V130 tmp123 [V130,T39] ( 2, 2 ) ref -> r8 class-hnd exact "impAppendStmt" <System.String> -;* V131 tmp124 [V131 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" -; V132 tmp125 [V132,T48] ( 2, 2 ) ushort -> r1 "Inlining Arg" -; V133 tmp126 [V133,T27] ( 3, 3 ) byref -> r0 "dup spill" -;* V134 tmp127 [V134 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" -;* V135 tmp128 [V135 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V136 tmp129 [V136,T11] ( 9, 9 ) ref -> r10 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax> -;* V137 tmp130 [V137 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V138 tmp131 [V138 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V139 tmp132 [V139 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.GreenNode> -; V140 tmp133 [V140,T49] ( 2, 2 ) int -> r1 "Inlining Arg" -;* V141 tmp134 [V141 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V142 tmp135 [V142 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxNode]> -;* V143 tmp136 [V143 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.XmlTextTokenSyntax>
...

+6 (+4.17%) : 198449.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)

@@ -9,15 +9,12 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 6, 6 ) ref -> r4 class-hnd single-def <System.Security.Cryptography.X509Certificates.X509Certificate>
-; V01 loc0 [V01,T04] ( 3, 3 ) ref -> [sp+0x04] do-not-enreg[M] class-hnd EH-live <System.Security.Cryptography.X509Certificates.X509Certificate2>
+; V01 loc0 [V01,T02] ( 3, 3 ) ref -> [sp+0x04] do-not-enreg[M] class-hnd EH-live <System.Security.Cryptography.X509Certificates.X509Certificate2>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <System.Security.Cryptography.X509Certificates.X509Certificate2> ;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> ;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>>
-;* V06 tmp4 [V06,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V07 tmp5 [V07,T03] ( 2, 4 ) ref -> r0 class-hnd "spilling QMark2" <System.Security.Cryptography.X509Certificates.X509Certificate2> -; V08 PSPSym [V08,T06] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym" -; V09 cse0 [V09,T02] ( 3, 3 ) int -> r5 "CSE - aggressive"
+; V06 PSPSym [V06,T03] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym"
; ; Lcl frame size = 16 @@ -26,15 +23,15 @@ G_M58596_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref sub sp, 16 add r11, sp, 24 add r1, sp, 32
- str r1, [sp+0x0C] // [V08 PSPSym]
+ str r1, [sp+0x0C] // [V06 PSPSym]
mov r4, r0 ; gcrRegs +[r4] ;; size=16 bbWeight=1 PerfScore 6.00 G_M58596_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ldr r0, [r4]
- movw r5, 0xd1ff - movt r5, 0xd1ff - cmp r0, r5
+ movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3
bne SHORT G_M58596_IG04 mov r0, r4 ; gcrRegs +[r0] @@ -49,7 +46,7 @@ G_M58596_IG04: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byr str r0, [sp+0x04] // [V01 loc0] ; GC ptr vars +{V01} ;; size=4 bbWeight=1 PerfScore 2.00
-G_M58596_IG05: ; bbWeight=1, gcVars=00000010 {V01}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M58596_IG05: ; bbWeight=1, gcVars=00000004 {V01}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -60,7 +57,8 @@ G_M58596_IG05: ; bbWeight=1, gcVars=00000010 {V01}, gcrefRegs=0010 {r4}, ; gcr arg pop 0 cmp r0, 0 beq SHORT G_M58596_IG06
- mov r0, r5
+ movw r0, 0xd1ff + movt r0, 0xd1ff
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_NEWFAST @@ -78,7 +76,7 @@ G_M58596_IG05: ; bbWeight=1, gcVars=00000010 {V01}, gcrefRegs=0010 {r4}, ; gcrRegs -[r0-r1 r4] ; gcr arg pop 0 str r5, [sp+0x04] // [V01 loc0]
- ;; size=50 bbWeight=1 PerfScore 19.00
+ ;; size=56 bbWeight=1 PerfScore 20.00
G_M58596_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[r5] ldr r0, [sp+0x04] // [V01 loc0] @@ -94,7 +92,7 @@ G_M58596_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, add r3, r11, 8 str r3, [sp+0x04] ;; size=10 bbWeight=0 PerfScore 0.00
-G_M58596_IG09: ; bbWeight=0, gcVars=00000010 {V01}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M58596_IG09: ; bbWeight=0, gcVars=00000004 {V01}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r0, LOW ADDRESS G_M58596_IG06 movt r0, HIGH ADDRESS G_M58596_IG06 ;; size=8 bbWeight=0 PerfScore 0.00 @@ -106,7 +104,7 @@ G_M58596_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, add r3, r11, 8 str r3, [sp+0x04] ;; size=10 bbWeight=0 PerfScore 0.00
-G_M58596_IG12: ; bbWeight=0, gcVars=00000010 {V01}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M58596_IG12: ; bbWeight=0, gcVars=00000004 {V01}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r0, LOW ADDRESS G_M58596_IG06 movt r0, HIGH ADDRESS G_M58596_IG06 ;; size=8 bbWeight=0 PerfScore 0.00 @@ -114,7 +112,7 @@ G_M58596_IG13: ; bbWeight=0, funclet epilog, nogc, extend pop {r2,r3,r4,r5,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 144, prolog size 16, PerfScore 38.00, instruction count 50, allocated bytes for code 144 (MethodHash=0c821b1b) for method System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
+; Total bytes of code 150, prolog size 16, PerfScore 39.00, instruction count 51, allocated bytes for code 150 (MethodHash=0c821b1b) for method System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
; ============================================================ Unwind Info: @@ -126,7 +124,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 50 (0x00032) Actual length = 100 (0x000064)
+ 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)

+4 (+4.55%) : 185680.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,18 +10,17 @@ ; ; V00 this [V00,T02] ( 3, 2.50) ref -> r0 this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> r1 class-hnd single-def <System.Object>
-; V02 loc0 [V02,T06] ( 2, 1 ) ref -> r1 class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T04] ( 3, 1.50) ref -> r1 class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 6, 4.77) ref -> r2 class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T03] ( 5, 4.23) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T05] ( 4, 1 ) ubyte -> r0 "Inline return value spill temp" -; V08 tmp5 [V08,T04] ( 2, 1.07) byref -> r0 single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 6, 4.77) ref -> r2 class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T03] ( 5, 4.23) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T06] ( 4, 1 ) ubyte -> r0 "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 1.07) byref -> r0 single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; ; Lcl frame size = 0 @@ -50,12 +49,14 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=4 bbWeight=0.50 PerfScore 0.50 G_M57556_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[r0-r1]
+ cmp r1, 0 + beq SHORT G_M57556_IG04
ldr r2, [r0+0x04] ; gcrRegs +[r2] ldr r1, [r1+0x04] cmp r2, r1 beq SHORT G_M57556_IG13
- ;; size=8 bbWeight=0.50 PerfScore 2.00
+ ;; size=12 bbWeight=0.50 PerfScore 3.00
G_M57556_IG07: ; bbWeight=0.43, gcrefRegs=0006 {r1 r2}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0] cmp r2, 0 @@ -100,7 +101,7 @@ G_M57556_IG13: ; bbWeight=0.07, gcVars=00000000 {}, gcrefRegs=0000 {}, by b SHORT G_M57556_IG12 ;; size=4 bbWeight=0.07 PerfScore 0.15
-; Total bytes of code 88, prolog size 6, PerfScore 16.01, instruction count 36, allocated bytes for code 88 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 92, prolog size 6, PerfScore 17.01, instruction count 38, allocated bytes for code 92 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -112,7 +113,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 44 (0x0002c) Actual length = 88 (0x000058)
+ 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)

libraries_tests.run.linux.arm.Release.mch

-22 (-47.83%) : 595454.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -3,58 +3,39 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 278 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) int -> r0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M8451_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M8451_IG05 - ;; size=10 bbWeight=0.50 PerfScore 2.50 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.25 PerfScore 1.00 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 11.50, instruction count 17, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

-22 (-47.83%) : 624420.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -3,58 +3,39 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 4031 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) int -> r0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> r1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) int -> r0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> r3 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r11,lr} - add r11, sp, 8 - str r0, [r11-0x04] - ;; size=12 bbWeight=1 PerfScore 3.00 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M8451_IG05
+ push {lr} + sub sp, 12 + str r0, [sp+0x04]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=000A {r1 r3}, byrefRegs=0000 {}, byref, isz - ldr r2, [r3]
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1]
ldr r0, [r0+0x20] ldr r0, [r0]
- cmp r2, r0 - beq SHORT G_M8451_IG05 - ;; size=10 bbWeight=0.50 PerfScore 2.50 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=12 bbWeight=0.25 PerfScore 1.00 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r3 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 5.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 46, prolog size 12, PerfScore 11.50, instruction count 17, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 24, prolog size 6, PerfScore 10.00, instruction count 10, allocated bytes for code 24 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
+ Function Length : 12 (0x0000c) Actual length = 24 (0x000018)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 0C pop {r2,r3,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + ED 00 pop {lr} ; opsize 16
FF end

-28 (-41.18%) : 329741.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.Canon]:b11_1(System.Object):this (Tier1)

@@ -2,65 +2,47 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> r4 this class-hnd single-def <System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r4 this class-hnd single-def <System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M10356_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M10356_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M10356_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M10356_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M10356_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M10356_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M10356_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1] + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M10356_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] ldr r2, [r0] blx r3 // System.Net.Sockets.SocketAsyncContext+AsyncOperation:TryCancel():ubyte:this ; gcrRegs -[r0]
- ;; size=14 bbWeight=1 PerfScore 5.00 -G_M10356_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=32 bbWeight=1 PerfScore 12.00 +G_M10356_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 68, prolog size 14, PerfScore 17.25, instruction count 26, allocated bytes for code 68 (MethodHash=959bd78b) for method System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (Tier1)
+; Total bytes of code 40, prolog size 4, PerfScore 16.00, instruction count 16, allocated bytes for code 40 (MethodHash=959bd78b) for method System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (Tier1)
; ============================================================ Unwind Info: @@ -72,11 +54,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 68 (0x000044)
+ Function Length : 20 (0x00014) Actual length = 40 (0x000028)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+12 (+8.11%) : 675368.dasm - System.Collections.Immutable.ImmutableDictionary2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)

@@ -8,91 +8,87 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 12 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 6, 3.50) int -> r2 single-def -; V01 arg0 [V01,T03] ( 4, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> -; V02 arg1 [V02,T01] ( 5, 4 ) byref -> r4 single-def -; V03 loc0 [V03,T04] ( 3, 0 ) ref -> r0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
+; V00 TypeCtx [V00,T00] ( 6, 4 ) int -> r4 single-def +; V01 arg0 [V01,T02] ( 4, 3 ) ref -> r6 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> +; V02 arg1 [V02,T01] ( 5, 4 ) byref -> r5 single-def +; V03 loc0 [V03,T03] ( 3, 0 ) ref -> r0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T00] ( 5, 7.50) ref -> r1 class-hnd "spilling QMark2" <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]> -;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V07 tmp3 [V07,T07] ( 2, 0 ) int -> r0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 0 ) int -> r0 "runtime lookup" -; V09 rat1 [V09,T06] ( 3, 0 ) int -> r0 "fgMakeTemp is creating a new local variable" -; TEMP_01 ref -> [r11-0x10]
+;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V06 tmp2 [V06,T06] ( 2, 0 ) int -> r0 "argument with side effect" +; V07 rat0 [V07,T04] ( 3, 0 ) int -> r0 "runtime lookup" +; V08 rat1 [V08,T05] ( 3, 0 ) int -> r0 "fgMakeTemp is creating a new local variable" +; TEMP_01 ref -> [r11-0x18]
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M59789_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push {r2,r3,r4,r5,r11,lr} - add r11, sp, 16
+ push {r4,r5,r6,r11,lr} + sub sp, 12 + add r11, sp, 24
movs r3, 0 str r3, [sp]
- str r0, [r11-0x0C] - mov r5, r1 - ; gcrRegs +[r5] - mov r4, r2 - ; byrRegs +[r4] - mov r2, r0 - ;; size=22 bbWeight=1 PerfScore 8.00 -G_M59789_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz - mov r1, r5 - ; gcrRegs +[r1] - cmp r1, 0 - beq SHORT G_M59789_IG05 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M59789_IG03: ; bbWeight=0.50, gcrefRegs=0022 {r1 r5}, byrefRegs=0010 {r4}, byref, isz - ldr r0, [r1] - cmp r0, r2 - beq SHORT G_M59789_IG05 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M59789_IG04: ; bbWeight=0.25, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref - ; gcrRegs -[r1] - movs r1, 0 - ;; size=2 bbWeight=0.25 PerfScore 0.25 -G_M59789_IG05: ; bbWeight=1, gcrefRegs=0022 {r1 r5}, byrefRegs=0010 {r4}, byref, isz - ; gcrRegs +[r1]
+ str r0, [r11-0x14] + mov r4, r0 + mov r6, r1 + ; gcrRegs +[r6] + mov r5, r2 + ; byrRegs +[r5] + ;; size=24 bbWeight=1 PerfScore 9.00 +G_M59789_IG02: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
mov r0, r4
+ mov r1, r6 + ; gcrRegs +[r1] + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[r1] +[r0] + str r0, [sp] + ldr r1, [sp] + ; gcrRegs +[r1] + mov r0, r5 + ; gcrRegs -[r0]
; byrRegs +[r0] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[r1] ; byrRegs -[r0]
- ldr r0, [r4]
+ ldr r0, [r5]
; gcrRegs +[r0] cmp r0, 0
- beq SHORT G_M59789_IG07
+ beq SHORT G_M59789_IG04
movs r0, 1 ; gcrRegs -[r0]
- ;; size=20 bbWeight=1 PerfScore 8.00 -G_M59789_IG06: ; bbWeight=1, epilog, nogc, extend - pop {r2,r3,r4,r5,r11,pc} - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M59789_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, gcvars, byref, isz - ldr r0, [r2+0x24]
+ ;; size=38 bbWeight=1 PerfScore 15.00 +G_M59789_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r11,pc} + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M59789_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, gcvars, byref, isz + ldr r0, [r4+0x24]
ldr r0, [r0] ldr r0, [r0+0x28] cmp r0, 0
- beq SHORT G_M59789_IG08 - b SHORT G_M59789_IG09
+ beq SHORT G_M59789_IG05 + b SHORT G_M59789_IG06
;; size=12 bbWeight=0 PerfScore 0.00
-G_M59789_IG08: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref - mov r0, r2
+G_M59789_IG05: ; bbWeight=0, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref + mov r0, r4
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M59789_IG09: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz - mov r1, r5
+G_M59789_IG06: ; bbWeight=0, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz + mov r1, r6
; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_ISINSTANCEOFCLASS
- ; gcrRegs -[r1 r5] +[r0]
+ ; gcrRegs -[r1 r6] +[r0]
cmp r0, 0
- beq SHORT G_M59789_IG11
+ beq SHORT G_M59789_IG08
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -100,27 +96,29 @@ G_M59789_IG09: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, by str r0, [sp] ldr r1, [sp] ; gcrRegs +[r1]
- mov r0, r4
+ mov r0, r5
; gcrRegs -[r0] ; byrRegs +[r0] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[r1]
- ; byrRegs -[r0 r4]
+ ; byrRegs -[r0 r5]
movs r0, 1 ;; size=46 bbWeight=0 PerfScore 0.00
-G_M59789_IG10: ; bbWeight=0, epilog, nogc, extend - pop {r2,r3,r4,r5,r11,pc} - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M59789_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M59789_IG07: ; bbWeight=0, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r11,pc} + ;; size=6 bbWeight=0 PerfScore 0.00 +G_M59789_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 0 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M59789_IG12: ; bbWeight=0, epilog, nogc, extend - pop {r2,r3,r4,r5,r11,pc} - ;; size=4 bbWeight=0 PerfScore 0.00
+G_M59789_IG09: ; bbWeight=0, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r11,pc} + ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 148, prolog size 16, PerfScore 21.75, instruction count 56, allocated bytes for code 148 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
+; Total bytes of code 160, prolog size 18, PerfScore 26.00, instruction count 60, allocated bytes for code 160 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -132,7 +130,7 @@ 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) @@ -148,7 +146,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32 - FF end
+ 03 add sp, sp, #12 ; opsize 16 + A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
FF end

+26 (+14.77%) : 489540.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -14,85 +14,102 @@ ; V02 tmp1 [V02,T07] ( 3, 2 ) ref -> r0 "guarded devirt return temp" ;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> ; V04 tmp3 [V04,T06] ( 4, 2 ) ubyte -> r3 "Inline return value spill temp"
-;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T11] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T08] ( 3, 2 ) int -> r7 -; V09 tmp8 [V09,T09] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V12 tmp11 [V12,T01] ( 2, 4 ) byref -> r7 single-def "Inlining Arg" -;* V13 tmp12 [V13,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V14 tmp13 [V14,T12] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V15 tmp14 [V15 ] ( 0, 0 ) int -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V16 tmp15 [V16,T04] ( 3, 3 ) int -> r7 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 cse0 [V17,T02] ( 3, 3 ) int -> r5 "CSE - aggressive" -; V18 cse1 [V18,T05] ( 3, 3 ) int -> r0 "CSE - aggressive" -; V19 cse2 [V19,T03] ( 3, 3 ) int -> r6 "CSE - aggressive"
+; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T08] ( 3, 2 ) int -> r6 +; V08 tmp7 [V08,T09] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V11 tmp10 [V11,T03] ( 2, 4 ) byref -> r6 single-def "Inlining Arg" +;* V12 tmp11 [V12,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V13 tmp12 [V13 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V14 tmp13 [V14,T04] ( 3, 3 ) int -> r6 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 cse0 [V15,T05] ( 3, 3 ) int -> r0 "CSE - aggressive" +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> r5 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr}
+ push {r3,r4,r5,r6,r11,lr}
add r11, sp, 16 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r5, [r4] - movw r6, 0xd1ff - movt r6, 0xd1ff - cmp r5, r6 - bne SHORT G_M8853_IG14 - ldr r7, [r4+0x0C] - ands r0, r7, 2
+ ldrsb r0, [r4] + mov r5, r4 + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M8853_IG05 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ldr r0, [r5] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + beq SHORT G_M8853_IG05 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ; gcrRegs -[r5] + movs r5, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M8853_IG16 + ldr r6, [r5+0x0C] + ands r0, r6, 2
cmp r0, 0
- bne SHORT G_M8853_IG13
+ bne SHORT G_M8853_IG15
cmp r0, 0
- beq SHORT G_M8853_IG03
+ beq SHORT G_M8853_IG06
movs r0, 0
- b SHORT G_M8853_IG04 - ;; size=32 bbWeight=1 PerfScore 13.00 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ b SHORT G_M8853_IG07 + ;; size=22 bbWeight=1 PerfScore 10.00 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG07: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ldr r0, [r7]
+ ldr r0, [r6]
and r0, r0, 0xf0000 cmp r0, 0xc0000
- beq SHORT G_M8853_IG05 - movs r7, 0 - b SHORT G_M8853_IG06
+ beq SHORT G_M8853_IG08 + movs r6, 0 + b SHORT G_M8853_IG09
;; size=28 bbWeight=1 PerfScore 10.00
-G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - movs r7, 1
+G_M8853_IG08: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + movs r6, 1
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - uxtb r3, r7
+G_M8853_IG09: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + uxtb r3, r6
cmp r3, 0
- bne SHORT G_M8853_IG17
+ bne SHORT G_M8853_IG19
;; size=6 bbWeight=1 PerfScore 3.00
-G_M8853_IG07: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG10: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
movw r0, 0xd1ff movt r0, 0xd1ff cmp r4, r0
- bne SHORT G_M8853_IG10
+ bne SHORT G_M8853_IG13
;; size=12 bbWeight=1 PerfScore 4.00
-G_M8853_IG08: ; bbWeight=0.94, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG11: ; bbWeight=0.94, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r4] movs r0, 0 ;; size=2 bbWeight=0.94 PerfScore 0.94
-G_M8853_IG09: ; bbWeight=0.94, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG12: ; bbWeight=0.94, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0.94 PerfScore 0.94
-G_M8853_IG10: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG13: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4]
- cmp r5, r6 - bne SHORT G_M8853_IG12
+ ldr r0, [r4] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M8853_IG21
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -100,27 +117,17 @@ G_M8853_IG10: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=18 bbWeight=1 PerfScore 7.00 -G_M8853_IG11: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - pop {r4,r5,r6,r7,r11,pc}
+ ;; size=28 bbWeight=1 PerfScore 10.00 +G_M8853_IG14: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M8853_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[r0] +[r4] - mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r4] - ldr r3, [r3+0x58] - ldr r3, [r3+0x10] - blx r3 // <unknown method> - ; gcrRegs -[r4] - b SHORT G_M8853_IG11 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - movs r7, 0 - b SHORT G_M8853_IG06
+G_M8853_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r4-r5] + movs r6, 0 + b SHORT G_M8853_IG09
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -130,27 +137,38 @@ G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ; gcrRegs -[r0] and r0, r0, 32 cmp r0, 32
- beq SHORT G_M8853_IG15
+ beq SHORT G_M8853_IG17
movs r3, 0
- b SHORT G_M8853_IG16
+ b SHORT G_M8853_IG18
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M8853_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movs r3, 1 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M8853_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG18: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
cmp r3, 0
- beq SHORT G_M8853_IG07
+ beq SHORT G_M8853_IG10
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG17: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG19: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r4] movw r0, 0xd1ff movt r0, 0xd1ff ;; size=8 bbWeight=0 PerfScore 0.00
-G_M8853_IG18: ; bbWeight=0, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG20: ; bbWeight=0, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
+G_M8853_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r4] + mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4] + ldr r3, [r3+0x58] + ldr r3, [r3+0x10] + blx r3 // <unknown method> + ; gcrRegs -[r4] + b SHORT G_M8853_IG14 + ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 176, prolog size 8, PerfScore 44.89, instruction count 69, allocated bytes for code 176 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 202, prolog size 8, PerfScore 51.64, instruction count 79, allocated bytes for code 202 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -162,7 +180,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 88 (0x00058) Actual length = 176 (0x0000b0)
+ Function Length : 101 (0x00065) Actual length = 202 (0x0000ca)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -178,7 +196,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ A8 78 pop {r3,r4,r5,r6,r11,lr} ; opsize 32
...

+26 (+14.77%) : 523448.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -11,88 +11,100 @@ ; ; V00 arg0 [V00,T00] ( 11, 7 ) ref -> r4 class-hnd single-def <System.Type> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T07] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
+; V02 tmp1 [V02,T06] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V04 tmp3 [V04,T06] ( 4, 2 ) ubyte -> r3 "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T10] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T08] ( 3, 2 ) int -> r7 -; V09 tmp8 [V09,T09] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V12 tmp11 [V12,T01] ( 2, 4 ) byref -> r7 single-def "Inlining Arg" -;* V13 tmp12 [V13,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V14 tmp13 [V14,T12] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V15 tmp14 [V15 ] ( 0, 0 ) int -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V16 tmp15 [V16,T04] ( 3, 3 ) int -> r7 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 cse0 [V17,T02] ( 3, 3 ) int -> r5 "CSE - aggressive" -; V18 cse1 [V18,T05] ( 3, 3 ) int -> r0 "CSE - aggressive" -; V19 cse2 [V19,T03] ( 3, 3 ) int -> r6 "CSE - aggressive"
+; V04 tmp3 [V04,T07] ( 3, 2 ) ubyte -> r3 "Inline return value spill temp" +; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T08] ( 3, 2 ) int -> r6 +; V08 tmp7 [V08,T09] ( 2, 2 ) ubyte -> r3 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V11 tmp10 [V11,T03] ( 2, 4 ) byref -> r6 single-def "Inlining Arg" +;* V12 tmp11 [V12,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V13 tmp12 [V13 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V14 tmp13 [V14,T04] ( 3, 3 ) int -> r6 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 cse0 [V15,T05] ( 3, 3 ) int -> r0 "CSE - aggressive" +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> r5 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr}
+ push {r3,r4,r5,r6,r11,lr}
add r11, sp, 16 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r5, [r4] - movw r6, 0xd1ff - movt r6, 0xd1ff - cmp r5, r6
+ ldrsb r0, [r4] + mov r5, r4 + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M8853_IG04 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ldr r0, [r5] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3
bne SHORT G_M8853_IG14
- ldr r7, [r4+0x0C] - ands r0, r7, 2
+ ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M8853_IG04: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + cmp r5, 0 + beq SHORT G_M8853_IG16 + ldr r6, [r5+0x0C] + ands r0, r6, 2
cmp r0, 0
- bne SHORT G_M8853_IG13
+ bne SHORT G_M8853_IG15
cmp r0, 0
- beq SHORT G_M8853_IG03
+ beq SHORT G_M8853_IG05
movs r0, 0
- b SHORT G_M8853_IG04 - ;; size=32 bbWeight=1 PerfScore 13.00 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ b SHORT G_M8853_IG06 + ;; size=22 bbWeight=1 PerfScore 10.00 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ldr r0, [r7]
+ ldr r0, [r6]
and r0, r0, 0xf0000 cmp r0, 0xc0000
- beq SHORT G_M8853_IG05 - movs r7, 0 - b SHORT G_M8853_IG06
+ beq SHORT G_M8853_IG07 + movs r6, 0 + b SHORT G_M8853_IG08
;; size=28 bbWeight=1 PerfScore 10.00
-G_M8853_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - movs r7, 1
+G_M8853_IG07: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + movs r6, 1
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8853_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - uxtb r3, r7
+G_M8853_IG08: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + uxtb r3, r6 + ;; size=2 bbWeight=1 PerfScore 1.00 +G_M8853_IG09: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
cmp r3, 0
- bne SHORT G_M8853_IG17 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M8853_IG07: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ bne SHORT G_M8853_IG20
movw r0, 0xd1ff movt r0, 0xd1ff cmp r4, r0
- bne SHORT G_M8853_IG10 - ;; size=12 bbWeight=1 PerfScore 4.00 -G_M8853_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ bne SHORT G_M8853_IG12 + ;; size=16 bbWeight=1 PerfScore 6.00 +G_M8853_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r4] movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M8853_IG09: ; bbWeight=0.50, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG11: ; bbWeight=0.50, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M8853_IG10: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG12: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4]
- cmp r5, r6 - bne SHORT G_M8853_IG12
+ ldr r0, [r4] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M8853_IG19
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -100,27 +112,22 @@ G_M8853_IG10: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=18 bbWeight=1 PerfScore 7.00 -G_M8853_IG11: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - pop {r4,r5,r6,r7,r11,pc}
+ ;; size=28 bbWeight=1 PerfScore 10.00 +G_M8853_IG13: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M8853_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG14: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] +[r4]
- mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r4] - ldr r3, [r3+0x58] - ldr r3, [r3+0x10] - blx r3 // <unknown method> - ; gcrRegs -[r4] - b SHORT G_M8853_IG11 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - movs r7, 0 - b SHORT G_M8853_IG06
+ movs r5, 0 + b SHORT G_M8853_IG04 + ;; size=4 bbWeight=0.25 PerfScore 0.50 +G_M8853_IG15: ; bbWeight=0, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r5] + movs r6, 0 + b SHORT G_M8853_IG08
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -130,27 +137,36 @@ G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ; gcrRegs -[r0] and r0, r0, 32 cmp r0, 32
- beq SHORT G_M8853_IG15
+ beq SHORT G_M8853_IG17
movs r3, 0
- b SHORT G_M8853_IG16
+ b SHORT G_M8853_IG18
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M8853_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movs r3, 1 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M8853_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - cmp r3, 0 - beq SHORT G_M8853_IG07 - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M8853_IG17: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG18: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + b SHORT G_M8853_IG09 + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M8853_IG19: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4] + ldr r3, [r3+0x58] + ldr r3, [r3+0x10] + blx r3 // <unknown method>
; gcrRegs -[r4]
+ b SHORT G_M8853_IG13 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M8853_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0]
movw r0, 0xd1ff movt r0, 0xd1ff ;; size=8 bbWeight=0 PerfScore 0.00
-G_M8853_IG18: ; bbWeight=0, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG21: ; bbWeight=0, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 176, prolog size 8, PerfScore 44.00, instruction count 69, allocated bytes for code 176 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 202, prolog size 8, PerfScore 51.00, instruction count 79, allocated bytes for code 202 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -162,7 +178,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 88 (0x00058) Actual length = 176 (0x0000b0)
+ Function Length : 101 (0x00065) Actual length = 202 (0x0000ca)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -178,7 +194,7 @@ Unwind Info: ...

librariestestsnotieredcompilation.run.linux.arm.Release.mch

-28 (-51.85%) : 133529.dasm - System.Linq.ParallelQuery1+<>c__21[System.Canon,System.Canon]:b2_1(System.Canon):System.__Canon:this (FullOpts)

@@ -2,57 +2,40 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> r4 this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r1 class-hnd single-def <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r4 this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.__Canon>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M53670_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M53670_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M53670_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M53670_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2+0x04] - cmp r3, r2 - beq SHORT G_M53670_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M53670_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M53670_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1] + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0+0x04]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M53670_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=18 bbWeight=1 PerfScore 7.00 +G_M53670_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 54, prolog size 14, PerfScore 12.25, instruction count 21, allocated bytes for code 54 (MethodHash=8f1c2e59) for method System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 26, prolog size 4, PerfScore 11.00, instruction count 11, allocated bytes for code 26 (MethodHash=8f1c2e59) for method System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -64,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
+ Function Length : 13 (0x0000d) Actual length = 26 (0x00001a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-51.85%) : 87886.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c11[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary2[System.String,System.Object]):System.Canon:this (FullOpts)

@@ -2,57 +2,40 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> r4 this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r4 this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M31417_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M31417_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M31417_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M31417_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M31417_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M31417_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M31417_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1] + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M31417_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=18 bbWeight=1 PerfScore 7.00 +G_M31417_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 54, prolog size 14, PerfScore 12.25, instruction count 21, allocated bytes for code 54 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
+; Total bytes of code 26, prolog size 4, PerfScore 11.00, instruction count 11, allocated bytes for code 26 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -64,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
+ Function Length : 13 (0x0000d) Actual length = 26 (0x00001a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-50.00%) : 42650.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.Canon]:get_DefaultValue():System.Canon:this (FullOpts)

@@ -2,61 +2,43 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> r4 this class-hnd single-def <Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]>
+; V00 this [V00,T00] ( 4, 4 ) ref -> r4 this class-hnd single-def <Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]>
;* V01 loc0 [V01 ] ( 0, 0 ) struct (24) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Options.OptionDefinition> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T02] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon> -;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref "V01.[012..016)"
+;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref "V01.[012..016)"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M65085_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M65085_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M65085_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
ldr r1, [r4+0x10] ; gcrRegs +[r1]
- mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M65085_IG05 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M65085_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M65085_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M65085_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M65085_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=20 bbWeight=1 PerfScore 8.00 +G_M65085_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 56, prolog size 14, PerfScore 13.25, instruction count 22, allocated bytes for code 56 (MethodHash=d91901c2) for method Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
+; Total bytes of code 28, prolog size 4, PerfScore 12.00, instruction count 12, allocated bytes for code 28 (MethodHash=d91901c2) for method Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -68,11 +50,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 28 (0x0001c) Actual length = 56 (0x000038)
+ Function Length : 14 (0x0000e) Actual length = 28 (0x00001c)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+26 (+43.33%) : 94737.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:b_160():this (FullOpts)

@@ -8,24 +8,23 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> r4 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest> -;* V01 loc0 [V01,T04] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
+; V00 this [V00,T00] ( 5, 5 ) ref -> r4 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest> +;* V01 loc0 [V01,T05] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V06 tmp4 [V06,T06] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07,T05] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping>
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> r4 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V06 tmp4 [V06,T04] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect"
; ; Lcl frame size = 4
-G_M51850_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51850_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r3,r4,r11,lr} add r11, sp, 8 mov r4, r0 ; gcrRegs +[r4]
- ;; size=10 bbWeight=0 PerfScore 0.00 -G_M51850_IG02: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=10 bbWeight=1 PerfScore 3.00 +G_M51850_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
ldr r0, [r4+0x04] ; gcrRegs +[r0] ldr r1, [r4+0x08] @@ -37,37 +36,52 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r0-r1]
- ldr r0, [r4+0x04] - ; gcrRegs +[r0] - ldrsb r0, [r0] - ; gcrRegs -[r0]
+ ldr r4, [r4+0x04] + ldrsb r0, [r4]
movw r0, 0xd1ff movt r0, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)
- ; gcrRegs -[r4] - bkpt - ;; size=50 bbWeight=0 PerfScore 0.00
+ movw r1, 0xd1ff + movt r1, 0xd1ff + mov r0, r4 + ; gcrRegs +[r0] + movw r3, 0xd1ff + movt r3, 0xd1ff + ldr r3, [r3] + ;; size=68 bbWeight=1 PerfScore 22.00 +G_M51850_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 4 + pop {r4,r11,lr} + bx r3 // System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 60, prolog size 8, PerfScore 0.00, instruction count 20, allocated bytes for code 60 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
+; Total bytes of code 86, prolog size 8, PerfScore 28.00, instruction count 28, allocated bytes for code 86 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0 E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 60 (0x00003c)
+ Function Length : 43 (0x0002b) Actual length = 86 (0x000056)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ---- A8 18 pop {r3,r4,r11,lr} ; opsize 32 FF end
+ ---- Epilog start at index 3 ---- + 01 add sp, sp, #4 ; opsize 16 + A8 10 pop {r4,r11,lr} ; opsize 32 + FF end
FF end

+26 (+43.33%) : 91476.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:b_220():this (FullOpts)

@@ -8,24 +8,23 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> r4 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest> -;* V01 loc0 [V01,T04] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
+; V00 this [V00,T00] ( 5, 5 ) ref -> r4 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest> +;* V01 loc0 [V01,T05] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -;* V06 tmp4 [V06,T06] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07,T05] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataColumnMapping>
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> r4 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +;* V06 tmp4 [V06,T04] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect"
; ; Lcl frame size = 4
-G_M18245_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M18245_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r3,r4,r11,lr} add r11, sp, 8 mov r4, r0 ; gcrRegs +[r4]
- ;; size=10 bbWeight=0 PerfScore 0.00 -G_M18245_IG02: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=10 bbWeight=1 PerfScore 3.00 +G_M18245_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
ldr r0, [r4+0x04] ; gcrRegs +[r0] ldr r1, [r4+0x08] @@ -37,37 +36,52 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r0-r1]
- ldr r0, [r4+0x04] - ; gcrRegs +[r0] - ldrsb r0, [r0] - ; gcrRegs -[r0]
+ ldr r4, [r4+0x04] + ldrsb r0, [r4]
movw r0, 0xd1ff movt r0, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Data.Common.DataColumnMappingCollection:ValidateType(System.Object)
- ; gcrRegs -[r4] - bkpt - ;; size=50 bbWeight=0 PerfScore 0.00
+ movw r1, 0xd1ff + movt r1, 0xd1ff + mov r0, r4 + ; gcrRegs +[r0] + movw r3, 0xd1ff + movt r3, 0xd1ff + ldr r3, [r3] + ;; size=68 bbWeight=1 PerfScore 22.00 +G_M18245_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 4 + pop {r4,r11,lr} + bx r3 // System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 60, prolog size 8, PerfScore 0.00, instruction count 20, allocated bytes for code 60 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
+; Total bytes of code 86, prolog size 8, PerfScore 28.00, instruction count 28, allocated bytes for code 86 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0 E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 60 (0x00003c)
+ Function Length : 43 (0x0002b) Actual length = 86 (0x000056)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ---- A8 18 pop {r3,r4,r11,lr} ; opsize 32 FF end
+ ---- Epilog start at index 3 ---- + 01 add sp, sp, #4 ; opsize 16 + A8 10 pop {r4,r11,lr} ; opsize 32 + FF end
FF end

+30 (+88.24%) : 94851.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>cDisplayClass7_0:b2():this (FullOpts)

@@ -8,23 +8,22 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 3, 2 ) ref -> r0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
+; V00 this [V00,T01] ( 3, 3 ) ref -> r0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T01] ( 2, 0 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V03 tmp2 [V03,T02] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V04 tmp3 [V04,T04] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05,T03] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping>
+; V02 tmp1 [V02,T00] ( 3, 6 ) ref -> r4 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V03 tmp2 [V03,T02] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect"
;
-; Lcl frame size = 0
+; Lcl frame size = 4
-G_M51219_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG - push {r11,lr} - mov r11, sp - ;; size=6 bbWeight=0 PerfScore 0.00 -G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref
+G_M51219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG + push {r3,r4,r11,lr} + add r11, sp, 8 + ;; size=8 bbWeight=1 PerfScore 2.00 +G_M51219_IG02: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref
; gcrRegs +[r0]
- ldr r0, [r0+0x04] - ldrsb r0, [r0]
+ ldr r4, [r0+0x04] + ; gcrRegs +[r4] + ldrsb r0, [r4]
; gcrRegs -[r0] movw r0, 0xd1ff movt r0, 0xd1ff @@ -32,26 +31,45 @@ G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byre movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)
- bkpt - ;; size=28 bbWeight=0 PerfScore 0.00
+ movw r2, 0xd1ff + movt r2, 0xd1ff + mov r0, r4 + ; gcrRegs +[r0] + movs r1, 0 + movw r3, 0xd1ff + movt r3, 0xd1ff + ldr r3, [r3] + ;; size=48 bbWeight=1 PerfScore 15.00 +G_M51219_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 4 + pop {r4,r11,lr} + bx r3 // System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 34, prolog size 6, PerfScore 0.00, instruction count 11, allocated bytes for code 34 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
+; Total bytes of code 64, prolog size 8, PerfScore 20.00, instruction count 20, allocated bytes for code 64 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0 E bit : 0 X bit : 0 Vers : 0
- Function Length : 17 (0x00011) Actual length = 34 (0x000022)
+ Function Length : 32 (0x00020) Actual length = 64 (0x000040)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ----
- A8 00 pop {r11,lr} ; opsize 32
+ A8 18 pop {r3,r4,r11,lr} ; opsize 32 + FF end + ---- Epilog start at index 3 ---- + 01 add sp, sp, #4 ; opsize 16 + A8 10 pop {r4,r11,lr} ; opsize 32
FF end FF end

realworld.run.linux.arm.checked.mch

-28 (-51.85%) : 37676.dasm - System.Management.Automation.PSTypeExtensions+<>c7`1[System.Canon]:b7_1(System.Object):System.Canon:this (FullOpts)

@@ -2,57 +2,40 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> r4 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r4 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M56342_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M56342_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M56342_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M56342_IG03: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4] - ldr r2, [r2+0x24] - ldr r2, [r2] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M56342_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M56342_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M56342_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs +[r1] + ldr r0, [r4] + ldr r0, [r0+0x24] + ldr r0, [r0] + ldr r0, [r0]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M56342_IG05: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=18 bbWeight=1 PerfScore 7.00 +G_M56342_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 54, prolog size 14, PerfScore 12.25, instruction count 21, allocated bytes for code 54 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 26, prolog size 4, PerfScore 11.00, instruction count 11, allocated bytes for code 26 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -64,11 +47,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
+ Function Length : 13 (0x0000d) Actual length = 26 (0x00001a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-32 (-41.03%) : 436.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -2,64 +2,50 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> r1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) int -> r4 "CSE - aggressive"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C] - mov r4, r0 - ;; size=16 bbWeight=1 PerfScore 5.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r0, [r0]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04] + ;; size=4 bbWeight=1 PerfScore 2.00 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr r4, [r0+0x20] + ldr r0, [r4]
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[r0]
+ ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
+ ; gcr arg pop 0
mov r1, r0 ; gcrRegs +[r1]
- mov r0, r1 - cmp r0, 0 - beq SHORT G_M13946_IG05 - ;; size=34 bbWeight=1 PerfScore 13.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - ldr r2, [r4+0x20] - ldr r2, [r2] - cmp r3, r2 - beq SHORT G_M13946_IG05 - ;; size=10 bbWeight=0.25 PerfScore 1.25 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+ ldr r0, [r4]
; gcrRegs -[r0]
- mov r0, r2
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=40 bbWeight=1 PerfScore 14.00 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 78, prolog size 14, PerfScore 21.75, instruction count 29, allocated bytes for code 78 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 46, prolog size 4, PerfScore 17.00, instruction count 17, allocated bytes for code 46 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -71,11 +57,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 39 (0x00027) Actual length = 78 (0x00004e)
+ Function Length : 23 (0x00017) Actual length = 46 (0x00002e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-24 (-31.58%) : 976.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.Canon]:Freeze():System.Canon:this (FullOpts)

@@ -2,28 +2,23 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 8, 6.62) ref -> r4 this class-hnd single-def <BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 6.50) ref -> r4 this class-hnd single-def <BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T02] ( 3, 4.25) int -> r0 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T01] ( 3, 6 ) ref -> r0 class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M18858_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r0 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M18858_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz mov r0, r4 ; gcrRegs +[r0] @@ -32,6 +27,7 @@ G_M18858_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // BenchmarkDotNet.Characteristics.CharacteristicObject:AssertIsRoot():this ; gcrRegs -[r0]
+ ; gcr arg pop 0
ldrb r0, [r4+0x0C] cmp r0, 0 bne SHORT G_M18858_IG04 @@ -40,37 +36,24 @@ G_M18858_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b movs r0, 1 strb r0, [r4+0x0C] ;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M18858_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r4 - ; gcrRegs +[r0] - ldr r1, [r0] - ldr r0, [r0] - ; gcrRegs -[r0]
+G_M18858_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ldr r0, [r4]
ldr r0, [r0+0x24] ldr r0, [r0] ldr r0, [r0]
- cmp r1, r0 - beq SHORT G_M18858_IG06 - ;; size=16 bbWeight=1 PerfScore 8.00 -G_M18858_IG05: ; bbWeight=0.12, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50 -G_M18858_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r4 - ; gcrRegs +[r0]
+ ; gcr arg pop 0 + ;; size=20 bbWeight=1 PerfScore 8.00 +G_M18858_IG05: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc}
;; size=2 bbWeight=1 PerfScore 1.00
-G_M18858_IG07: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 76, prolog size 14, PerfScore 25.50, instruction count 30, allocated bytes for code 76 (MethodHash=830fb655) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
+; Total bytes of code 52, prolog size 4, PerfScore 21.00, instruction count 22, allocated bytes for code 52 (MethodHash=830fb655) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -82,11 +65,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 76 (0x00004c)
+ Function Length : 26 (0x0001a) Actual length = 52 (0x000034)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+0 (0.00%) : 9716.dasm - FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo:MangledNameForType(System.String):System.String:this (FullOpts)

@@ -8,36 +8,33 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 4 ) ref -> r4 this class-hnd single-def <FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo> -; V01 arg1 [V01,T01] ( 5, 3.50) ref -> r5 class-hnd single-def <System.String>
+; V00 this [V00,T01] ( 4, 3.50) ref -> r5 this class-hnd single-def <FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo> +; V01 arg1 [V01,T00] ( 5, 3.50) ref -> r4 class-hnd single-def <System.String>
; V02 loc0 [V02 ] ( 2, 1 ) struct ( 8) [sp+0x08] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.FSharp.Core.FSharpValueOption`1[int]> ;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref <Microsoft.FSharp.Core.FSharpValueOption`1[int]> ;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref single-def ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T09] ( 2, 1 ) int -> r0
+; V06 tmp1 [V06,T06] ( 2, 1 ) int -> r0
; V07 tmp2 [V07,T02] ( 4, 4 ) ref -> r0 class-hnd exact single-def "Single-def Box Helper" <Microsoft.FSharp.Core.FSharpValueOption`1[int]> ;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref single-def
-;* V09 tmp4 [V09,T11] ( 0, 0 ) ref -> zero-ref single-def
+;* V09 tmp4 [V09,T08] ( 0, 0 ) ref -> zero-ref single-def
;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref ;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref
-; V12 tmp7 [V12,T10] ( 2, 1 ) int -> r3
+; V12 tmp7 [V12,T07] ( 2, 1 ) int -> r3
; V13 tmp8 [V13 ] ( 2, 2 ) struct ( 4) [sp+0x04] do-not-enreg[XS] addr-exposed ld-addr-op class-hnd exact "Single-def Box Helper" <System.Int32> ;* V14 tmp9 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp10 [V15 ] ( 0, 0 ) ref -> zero-ref single-def
-;* V16 tmp11 [V16,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V17 tmp12 [V17,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V18 tmp13 [V18,T08] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V19 tmp14 [V19,T04] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V20 tmp15 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpValueOption`1[int]> -; V21 tmp16 [V21 ] ( 2, 1 ) int -> [sp+0x08] do-not-enreg[X] addr-exposed "field V02.item (fldOffset=0x0)" P-DEP -; V22 tmp17 [V22 ] ( 2, 1 ) int -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V02._tag (fldOffset=0x4)" P-DEP -;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref single-def "field V03.item (fldOffset=0x0)" P-INDEP -;* V24 tmp19 [V24 ] ( 0, 0 ) int -> zero-ref single-def "field V03._tag (fldOffset=0x4)" P-INDEP -; V25 tmp20 [V25 ] ( 2, 1.50) int -> [sp+0x04] do-not-enreg[X] addr-exposed "field V13.m_value (fldOffset=0x0)" P-DEP -;* V26 tmp21 [V26,T12] ( 0, 0 ) int -> zero-ref single-def "field V20.item (fldOffset=0x0)" P-INDEP -;* V27 tmp22 [V27,T13] ( 0, 0 ) int -> zero-ref single-def "field V20._tag (fldOffset=0x4)" P-INDEP -; V28 tmp23 [V28,T05] ( 2, 2 ) ref -> r2 single-def "argument with side effect" -; V29 tmp24 [V29,T06] ( 2, 2 ) ref -> r2 single-def "argument with side effect"
+;* V16 tmp11 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpValueOption`1[int]> +; V17 tmp12 [V17 ] ( 2, 1 ) int -> [sp+0x08] do-not-enreg[X] addr-exposed "field V02.item (fldOffset=0x0)" P-DEP +; V18 tmp13 [V18 ] ( 2, 1 ) int -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V02._tag (fldOffset=0x4)" P-DEP +;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref single-def "field V03.item (fldOffset=0x0)" P-INDEP +;* V20 tmp15 [V20 ] ( 0, 0 ) int -> zero-ref single-def "field V03._tag (fldOffset=0x4)" P-INDEP +; V21 tmp16 [V21 ] ( 2, 1.50) int -> [sp+0x04] do-not-enreg[X] addr-exposed "field V13.m_value (fldOffset=0x0)" P-DEP +;* V22 tmp17 [V22,T09] ( 0, 0 ) int -> zero-ref single-def "field V16.item (fldOffset=0x0)" P-INDEP +;* V23 tmp18 [V23,T10] ( 0, 0 ) int -> zero-ref single-def "field V16._tag (fldOffset=0x4)" P-INDEP +; V24 tmp19 [V24,T03] ( 2, 2 ) ref -> r2 single-def "argument with side effect" +; V25 tmp20 [V25,T04] ( 2, 2 ) ref -> r2 single-def "argument with side effect" +; V26 cse0 [V26,T05] ( 3, 1.50) ref -> r5 "CSE - moderate"
; ; Lcl frame size = 16 @@ -48,13 +45,13 @@ G_M40596_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref movs r2, 0 str r2, [sp+0x08] // [V02 loc0] str r2, [sp+0x0C] // [V02 loc0+0x04]
- mov r4, r0 - ; gcrRegs +[r4] - mov r5, r1
+ mov r5, r0
; gcrRegs +[r5]
+ mov r4, r1 + ; gcrRegs +[r4]
;; size=20 bbWeight=1 PerfScore 8.00 G_M40596_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- mov r1, r4
+ mov r1, r5
; gcrRegs +[r1] movw r0, 0xd1ff movt r0, 0xd1ff @@ -67,11 +64,11 @@ G_M40596_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b ;; size=24 bbWeight=1 PerfScore 8.00 G_M40596_IG03: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0]
- ldr r0, [r4+0x04]
+ ldr r0, [r5+0x04]
cmp r0, 0 beq SHORT G_M40596_IG05 add r0, sp, 8
- mov r1, r5
+ mov r1, r4
; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff @@ -105,9 +102,9 @@ G_M40596_IG04: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 cmp r0, 0 bne SHORT G_M40596_IG07 ;; size=32 bbWeight=0.50 PerfScore 6.00
-G_M40596_IG05: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r4] - mov r0, r5
+G_M40596_IG05: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ; gcrRegs -[r5] + mov r0, r4
; gcrRegs +[r0] ;; size=2 bbWeight=0.50 PerfScore 0.50 G_M40596_IG06: ; bbWeight=0.50, epilog, nogc, extend @@ -115,14 +112,14 @@ G_M40596_IG06: ; bbWeight=0.50, epilog, nogc, extend pop {r4,r5,r11,pc} ;; size=6 bbWeight=0.50 PerfScore 1.00 G_M40596_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
- ; gcrRegs -[r0] +[r4] - ldr r3, [r4+0x04] - str r3, [sp+0x04] // [V25 tmp20]
+ ; gcrRegs -[r0] +[r5] + ldr r3, [r5+0x04] + str r3, [sp+0x04] // [V21 tmp16]
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ; gcrRegs -[r4] +[r0]
+ ; gcrRegs -[r5] +[r0]
mov r2, r0 ; gcrRegs +[r2] add r0, sp, 4 // [V13 tmp8] @@ -137,12 +134,12 @@ G_M40596_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5 ; gcrRegs +[r2] movw r1, 0xd1ff movt r1, 0xd1ff
- mov r0, r5
+ mov r0, r4
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ; gcrRegs -[r2 r5]
+ ; gcrRegs -[r2 r4]
;; size=58 bbWeight=0.50 PerfScore 10.50 G_M40596_IG08: ; bbWeight=0.50, epilog, nogc, extend add sp, 16

+2 (+0.24%) : 29892.dasm - Microsoft.CodeAnalysis.CSharp.NullableWalker:VisitAwaitableInfo(Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo):Microsoft.CodeAnalysis.CSharp.BoundNode:this (FullOpts)

@@ -5,116 +5,127 @@ ; r11 based frame ; partially interruptible ; No matching PGO data
-; 0 inlinees with PGO data; 31 single block inlinees; 20 inlinees without PGO data
+; 0 inlinees with PGO data; 34 single block inlinees; 19 inlinees without PGO data
; Final local variable assignments ;
-; V00 this [V00,T00] ( 36, 23 ) ref -> r4 this class-hnd single-def <Microsoft.CodeAnalysis.CSharp.NullableWalker> -; V01 arg1 [V01,T07] ( 4, 4 ) ref -> r5 class-hnd single-def <Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo>
+; V00 this [V00,T00] ( 32, 21 ) ref -> r4 this class-hnd single-def <Microsoft.CodeAnalysis.CSharp.NullableWalker> +; V01 arg1 [V01,T08] ( 4, 4 ) ref -> r5 class-hnd single-def <Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T01] ( 10, 12 ) ref -> r6 class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundAwaitableValuePlaceholder>
-; V04 tmp2 [V04,T18] ( 2, 2 ) ubyte -> r7 "Inline stloc first use temp"
+; V04 tmp2 [V04,T19] ( 2, 2 ) ubyte -> r7 "Inline stloc first use temp"
;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "impAppendStmt" <Microsoft.CodeAnalysis.CSharp.BoundNode>
-; V06 tmp4 [V06,T08] ( 4, 6 ) ref -> r8 class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.CSharp.NullableWalker+SnapshotManager+Builder>
+; V06 tmp4 [V06,T09] ( 4, 6 ) ref -> r8 class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.CSharp.NullableWalker+SnapshotManager+Builder>
;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
-; V08 tmp6 [V08,T16] ( 2, 2 ) ref -> [sp+0x10] class-hnd spill-single-def "impAppendStmt" <System.Collections.Generic.SortedDictionary`2[int,Microsoft.CodeAnalysis.CSharp.NullableWalker+Snapshot]>
+; V08 tmp6 [V08,T17] ( 2, 2 ) ref -> [sp+0x14] class-hnd spill-single-def "impAppendStmt" <System.Collections.Generic.SortedDictionary`2[int,Microsoft.CodeAnalysis.CSharp.NullableWalker+Snapshot]>
;* V09 tmp7 [V09 ] ( 0, 0 ) struct (24) zero-ref do-not-enreg[SF] ld-addr-op double-align "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalState>
-; V10 tmp8 [V10,T19] ( 2, 2 ) int -> r10 "impAppendStmt"
+; V10 tmp8 [V10,T20] ( 2, 2 ) int -> r10 "impAppendStmt"
;* V11 tmp9 [V11 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.NullableWalker+Snapshot> ;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" <<unknown class>> ;* V13 tmp11 [V13 ] ( 0, 0 ) int -> zero-ref ;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp13 [V15 ] ( 0, 0 ) int -> zero-ref
-; V16 tmp14 [V16,T24] ( 3, 1.50) ref -> r9
+; V16 tmp14 [V16,T25] ( 3, 1.50) ref -> r9
; V17 tmp15 [V17,T03] ( 7, 7 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalStateSnapshot> ;* V18 tmp16 [V18 ] ( 0, 0 ) struct (16) zero-ref double-align "spilled call-like call argument" <Microsoft.CodeAnalysis.BitVector> ;* V19 tmp17 [V19 ] ( 0, 0 ) struct (16) zero-ref double-align "Inline return value spill temp" <Microsoft.CodeAnalysis.BitVector>
-; V20 tmp18 [V20,T25] ( 3, 1.50) ref -> r3 class-hnd "Inline stloc first use temp" <ulong[]>
+; V20 tmp18 [V20,T26] ( 3, 1.50) ref -> r3 class-hnd "Inline stloc first use temp" <ulong[]>
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op double-align "NewObj constructor temp" <Microsoft.CodeAnalysis.BitVector> ;* V22 tmp20 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ulong[]> ;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V24 tmp22 [V24 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp"
-; V26 tmp24 [V26,T20] ( 2, 2 ) int -> r3 "Inlining Arg"
+; V26 tmp24 [V26,T21] ( 2, 2 ) int -> r3 "Inlining Arg"
;* V27 tmp25 [V27 ] ( 0, 0 ) ref -> zero-ref single-def ;* V28 tmp26 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundNode> ;* V29 tmp27 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.CSharp.BoundAwaitableValuePlaceholder> ;* V30 tmp28 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundExpression> ; V31 tmp29 [V31,T04] ( 7, 7 ) byref -> r8 single-def "Inlining Arg" ;* V32 tmp30 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <Microsoft.CodeAnalysis.CSharp.BoundExpression>
-;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V34 tmp32 [V34 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V35 tmp33 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <Microsoft.CodeAnalysis.CSharp.BoundExpression> -;* V36 tmp34 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundNode> -;* V37 tmp35 [V37 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundNode> -; V38 tmp36 [V38,T02] ( 8, 10 ) ref -> r5 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundExpression> -; V39 tmp37 [V39,T21] ( 2, 2 ) ubyte -> r6 "Inline stloc first use temp" -;* V40 tmp38 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "impAppendStmt" <Microsoft.CodeAnalysis.CSharp.BoundNode> -; V41 tmp39 [V41,T09] ( 4, 6 ) ref -> r7 class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.CSharp.NullableWalker+SnapshotManager+Builder> -;* V42 tmp40 [V42 ] ( 0, 0 ) ref -> zero-ref single-def -; V43 tmp41 [V43,T17] ( 2, 2 ) ref -> r8 class-hnd single-def "impAppendStmt" <System.Collections.Generic.SortedDictionary`2[int,Microsoft.CodeAnalysis.CSharp.NullableWalker+Snapshot]> -; V44 tmp42 [V44 ] ( 4, 4 ) struct (24) [sp+0x40] do-not-enreg[XSF] must-init addr-exposed ld-addr-op double-align "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalState> -; V45 tmp43 [V45,T22] ( 2, 2 ) int -> r9 "impAppendStmt" -;* V46 tmp44 [V46 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.NullableWalker+Snapshot> -; V47 tmp45 [V47,T10] ( 3, 3 ) ref -> r0 class-hnd exact single-def "dup spill" <<unknown class>> -; V48 tmp46 [V48,T34] ( 2, 1 ) int -> r10 -;* V49 tmp47 [V49 ] ( 0, 0 ) ref -> zero-ref single-def -;* V50 tmp48 [V50 ] ( 0, 0 ) int -> zero-ref -; V51 tmp49 [V51,T26] ( 3, 1.50) ref -> [sp+0x0C] -; V52 tmp50 [V52,T05] ( 7, 7 ) ref -> [sp+0x08] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalStateSnapshot> -; V53 tmp51 [V53 ] ( 5, 5 ) struct (16) [sp+0x30] do-not-enreg[HS] must-init hidden-struct-arg double-align "spilled call-like call argument" <Microsoft.CodeAnalysis.BitVector> -; V54 tmp52 [V54,T23] ( 2, 2 ) int -> r3 "Inlining Arg" -;* V55 tmp53 [V55 ] ( 0, 0 ) ref -> zero-ref single-def -;* V56 tmp54 [V56 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundNode> -;* V57 tmp55 [V57 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.CSharp.BoundExpression> -;* V58 tmp56 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundNode> -; V59 tmp57 [V59,T31] ( 2, 1 ) ref -> r2 single-def "field V11.VariableState (fldOffset=0x0)" P-INDEP -; V60 tmp58 [V60,T35] ( 2, 1 ) int -> r3 "field V11.SharedStateIndex (fldOffset=0x4)" P-INDEP -;* V61 tmp59 [V61 ] ( 0, 0 ) long -> zero-ref "field V18._bits0 (fldOffset=0x0)" P-INDEP -;* V62 tmp60 [V62 ] ( 0, 0 ) ref -> zero-ref single-def "field V18._bits (fldOffset=0x8)" P-INDEP -;* V63 tmp61 [V63 ] ( 0, 0 ) int -> zero-ref "field V18._capacity (fldOffset=0xc)" P-INDEP -;* V64 tmp62 [V64 ] ( 0, 0 ) long -> zero-ref "field V19._bits0 (fldOffset=0x0)" P-INDEP -;* V65 tmp63 [V65 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._bits (fldOffset=0x8)" P-INDEP -;* V66 tmp64 [V66 ] ( 0, 0 ) int -> zero-ref "field V19._capacity (fldOffset=0xc)" P-INDEP -; V67 tmp65 [V67,T28] ( 3, 1.50) long -> [sp+0x28] do-not-enreg[F] "field V21._bits0 (fldOffset=0x0)" P-INDEP -; V68 tmp66 [V68,T32] ( 2, 1 ) ref -> [sp+0x04] spill-single-def "field V21._bits (fldOffset=0x8)" P-INDEP -; V69 tmp67 [V69,T36] ( 2, 1 ) int -> [sp+0x24] spill-single-def "field V21._capacity (fldOffset=0xc)" P-INDEP -; V70 tmp68 [V70,T33] ( 2, 1 ) ref -> r2 single-def "field V46.VariableState (fldOffset=0x0)" P-INDEP -; V71 tmp69 [V71,T37] ( 2, 1 ) int -> r3 "field V46.SharedStateIndex (fldOffset=0x4)" P-INDEP -; V72 tmp70 [V72,T15] ( 3, 2 ) long -> [sp+0x30] do-not-enreg[H] hidden-struct-arg "field V53._bits0 (fldOffset=0x0)" P-DEP -; V73 tmp71 [V73,T29] ( 2, 1.50) ref -> [sp+0x38] do-not-enreg[H] hidden-struct-arg "field V53._bits (fldOffset=0x8)" P-DEP -; V74 tmp72 [V74,T30] ( 2, 1.50) int -> [sp+0x3C] do-not-enreg[H] hidden-struct-arg "field V53._capacity (fldOffset=0xc)" P-DEP -; V75 tmp73 [V75,T27] ( 3, 1.50) ref -> r9 single-def "V09.[000..004)" -; V76 tmp74 [V76,T38] ( 2, 1 ) int -> [sp+0x20] spill-single-def "V09.[004..008)" -;* V77 tmp75 [V77 ] ( 0, 0 ) long -> zero-ref "V09.[008..016)" -; V78 tmp76 [V78,T14] ( 4, 2 ) ref -> [sp+0x00] spill-single-def "V09.[016..020)" -; V79 tmp77 [V79,T39] ( 2, 1 ) int -> [sp+0x1C] spill-single-def "V09.[020..024)" -; V80 tmp78 [V80,T06] ( 6, 6 ) byref -> r0 single-def "Spilling address for field-by-field copy" -;* V81 rat0 [V81 ] ( 0, 0 ) int -> zero-ref "field V24.lo (fldOffset=0x0)" P-INDEP -;* V82 rat1 [V82 ] ( 0, 0 ) int -> zero-ref "field V24.hi (fldOffset=0x4)" P-INDEP -; V83 rat2 [V83,T40] ( 2, 1 ) int -> [sp+0x18] spill-single-def "field V77.lo (fldOffset=0x0)" P-INDEP -; V84 rat3 [V84,T41] ( 2, 1 ) int -> [sp+0x14] spill-single-def "field V77.hi (fldOffset=0x4)" P-INDEP -; V85 rat4 [V85,T11] ( 3, 3 ) byref -> r3 "ReplaceWithLclVar is creating a new local variable" -; V86 rat5 [V86,T12] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V87 rat6 [V87,T13] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
+;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundNode> +;* V34 tmp32 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.CSharp.BoundNode> +; V35 tmp33 [V35,T02] ( 8, 10 ) ref -> r5 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundExpression> +; V36 tmp34 [V36,T22] ( 2, 2 ) ubyte -> r6 "Inline stloc first use temp" +;* V37 tmp35 [V37 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "impAppendStmt" <Microsoft.CodeAnalysis.CSharp.BoundNode> +; V38 tmp36 [V38,T10] ( 4, 6 ) ref -> r7 class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.CSharp.NullableWalker+SnapshotManager+Builder> +;* V39 tmp37 [V39 ] ( 0, 0 ) ref -> zero-ref single-def +; V40 tmp38 [V40,T18] ( 2, 2 ) ref -> [sp+0x10] class-hnd spill-single-def "impAppendStmt" <System.Collections.Generic.SortedDictionary`2[int,Microsoft.CodeAnalysis.CSharp.NullableWalker+Snapshot]> +;* V41 tmp39 [V41 ] ( 0, 0 ) struct (24) zero-ref do-not-enreg[SF] ld-addr-op double-align "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalState> +; V42 tmp40 [V42,T23] ( 2, 2 ) int -> r9 "impAppendStmt" +;* V43 tmp41 [V43 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.NullableWalker+Snapshot> +;* V44 tmp42 [V44 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "dup spill" <<unknown class>> +;* V45 tmp43 [V45 ] ( 0, 0 ) int -> zero-ref +;* V46 tmp44 [V46 ] ( 0, 0 ) ref -> zero-ref single-def +;* V47 tmp45 [V47 ] ( 0, 0 ) int -> zero-ref +; V48 tmp46 [V48,T27] ( 3, 1.50) ref -> r8 +; V49 tmp47 [V49,T05] ( 7, 7 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.NullableWalker+LocalStateSnapshot> +;* V50 tmp48 [V50 ] ( 0, 0 ) struct (16) zero-ref double-align "spilled call-like call argument" <Microsoft.CodeAnalysis.BitVector> +;* V51 tmp49 [V51 ] ( 0, 0 ) struct (16) zero-ref double-align "Inline return value spill temp" <Microsoft.CodeAnalysis.BitVector> +; V52 tmp50 [V52,T28] ( 3, 1.50) ref -> r3 class-hnd "Inline stloc first use temp" <ulong[]> +;* V53 tmp51 [V53 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op double-align "NewObj constructor temp" <Microsoft.CodeAnalysis.BitVector> +;* V54 tmp52 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ulong[]> +;* V55 tmp53 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V56 tmp54 [V56 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V57 tmp55 [V57 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +; V58 tmp56 [V58,T24] ( 2, 2 ) int -> r3 "Inlining Arg" +;* V59 tmp57 [V59 ] ( 0, 0 ) ref -> zero-ref single-def +; V60 tmp58 [V60,T33] ( 2, 1 ) ref -> r2 single-def "field V11.VariableState (fldOffset=0x0)" P-INDEP +; V61 tmp59 [V61,T37] ( 2, 1 ) int -> r3 "field V11.SharedStateIndex (fldOffset=0x4)" P-INDEP +;* V62 tmp60 [V62 ] ( 0, 0 ) long -> zero-ref "field V18._bits0 (fldOffset=0x0)" P-INDEP +;* V63 tmp61 [V63 ] ( 0, 0 ) ref -> zero-ref single-def "field V18._bits (fldOffset=0x8)" P-INDEP +;* V64 tmp62 [V64 ] ( 0, 0 ) int -> zero-ref "field V18._capacity (fldOffset=0xc)" P-INDEP +;* V65 tmp63 [V65 ] ( 0, 0 ) long -> zero-ref "field V19._bits0 (fldOffset=0x0)" P-INDEP +;* V66 tmp64 [V66 ] ( 0, 0 ) ref -> zero-ref single-def "field V19._bits (fldOffset=0x8)" P-INDEP +;* V67 tmp65 [V67 ] ( 0, 0 ) int -> zero-ref "field V19._capacity (fldOffset=0xc)" P-INDEP +; V68 tmp66 [V68,T31] ( 3, 1.50) long -> [sp+0x48] do-not-enreg[F] "field V21._bits0 (fldOffset=0x0)" P-INDEP +; V69 tmp67 [V69,T34] ( 2, 1 ) ref -> [sp+0x0C] spill-single-def "field V21._bits (fldOffset=0x8)" P-INDEP +; V70 tmp68 [V70,T38] ( 2, 1 ) int -> [sp+0x44] spill-single-def "field V21._capacity (fldOffset=0xc)" P-INDEP +; V71 tmp69 [V71,T35] ( 2, 1 ) ref -> r2 single-def "field V43.VariableState (fldOffset=0x0)" P-INDEP +; V72 tmp70 [V72,T39] ( 2, 1 ) int -> r3 "field V43.SharedStateIndex (fldOffset=0x4)" P-INDEP +;* V73 tmp71 [V73 ] ( 0, 0 ) long -> zero-ref "field V50._bits0 (fldOffset=0x0)" P-INDEP +;* V74 tmp72 [V74 ] ( 0, 0 ) ref -> zero-ref single-def "field V50._bits (fldOffset=0x8)" P-INDEP +;* V75 tmp73 [V75 ] ( 0, 0 ) int -> zero-ref "field V50._capacity (fldOffset=0xc)" P-INDEP +;* V76 tmp74 [V76 ] ( 0, 0 ) long -> zero-ref "field V51._bits0 (fldOffset=0x0)" P-INDEP +;* V77 tmp75 [V77 ] ( 0, 0 ) ref -> zero-ref single-def "field V51._bits (fldOffset=0x8)" P-INDEP +;* V78 tmp76 [V78 ] ( 0, 0 ) int -> zero-ref "field V51._capacity (fldOffset=0xc)" P-INDEP +; V79 tmp77 [V79,T32] ( 3, 1.50) long -> [sp+0x38] do-not-enreg[F] "field V53._bits0 (fldOffset=0x0)" P-INDEP +; V80 tmp78 [V80,T36] ( 2, 1 ) ref -> r10 single-def "field V53._bits (fldOffset=0x8)" P-INDEP +; V81 tmp79 [V81,T40] ( 2, 1 ) int -> [sp+0x34] spill-single-def "field V53._capacity (fldOffset=0xc)" P-INDEP +; V82 tmp80 [V82,T29] ( 3, 1.50) ref -> r9 single-def "V09.[000..004)" +; V83 tmp81 [V83,T41] ( 2, 1 ) int -> [sp+0x30] spill-single-def "V09.[004..008)" +;* V84 tmp82 [V84 ] ( 0, 0 ) long -> zero-ref "V09.[008..016)" +; V85 tmp83 [V85,T15] ( 4, 2 ) ref -> [sp+0x08] spill-single-def "V09.[016..020)" +; V86 tmp84 [V86,T42] ( 2, 1 ) int -> [sp+0x2C] spill-single-def "V09.[020..024)" +; V87 tmp85 [V87,T30] ( 3, 1.50) ref -> r8 single-def "V41.[000..004)" +; V88 tmp86 [V88,T43] ( 2, 1 ) int -> [sp+0x28] spill-single-def "V41.[004..008)" +;* V89 tmp87 [V89 ] ( 0, 0 ) long -> zero-ref "V41.[008..016)" +; V90 tmp88 [V90,T16] ( 4, 2 ) ref -> [sp+0x04] spill-single-def "V41.[016..020)" +; V91 tmp89 [V91,T44] ( 2, 1 ) int -> [sp+0x24] spill-single-def "V41.[020..024)" +; V92 tmp90 [V92,T06] ( 6, 6 ) byref -> r0 single-def "Spilling address for field-by-field copy" +; V93 tmp91 [V93,T07] ( 6, 6 ) byref -> r0 single-def "Spilling address for field-by-field copy" +;* V94 rat0 [V94 ] ( 0, 0 ) int -> zero-ref "field V24.lo (fldOffset=0x0)" P-INDEP +;* V95 rat1 [V95 ] ( 0, 0 ) int -> zero-ref "field V24.hi (fldOffset=0x4)" P-INDEP +;* V96 rat2 [V96 ] ( 0, 0 ) int -> zero-ref "field V56.lo (fldOffset=0x0)" P-INDEP +;* V97 rat3 [V97 ] ( 0, 0 ) int -> zero-ref "field V56.hi (fldOffset=0x4)" P-INDEP +; V98 rat4 [V98,T45] ( 2, 1 ) int -> [sp+0x20] spill-single-def "field V84.lo (fldOffset=0x0)" P-INDEP +; V99 rat5 [V99,T46] ( 2, 1 ) int -> [sp+0x1C] spill-single-def "field V84.hi (fldOffset=0x4)" P-INDEP +; V100 rat6 [V100,T47] ( 2, 1 ) int -> r10 "field V89.lo (fldOffset=0x0)" P-INDEP +; V101 rat7 [V101,T48] ( 2, 1 ) int -> [sp+0x18] spill-single-def "field V89.hi (fldOffset=0x4)" P-INDEP +; V102 rat8 [V102,T11] ( 3, 3 ) byref -> r3 "ReplaceWithLclVar is creating a new local variable" +; V103 rat9 [V103,T12] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V104 rat10 [V104,T13] ( 3, 3 ) byref -> r3 "ReplaceWithLclVar is creating a new local variable" +; V105 rat11 [V105,T14] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
;
-; Lcl frame size = 92
+; Lcl frame size = 84
G_M16287_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
- sub sp, 92 - add r11, sp, 120 - sub r4, r11, 72 - movs r5, 5 - movs r2, 0 - movs r3, 0 - stm r4!, {r2,r3} - subs r5, 1 - bhi SHORT pc-6 (-3 instructions)
+ sub sp, 84 + add r11, sp, 112
mov r4, r0 ; gcrRegs +[r4] mov r5, r1 ; gcrRegs +[r5]
- ;; size=30 bbWeight=1 PerfScore 12.00
+ ;; size=14 bbWeight=1 PerfScore 5.00
G_M16287_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz ldr r6, [r5+0x0C] ; gcrRegs +[r6] @@ -132,20 +143,20 @@ G_M16287_IG03: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 ldr r9, [r0] ; gcrRegs +[r9] ldr r10, [r0+0x04]
- str r10, [sp+0x20] // [V76 tmp74]
+ str r10, [sp+0x30] // [V83 tmp81]
add r3, r0, 8 ; byrRegs +[r3] ldr r2, [r3] ldr r3, [r3+0x04] ; byrRegs -[r3]
- str r2, [sp+0x18] // [V83 rat2] - str r3, [sp+0x14] // [V84 rat3]
+ str r2, [sp+0x20] // [V98 rat4] + str r3, [sp+0x1C] // [V99 rat5]
ldr r1, [r0+0x10] ; gcrRegs +[r1]
- str r1, [sp] // [V78 tmp76] - ; GC ptr vars +{V78}
+ str r1, [sp+0x08] // [V85 tmp83] + ; GC ptr vars +{V85}
ldr lr, [r0+0x14]
- str lr, [sp+0x1C] // [V79 tmp77]
+ str lr, [sp+0x2C] // [V86 tmp84]
cmp r6, 0 beq SHORT G_M16287_IG09 ldrsh r0, [r6+0x08] @@ -155,7 +166,7 @@ G_M16287_IG03: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 bne SHORT G_M16287_IG09 ldr r12, [r8+0x0C] ; gcrRegs +[r12]
- str r12, [sp+0x10] // [V08 tmp6]
+ str r12, [sp+0x14] // [V08 tmp6]
; GC ptr vars +{V08} ldr r0, [r6+0x04] ; gcrRegs +[r0] @@ -187,7 +198,7 @@ G_M16287_IG04: ; bbWeight=0.50, gcrefRegs=0370 {r4 r5 r6 r8 r9}, byrefReg ;; size=18 bbWeight=0.50 PerfScore 3.00 G_M16287_IG05: ; bbWeight=0.50, gcrefRegs=0370 {r4 r5 r6 r8 r9}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0]
- ldr r1, [sp] // [V78 tmp76]
+ ldr r1, [sp+0x08] // [V85 tmp83]
; gcrRegs +[r1] cmp r1, 0 beq SHORT G_M16287_IG06 @@ -195,24 +206,24 @@ G_M16287_IG05: ; bbWeight=0.50, gcrefRegs=0370 {r4 r5 r6 r8 r9}, byrefReg ...

+10 (+2.60%) : 37055.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.Canon]:<.cctor>b4_0(System.Object):this (FullOpts)

@@ -8,33 +8,33 @@ ; Final local variable assignments ; ; V00 this [V00,T07] ( 3, 3 ) ref -> [sp+0x08] this class-hnd EH-live single-def <System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]>
-; V01 arg1 [V01,T00] ( 6, 5.50) ref -> r4 class-hnd single-def <System.Object> -; V02 loc0 [V02,T01] ( 9, 6 ) ref -> [sp+0x04] do-not-enreg[M] class-hnd exact EH-live <<unknown class>> -; V03 loc1 [V03,T11] ( 4, 4 ) ref -> r7 class-hnd single-def <<unknown class>>
+; V01 arg1 [V01,T01] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Object> +; V02 loc0 [V02,T00] ( 10, 6 ) ref -> [sp+0x04] class-hnd exact EH-live single-def <<unknown class>> +; V03 loc1 [V03,T11] ( 4, 4 ) ref -> r9 class-hnd single-def <<unknown class>>
; V04 loc2 [V04,T17] ( 2, 1 ) int -> [sp+0x10] do-not-enreg[Z] EH-live ;* V05 loc3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <<unknown class>> ; V06 loc4 [V06,T19] ( 4, 0 ) ref -> r4 class-hnd single-def <<unknown class>> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V08 tmp1 [V08,T16] ( 2, 3 ) int -> r1 "spilling helperCall" -;* V09 tmp2 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>>
+;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V10 tmp3 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V12 tmp5 [V12,T02] ( 4, 6 ) int -> r4 "VirtualCall with runtime lookup" -;* V13 tmp6 [V13 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V14 tmp7 [V14,T03] ( 4, 6 ) int -> r4 "VirtualCall with runtime lookup" -; V15 tmp8 [V15,T20] ( 3, 0 ) ref -> r1 class-hnd single-def "impSpillSpecialSideEff" <<unknown class>> -; V16 tmp9 [V16 ] ( 2, 0 ) struct ( 4) [sp+0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Threading.CancellationToken> -;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Threading.CancellationToken> -; V18 tmp11 [V18 ] ( 2, 0 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V16._source (fldOffset=0x0)" P-DEP -; V19 tmp12 [V19,T21] ( 2, 0 ) ref -> r1 "field V17._source (fldOffset=0x0)" P-INDEP
+; V11 tmp4 [V11,T02] ( 4, 6 ) int -> r4 "VirtualCall with runtime lookup" +;* V12 tmp5 [V12 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V13 tmp6 [V13,T03] ( 4, 6 ) int -> r4 "VirtualCall with runtime lookup" +; V14 tmp7 [V14,T20] ( 3, 0 ) ref -> r1 class-hnd single-def "impSpillSpecialSideEff" <<unknown class>> +; V15 tmp8 [V15 ] ( 2, 0 ) struct ( 4) [sp+0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Threading.CancellationToken> +;* V16 tmp9 [V16 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Threading.CancellationToken> +; V17 tmp10 [V17 ] ( 2, 0 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V15._source (fldOffset=0x0)" P-DEP +; V18 tmp11 [V18,T21] ( 2, 0 ) ref -> r1 "field V16._source (fldOffset=0x0)" P-INDEP +; V19 tmp12 [V19,T14] ( 2, 4 ) int -> r0 "argument with side effect"
; V20 tmp13 [V20,T13] ( 2, 4 ) ref -> r1 single-def "argument with side effect"
-; V21 tmp14 [V21,T14] ( 2, 4 ) int -> r0 "argument with side effect"
+; V21 tmp14 [V21,T15] ( 2, 4 ) int -> r0 "argument with side effect"
; V22 PSPSym [V22,T18] ( 1, 1 ) int -> [sp+0x1C] do-not-enreg[V] "PSPSym"
-; V23 cse0 [V23,T15] ( 3, 3 ) int -> r0 "CSE - aggressive"
+; V23 cse0 [V23,T16] ( 3, 3 ) int -> r7 "CSE - aggressive"
; V24 cse1 [V24,T08] ( 6, 4.56) int -> r6 "CSE - aggressive" ; V25 rat0 [V25,T10] ( 3, 4.40) int -> r0 "Spilling to split statement for tree"
-; V26 rat1 [V26,T12] ( 3, 4 ) int -> r3 "runtime lookup" -; V27 rat2 [V27,T04] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V26 rat1 [V26,T12] ( 3, 4 ) int -> r7 "runtime lookup" +; V27 rat2 [V27,T04] ( 3, 5.60) int -> r7 "fgMakeTemp is creating a new local variable"
; V28 rat3 [V28,T05] ( 3, 5.60) int -> r4 "fgMakeTemp is creating a new local variable" ; V29 rat4 [V29,T06] ( 3, 5.60) int -> r0 "spilling expr" ; V30 rat5 [V30,T09] ( 3, 4.48) int -> r4 "fgMakeTemp is creating a new local variable" @@ -42,14 +42,14 @@ ; Lcl frame size = 32 G_M57110_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr}
+ push {r4,r5,r6,r7,r8,r9,r11,lr}
sub sp, 32
- add r11, sp, 48
+ add r11, sp, 56
movs r2, 0
- str r2, [sp+0x0C] // [V16 tmp9] - add r2, sp, 56
+ str r2, [sp+0x0C] // [V15 tmp8] + add r2, sp, 64
str r2, [sp+0x1C] // [V22 PSPSym]
- str r0, [r11-0x1C]
+ str r0, [r11-0x24]
str r0, [sp+0x08] // [V00 this] ; GC ptr vars +{V00} mov r5, r0 @@ -62,8 +62,8 @@ G_M57110_IG02: ; bbWeight=1, gcVars=00000080 {V00}, gcrefRegs=0030 {r4 r5 mov r0, r6 ldr r1, [r0+0x24] ldr r1, [r1]
- ldr r3, [r1+0x08] - cmp r3, 0
+ ldr r7, [r1+0x08] + cmp r7, 0
beq SHORT G_M57110_IG04 ;; size=14 bbWeight=1 PerfScore 7.00 G_M57110_IG03: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz @@ -76,32 +76,32 @@ G_M57110_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {} movt r3, 0xd1ff blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0
- mov r3, r0
+ mov r7, r0
;; size=20 bbWeight=0.20 PerfScore 1.20 G_M57110_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- mov r0, r3 - mov r1, r0 - str r4, [sp+0x04] // [V02 loc0] - ; GC ptr vars +{V02} - cmp r4, 0 - beq SHORT G_M57110_IG08 - ;; size=10 bbWeight=1 PerfScore 5.00 -G_M57110_IG06: ; bbWeight=0.50, gcVars=00000082 {V00 V02}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz - ldr r3, [r4] - cmp r3, r1 - bne SHORT G_M57110_IG08 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M57110_IG07: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ldr r1, [sp+0x04] // [V02 loc0]
+ mov r0, r7 + mov r1, r4
; gcrRegs +[r1]
- ldr r7, [r1+0x24] - ; gcrRegs +[r7] - cmp r7, 0 - bne SHORT G_M57110_IG10 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M57110_IG08: ; bbWeight=1, gcVars=00000080 {V00}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[r1 r7] - ; GC ptr vars -{V02}
+ movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + mov r8, r0 + ; gcrRegs +[r8] + str r8, [sp+0x04] + ; GC ptr vars +{V02} + cmp r8, 0 + beq SHORT G_M57110_IG06 + ldr r9, [r8+0x24] + ; gcrRegs +[r9] + cmp r9, 0 + bne SHORT G_M57110_IG08 + ;; size=36 bbWeight=1 PerfScore 12.00 +G_M57110_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0 r8-r9] + ; GC ptr vars -{V00 V02} + mov r0, r7
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff @@ -110,29 +110,26 @@ G_M57110_IG08: ; bbWeight=1, gcVars=00000080 {V00}, gcrefRegs=0030 {r4 r5 blx r3 // <unknown method> ; gcrRegs -[r1 r4] ; gcr arg pop 0
- ;; size=14 bbWeight=1 PerfScore 5.00 -G_M57110_IG09: ; bbWeight=1, epilog, nogc, extend
+ ;; size=16 bbWeight=1 PerfScore 6.00 +G_M57110_IG07: ; bbWeight=1, epilog, nogc, extend
add sp, 32
- pop {r4,r5,r6,r7,r11,pc}
+ pop {r4,r5,r6,r7,r8,r9,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M57110_IG10: ; bbWeight=1, gcVars=00000082 {V00 V02}, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r7] - ; GC ptr vars +{V01 V02} - ldr r0, [sp+0x04] // [V02 loc0] - ; gcrRegs +[r0] - movs r1, 0 - str r1, [r0+0x24]
+G_M57110_IG08: ; bbWeight=1, gcVars=00000081 {V00 V02}, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r8-r9] + ; GC ptr vars +{V00 V02} + movs r0, 0 + str r0, [r8+0x24]
ldr r0, [r6+0x24]
- ; gcrRegs -[r0]
ldr r0, [r0] ldr r4, [r0+0x0C] cmp r4, 0
- beq SHORT G_M57110_IG12 - ;; size=16 bbWeight=1 PerfScore 8.00 -G_M57110_IG11: ; bbWeight=0.80, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz - b SHORT G_M57110_IG13
+ beq SHORT G_M57110_IG10 + ;; size=16 bbWeight=1 PerfScore 7.00 +G_M57110_IG09: ; bbWeight=0.80, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref, isz + b SHORT G_M57110_IG11
;; size=2 bbWeight=0.80 PerfScore 0.80
-G_M57110_IG12: ; bbWeight=0.20, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref
+G_M57110_IG10: ; bbWeight=0.20, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref
mov r0, r6 movw r1, 0xd1ff movt r1, 0xd1ff @@ -142,35 +139,32 @@ G_M57110_IG12: ; bbWeight=0.20, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {} ; gcr arg pop 0 mov r4, r0 ;; size=22 bbWeight=0.20 PerfScore 1.40
-G_M57110_IG13: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref - ldr r1, [sp+0x04] // [V02 loc0] - ; gcrRegs +[r1] - ldrsh r1, [r1+0x28] - ; gcrRegs -[r1] - mov r0, r7
+G_M57110_IG11: ; bbWeight=1, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref + ldrsh r1, [r8+0x28] + mov r0, r9
; gcrRegs +[r0] ldr r3, [r4] blx r3 ; gcrRegs -[r0] ; gcr arg pop 0 str r0, [sp+0x10] // [V04 loc2]
- ;; size=14 bbWeight=1 PerfScore 6.00 -G_M57110_IG14: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=12 bbWeight=1 PerfScore 5.00 +G_M57110_IG12: ; bbWeight=1, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref, isz
ldr r0, [r6+0x24] ldr r0, [r0] ldr r1, [r0+0x04] cmp r1, 16
- ble SHORT G_M57110_IG17
+ ble SHORT G_M57110_IG15
;; size=10 bbWeight=1 PerfScore 5.00
-G_M57110_IG15: ; bbWeight=0.80, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+G_M57110_IG13: ; bbWeight=0.80, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref, isz
ldr r4, [r0+0x10] cmp r4, 0
- beq SHORT G_M57110_IG17
+ beq SHORT G_M57110_IG15
;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M57110_IG16: ; bbWeight=0.64, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz - b SHORT G_M57110_IG18
+G_M57110_IG14: ; bbWeight=0.64, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref, isz + b SHORT G_M57110_IG16
;; size=2 bbWeight=0.64 PerfScore 0.64
-G_M57110_IG17: ; bbWeight=0.36, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref
+G_M57110_IG15: ; bbWeight=0.36, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref
mov r0, r6 movw r1, 0xd1ff movt r1, 0xd1ff @@ -180,47 +174,44 @@ G_M57110_IG17: ; bbWeight=0.36, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {} ; gcr arg pop 0 mov r4, r0 ;; size=22 bbWeight=0.36 PerfScore 2.52
-G_M57110_IG18: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref - ldr r1, [sp+0x04] // [V02 loc0] - ; gcrRegs +[r1] - ldrsh r1, [r1+0x28] - ; gcrRegs -[r1] - mov r0, r7
+G_M57110_IG16: ; bbWeight=1, gcrefRegs=0320 {r5 r8 r9}, byrefRegs=0000 {}, byref + ldrsh r1, [r8+0x28] + mov r0, r9
; gcrRegs +[r0] ldr r3, [r4] blx r3
- ; gcrRegs -[r7]
+ ; gcrRegs -[r9]
; gcr arg pop 0 mov r1, r0 ; gcrRegs +[r1] ...

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm.checked.mch 93 80 12 1 -1,426 +96
benchmarks.run_pgo.linux.arm.checked.mch 2,111 2,094 14 3 -32,882 +198
benchmarks.run_tiered.linux.arm.checked.mch 66 57 8 1 -1,012 +76
coreclr_tests.run.linux.arm.checked.mch 231 195 26 10 -3,062 +406
libraries.crossgen2.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm.checked.mch 518 479 17 22 -10,520 +140
libraries_tests.run.linux.arm.Release.mch 1,348 1,236 71 41 -21,892 +1,048
librariestestsnotieredcompilation.run.linux.arm.Release.mch 629 594 21 14 -13,328 +730
realworld.run.linux.arm.checked.mch 129 123 2 4 -2,340 +12
5,125 4,858 171 96 -86,462 +2,706

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 41,659 5,309 36,350 1,203 (2.56%) 5,405 (11.48%)
benchmarks.run_pgo.linux.arm.checked.mch 144,832 59,183 85,649 3,288 (1.97%) 21,932 (13.15%)
benchmarks.run_tiered.linux.arm.checked.mch 73,721 42,033 31,688 1,064 (1.35%) 5,019 (6.37%)
coreclr_tests.run.linux.arm.checked.mch 462,197 259,246 202,951 7,156 (1.49%) 17,192 (3.59%)
libraries.crossgen2.linux.arm.checked.mch 1,763 0 1,763 0 (0.00%) 0 (0.00%)
libraries.pmi.linux.arm.checked.mch 245,068 6 245,062 7,783 (2.78%) 34,849 (12.45%)
libraries_tests.run.linux.arm.Release.mch 669,013 442,605 226,408 16,220 (2.24%) 56,572 (7.80%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 240,632 21,604 219,028 33,211 (10.79%) 67,188 (21.83%)
realworld.run.linux.arm.checked.mch 31,950 153 31,797 1,407 (3.72%) 5,851 (15.48%)
1,910,835 830,139 1,080,696 71,332 (3.36%) 214,008 (10.07%)

jit-analyze output

benchmarks.run.linux.arm.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 9001894 (overridden on cmd)
Total bytes of diff: 9000564 (overridden on cmd)
Total bytes of delta: -1330 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          10 : 13307.dasm (10.42 % of base)
          10 : 14907.dasm (10.42 % of base)
          10 : 40859.dasm (10.64 % of base)
          10 : 44815.dasm (10.64 % of base)
          10 : 1559.dasm (2.60 % of base)
          10 : 16388.dasm (1.44 % of base)
          10 : 44545.dasm (10.42 % of base)
          10 : 17815.dasm (10.42 % of base)
           6 : 13644.dasm (4.17 % of base)
           6 : 7908.dasm (1.01 % of base)
           2 : 13311.dasm (0.72 % of base)
           2 : 2788.dasm (0.26 % of base)

Top file improvements (bytes):
         -56 : 4926.dasm (-9.86 % of base)
         -46 : 2805.dasm (-8.24 % of base)
         -40 : 2574.dasm (-0.95 % of base)
         -36 : 3028.dasm (-10.59 % of base)
         -32 : 412.dasm (-41.03 % of base)
         -32 : 20574.dasm (-36.36 % of base)
         -30 : 8417.dasm (-20.55 % of base)
         -28 : 13730.dasm (-40.00 % of base)
         -28 : 5457.dasm (-8.81 % of base)
         -28 : 7898.dasm (-51.85 % of base)
         -28 : 26203.dasm (-13.33 % of base)
         -28 : 22966.dasm (-5.36 % of base)
         -28 : 5427.dasm (-4.02 % of base)
         -26 : 24186.dasm (-12.26 % of base)
         -26 : 14222.dasm (-8.39 % of base)
         -26 : 27145.dasm (-13.54 % of base)
         -24 : 25381.dasm (-6.63 % of base)
         -24 : 27008.dasm (-13.64 % of base)
         -24 : 8491.dasm (-31.58 % of base)
         -24 : 10547.dasm (-26.67 % of base)

58 total files with Code Size differences (46 improved, 12 regressed), 1 unchanged.

Top method regressions (bytes):
          10 (10.42 % of base) : 44545.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (FullOpts)
          10 (10.64 % of base) : 44815.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
          10 (10.42 % of base) : 13307.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          10 (10.42 % of base) : 14907.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
          10 (10.42 % of base) : 17815.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
          10 (10.64 % of base) : 40859.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          10 (1.44 % of base) : 16388.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          10 (2.60 % of base) : 1559.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           6 (1.01 % of base) : 7908.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           6 (4.17 % of base) : 13644.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
           2 (0.72 % of base) : 13311.dasm - System.Collections.Perf_Frozen`1[System.__Canon]:GetUniqueValues(int):System.__Canon[]:this (FullOpts)
           2 (0.26 % of base) : 2788.dasm - System.Xml.Serialization.TempAssembly:LoadAssemblyByPath(System.Type,System.String):System.Reflection.Assembly (FullOpts)

Top method improvements (bytes):
         -56 (-9.86 % of base) : 4926.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (FullOpts)
         -46 (-8.24 % of base) : 2805.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
         -40 (-0.95 % of base) : 2574.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -36 (-10.59 % of base) : 3028.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -32 (-36.36 % of base) : 20574.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 412.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -30 (-20.55 % of base) : 8417.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -28 (-5.36 % of base) : 22966.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -28 (-4.02 % of base) : 5427.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -28 (-51.85 % of base) : 7898.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -28 (-13.33 % of base) : 26203.dasm - System.Collections.Generic.List`1[System.__Canon]:System.Collections.IList.Add(System.Object):int:this (FullOpts)
         -28 (-8.81 % of base) : 5457.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-40.00 % of base) : 13730.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -26 (-13.54 % of base) : 27145.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-12.26 % of base) : 24186.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-8.39 % of base) : 14222.dasm - System.Collections.Generic.Dictionary`2[int,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (FullOpts)
         -24 (-31.58 % of base) : 8491.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -24 (-13.64 % of base) : 27008.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -24 (-26.67 % of base) : 10547.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -24 (-6.63 % of base) : 25381.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)

Top method regressions (percentages):
          10 (10.64 % of base) : 44815.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
          10 (10.64 % of base) : 40859.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          10 (10.42 % of base) : 44545.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (FullOpts)
          10 (10.42 % of base) : 13307.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          10 (10.42 % of base) : 14907.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
          10 (10.42 % of base) : 17815.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
           6 (4.17 % of base) : 13644.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
          10 (2.60 % of base) : 1559.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
          10 (1.44 % of base) : 16388.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           6 (1.01 % of base) : 7908.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           2 (0.72 % of base) : 13311.dasm - System.Collections.Perf_Frozen`1[System.__Canon]:GetUniqueValues(int):System.__Canon[]:this (FullOpts)
           2 (0.26 % of base) : 2788.dasm - System.Xml.Serialization.TempAssembly:LoadAssemblyByPath(System.Type,System.String):System.Reflection.Assembly (FullOpts)

Top method improvements (percentages):
         -28 (-51.85 % of base) : 7898.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -22 (-47.83 % of base) : 3931.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 412.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-40.00 % of base) : 13730.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -32 (-36.36 % of base) : 20574.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -24 (-31.58 % of base) : 8491.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -22 (-31.43 % of base) : 7316.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -24 (-26.67 % of base) : 10547.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -18 (-24.32 % of base) : 21812.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -18 (-23.68 % of base) : 3703.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -30 (-20.55 % of base) : 8417.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -16 (-18.18 % of base) : 12094.dasm - MicroBenchmarks.Serializers.Json_FromStream`1[System.__Canon]:DataContractJsonSerializer_():System.__Canon:this (FullOpts)
         -16 (-18.18 % of base) : 12704.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:DataContractSerializer_():System.__Canon:this (FullOpts)
         -16 (-18.18 % of base) : 16217.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:XmlSerializer_():System.__Canon:this (FullOpts)
         -20 (-17.24 % of base) : 2597.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -14 (-16.67 % of base) : 23176.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -18 (-16.67 % of base) : 13847.dasm - System.Text.Json.Serialization.Converters.IDictionaryConverter`1[System.__Canon]:Add(System.String,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -14 (-14.89 % of base) : 39929.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (FullOpts)
         -16 (-14.81 % of base) : 24717.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -14 (-14.58 % of base) : 3941.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (FullOpts)


benchmarks.run_pgo.linux.arm.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 44895420 (overridden on cmd)
Total bytes of diff: 44862736 (overridden on cmd)
Total bytes of delta: -32684 (-0.07 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          28 : 92934.dasm (18.42 % of base)
          28 : 82477.dasm (18.42 % of base)
          26 : 107618.dasm (14.77 % of base)
          26 : 24428.dasm (16.88 % of base)
          10 : 150464.dasm (10.64 % of base)
          10 : 152959.dasm (10.42 % of base)
          10 : 156936.dasm (10.64 % of base)
          10 : 63275.dasm (1.44 % of base)
          10 : 76331.dasm (10.42 % of base)
          10 : 48038.dasm (10.42 % of base)
          10 : 100386.dasm (0.66 % of base)
          10 : 56724.dasm (10.42 % of base)
           8 : 100646.dasm (0.46 % of base)
           2 : 12778.dasm (0.33 % of base)

Top file improvements (bytes):
        -162 : 104291.dasm (-4.75 % of base)
         -64 : 114996.dasm (-6.61 % of base)
         -46 : 166502.dasm (-6.59 % of base)
         -46 : 66976.dasm (-6.59 % of base)
         -46 : 54810.dasm (-6.59 % of base)
         -46 : 73713.dasm (-6.59 % of base)
         -46 : 64470.dasm (-6.59 % of base)
         -46 : 77355.dasm (-6.59 % of base)
         -46 : 161458.dasm (-6.59 % of base)
         -46 : 56364.dasm (-6.59 % of base)
         -46 : 91534.dasm (-6.59 % of base)
         -44 : 119737.dasm (-9.09 % of base)
         -44 : 107621.dasm (-9.09 % of base)
         -44 : 105084.dasm (-1.47 % of base)
         -44 : 92061.dasm (-9.09 % of base)
         -38 : 62693.dasm (-5.51 % of base)
         -38 : 157746.dasm (-5.51 % of base)
         -38 : 163263.dasm (-5.51 % of base)
         -32 : 10625.dasm (-36.36 % of base)
         -32 : 4654.dasm (-41.03 % of base)

59 total files with Code Size differences (45 improved, 14 regressed), 3 unchanged.

Top method regressions (bytes):
          28 (18.42 % of base) : 92934.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          28 (18.42 % of base) : 82477.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (14.77 % of base) : 107618.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (16.88 % of base) : 24428.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          10 (0.66 % of base) : 100386.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
          10 (10.42 % of base) : 152959.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
          10 (10.64 % of base) : 156936.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          10 (10.42 % of base) : 48038.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 56724.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
          10 (10.42 % of base) : 76331.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
          10 (10.64 % of base) : 150464.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          10 (1.44 % of base) : 63275.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
           8 (0.46 % of base) : 100646.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
           2 (0.33 % of base) : 12778.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)

Top method improvements (bytes):
        -162 (-4.75 % of base) : 104291.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -64 (-6.61 % of base) : 114996.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -46 (-6.59 % of base) : 166502.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 66976.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 54810.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 73713.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 64470.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 77355.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 161458.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 56364.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -46 (-6.59 % of base) : 91534.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -44 (-1.47 % of base) : 105084.dasm - Microsoft.CodeAnalysis.CSharp.LocalRewriter:MakeConversionNodeCore(Microsoft.CodeAnalysis.CSharp.BoundConversion,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Conversion,ubyte,ubyte,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)
         -44 (-9.09 % of base) : 119737.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 107621.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 92061.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -38 (-5.51 % of base) : 62693.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -38 (-5.51 % of base) : 157746.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -38 (-5.51 % of base) : 163263.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -32 (-41.03 % of base) : 4654.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -32 (-36.36 % of base) : 10625.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)

Top method regressions (percentages):
          28 (18.42 % of base) : 92934.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          28 (18.42 % of base) : 82477.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (16.88 % of base) : 24428.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (14.77 % of base) : 107618.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          10 (10.64 % of base) : 156936.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          10 (10.64 % of base) : 150464.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 152959.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 48038.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 56724.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
          10 (10.42 % of base) : 76331.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
          10 (1.44 % of base) : 63275.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
          10 (0.66 % of base) : 100386.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
           8 (0.46 % of base) : 100646.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
           2 (0.33 % of base) : 12778.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)

Top method improvements (percentages):
         -22 (-47.83 % of base) : 131625.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 152610.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 43748.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 84130.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -32 (-41.03 % of base) : 4654.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -32 (-36.36 % of base) : 10625.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -14 (-14.29 % of base) : 19089.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,System.__Canon,System.__Canon]:Add(System.__Canon,byref,System.Text.Json.JsonSerializerOptions,byref):this (Tier1)
         -18 (-13.85 % of base) : 33958.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -26 (-13.54 % of base) : 115147.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -14 (-12.07 % of base) : 116090.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -14 (-10.61 % of base) : 3563.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -14 (-10.61 % of base) : 70888.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -16 (-10.53 % of base) : 21097.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
         -44 (-9.09 % of base) : 119737.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 107621.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 92061.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -30 (-8.93 % of base) : 3490.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -10 (-8.93 % of base) : 48986.dasm - System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (Tier0-FullOpts)
         -10 (-7.94 % of base) : 94069.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier0-FullOpts)
         -10 (-7.81 % of base) : 124808.dasm - System.Text.Json.Serialization.Converters.ISetOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)


benchmarks.run_tiered.linux.arm.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 13975686 (overridden on cmd)
Total bytes of diff: 13974750 (overridden on cmd)
Total bytes of delta: -936 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          10 : 72134.dasm (10.42 % of base)
          10 : 74966.dasm (10.64 % of base)
          10 : 32378.dasm (10.42 % of base)
          10 : 30662.dasm (10.42 % of base)
          10 : 40071.dasm (10.42 % of base)
          10 : 33325.dasm (1.44 % of base)
          10 : 71803.dasm (10.64 % of base)
           6 : 14718.dasm (1.01 % of base)

Top file improvements (bytes):
         -46 : 29573.dasm (-7.85 % of base)
         -32 : 13011.dasm (-36.36 % of base)
         -32 : 2774.dasm (-41.03 % of base)
         -30 : 26638.dasm (-20.55 % of base)
         -28 : 17969.dasm (-40.00 % of base)
         -28 : 12011.dasm (-8.81 % of base)
         -28 : 2024.dasm (-9.27 % of base)
         -28 : 11181.dasm (-4.02 % of base)
         -28 : 47029.dasm (-5.36 % of base)
         -26 : 32799.dasm (-8.39 % of base)
         -26 : 57141.dasm (-13.54 % of base)
         -24 : 56840.dasm (-13.64 % of base)
         -24 : 24522.dasm (-26.67 % of base)
         -24 : 52415.dasm (-6.63 % of base)
         -24 : 26804.dasm (-31.58 % of base)
         -22 : 16277.dasm (-31.43 % of base)
         -22 : 17158.dasm (-47.83 % of base)
         -20 : 29963.dasm (-18.52 % of base)
         -20 : 27917.dasm (-10.00 % of base)
         -18 : 20193.dasm (-14.29 % of base)

55 total files with Code Size differences (47 improved, 8 regressed), 1 unchanged.

Top method regressions (bytes):
          10 (10.42 % of base) : 72134.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
          10 (10.64 % of base) : 74966.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          10 (10.42 % of base) : 30662.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 32378.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
          10 (10.42 % of base) : 40071.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
          10 (10.64 % of base) : 71803.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          10 (1.44 % of base) : 33325.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
           6 (1.01 % of base) : 14718.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)

Top method improvements (bytes):
         -46 (-7.85 % of base) : 29573.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -32 (-41.03 % of base) : 2774.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -32 (-36.36 % of base) : 13011.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -30 (-20.55 % of base) : 26638.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -28 (-5.36 % of base) : 47029.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier0-FullOpts)
         -28 (-4.02 % of base) : 11181.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (Tier1)
         -28 (-8.81 % of base) : 12011.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -28 (-9.27 % of base) : 2024.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -28 (-40.00 % of base) : 17969.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -26 (-13.54 % of base) : 57141.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -26 (-8.39 % of base) : 32799.dasm - System.Collections.Generic.Dictionary`2[int,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (Tier1)
         -24 (-31.58 % of base) : 26804.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (Tier1)
         -24 (-13.64 % of base) : 56840.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-26.67 % of base) : 24522.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -24 (-6.63 % of base) : 52415.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -22 (-31.43 % of base) : 16277.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (Tier1)
         -22 (-47.83 % of base) : 17158.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -20 (-10.00 % of base) : 27917.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:GenerateValue[System.__Canon](System.Random):System.__Canon (Tier1)
         -20 (-18.52 % of base) : 29963.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -18 (-14.29 % of base) : 20193.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)

Top method regressions (percentages):
          10 (10.64 % of base) : 74966.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          10 (10.64 % of base) : 71803.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 72134.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 30662.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 32378.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
          10 (10.42 % of base) : 40071.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
          10 (1.44 % of base) : 33325.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
           6 (1.01 % of base) : 14718.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)

Top method improvements (percentages):
         -22 (-47.83 % of base) : 17158.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -32 (-41.03 % of base) : 2774.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-40.00 % of base) : 17969.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -32 (-36.36 % of base) : 13011.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -24 (-31.58 % of base) : 26804.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (Tier1)
         -22 (-31.43 % of base) : 16277.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (Tier1)
         -24 (-26.67 % of base) : 24522.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -18 (-23.68 % of base) : 59680.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -30 (-20.55 % of base) : 26638.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -20 (-18.52 % of base) : 29963.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -18 (-16.67 % of base) : 31243.dasm - System.Text.Json.Serialization.Converters.IDictionaryConverter`1[System.__Canon]:Add(System.String,byref,System.Text.Json.JsonSerializerOptions,byref):this (Tier1)
         -14 (-14.89 % of base) : 69318.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (Tier1)
         -16 (-14.81 % of base) : 53919.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -14 (-14.58 % of base) : 17186.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (Tier1)
         -18 (-14.29 % of base) : 20193.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -14 (-14.29 % of base) : 15225.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,System.__Canon,System.__Canon]:Add(System.__Canon,byref,System.Text.Json.JsonSerializerOptions,byref):this (Tier1)
         -24 (-13.64 % of base) : 56840.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -26 (-13.54 % of base) : 57141.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -14 (-12.28 % of base) : 53409.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -16 (-11.76 % of base) : 47919.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)


coreclr_tests.run.linux.arm.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 297649552 (overridden on cmd)
Total bytes of diff: 297646896 (overridden on cmd)
Total bytes of delta: -2656 (-0.00 % of base)
    diff is an improvement.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          82 : 3089.dasm (1.09 % of base)
          80 : 3068.dasm (1.06 % of base)
          46 : 108122.dasm (766.67 % of base)
          28 : 328825.dasm (18.42 % of base)
          18 : 93666.dasm (2.43 % of base)
          18 : 95699.dasm (2.43 % of base)
          18 : 94301.dasm (2.43 % of base)
          10 : 208693.dasm (1.44 % of base)
          10 : 443237.dasm (1.44 % of base)
          10 : 336376.dasm (0.66 % of base)
           8 : 345327.dasm (2.17 % of base)
           8 : 171058.dasm (2.06 % of base)
           8 : 336629.dasm (0.46 % of base)
           8 : 383491.dasm (2.05 % of base)
           8 : 230080.dasm (1.86 % of base)
           6 : 381953.dasm (0.79 % of base)
           6 : 169947.dasm (0.79 % of base)
           4 : 446668.dasm (1.98 % of base)
           4 : 471900.dasm (1.96 % of base)
           4 : 472058.dasm (1.92 % of base)

Top file improvements (bytes):
         -64 : 338794.dasm (-6.84 % of base)
         -44 : 326878.dasm (-1.75 % of base)
         -40 : 156886.dasm (-18.87 % of base)
         -36 : 162934.dasm (-29.03 % of base)
         -36 : 345152.dasm (-20.00 % of base)
         -32 : 233779.dasm (-41.03 % of base)
         -32 : 227873.dasm (-41.03 % of base)
         -30 : 111826.dasm (-4.07 % of base)
         -30 : 93832.dasm (-20.83 % of base)
         -30 : 228171.dasm (-44.12 % of base)
         -28 : 113689.dasm (-5.36 % of base)
         -28 : 470226.dasm (-9.27 % of base)
         -28 : 232644.dasm (-41.18 % of base)
         -28 : 111855.dasm (-8.81 % of base)
         -28 : 329595.dasm (-5.30 % of base)
         -26 : 115034.dasm (-12.26 % of base)
         -26 : 117080.dasm (-13.54 % of base)
         -26 : 336586.dasm (-7.14 % of base)
         -26 : 97932.dasm (-10.32 % of base)
         -26 : 97955.dasm (-10.32 % of base)

68 total files with Code Size differences (43 improved, 25 regressed), 10 unchanged.

Top method regressions (bytes):
          82 (1.09 % of base) : 3089.dasm - Program:TestCase0003() (FullOpts)
          80 (1.06 % of base) : 3068.dasm - Program:TestCase0003() (FullOpts)
          46 (766.67 % of base) : 108122.dasm - T:TestEntryPoint():int (FullOpts)
          28 (18.42 % of base) : 328825.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          18 (2.43 % of base) : 93666.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          18 (2.43 % of base) : 95699.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          18 (2.43 % of base) : 94301.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          10 (0.66 % of base) : 336376.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
          10 (1.44 % of base) : 208693.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          10 (1.44 % of base) : 443237.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
           8 (1.86 % of base) : 230080.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           8 (0.46 % of base) : 336629.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
           8 (2.17 % of base) : 345327.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
           8 (2.06 % of base) : 171058.dasm - Test.DD:Main1() (FullOpts)
           8 (2.05 % of base) : 383491.dasm - Test.DD:Main1() (Tier0-FullOpts)
           6 (0.79 % of base) : 169947.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
           6 (0.79 % of base) : 381953.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (Tier0-FullOpts)
           4 (1.92 % of base) : 472058.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.87 % of base) : 467004.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.52 % of base) : 475675.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)

Top method improvements (bytes):
         -64 (-6.84 % of base) : 338794.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -44 (-1.75 % of base) : 326878.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
         -40 (-18.87 % of base) : 156886.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -36 (-29.03 % of base) : 162934.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -36 (-20.00 % of base) : 345152.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -32 (-41.03 % of base) : 227873.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 233779.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -30 (-4.07 % of base) : 111826.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -30 (-44.12 % of base) : 228171.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -30 (-20.83 % of base) : 93832.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -28 (-5.36 % of base) : 113689.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -28 (-5.30 % of base) : 329595.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier0-FullOpts)
         -28 (-8.81 % of base) : 111855.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-41.18 % of base) : 232644.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
         -28 (-9.27 % of base) : 470226.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -26 (-13.54 % of base) : 117080.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-12.26 % of base) : 115034.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-10.32 % of base) : 97955.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -26 (-10.32 % of base) : 97932.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -26 (-7.14 % of base) : 336586.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)

Top method regressions (percentages):
          46 (766.67 % of base) : 108122.dasm - T:TestEntryPoint():int (FullOpts)
          28 (18.42 % of base) : 328825.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          18 (2.43 % of base) : 93666.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          18 (2.43 % of base) : 95699.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          18 (2.43 % of base) : 94301.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
           8 (2.17 % of base) : 345327.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
           8 (2.06 % of base) : 171058.dasm - Test.DD:Main1() (FullOpts)
           8 (2.05 % of base) : 383491.dasm - Test.DD:Main1() (Tier0-FullOpts)
           4 (1.98 % of base) : 446668.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.98 % of base) : 466966.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.96 % of base) : 471900.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.96 % of base) : 475618.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.92 % of base) : 472058.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.90 % of base) : 467723.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (1.87 % of base) : 467004.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
           8 (1.86 % of base) : 230080.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           4 (1.52 % of base) : 475675.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
          10 (1.44 % of base) : 208693.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          10 (1.44 % of base) : 443237.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
          82 (1.09 % of base) : 3089.dasm - Program:TestCase0003() (FullOpts)

Top method improvements (percentages):
         -30 (-44.12 % of base) : 228171.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -28 (-41.18 % of base) : 232644.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
         -32 (-41.03 % of base) : 227873.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 233779.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -22 (-31.43 % of base) : 133213.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -14 (-30.43 % of base) : 132400.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -36 (-29.03 % of base) : 162934.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -30 (-20.83 % of base) : 93832.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -16 (-20.00 % of base) : 209776.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (FullOpts)
         -36 (-20.00 % of base) : 345152.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -20 (-18.87 % of base) : 473259.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (Tier1)
         -20 (-18.87 % of base) : 476051.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (Tier1)
         -40 (-18.87 % of base) : 156886.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -18 (-18.00 % of base) : 95095.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -18 (-18.00 % of base) : 306064.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -16 (-17.39 % of base) : 111846.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (FullOpts)
         -14 (-16.67 % of base) : 113899.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -18 (-16.67 % of base) : 94594.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)
         -18 (-16.67 % of base) : 306060.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -10 (-15.62 % of base) : 167543.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)


libraries.pmi.linux.arm.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 36552836 (overridden on cmd)
Total bytes of diff: 36542456 (overridden on cmd)
Total bytes of delta: -10380 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          46 : 107676.dasm (2.41 % of base)
          12 : 191093.dasm (1.12 % of base)
          10 : 229802.dasm (0.43 % of base)
          10 : 241278.dasm (1.57 % of base)
          10 : 191410.dasm (1.44 % of base)
           8 : 238212.dasm (1.85 % of base)
           6 : 191377.dasm (0.44 % of base)
           6 : 198449.dasm (4.17 % of base)
           6 : 202482.dasm (1.10 % of base)
           6 : 191380.dasm (0.62 % of base)
           4 : 66668.dasm (1.22 % of base)
           4 : 197967.dasm (1.38 % of base)
           4 : 185680.dasm (4.55 % of base)
           2 : 140589.dasm (0.25 % of base)
           2 : 145770.dasm (0.78 % of base)
           2 : 243789.dasm (0.16 % of base)
           2 : 190864.dasm (0.33 % of base)

Top file improvements (bytes):
        -400 : 251678.dasm (-23.92 % of base)
        -164 : 92507.dasm (-12.97 % of base)
        -164 : 171608.dasm (-12.50 % of base)
        -124 : 258830.dasm (-20.46 % of base)
        -108 : 141731.dasm (-36.73 % of base)
        -102 : 141085.dasm (-7.70 % of base)
         -96 : 26240.dasm (-14.95 % of base)
         -96 : 26233.dasm (-15.24 % of base)
         -82 : 257698.dasm (-2.05 % of base)
         -68 : 66591.dasm (-17.09 % of base)
         -64 : 8133.dasm (-8.18 % of base)
         -60 : 26406.dasm (-12.30 % of base)
         -60 : 26397.dasm (-12.35 % of base)
         -58 : 133975.dasm (-15.76 % of base)
         -50 : 141652.dasm (-34.25 % of base)
         -48 : 184068.dasm (-13.48 % of base)
         -46 : 140615.dasm (-7.85 % of base)
         -44 : 147826.dasm (-12.87 % of base)
         -44 : 147837.dasm (-12.87 % of base)
         -42 : 141653.dasm (-7.75 % of base)

73 total files with Code Size differences (56 improved, 17 regressed), 21 unchanged.

Top method regressions (bytes):
          46 (2.41 % of base) : 107676.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          12 (1.12 % of base) : 191093.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
          10 (1.57 % of base) : 241278.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)
          10 (0.43 % of base) : 229802.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Emit.EmitBaseline,Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
          10 (1.44 % of base) : 191410.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           8 (1.85 % of base) : 238212.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           6 (0.62 % of base) : 191380.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:IntersectWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           6 (0.44 % of base) : 191377.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:UnionWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           6 (1.10 % of base) : 202482.dasm - System.Net.Http.Http3RequestStream:HandleReadResponseContentException(System.Exception,System.Threading.CancellationToken):this (FullOpts)
           6 (4.17 % of base) : 198449.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
           4 (1.22 % of base) : 66668.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
           4 (4.55 % of base) : 185680.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (1.38 % of base) : 197967.dasm - System.Net.NegotiateAuthenticationPal:CheckHasSystemNetSecurityNative():ubyte (FullOpts)
           2 (0.78 % of base) : 145770.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           2 (0.16 % of base) : 243789.dasm - Microsoft.Build.Execution.BuildManager+<>c__DisplayClass100_0:<IssueBuildRequestForBuildSubmission>g__IssueBuildSubmissionToSchedulerImpl|1(Microsoft.Build.Execution.BuildSubmission,ubyte):this (FullOpts)
           2 (0.33 % of base) : 190864.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           2 (0.25 % of base) : 140589.dasm - System.Xml.Serialization.TempAssembly:LoadAssemblyByPath(System.Type,System.String):System.Reflection.Assembly (FullOpts)

Top method improvements (bytes):
        -400 (-23.92 % of base) : 251678.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -164 (-12.97 % of base) : 92507.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -164 (-12.50 % of base) : 171608.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -124 (-20.46 % of base) : 258830.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
        -108 (-36.73 % of base) : 141731.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -102 (-7.70 % of base) : 141085.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
         -96 (-15.24 % of base) : 26233.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -96 (-14.95 % of base) : 26240.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -82 (-2.05 % of base) : 257698.dasm - Newtonsoft.Json.JsonTextReader+<DoReadAsBytesAsync>d__42:MoveNext():this (FullOpts)
         -68 (-17.09 % of base) : 66591.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -64 (-8.18 % of base) : 8133.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
         -60 (-12.30 % of base) : 26406.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericOneDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -60 (-12.35 % of base) : 26397.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericZeroDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -58 (-15.76 % of base) : 133975.dasm - System.Xml.Schema.Compiler:CanonicalizeParticle(System.Xml.Schema.XmlSchemaParticle,ubyte):System.Xml.Schema.XmlSchemaParticle:this (FullOpts)
         -50 (-34.25 % of base) : 141652.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -48 (-13.48 % of base) : 184068.dasm - System.Security.Cryptography.Xml.XmlDsigBase64Transform:LoadInput(System.Object):this (FullOpts)
         -46 (-7.85 % of base) : 140615.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
         -44 (-12.87 % of base) : 147826.dasm - System.Reflection.Context.Custom.CustomConstructorInfo:GetCustomAttributes(ubyte):System.Object[]:this (FullOpts)
         -44 (-12.87 % of base) : 147837.dasm - System.Reflection.Context.Custom.CustomParameterInfo:GetCustomAttributes(ubyte):System.Object[]:this (FullOpts)
         -42 (-7.75 % of base) : 141653.dasm - System.Xml.Serialization.XmlSchemaImporter:GetTypeItems(System.Xml.Schema.XmlSchemaType):System.Xml.Serialization.XmlSchemaImporter+TypeItems:this (FullOpts)

Top method regressions (percentages):
           4 (4.55 % of base) : 185680.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           6 (4.17 % of base) : 198449.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
          46 (2.41 % of base) : 107676.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
           8 (1.85 % of base) : 238212.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
          10 (1.57 % of base) : 241278.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)
          10 (1.44 % of base) : 191410.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           4 (1.38 % of base) : 197967.dasm - System.Net.NegotiateAuthenticationPal:CheckHasSystemNetSecurityNative():ubyte (FullOpts)
           4 (1.22 % of base) : 66668.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
          12 (1.12 % of base) : 191093.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           6 (1.10 % of base) : 202482.dasm - System.Net.Http.Http3RequestStream:HandleReadResponseContentException(System.Exception,System.Threading.CancellationToken):this (FullOpts)
           2 (0.78 % of base) : 145770.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           6 (0.62 % of base) : 191380.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:IntersectWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           6 (0.44 % of base) : 191377.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:UnionWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
          10 (0.43 % of base) : 229802.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Emit.EmitBaseline,Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
           2 (0.33 % of base) : 190864.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           2 (0.25 % of base) : 140589.dasm - System.Xml.Serialization.TempAssembly:LoadAssemblyByPath(System.Type,System.String):System.Reflection.Assembly (FullOpts)
           2 (0.16 % of base) : 243789.dasm - Microsoft.Build.Execution.BuildManager+<>c__DisplayClass100_0:<IssueBuildRequestForBuildSubmission>g__IssueBuildSubmissionToSchedulerImpl|1(Microsoft.Build.Execution.BuildSubmission,ubyte):this (FullOpts)

Top method improvements (percentages):
         -28 (-51.85 % of base) : 267626.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 169514.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -22 (-47.83 % of base) : 25951.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -22 (-47.83 % of base) : 124127.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -30 (-42.86 % of base) : 176283.dasm - System.Runtime.Serialization.KeyValue`2[System.__Canon,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Key(System.Object):this (FullOpts)
         -30 (-41.67 % of base) : 160083.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -30 (-41.67 % of base) : 161775.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -30 (-38.46 % of base) : 161014.dasm - System.Collections.Immutable.ImmutableList`1+Builder[System.__Canon]:System.Collections.IList.Add(System.Object):int:this (FullOpts)
         -26 (-37.14 % of base) : 8461.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
        -108 (-36.73 % of base) : 141731.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -32 (-36.36 % of base) : 265849.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (FullOpts)
         -32 (-36.36 % of base) : 254507.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -32 (-36.36 % of base) : 257117.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon](Newtonsoft.Json.JsonSerializer):System.__Canon:this (FullOpts)
         -26 (-36.11 % of base) : 272894.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -26 (-36.11 % of base) : 159897.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -26 (-36.11 % of base) : 126245.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.__Canon]:<SetSetter>b__0(System.Object,System.Object):this (FullOpts)
         -26 (-36.11 % of base) : 126254.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.__Canon]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (FullOpts)
         -26 (-36.11 % of base) : 138914.dasm - System.Xml.Xsl.Runtime.XmlQuerySequence`1[System.__Canon]:System.Collections.IList.IndexOf(System.Object):int:this (FullOpts)
         -28 (-35.90 % of base) : 91467.dasm - Microsoft.Diagnostics.Tracing.AutomatedAnalysis.Process:Equals(System.Object):ubyte:this (FullOpts)
         -30 (-35.71 % of base) : 138913.dasm - System.Xml.Xsl.Runtime.XmlQuerySequence`1[System.__Canon]:System.Collections.IList.Contains(System.Object):ubyte:this (FullOpts)


libraries_tests.run.linux.arm.Release.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 203563396 (overridden on cmd)
Total bytes of diff: 203542552 (overridden on cmd)
Total bytes of delta: -20844 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          74 : 318097.dasm (2.98 % of base)
          54 : 527693.dasm (1.01 % of base)
          52 : 645589.dasm (6.16 % of base)
          50 : 565478.dasm (2.06 % of base)
          48 : 279988.dasm (1.67 % of base)
          44 : 526885.dasm (0.90 % of base)
          36 : 527916.dasm (0.73 % of base)
          30 : 79403.dasm (0.66 % of base)
          26 : 489540.dasm (14.77 % of base)
          26 : 523448.dasm (14.77 % of base)
          24 : 65744.dasm (4.60 % of base)
          22 : 143746.dasm (4.20 % of base)
          22 : 435123.dasm (3.70 % of base)
          18 : 633353.dasm (2.08 % of base)
          18 : 430517.dasm (2.09 % of base)
          18 : 387864.dasm (2.09 % of base)
          18 : 373528.dasm (2.09 % of base)
          18 : 618836.dasm (2.08 % of base)
          16 : 433695.dasm (4.30 % of base)
          14 : 170438.dasm (0.33 % of base)

Top file improvements (bytes):
        -286 : 177275.dasm (-8.99 % of base)
        -218 : 431559.dasm (-12.84 % of base)
        -216 : 431586.dasm (-13.20 % of base)
        -198 : 429209.dasm (-10.53 % of base)
        -192 : 90498.dasm (-11.51 % of base)
        -184 : 431565.dasm (-14.42 % of base)
        -162 : 66118.dasm (-4.74 % of base)
        -162 : 172178.dasm (-4.78 % of base)
        -140 : 431555.dasm (-7.99 % of base)
        -114 : 697908.dasm (-7.94 % of base)
        -100 : 526921.dasm (-1.87 % of base)
         -94 : 430774.dasm (-7.63 % of base)
         -94 : 500646.dasm (-7.83 % of base)
         -92 : 431581.dasm (-10.11 % of base)
         -90 : 431573.dasm (-7.51 % of base)
         -88 : 490060.dasm (-16.60 % of base)
         -76 : 314777.dasm (-15.51 % of base)
         -72 : 588093.dasm (-2.88 % of base)
         -72 : 179213.dasm (-3.14 % of base)
         -56 : 80895.dasm (-2.90 % of base)

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

Top method regressions (bytes):
          74 (2.98 % of base) : 318097.dasm - System.IO.Tests.BaseSymbolicLinks_FileSystem:ResolveLinkTarget_Succeeds(System.String,ubyte):this (Tier1)
          54 (1.01 % of base) : 527693.dasm - System.Tests.StringTests:WhiteSpaceAtStartAndEndTrim_Memory() (Tier0-FullOpts)
          52 (6.16 % of base) : 645589.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.SymbolLoader:HasImplicitReferenceConversion(Microsoft.CSharp.RuntimeBinder.Semantics.CType,Microsoft.CSharp.RuntimeBinder.Semantics.CType):ubyte (Tier1)
          50 (2.06 % of base) : 565478.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          48 (1.67 % of base) : 279988.dasm - System.Linq.Expressions.Compiler.LambdaCompiler:EmitUnliftedBinaryOp(int,System.Type,System.Type):this (Tier1)
          44 (0.90 % of base) : 526885.dasm - System.Tests.StringTests:WhiteSpaceAtEndTrim_Memory() (Tier0-FullOpts)
          36 (0.73 % of base) : 527916.dasm - System.Tests.StringTests:WhiteSpaceAtStartTrim_Memory() (Tier0-FullOpts)
          30 (0.66 % of base) : 79403.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          26 (14.77 % of base) : 489540.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (14.77 % of base) : 523448.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          24 (4.60 % of base) : 65744.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          22 (4.20 % of base) : 143746.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          22 (3.70 % of base) : 435123.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          18 (2.08 % of base) : 633353.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier1)
          18 (2.09 % of base) : 430517.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier1)
          18 (2.09 % of base) : 387864.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier1)
          18 (2.09 % of base) : 373528.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier1)
          18 (2.08 % of base) : 618836.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier1)
          16 (4.30 % of base) : 433695.dasm - System.Xml.XmlLoader:Load(System.Xml.XmlDocument,System.Xml.XmlReader,ubyte):this (Tier1)
          14 (0.33 % of base) : 170438.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)

Top method improvements (bytes):
        -286 (-8.99 % of base) : 177275.dasm - Microsoft.CodeAnalysis.CSharp.RefSafetyAnalysis:GetValEscape(Microsoft.CodeAnalysis.CSharp.BoundExpression,uint):uint:this (Tier1)
        -218 (-12.84 % of base) : 431559.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (Tier0-FullOpts)
        -216 (-13.20 % of base) : 431586.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (Tier0-FullOpts)
        -198 (-10.53 % of base) : 429209.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (Tier0-FullOpts)
        -192 (-11.51 % of base) : 90498.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (Tier1)
        -184 (-14.42 % of base) : 431565.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (Tier0-FullOpts)
        -162 (-4.74 % of base) : 66118.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
        -162 (-4.78 % of base) : 172178.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
        -140 (-7.99 % of base) : 431555.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (Tier0-FullOpts)
        -114 (-7.94 % of base) : 697908.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (Tier1)
        -100 (-1.87 % of base) : 526921.dasm - System.Tests.StringTests:TrimWhiteSpaceMultipleTimes_Memory() (Tier0-FullOpts)
         -94 (-7.63 % of base) : 430774.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (Tier0-FullOpts)
         -94 (-7.83 % of base) : 500646.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (Tier0-FullOpts)
         -92 (-10.11 % of base) : 431581.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (Tier0-FullOpts)
         -90 (-7.51 % of base) : 431573.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (Tier0-FullOpts)
         -88 (-16.60 % of base) : 490060.dasm - System.Tuple`2[System.__Canon,System.__Canon]:Equals(System.Object,System.Collections.IEqualityComparer):ubyte:this (Tier1)
         -76 (-15.51 % of base) : 314777.dasm - System.Tuple`2[System.__Canon,System.__Canon]:Equals(System.Object,System.Collections.IEqualityComparer):ubyte:this (Tier1)
         -72 (-3.14 % of base) : 179213.dasm - Microsoft.CodeAnalysis.CSharp.Binder:ExtractTupleElementNames(Microsoft.CodeAnalysis.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.CSharp.Syntax.ArgumentSyntax],Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):System.ValueTuple`3[System.Collections.Immutable.ImmutableArray`1[System.String],System.Collections.Immutable.ImmutableArray`1[ubyte],ubyte] (Tier0-FullOpts)
         -72 (-2.88 % of base) : 588093.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
         -56 (-2.90 % of base) : 80895.dasm - Microsoft.CodeAnalysis.LanguageService.AbstractDeclaredSymbolInfoFactoryService`10[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:AddDeclaredSymbolInfos(Microsoft.CodeAnalysis.SyntaxNode,System.__Canon,Roslyn.Utilities.StringTable,System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.FindSymbols.DeclaredSymbolInfo],System.Collections.Generic.Dictionary`2[System.String,System.String],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[int]],System.String,System.String,System.Threading.CancellationToken):this (Tier0-FullOpts)

Top method regressions (percentages):
          26 (14.77 % of base) : 489540.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (14.77 % of base) : 523448.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          12 (8.11 % of base) : 675368.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          12 (8.11 % of base) : 162967.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          12 (8.11 % of base) : 149496.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          12 (8.11 % of base) : 108608.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          12 (8.11 % of base) : 168689.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          12 (8.11 % of base) : 695181.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.__Canon]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],byref):ubyte (Tier1)
          52 (6.16 % of base) : 645589.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.SymbolLoader:HasImplicitReferenceConversion(Microsoft.CSharp.RuntimeBinder.Semantics.CType,Microsoft.CSharp.RuntimeBinder.Semantics.CType):ubyte (Tier1)
           6 (5.17 % of base) : 455841.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
          24 (4.60 % of base) : 65744.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          16 (4.30 % of base) : 433695.dasm - System.Xml.XmlLoader:Load(System.Xml.XmlDocument,System.Xml.XmlReader,ubyte):this (Tier1)
          22 (4.20 % of base) : 143746.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          22 (3.70 % of base) : 435123.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
           6 (3.06 % of base) : 712718.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          74 (2.98 % of base) : 318097.dasm - System.IO.Tests.BaseSymbolicLinks_FileSystem:ResolveLinkTarget_Succeeds(System.String,ubyte):this (Tier1)
           6 (2.86 % of base) : 448777.dasm - System.Xml.Schema.XsdBuilder:BuildIdentityConstraint_Refer(System.Xml.Schema.XsdBuilder,System.String) (Tier1)
          12 (2.63 % of base) : 209132.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.LengthBucketsFrozenSet+GSW]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (Tier1)
          12 (2.63 % of base) : 209175.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.OrdinalStringFrozenSet+GSW]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (Tier1)
           6 (2.11 % of base) : 200224.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)

Top method improvements (percentages):
         -22 (-47.83 % of base) : 624420.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 595454.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-41.18 % of base) : 329741.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (Tier1)
         -32 (-41.03 % of base) : 1319.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -20 (-40.00 % of base) : 61028.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -28 (-40.00 % of base) : 130048.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -40 (-39.22 % of base) : 432496.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (Tier1)
         -32 (-36.36 % of base) : 122799.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -32 (-36.36 % of base) : 620815.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -32 (-36.36 % of base) : 99793.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.ParameterInfo,ubyte):System.__Canon (Tier1)
         -26 (-36.11 % of base) : 635459.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.__Canon]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (Tier1)
         -30 (-34.88 % of base) : 614258.dasm - System.Text.Json.Serialization.Tests.StructDictionary`2[System.__Canon,System.Text.Json.JsonElement]:Contains(System.Object):ubyte:this (Tier1)
         -30 (-34.88 % of base) : 638657.dasm - System.Text.Json.Serialization.Tests.StructDictionary`2[System.__Canon,System.Text.Json.JsonElement]:Contains(System.Object):ubyte:this (Tier1)
         -32 (-32.65 % of base) : 573212.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -20 (-31.25 % of base) : 133208.dasm - Microsoft.Extensions.DependencyInjection.ServiceDescriptor:get_ImplementationFactory():System.Func`2[System.IServiceProvider,System.Object]:this (Tier1)
         -24 (-30.77 % of base) : 130367.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -24 (-30.77 % of base) : 121589.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-29.73 % of base) : 148686.dasm - System.Composition.Hosting.Providers.Lazy.LazyWithMetadataExportDescriptorProvider+<>c__DisplayClass2_2`2[System.__Canon,System.__Canon]:<GetLazyDefinitions>b__4():System.__Canon:this (Tier1)
         -22 (-29.73 % of base) : 108318.dasm - System.Composition.Hosting.Providers.Lazy.LazyWithMetadataExportDescriptorProvider+<>c__DisplayClass2_3`2[System.__Canon,System.__Canon]:<GetLazyDefinitions>b__4():System.__Canon:this (Tier1)
         -24 (-29.27 % of base) : 122178.dasm - Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests:CreateInstance[System.__Canon](Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests+CreateInstanceFunc,System.IServiceProvider,System.Object[]):System.__Canon (Tier1)


librariestestsnotieredcompilation.run.linux.arm.Release.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 76220792 (overridden on cmd)
Total bytes of diff: 76208194 (overridden on cmd)
Total bytes of delta: -12598 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         152 : 213975.dasm (35.51 % of base)
         148 : 206853.dasm (32.03 % of base)
         130 : 202527.dasm (32.02 % of base)
          80 : 181416.dasm (4.63 % of base)
          58 : 70194.dasm (2.61 % of base)
          30 : 94851.dasm (88.24 % of base)
          26 : 94737.dasm (43.33 % of base)
          26 : 91476.dasm (43.33 % of base)
          12 : 76126.dasm (1.15 % of base)
          12 : 69846.dasm (0.98 % of base)
          10 : 4115.dasm (1.44 % of base)
           8 : 74606.dasm (0.87 % of base)
           6 : 155412.dasm (4.17 % of base)
           6 : 77100.dasm (0.44 % of base)
           6 : 77257.dasm (0.62 % of base)
           4 : 37991.dasm (1.75 % of base)
           4 : 67046.dasm (0.69 % of base)
           4 : 96840.dasm (4.55 % of base)
           4 : 156977.dasm (1.37 % of base)
           2 : 68607.dasm (0.33 % of base)

Top file improvements (bytes):
        -400 : 61560.dasm (-23.92 % of base)
        -266 : 305548.dasm (-5.03 % of base)
        -234 : 208960.dasm (-5.18 % of base)
        -220 : 167225.dasm (-13.41 % of base)
        -218 : 167219.dasm (-12.84 % of base)
        -202 : 166108.dasm (-10.73 % of base)
        -178 : 14810.dasm (-16.79 % of base)
        -158 : 167221.dasm (-12.64 % of base)
        -138 : 204102.dasm (-11.46 % of base)
        -122 : 203987.dasm (-9.47 % of base)
        -120 : 167217.dasm (-6.96 % of base)
        -102 : 166790.dasm (-8.24 % of base)
         -98 : 196223.dasm (-5.82 % of base)
         -98 : 194854.dasm (-5.82 % of base)
         -94 : 167222.dasm (-7.83 % of base)
         -94 : 199053.dasm (-7.83 % of base)
         -92 : 167224.dasm (-10.04 % of base)
         -64 : 18882.dasm (-9.38 % of base)
         -56 : 23335.dasm (-2.90 % of base)
         -56 : 91635.dasm (-17.28 % of base)

76 total files with Code Size differences (55 improved, 21 regressed), 14 unchanged.

Top method regressions (bytes):
         152 (35.51 % of base) : 213975.dasm - System.Tests.Int32Tests_GenericMath:CreateCheckedFromIntPtrTest() (FullOpts)
         148 (32.03 % of base) : 206853.dasm - System.Tests.Int64Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
         130 (32.02 % of base) : 202527.dasm - System.Tests.UInt32Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
          80 (4.63 % of base) : 181416.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          58 (2.61 % of base) : 70194.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
          30 (88.24 % of base) : 94851.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          26 (43.33 % of base) : 91476.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          26 (43.33 % of base) : 94737.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          12 (1.15 % of base) : 76126.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
          12 (0.98 % of base) : 69846.dasm - System.Collections.Immutable.Tests.ImmutableQueueTest:EnqueueDequeueTestHelper[System.__Canon](System.__Canon[]):this (FullOpts)
          10 (1.44 % of base) : 4115.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           8 (0.87 % of base) : 74606.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           6 (0.62 % of base) : 77257.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:IntersectWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           6 (0.44 % of base) : 77100.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:UnionWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           6 (4.17 % of base) : 155412.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
           4 (1.75 % of base) : 37991.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.69 % of base) : 67046.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.SmallFrozenSet`1+GSW[System.__Canon]]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
           4 (4.55 % of base) : 96840.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (1.37 % of base) : 156977.dasm - System.Net.NegotiateAuthenticationPal:CheckHasSystemNetSecurityNative():ubyte (FullOpts)
           2 (0.33 % of base) : 68607.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,int]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,int],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)

Top method improvements (bytes):
        -400 (-23.92 % of base) : 61560.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -266 (-5.03 % of base) : 305548.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -234 (-5.18 % of base) : 208960.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -220 (-13.41 % of base) : 167225.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -218 (-12.84 % of base) : 167219.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
        -202 (-10.73 % of base) : 166108.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -178 (-16.79 % of base) : 14810.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (FullOpts)
        -158 (-12.64 % of base) : 167221.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
        -138 (-11.46 % of base) : 204102.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -122 (-9.47 % of base) : 203987.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -120 (-6.96 % of base) : 167217.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)
        -102 (-8.24 % of base) : 166790.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (FullOpts)
         -98 (-5.82 % of base) : 196223.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
         -98 (-5.82 % of base) : 194854.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
         -94 (-7.83 % of base) : 167222.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (FullOpts)
         -94 (-7.83 % of base) : 199053.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (FullOpts)
         -92 (-10.04 % of base) : 167224.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (FullOpts)
         -64 (-9.38 % of base) : 18882.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
         -56 (-2.90 % of base) : 23335.dasm - Microsoft.CodeAnalysis.LanguageService.AbstractDeclaredSymbolInfoFactoryService`10[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:AddDeclaredSymbolInfos(Microsoft.CodeAnalysis.SyntaxNode,System.__Canon,Roslyn.Utilities.StringTable,System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.FindSymbols.DeclaredSymbolInfo],System.Collections.Generic.Dictionary`2[System.String,System.String],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[int]],System.String,System.String,System.Threading.CancellationToken):this (FullOpts)
         -56 (-17.28 % of base) : 91635.dasm - System.Xml.Schema.Compiler:CanonicalizeParticle(System.Xml.Schema.XmlSchemaParticle,ubyte):System.Xml.Schema.XmlSchemaParticle:this (FullOpts)

Top method regressions (percentages):
          30 (88.24 % of base) : 94851.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          26 (43.33 % of base) : 91476.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          26 (43.33 % of base) : 94737.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
         152 (35.51 % of base) : 213975.dasm - System.Tests.Int32Tests_GenericMath:CreateCheckedFromIntPtrTest() (FullOpts)
         148 (32.03 % of base) : 206853.dasm - System.Tests.Int64Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
         130 (32.02 % of base) : 202527.dasm - System.Tests.UInt32Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
          80 (4.63 % of base) : 181416.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
           4 (4.55 % of base) : 96840.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           6 (4.17 % of base) : 155412.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
          58 (2.61 % of base) : 70194.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
           4 (1.75 % of base) : 37991.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          10 (1.44 % of base) : 4115.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           4 (1.37 % of base) : 156977.dasm - System.Net.NegotiateAuthenticationPal:CheckHasSystemNetSecurityNative():ubyte (FullOpts)
          12 (1.15 % of base) : 76126.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
          12 (0.98 % of base) : 69846.dasm - System.Collections.Immutable.Tests.ImmutableQueueTest:EnqueueDequeueTestHelper[System.__Canon](System.__Canon[]):this (FullOpts)
           8 (0.87 % of base) : 74606.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           4 (0.69 % of base) : 67046.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.SmallFrozenSet`1+GSW[System.__Canon]]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
           6 (0.62 % of base) : 77257.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:IntersectWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           6 (0.44 % of base) : 77100.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:UnionWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           2 (0.33 % of base) : 68607.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,int]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,int],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)

Top method improvements (percentages):
         -28 (-51.85 % of base) : 87886.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -28 (-51.85 % of base) : 133529.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 42656.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -28 (-50.00 % of base) : 48290.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -28 (-50.00 % of base) : 42650.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 48287.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 42648.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 48284.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -22 (-47.83 % of base) : 35051.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -22 (-47.83 % of base) : 142063.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -20 (-43.48 % of base) : 29918.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
         -30 (-42.86 % of base) : 194869.dasm - System.Runtime.Serialization.KeyValue`2[System.__Canon,System.__Canon]:System.Runtime.Serialization.IKeyValue.set_Key(System.Object):this (FullOpts)
         -30 (-42.86 % of base) : 194871.dasm - System.Runtime.Serialization.KeyValue`2[System.__Canon,System.__Canon]:System.Runtime.Serialization.IKeyValue.set_Value(System.Object):this (FullOpts)
         -30 (-41.67 % of base) : 70891.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -30 (-41.67 % of base) : 68792.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -28 (-41.18 % of base) : 98498.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
         -40 (-39.22 % of base) : 165261.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
         -26 (-37.14 % of base) : 186759.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
         -26 (-36.11 % of base) : 39509.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -26 (-36.11 % of base) : 70698.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)


realworld.run.linux.arm.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 10142178 (overridden on cmd)
Total bytes of diff: 10139850 (overridden on cmd)
Total bytes of delta: -2328 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          10 : 37055.dasm (2.60 % of base)
           2 : 29892.dasm (0.24 % of base)

Top file improvements (bytes):
         -62 : 36976.dasm (-22.79 % of base)
         -52 : 36593.dasm (-3.02 % of base)
         -44 : 36623.dasm (-20.37 % of base)
         -42 : 8772.dasm (-1.10 % of base)
         -40 : 34938.dasm (-8.58 % of base)
         -38 : 36618.dasm (-23.46 % of base)
         -36 : 32563.dasm (-5.41 % of base)
         -36 : 8460.dasm (-6.36 % of base)
         -36 : 9591.dasm (-27.69 % of base)
         -36 : 14114.dasm (-18.18 % of base)
         -32 : 436.dasm (-41.03 % of base)
         -30 : 36993.dasm (-28.30 % of base)
         -30 : 5802.dasm (-19.23 % of base)
         -30 : 773.dasm (-20.55 % of base)
         -30 : 7937.dasm (-2.07 % of base)
         -28 : 12193.dasm (-23.73 % of base)
         -28 : 21027.dasm (-5.36 % of base)
         -28 : 37676.dasm (-51.85 % of base)
         -28 : 5570.dasm (-27.45 % of base)
         -28 : 5814.dasm (-13.33 % of base)

60 total files with Code Size differences (58 improved, 2 regressed), 4 unchanged.

Top method regressions (bytes):
          10 (2.60 % of base) : 37055.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           2 (0.24 % of base) : 29892.dasm - Microsoft.CodeAnalysis.CSharp.NullableWalker:VisitAwaitableInfo(Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo):Microsoft.CodeAnalysis.CSharp.BoundNode:this (FullOpts)

Top method improvements (bytes):
         -62 (-22.79 % of base) : 36976.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -52 (-3.02 % of base) : 36593.dasm - System.Management.Automation.ScriptBlock:BindArgumentsForScriptblockInvoke(System.Management.Automation.RuntimeDefinedParameter[],System.Object[],System.Management.Automation.ExecutionContext,ubyte,System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable],System.Management.Automation.MutableTuple):System.Object[] (FullOpts)
         -44 (-20.37 % of base) : 36623.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -42 (-1.10 % of base) : 8772.dasm - FSharp.Compiler.NameResolution:ResolveTypeLongIdentPrim(FSharp.Compiler.NameResolution+TcResultsSink,FSharp.Compiler.NameResolution+NameResolver,FSharp.Compiler.NameResolution+ItemOccurence,ubyte,FSharp.Compiler.NameResolution+FullyQualifiedFlag,FSharp.Compiler.Text.Range,FSharp.Compiler.NameResolution+NameResolutionEnv,FSharp.Compiler.AccessibilityLogic+AccessorDomain,FSharp.Compiler.Syntax.Ident,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo,FSharp.Compiler.NameResolution+PermitDirectReferenceToGeneratedType):Internal.Utilities.Library.ResultOrException`1[System.Tuple`2[FSharp.Compiler.NameResolution+ResolutionInfo,FSharp.Compiler.TypedTree+EntityRef]] (FullOpts)
         -40 (-8.58 % of base) : 34938.dasm - System.Management.Automation.SessionStateScope:CreateFunction(System.String,System.Management.Automation.ScriptBlock,System.Management.Automation.FunctionInfo,int,System.Management.Automation.ExecutionContext,System.String):System.Management.Automation.FunctionInfo (FullOpts)
         -38 (-23.46 % of base) : 36618.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -36 (-6.36 % of base) : 8460.dasm - FSharp.Compiler.CheckDeclarations+TcDeclarations:SplitTyconDefn(FSharp.Compiler.Syntax.SynTypeDefn):System.Tuple`2[FSharp.Compiler.CheckDeclarations+MutRecDefnsPhase1DataForTycon,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] (FullOpts)
         -36 (-18.18 % of base) : 14114.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -36 (-27.69 % of base) : 9591.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -36 (-5.41 % of base) : 32563.dasm - Microsoft.CodeAnalysis.CSharp.AsyncMethodBuilderMemberCollection:TryGetBuilderMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.SyntheticBoundNodeFactory,System.Nullable`1[int],Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol,ubyte,byref):ubyte (FullOpts)
         -32 (-41.03 % of base) : 436.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -30 (-20.55 % of base) : 773.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -30 (-2.07 % of base) : 7937.dasm - FSharp.Compiler.Lexer:endline(FSharp.Compiler.ParseHelpers+LexerEndlineContinuation,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort]):FSharp.Compiler.Parser+token (FullOpts)
         -30 (-28.30 % of base) : 36993.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -30 (-19.23 % of base) : 5802.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -28 (-27.45 % of base) : 5570.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -28 (-24.56 % of base) : 10726.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -28 (-23.73 % of base) : 12193.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)
         -28 (-5.36 % of base) : 21027.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -28 (-15.56 % of base) : 37587.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)

Top method regressions (percentages):
          10 (2.60 % of base) : 37055.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           2 (0.24 % of base) : 29892.dasm - Microsoft.CodeAnalysis.CSharp.NullableWalker:VisitAwaitableInfo(Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo):Microsoft.CodeAnalysis.CSharp.BoundNode:this (FullOpts)

Top method improvements (percentages):
         -28 (-51.85 % of base) : 37676.dasm - System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
         -32 (-41.03 % of base) : 436.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -24 (-31.58 % of base) : 976.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -22 (-31.43 % of base) : 34827.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -30 (-28.30 % of base) : 36993.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -36 (-27.69 % of base) : 9591.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -28 (-27.45 % of base) : 5570.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -28 (-24.56 % of base) : 10726.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -28 (-23.73 % of base) : 12193.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)
         -18 (-23.68 % of base) : 23481.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -38 (-23.46 % of base) : 36618.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -62 (-22.79 % of base) : 36976.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -14 (-21.21 % of base) : 21772.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -30 (-20.55 % of base) : 773.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -44 (-20.37 % of base) : 36623.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -30 (-19.23 % of base) : 5802.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -36 (-18.18 % of base) : 14114.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -22 (-17.46 % of base) : 37066.dasm - System.Management.Automation.Interpreter.DynamicInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -14 (-16.67 % of base) : 21491.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -26 (-16.25 % of base) : 36588.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)



windows x86

Diffs are based on 2,165,680 contexts (837,213 MinOpts, 1,328,467 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 126,838 (5.53%)

Overall (-87,302 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 5,980,860 -1,173
benchmarks.run_pgo.windows.x86.checked.mch 27,314,129 -15,223
benchmarks.run_tiered.windows.x86.checked.mch 8,634,134 -690
coreclr_tests.run.windows.x86.checked.mch 291,128,494 -2,850
libraries.crossgen2.windows.x86.checked.mch 31,699,024 -29,758
libraries.pmi.windows.x86.checked.mch 36,396,395 -8,486
libraries_tests.run.windows.x86.Release.mch 157,355,291 -13,759
librariestestsnotieredcompilation.run.windows.x86.Release.mch 89,450,088 -13,035
realworld.run.windows.x86.checked.mch 7,928,176 -2,328

FullOpts (-87,302 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 5,980,579 -1,173
benchmarks.run_pgo.windows.x86.checked.mch 20,759,622 -15,223
benchmarks.run_tiered.windows.x86.checked.mch 4,365,997 -690
coreclr_tests.run.windows.x86.checked.mch 89,300,911 -2,850
libraries.crossgen2.windows.x86.checked.mch 31,697,964 -29,758
libraries.pmi.windows.x86.checked.mch 36,301,162 -8,486
libraries_tests.run.windows.x86.Release.mch 59,778,090 -13,759
librariestestsnotieredcompilation.run.windows.x86.Release.mch 80,770,009 -13,035
realworld.run.windows.x86.checked.mch 7,632,462 -2,328

Example diffs

benchmarks.run.windows.x86.checked.mch

-14 (-41.18%) : 7049.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.Canon,System.Canon]:b10_1(System.Canon):System.__Canon:this (FullOpts)

@@ -2,51 +2,35 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> esi this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> edx class-hnd single-def <System.__Canon> -; V02 tmp0 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> esi this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> edx class-hnd single-def <System.__Canon>
; ; Lcl frame size = 0 G_M11807_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
- ; gcrRegs +[esi] - ;; size=6 bbWeight=1 PerfScore 2.50 -G_M11807_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M11807_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M11807_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M11807_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref + ; gcrRegs +[edx esi]
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx+0x04]
- cmp dword ptr [eax], ecx - je SHORT G_M11807_IG05 - ;; size=14 bbWeight=0.25 PerfScore 3.00 -G_M11807_IG04: ; bbWeight=0.12, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M11807_IG05: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcr arg pop 0 + ;; size=15 bbWeight=1 PerfScore 9.00 +G_M11807_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 34, prolog size 4, PerfScore 9.12, instruction count 17, allocated bytes for code 34 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 20, prolog size 1, PerfScore 11.75, instruction count 9, allocated bytes for code 20 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================

-16 (-39.02%) : 3752.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T02] ( 4, 3.12) ref -> eax class-hnd single-def <System.Object> -; V01 TypeCtx [V01,T01] ( 4, 3.25) int -> edx single-def
+; V00 arg0 [V00,T01] ( 3, 3 ) ref -> eax class-hnd single-def <System.Object> +; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> edx single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03,T03] ( 3, 1.25) int -> edx "fgMakeTemp is creating a new local variable" -; V04 tmp1 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 4 @@ -23,39 +21,20 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov eax, ecx ; gcrRegs +[eax] ;; size=9 bbWeight=1 PerfScore 3.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz - mov ecx, eax - ; gcrRegs +[ecx] - test ecx, ecx - je SHORT G_M8451_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x20] - mov edx, dword ptr [edx] - cmp dword ptr [ecx], edx - je SHORT G_M8451_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ecx] - mov ecx, edx
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + mov ecx, dword ptr [edx+0x20] + mov ecx, dword ptr [ecx]
mov edx, eax ; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov ecx, eax - ; gcrRegs +[ecx] - ;; size=11 bbWeight=0.12 PerfScore 0.22 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ecx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 41, prolog size 7, PerfScore 9.22, instruction count 20, allocated bytes for code 41 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 25, prolog size 7, PerfScore 10.50, instruction count 12, allocated bytes for code 25 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================

-18 (-38.30%) : 12004.dasm - System.Threading.AsyncLocal`1[System.Canon]:get_Value():System.Canon:this (FullOpts)

@@ -2,64 +2,43 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> esi this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> -; V01 loc0 [V01,T02] ( 3, 2.12) ref -> eax class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 4, 4 ) ref -> esi this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> +; V01 loc0 [V01,T01] ( 2, 2 ) ref -> edx class-hnd single-def <System.Object>
;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V03 tmp0 [V03,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp1 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 0 G_M1970_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M1970_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
- ;; size=6 bbWeight=1 PerfScore 2.50 -G_M1970_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, esi ; gcrRegs +[ecx] call [System.Threading.ExecutionContext:GetLocalValue(System.Threading.IAsyncLocal):System.Object] ; gcrRegs -[ecx] +[eax]
+ ; gcr arg pop 0
mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M1970_IG05 - ;; size=14 bbWeight=1 PerfScore 4.75 -G_M1970_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx]
- cmp dword ptr [edx], ecx - je SHORT G_M1970_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M1970_IG04: ; bbWeight=0.12, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M1970_IG05: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M1970_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; gcr arg pop 0 + ;; size=24 bbWeight=1 PerfScore 12.50 +G_M1970_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 47, prolog size 4, PerfScore 12.69, instruction count 22, allocated bytes for code 47 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
+; Total bytes of code 29, prolog size 1, PerfScore 15.25, instruction count 12, allocated bytes for code 29 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
; ============================================================

+6 (+9.68%) : 16056.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M36328_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M36328_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M36328_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M36328_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M36328_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M36328_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M36328_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M36328_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M36328_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M36328_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M36328_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M36328_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M36328_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M36328_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (FullOpts)
; ============================================================

+6 (+9.68%) : 23860.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M896_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M896_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M896_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M896_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M896_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M896_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M896_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M896_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M896_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M896_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M896_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M896_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M896_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M896_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
; ============================================================

+6 (+9.68%) : 24196.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M40467_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M40467_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M40467_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M40467_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M40467_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M40467_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M40467_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
; ============================================================

benchmarks.run_pgo.windows.x86.checked.mch

-19 (-32.76%) : 9124.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,10 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> esi single-def -; V01 loc0 [V01,T02] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1" -; V02 tmp1 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> ecx single-def +; V01 loc0 [V01,T01] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V02 cse0 [V02,T02] ( 3, 3 ) int -> esi "CSE - aggressive"
; ; Lcl frame size = 4 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push esi push eax mov dword ptr [ebp-0x08], ecx
- mov esi, ecx - ;; size=10 bbWeight=1 PerfScore 4.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx]
+ ;; size=8 bbWeight=1 PerfScore 4.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov esi, dword ptr [ecx+0x20] + mov ecx, dword ptr [esi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[eax] mov ecx, eax @@ -33,36 +31,17 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs -[ecx] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M13946_IG05 - ;; size=24 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M13946_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [esi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=27 bbWeight=1 PerfScore 11.50 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop esi pop ebp ret ;; size=4 bbWeight=1 PerfScore 2.50
-; Total bytes of code 58, prolog size 8, PerfScore 19.19, instruction count 26, allocated bytes for code 58 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 39, prolog size 8, PerfScore 18.25, instruction count 17, allocated bytes for code 39 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================

-17 (-21.79%) : 49257.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttributeSystem.__Canon:System.__Canon (Tier1)

@@ -8,13 +8,12 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T01] ( 3, 3 ) ref -> esi class-hnd single-def <System.Reflection.MemberInfo> -; V01 arg1 [V01,T02] ( 3, 3 ) ubyte -> ebx single-def -; V02 TypeCtx [V02,T05] ( 3, 2.25) int -> edi single-def -; V03 loc0 [V03,T03] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1" -; V04 tmp1 [V04,T06] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp3 [V06,T04] ( 2, 4 ) ref -> edx single-def "argument with side effect"
+; V00 arg0 [V00,T00] ( 3, 3 ) ref -> esi class-hnd single-def <System.Reflection.MemberInfo> +; V01 arg1 [V01,T01] ( 3, 3 ) ubyte -> ebx single-def +; V02 TypeCtx [V02,T05] ( 2, 2 ) int -> ecx single-def +; V03 loc0 [V03,T02] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V04 tmp1 [V04,T03] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) int -> edi "CSE - aggressive"
; ; Lcl frame size = 4 @@ -30,11 +29,11 @@ G_M29548_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov esi, ecx ; gcrRegs +[esi] mov ebx, edx
- mov edi, dword ptr [ebp+0x08]
+ mov ecx, dword ptr [ebp+0x08]
;; size=20 bbWeight=1 PerfScore 9.75
-G_M29548_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [edi+0x20] - mov ecx, dword ptr [ecx]
+G_M29548_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + mov edi, dword ptr [ecx+0x20] + mov ecx, dword ptr [edi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[eax] mov edx, eax @@ -47,30 +46,11 @@ G_M29548_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[ecx edx esi] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M29548_IG05 - ;; size=30 bbWeight=1 PerfScore 11.25 -G_M29548_IG03: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [edi+0x20] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M29548_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M29548_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [edi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M29548_IG05: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M29548_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=33 bbWeight=1 PerfScore 13.00 +G_M29548_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop ebx pop esi @@ -79,6 +59,6 @@ G_M29548_IG06: ; bbWeight=1, epilog, nogc, extend ret 4 ;; size=8 bbWeight=1 PerfScore 4.50
-; Total bytes of code 78, prolog size 13, PerfScore 27.94, instruction count 36, allocated bytes for code 78 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
+; Total bytes of code 61, prolog size 13, PerfScore 27.25, instruction count 28, allocated bytes for code 61 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
; ============================================================

-26 (-18.44%) : 19722.dasm - Microsoft.Extensions.Options.OptionsMonitor1[System.__Canon]:add__onChange(System.Action2[System.Canon,System.Canon]):this (Tier0-FullOpts)

@@ -8,25 +8,24 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T07] ( 5, 19 ) ref -> esi this class-hnd single-def <Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]> -; V01 arg1 [V01,T12] ( 4, 6 ) ref -> edi class-hnd single-def <System.Action`2[System.__Canon,System.__Canon]>
+; V00 this [V00,T09] ( 5, 19 ) ref -> esi this class-hnd single-def <Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]> +; V01 arg1 [V01,T13] ( 4, 6 ) ref -> edi class-hnd single-def <System.Action`2[System.__Canon,System.__Canon]>
; V02 loc0 [V02,T08] ( 4, 25 ) ref -> registers class-hnd <System.Action`2[System.__Canon,System.__Canon]>
-; V03 loc1 [V03,T06] ( 5, 34 ) ref -> ebx class-hnd <System.Action`2[System.__Canon,System.__Canon]> -;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Action`2[System.__Canon,System.__Canon]> -; V05 tmp0 [V05,T09] ( 4, 19 ) int -> edx "spilling helperCall" -;* V06 tmp1 [V06 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T00] ( 5, 51 ) ref -> [ebp-0x10] class-hnd "spilling QMark2" <System.Action`2[System.__Canon,System.__Canon]> -;* V09 tmp4 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V10 tmp5 [V10,T11] ( 4, 12.50) ref -> [ebp-0x14] class-hnd "Inline return value spill temp" <System.Delegate> -; V11 tmp6 [V11,T01] ( 3, 48 ) byref -> edx "Inlining Arg" -; V12 rat0 [V12,T04] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V13 rat1 [V13,T02] ( 3, 44.80) int -> edx "fgMakeTemp is creating a new local variable" -;* V14 rat2 [V14,T05] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V15 rat3 [V15,T10] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V16 rat4 [V16,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V03 loc1 [V03,T04] ( 5, 34 ) ref -> ebx class-hnd <System.Action`2[System.__Canon,System.__Canon]> +; V04 loc2 [V04,T10] ( 2, 16 ) ref -> edx class-hnd <System.Action`2[System.__Canon,System.__Canon]> +;* V05 tmp0 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V07 tmp2 [V07,T12] ( 3, 12 ) ref -> [ebp-0x10] class-hnd "Inline return value spill temp" <System.Delegate> +; V08 tmp3 [V08,T00] ( 3, 48 ) byref -> ecx "Inlining Arg" +; V09 tmp4 [V09,T06] ( 2, 32 ) int -> ecx "argument with side effect" +; V10 cse0 [V10,T07] ( 2, 16 ) int -> ecx "CSE - aggressive" +; V11 rat0 [V11,T03] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V12 rat1 [V12,T05] ( 3, 32 ) int -> ecx "runtime lookup" +; V13 rat2 [V13,T01] ( 3, 44.80) int -> edx "fgMakeTemp is creating a new local variable" +;* V14 rat3 [V14,T11] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V15 rat4 [V15,T02] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 4
G_M51739_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -34,11 +33,11 @@ G_M51739_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 8
+ push eax
mov esi, ecx mov edi, edx ; gcrRegs +[edi]
- ;; size=13 bbWeight=1 PerfScore 5.00
+ ;; size=11 bbWeight=1 PerfScore 5.75
G_M51739_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref ; gcrRegs +[esi] mov ebx, gword ptr [esi+0x10] @@ -61,12 +60,12 @@ G_M51739_IG05: ; bbWeight=2, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs= ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx] +[eax]
- mov gword ptr [ebp-0x14], eax - ; GC ptr vars +{V10} - mov eax, gword ptr [ebp-0x14]
+ mov gword ptr [ebp-0x10], eax + ; GC ptr vars +{V07} + mov eax, gword ptr [ebp-0x10]
;; size=16 bbWeight=2 PerfScore 11.00 G_M51739_IG06: ; bbWeight=8, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz
- ; GC ptr vars -{V10}
+ ; GC ptr vars -{V07}
mov ecx, dword ptr [esi] mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx] @@ -75,81 +74,55 @@ G_M51739_IG06: ; bbWeight=8, gcrefRegs=000000C9 {eax ebx esi edi}, byrefR je SHORT G_M51739_IG08 ;; size=14 bbWeight=8 PerfScore 74.00 G_M51739_IG07: ; bbWeight=6.40, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, edx
jmp SHORT G_M51739_IG09
- ;; size=2 bbWeight=6.40 PerfScore 12.80
+ ;; size=4 bbWeight=6.40 PerfScore 14.40
G_M51739_IG08: ; bbWeight=1.60, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref
- mov gword ptr [ebp-0x14], eax - ; GC ptr vars +{V10}
+ mov gword ptr [ebp-0x10], eax + ; GC ptr vars +{V07}
mov edx, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcrRegs -[eax]
- mov edx, eax - mov eax, gword ptr [ebp-0x14]
+ mov ecx, eax + mov eax, gword ptr [ebp-0x10]
; gcrRegs +[eax] ;; size=18 bbWeight=1.60 PerfScore 5.60 G_M51739_IG09: ; bbWeight=8, gcVars=00000000 {}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars -{V10} - mov ecx, eax - ; gcrRegs +[ecx] - test ecx, ecx - je SHORT G_M51739_IG12 - ;; size=6 bbWeight=8 PerfScore 12.00 -G_M51739_IG10: ; bbWeight=1, gcrefRegs=000000CB {eax ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz - cmp dword ptr [ecx], edx - je SHORT G_M51739_IG12 - ;; size=4 bbWeight=1 PerfScore 4.00 -G_M51739_IG11: ; bbWeight=0.50, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ecx] - mov ecx, edx
+ ; GC ptr vars -{V07}
mov edx, eax ; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov gword ptr [ebp-0x10], eax - ; GC ptr vars +{V08} - mov ecx, gword ptr [ebp-0x10] - ; gcrRegs +[ecx] - ;; size=15 bbWeight=0.50 PerfScore 1.75 -G_M51739_IG12: ; bbWeight=8, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax] - ; GC ptr vars -{V08} - lea edx, bword ptr [esi+0x10] - ; byrRegs +[edx] - test edx, edx - je SHORT G_M51739_IG14 - mov gword ptr [ebp-0x10], ecx - ; GC ptr vars +{V08}
+ mov edx, eax + ; gcrRegs +[edx] + lea ecx, bword ptr [esi+0x10] + ; byrRegs +[ecx] + test ecx, ecx + je SHORT G_M51739_IG11
push ebx ; gcr arg push 0
- mov ecx, edx - ; gcrRegs -[ecx] - ; byrRegs +[ecx] - mov edx, gword ptr [ebp-0x10] - ; gcrRegs +[edx] - ; byrRegs -[edx] - ; GC ptr vars -{V08}
call <unknown method>
- ; gcrRegs -[edx] +[eax]
+ ; gcrRegs -[edx]
; byrRegs -[ecx] ; gcr arg pop 1 cmp eax, ebx mov ebx, eax jne SHORT G_M51739_IG03
- ;; size=27 bbWeight=8 PerfScore 60.00 -G_M51739_IG13: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=28 bbWeight=8 PerfScore 54.00 +G_M51739_IG10: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, epilog, nogc
; gcrRegs -[eax ebx edi]
- lea esp, [ebp-0x0C]
+ pop ecx
pop ebx pop esi pop edi pop ebp ret
- ;; size=8 bbWeight=1 PerfScore 3.50 -G_M51739_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+ ;; size=6 bbWeight=1 PerfScore 3.50 +G_M51739_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
call [System.ThrowHelper:ThrowNullReferenceException()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 141, prolog size 13, PerfScore 206.15, instruction count 59, allocated bytes for code 141 (MethodHash=33ac35e4) for method Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
+; Total bytes of code 115, prolog size 11, PerfScore 184.75, instruction count 50, allocated bytes for code 115 (MethodHash=33ac35e4) for method Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
; ============================================================

+6 (+9.68%) : 113462.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M40467_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M40467_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M40467_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M40467_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M40467_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M40467_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M40467_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
; ============================================================

+6 (+9.68%) : 30788.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M34178_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M34178_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M34178_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M34178_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M34178_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M34178_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M34178_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M34178_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M34178_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M34178_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M34178_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M34178_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M34178_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M34178_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
; ============================================================

+14 (+10.61%) : 66532.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -10,23 +10,21 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 11, 7 ) ref -> esi class-hnd single-def <System.Type>
-; V01 tmp0 [V01,T06] ( 3, 2 ) ref -> eax "guarded devirt return temp"
+; V01 tmp0 [V01,T05] ( 3, 2 ) ref -> eax "guarded devirt return temp"
;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V03 tmp2 [V03,T05] ( 4, 2 ) ubyte -> edx "Inline return value spill temp" -;* V04 tmp3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V05 tmp4 [V05,T10] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V07 tmp6 [V07,T07] ( 3, 2 ) int -> ebx -; V08 tmp7 [V08,T08] ( 2, 2 ) ubyte -> edx "Inline stloc first use temp" -;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V11 tmp10 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V12 tmp11 [V12,T02] ( 2, 4 ) byref -> eax single-def "Inlining Arg" -;* V13 tmp12 [V13,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V14 tmp13 [V14,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V15 tmp14 [V15 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP -; V16 tmp15 [V16,T04] ( 3, 3 ) int -> eax "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 cse0 [V17,T01] ( 3, 3 ) int -> edi "CSE - aggressive"
+; V03 tmp2 [V03,T06] ( 3, 2 ) ubyte -> edx "Inline return value spill temp" +; V04 tmp3 [V04,T02] ( 4, 4 ) ref -> edi class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V05 tmp4 [V05 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V06 tmp5 [V06,T07] ( 3, 2 ) int -> ebx +; V07 tmp6 [V07,T08] ( 2, 2 ) ubyte -> edx "Inline stloc first use temp" +;* V08 tmp7 [V08 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V09 tmp8 [V09 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V10 tmp9 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V11 tmp10 [V11,T03] ( 2, 4 ) byref -> eax single-def "Inlining Arg" +;* V12 tmp11 [V12,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V13 tmp12 [V13 ] ( 0, 0 ) int -> zero-ref "field V05.m_asTAddr (fldOffset=0x0)" P-INDEP +; V14 tmp13 [V14,T04] ( 3, 3 ) int -> eax "field V08.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 rat0 [V15,T01] ( 5, 7.50) ref -> edi class-hnd "replacement local" <System.RuntimeType>
; ; Lcl frame size = 0 @@ -40,68 +38,78 @@ G_M8853_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, ; gcrRegs +[esi] ;; size=8 bbWeight=1 PerfScore 4.50 G_M8853_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- mov edi, dword ptr [esi] - cmp edi, 0xD1FFAB1E
+ mov ebx, esi + ; gcrRegs +[ebx] + cmp byte ptr [ebx], bl + mov edi, esi + ; gcrRegs +[edi] + test edi, edi + je SHORT G_M8853_IG04 + ;; size=10 bbWeight=1 PerfScore 4.75 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[ebx] + cmp dword ptr [edi], 0xD1FFAB1E
jne SHORT G_M8853_IG10
- mov eax, dword ptr [esi+0x0C]
+ ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M8853_IG04: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + test edi, edi + je SHORT G_M8853_IG12 + mov eax, dword ptr [edi+0x0C]
test al, 2
- jne SHORT G_M8853_IG09
+ jne SHORT G_M8853_IG11
mov eax, dword ptr [eax] and eax, 0xD1FFAB1E xor ebx, ebx cmp eax, 0xD1FFAB1E sete bl
- ;; size=34 bbWeight=1 PerfScore 10.25 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=28 bbWeight=1 PerfScore 8.25 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
movzx edx, bl
+ ;; size=3 bbWeight=1 PerfScore 0.25 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edi]
test edx, edx
- jne SHORT G_M8853_IG11 - ;; size=7 bbWeight=1 PerfScore 1.50 -G_M8853_IG04: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M8853_IG14
cmp esi, 0xD1FFAB1E
- je SHORT G_M8853_IG06 - cmp edi, 0xD1FFAB1E - jne SHORT G_M8853_IG08
+ je SHORT G_M8853_IG08 + cmp dword ptr [esi], 0xD1FFAB1E + jne SHORT G_M8853_IG13
mov ecx, esi ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx esi] +[eax]
- ;; size=24 bbWeight=1 PerfScore 5.75 -G_M8853_IG05: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=28 bbWeight=1 PerfScore 9.75 +G_M8853_IG07: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ebx pop esi pop edi pop ebp ret ;; size=5 bbWeight=1 PerfScore 3.00
-G_M8853_IG06: ; bbWeight=0.71, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M8853_IG08: ; bbWeight=0.71, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] xor eax, eax ; gcrRegs +[eax] ;; size=2 bbWeight=0.71 PerfScore 0.18
-G_M8853_IG07: ; bbWeight=0.71, epilog, nogc, extend
+G_M8853_IG09: ; bbWeight=0.71, epilog, nogc, extend
pop ebx pop esi pop edi pop ebp ret ;; size=5 bbWeight=0.71 PerfScore 2.14
-G_M8853_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[eax] +[esi] - mov ecx, esi - ; gcrRegs +[ecx] - mov eax, dword ptr [esi] - mov eax, dword ptr [eax+0x58] - call [eax+0x10]<unknown method> - ; gcrRegs -[ecx esi] +[eax] - jmp SHORT G_M8853_IG05 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG09: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M8853_IG10: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[esi]
+ xor edi, edi + ; gcrRegs +[edi] + jmp SHORT G_M8853_IG04 + ;; size=4 bbWeight=0.25 PerfScore 0.56 +G_M8853_IG11: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
xor ebx, ebx
- jmp SHORT G_M8853_IG03
+ jmp SHORT G_M8853_IG05
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG10: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M8853_IG12: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edi]
mov ecx, esi ; gcrRegs +[ecx] mov eax, dword ptr [esi] @@ -111,15 +119,23 @@ G_M8853_IG10: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 xor edx, edx test al, 32 setne dl
- test edx, edx - je SHORT G_M8853_IG04 - ;; size=21 bbWeight=0 PerfScore 0.00 -G_M8853_IG11: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; gcrRegs -[esi]
+ jmp SHORT G_M8853_IG06 + ;; size=19 bbWeight=0 PerfScore 0.00 +G_M8853_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + mov ecx, esi + ; gcrRegs +[ecx] + mov eax, dword ptr [esi] + mov eax, dword ptr [eax+0x58] + call [eax+0x10]<unknown method> + ; gcrRegs -[ecx esi] +[eax] + jmp SHORT G_M8853_IG07 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M8853_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax]
mov eax, 0xD1FFAB1E ; gcrRegs +[eax] ;; size=5 bbWeight=0 PerfScore 0.00
-G_M8853_IG12: ; bbWeight=0, epilog, nogc, extend
+G_M8853_IG15: ; bbWeight=0, epilog, nogc, extend
pop ebx pop esi pop edi @@ -127,6 +143,6 @@ G_M8853_IG12: ; bbWeight=0, epilog, nogc, extend ret ;; size=5 bbWeight=0 PerfScore 0.00
-; Total bytes of code 132, prolog size 6, PerfScore 27.32, instruction count 59, allocated bytes for code 132 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 146, prolog size 6, PerfScore 35.38, instruction count 66, allocated bytes for code 146 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================

benchmarks.run_tiered.windows.x86.checked.mch

-16 (-39.02%) : 19649.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T02] ( 4, 3.12) ref -> eax class-hnd single-def <System.Object> -; V01 TypeCtx [V01,T01] ( 4, 3.25) int -> edx single-def
+; V00 arg0 [V00,T01] ( 3, 3 ) ref -> eax class-hnd single-def <System.Object> +; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> edx single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03,T03] ( 3, 1.25) int -> edx "fgMakeTemp is creating a new local variable" -; V04 tmp1 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 4 @@ -23,39 +21,20 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov eax, ecx ; gcrRegs +[eax] ;; size=9 bbWeight=1 PerfScore 3.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz - mov ecx, eax - ; gcrRegs +[ecx] - test ecx, ecx - je SHORT G_M8451_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x20] - mov edx, dword ptr [edx] - cmp dword ptr [ecx], edx - je SHORT G_M8451_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ecx] - mov ecx, edx
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + mov ecx, dword ptr [edx+0x20] + mov ecx, dword ptr [ecx]
mov edx, eax ; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov ecx, eax - ; gcrRegs +[ecx] - ;; size=11 bbWeight=0.12 PerfScore 0.22 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ecx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 41, prolog size 7, PerfScore 9.22, instruction count 20, allocated bytes for code 41 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 25, prolog size 7, PerfScore 10.50, instruction count 12, allocated bytes for code 25 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================

-18 (-38.30%) : 24065.dasm - System.Threading.AsyncLocal`1[System.Canon]:get_Value():System.Canon:this (Tier1)

@@ -2,64 +2,43 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; Tier1 code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> esi this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> -; V01 loc0 [V01,T02] ( 3, 2.12) ref -> eax class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 4, 4 ) ref -> esi this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> +; V01 loc0 [V01,T01] ( 2, 2 ) ref -> edx class-hnd single-def <System.Object>
;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V03 tmp0 [V03,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp1 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 0 G_M1970_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M1970_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
- ;; size=6 bbWeight=1 PerfScore 2.50 -G_M1970_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, esi ; gcrRegs +[ecx] call [System.Threading.ExecutionContext:GetLocalValue(System.Threading.IAsyncLocal):System.Object] ; gcrRegs -[ecx] +[eax]
+ ; gcr arg pop 0
mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M1970_IG05 - ;; size=14 bbWeight=1 PerfScore 4.75 -G_M1970_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx]
- cmp dword ptr [edx], ecx - je SHORT G_M1970_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M1970_IG04: ; bbWeight=0.12, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M1970_IG05: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M1970_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; gcr arg pop 0 + ;; size=24 bbWeight=1 PerfScore 12.50 +G_M1970_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 47, prolog size 4, PerfScore 12.69, instruction count 22, allocated bytes for code 47 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
+; Total bytes of code 29, prolog size 1, PerfScore 15.25, instruction count 12, allocated bytes for code 29 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
; ============================================================

-19 (-32.76%) : 7625.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,10 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> esi single-def -; V01 loc0 [V01,T02] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1" -; V02 tmp1 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> ecx single-def +; V01 loc0 [V01,T01] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V02 cse0 [V02,T02] ( 3, 3 ) int -> esi "CSE - aggressive"
; ; Lcl frame size = 4 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push esi push eax mov dword ptr [ebp-0x08], ecx
- mov esi, ecx - ;; size=10 bbWeight=1 PerfScore 4.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx]
+ ;; size=8 bbWeight=1 PerfScore 4.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov esi, dword ptr [ecx+0x20] + mov ecx, dword ptr [esi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[eax] mov ecx, eax @@ -33,36 +31,17 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs -[ecx] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M13946_IG05 - ;; size=24 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M13946_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [esi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=27 bbWeight=1 PerfScore 11.50 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop esi pop ebp ret ;; size=4 bbWeight=1 PerfScore 2.50
-; Total bytes of code 58, prolog size 8, PerfScore 19.19, instruction count 26, allocated bytes for code 58 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 39, prolog size 8, PerfScore 18.25, instruction count 17, allocated bytes for code 39 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================

+6 (+9.68%) : 21314.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M34178_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M34178_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M34178_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M34178_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M34178_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M34178_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M34178_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M34178_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M34178_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M34178_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M34178_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M34178_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M34178_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M34178_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
; ============================================================

+6 (+9.68%) : 28206.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M3904_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M3904_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M3904_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M3904_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M3904_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M3904_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M3904_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M3904_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M3904_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M3904_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M3904_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M3904_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M3904_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M3904_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=4cdef0bf) for method PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=4cdef0bf) for method PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
; ============================================================

+6 (+9.68%) : 47631.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> esi -; V02 tmp0 [V02,T01] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V03 tmp1 [V03,T04] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 27 ) ref -> eax class-hnd "spilling QMark2" <<unknown class>> -; V05 cse0 [V05,T03] ( 3, 6 ) int -> edi "CSE - aggressive"
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> esi +; V02 cse0 [V02,T02] ( 3, 6 ) int -> edi "CSE - aggressive" +; V03 cse1 [V03,T01] ( 3, 6 ) ref -> ebx "CSE - aggressive"
; ; Lcl frame size = 0 @@ -21,46 +19,44 @@ G_M896_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov ebp, esp push edi push esi
- ;; size=5 bbWeight=1 PerfScore 3.25
+ push ebx + ;; size=6 bbWeight=1 PerfScore 4.25
G_M896_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz xor esi, esi mov edi, dword ptr [D1FFAB1EH] test edi, edi
- jle SHORT G_M896_IG07 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M896_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, gword ptr [D1FFAB1EH] ; static handle
+ jle SHORT G_M896_IG04 + mov ebx, gword ptr [D1FFAB1EH] + ; gcrRegs +[ebx] + mov edx, ebx + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[edx] +[eax] + ;; size=30 bbWeight=1 PerfScore 7.00 +G_M896_IG03: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + mov edx, ebx
; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M896_IG06 - ;; size=12 bbWeight=4 PerfScore 14.00 -G_M896_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [eax], ecx - je SHORT G_M896_IG06 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M896_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M896_IG06: ; bbWeight=4, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] inc esi cmp esi, edi jl SHORT G_M896_IG03
- ;; size=15 bbWeight=4 PerfScore 11.00 -G_M896_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=27 bbWeight=4 PerfScore 17.00 +G_M896_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx] + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 62, prolog size 5, PerfScore 39.00, instruction count 25, allocated bytes for code 62 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
+; Total bytes of code 68, prolog size 6, PerfScore 31.25, instruction count 26, allocated bytes for code 68 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
; ============================================================

coreclr_tests.run.windows.x86.checked.mch

-19 (-32.76%) : 305349.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,10 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> esi single-def -; V01 loc0 [V01,T02] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1" -; V02 tmp1 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> ecx single-def +; V01 loc0 [V01,T01] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V02 cse0 [V02,T02] ( 3, 3 ) int -> esi "CSE - aggressive"
; ; Lcl frame size = 4 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push esi push eax mov dword ptr [ebp-0x08], ecx
- mov esi, ecx - ;; size=10 bbWeight=1 PerfScore 4.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx]
+ ;; size=8 bbWeight=1 PerfScore 4.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov esi, dword ptr [ecx+0x20] + mov ecx, dword ptr [esi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[eax] mov ecx, eax @@ -33,36 +31,17 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs -[ecx] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M13946_IG05 - ;; size=24 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M13946_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [esi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=27 bbWeight=1 PerfScore 11.50 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop esi pop ebp ret ;; size=4 bbWeight=1 PerfScore 2.50
-; Total bytes of code 58, prolog size 8, PerfScore 19.19, instruction count 26, allocated bytes for code 58 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 39, prolog size 8, PerfScore 18.25, instruction count 17, allocated bytes for code 39 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================

-14 (-29.79%) : 165957.dasm - System.Linq.Expressions.Expression`1[System.Canon]:Compile():System.Canon:this (FullOpts)

@@ -2,71 +2,51 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 8 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> esi this class-hnd single-def <System.Linq.Expressions.Expression`1[System.__Canon]>
+; V00 this [V00,T00] ( 4, 4 ) ref -> esi this class-hnd single-def <System.Linq.Expressions.Expression`1[System.__Canon]>
;* V01 tmp0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <System.Linq.Expressions.Interpreter.LightCompiler>
-;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V03 tmp2 [V03 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V04 tmp3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.__Canon> -; V05 tmp4 [V05,T02] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1" -; V06 tmp5 [V06,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V07 tmp6 [V07,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -;* V08 tmp7 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Linq.Expressions.Interpreter.LightDelegateCreator> -;* V09 tmp8 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <System.Linq.Expressions.Interpreter.LightLambda> -;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Linq.Expressions.LambdaExpression>
+;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Linq.Expressions.Interpreter.LightDelegateCreator> +;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <System.Linq.Expressions.Interpreter.LightLambda> +;* V04 tmp3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Linq.Expressions.LambdaExpression> +; V05 tmp4 [V05,T01] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V06 tmp5 [V06,T02] ( 2, 4 ) int -> edi "argument with side effect"
; ; Lcl frame size = 0 G_M24995_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
+ push edi
push esi mov esi, ecx
+ ;; size=4 bbWeight=1 PerfScore 2.25 +G_M24995_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
- ;; size=6 bbWeight=1 PerfScore 2.50 -G_M24995_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [esi] + mov ecx, dword ptr [ecx+0x24] + mov ecx, dword ptr [ecx] + mov edi, dword ptr [ecx]
mov ecx, esi ; gcrRegs +[ecx] call [System.Linq.Expressions.Compiler.LambdaCompiler:Compile(System.Linq.Expressions.LambdaExpression):System.Delegate] ; gcrRegs -[ecx] +[eax]
+ ; gcr arg pop 0
mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M24995_IG05 - ;; size=14 bbWeight=1 PerfScore 4.75 -G_M24995_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M24995_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M24995_IG04: ; bbWeight=0.12, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, edi
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M24995_IG05: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M24995_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; gcr arg pop 0 + ;; size=26 bbWeight=1 PerfScore 12.75 +G_M24995_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
+ pop edi
ret ;; size=3 bbWeight=1 PerfScore 2.00
-; Total bytes of code 47, prolog size 4, PerfScore 12.69, instruction count 22, allocated bytes for code 47 (MethodHash=05579e5c) for method System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
+; Total bytes of code 33, prolog size 2, PerfScore 17.00, instruction count 15, allocated bytes for code 33 (MethodHash=05579e5c) for method System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
; ============================================================

-43 (-29.25%) : 165097.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)

@@ -7,18 +7,16 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 6, 4.50) ref -> esi this class-hnd single-def <Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]> -; V01 arg1 [V01,T04] ( 4, 3.12) ref -> edx class-hnd single-def <System.Object> -; V02 arg2 [V02,T10] ( 2, 1.12) ref -> edi class-hnd single-def <System.Object> -; V03 tmp0 [V03,T07] ( 2, 4 ) ref -> ebx class-hnd single-def "bubbling QMark2" <<unknown class>> -; V04 tmp1 [V04,T08] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> [ebp-0x10] class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp3 [V06,T09] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V07 tmp4 [V07,T01] ( 5, 6.75) ref -> [ebp-0x14] class-hnd "spilling QMark2" <System.__Canon> -;* V08 tmp5 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V09 tmp6 [V09,T06] ( 3, 4 ) int -> edi "VirtualCall with runtime lookup" -; V10 rat0 [V10,T05] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" -; V11 rat1 [V11,T03] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable"
+; V00 this [V00,T00] ( 5, 5 ) ref -> esi this class-hnd single-def <Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]> +; V01 arg1 [V01,T02] ( 3, 3 ) ref -> edi class-hnd single-def <System.Object> +; V02 arg2 [V02,T08] ( 1, 1 ) ref -> [ebp+0x08] class-hnd single-def <System.Object> +;* V03 tmp0 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V04 tmp1 [V04,T04] ( 3, 4 ) int -> ebx "VirtualCall with runtime lookup" +; V05 tmp2 [V05,T05] ( 2, 4 ) ref -> edi single-def "argument with side effect" +; V06 tmp3 [V06,T06] ( 2, 4 ) ref -> [ebp-0x14] spill-single-def "argument with side effect" +; V07 cse0 [V07,T07] ( 3, 3 ) int -> [ebp-0x10] spill-single-def "CSE - moderate" +; V08 rat0 [V08,T03] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" +; V09 rat1 [V09,T01] ( 3, 5.60) int -> ebx "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 8 @@ -31,103 +29,60 @@ G_M36528_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} sub esp, 8 mov esi, ecx ; gcrRegs +[esi]
- mov edi, gword ptr [ebp+0x08]
+ mov edi, edx
; gcrRegs +[edi]
- ;; size=14 bbWeight=1 PerfScore 5.75 -G_M36528_IG02: ; bbWeight=1, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - mov ebx, gword ptr [esi+0x04] - ; gcrRegs +[ebx] - mov eax, edx
+ ;; size=13 bbWeight=1 PerfScore 5.00 +G_M36528_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + mov ecx, dword ptr [esi] + mov edx, dword ptr [ecx+0x24] + mov edx, dword ptr [edx] + mov ebx, dword ptr [edx+0x08] + test ebx, ebx + je SHORT G_M36528_IG04 + ;; size=14 bbWeight=1 PerfScore 9.25 +G_M36528_IG03: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + jmp SHORT G_M36528_IG05 + ;; size=2 bbWeight=0.80 PerfScore 1.60 +G_M36528_IG04: ; bbWeight=0.20, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_RUNTIMEHANDLE_CLASS + mov ebx, eax + ;; size=12 bbWeight=0.20 PerfScore 0.30 +G_M36528_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + mov eax, gword ptr [esi+0x04]
; gcrRegs +[eax]
- test eax, eax - je SHORT G_M36528_IG05 - ;; size=9 bbWeight=1 PerfScore 3.50 -G_M36528_IG03: ; bbWeight=0.25, gcrefRegs=000000CD {eax edx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov gword ptr [ebp-0x14], eax + ; GC ptr vars +{V06}
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx]
- mov ecx, dword ptr [ecx] - cmp dword ptr [eax], ecx - je SHORT G_M36528_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M36528_IG04: ; bbWeight=0.12, gcrefRegs=000000CC {edx ebx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[edx] +[eax] - mov gword ptr [ebp-0x10], eax - ; GC ptr vars +{V05} - mov eax, gword ptr [ebp-0x10] - ;; size=11 bbWeight=0.12 PerfScore 0.38 -G_M36528_IG05: ; bbWeight=1, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz - ; GC ptr vars -{V05} - mov edx, edi - ; gcrRegs +[edx] - test edx, edx - je SHORT G_M36528_IG08 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M36528_IG06: ; bbWeight=0.25, gcrefRegs=000000CD {eax edx ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M36528_IG08 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M36528_IG07: ; bbWeight=0.12, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov gword ptr [ebp-0x10], eax - ; GC ptr vars +{V05}
+ mov edx, dword ptr [ecx] + mov dword ptr [ebp-0x10], edx + mov ecx, edx
mov edx, edi ; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx edi]
- mov gword ptr [ebp-0x14], eax - ; GC ptr vars +{V07} - mov eax, gword ptr [ebp-0x10] - mov edx, gword ptr [ebp-0x14] - ; gcrRegs +[edx] - ;; size=19 bbWeight=0.12 PerfScore 0.66 -G_M36528_IG08: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000004D {eax edx ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars -{V05 V07} - mov ecx, dword ptr [esi] - mov edi, dword ptr [ecx+0x24] - mov edi, dword ptr [edi] - mov edi, dword ptr [edi+0x08] - test edi, edi - je SHORT G_M36528_IG10 - ;; size=14 bbWeight=1 PerfScore 9.25 -G_M36528_IG09: ; bbWeight=0.80, gcrefRegs=0000004D {eax edx ebx esi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M36528_IG11 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M36528_IG10: ; bbWeight=0.20, gcrefRegs=0000004D {eax edx ebx esi}, byrefRegs=00000000 {}, byref - mov gword ptr [ebp-0x10], eax - ; GC ptr vars +{V05} - mov gword ptr [ebp-0x14], edx - ; GC ptr vars +{V07} - mov edx, 0xD1FFAB1E ; global ptr - ; gcrRegs -[edx] - call CORINFO_HELP_RUNTIMEHANDLE_CLASS - ; gcrRegs -[eax]
mov edi, eax
- mov eax, gword ptr [ebp-0x10] - ; gcrRegs +[eax] - mov edx, gword ptr [ebp-0x14]
+ ; gcrRegs +[edi] + mov ecx, dword ptr [ebp-0x10] + mov edx, gword ptr [ebp+0x08]
; gcrRegs +[edx]
- ;; size=24 bbWeight=0.20 PerfScore 1.10 -G_M36528_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000004D {eax edx ebx esi}, byrefRegs=00000000 {}, gcvars, byref - ; GC ptr vars -{V05 V07} - push edx - mov ecx, ebx
+ call CORINFO_HELP_CHKCASTANY + ; gcrRegs -[edx] + push eax + mov edx, edi + ; gcrRegs +[edx] + mov ecx, gword ptr [ebp-0x14]
; gcrRegs +[ecx]
- mov edx, eax - mov eax, edi
+ mov eax, ebx
; gcrRegs -[eax] nop
+ ; GC ptr vars -{V06}
call [eax]
- ; gcrRegs -[ecx edx ebx] - ;; size=12 bbWeight=1 PerfScore 5.00 -G_M36528_IG12: ; bbWeight=1, epilog, nogc, extend
+ ; gcrRegs -[ecx edx edi] + ;; size=53 bbWeight=1 PerfScore 22.50 +G_M36528_IG06: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -136,6 +91,6 @@ G_M36528_IG12: ; bbWeight=1, epilog, nogc, extend ret 4 ;; size=10 bbWeight=1 PerfScore 4.50
-; Total bytes of code 147, prolog size 9, PerfScore 39.23, instruction count 62, allocated bytes for code 147 (MethodHash=8499714f) for method Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
+; Total bytes of code 104, prolog size 9, PerfScore 43.15, instruction count 44, allocated bytes for code 104 (MethodHash=8499714f) for method Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
; ============================================================

+13 (+4.51%) : 461036.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b_100(System.Object):this (Tier1)

@@ -8,22 +8,22 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.ThreadPoolTaskScheduler+<>c>
-; V01 arg1 [V01,T02] ( 6, 4.12) ref -> esi class-hnd single-def <System.Object> -; V02 tmp0 [V02,T10] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 13, 17.75) ref -> edi class-hnd "spilling QMark2" <System.Threading.Tasks.Task> -;* V04 tmp2 [V04 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V06 tmp4 [V06,T06] ( 4, 2.50) ubyte -> edx "Inline return value spill temp" -; V07 tmp5 [V07,T03] ( 4, 3 ) ref -> edx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V08 tmp6 [V08,T11] ( 3, 1 ) ubyte -> edx "Inline return value spill temp" -; V09 tmp7 [V09,T07] ( 3, 2.34) byref -> edx single-def "Inlining Arg" -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> -; V11 tmp9 [V11,T12] ( 2, 1 ) int -> eax "Inline stloc first use temp" -; V12 tmp10 [V12,T09] ( 2, 2 ) byref -> edx single-def "argument with side effect" -; V13 rat0 [V13,T08] ( 3, 2 ) byref -> edx "TLS field access" -; V14 rat1 [V14,T04] ( 3, 3 ) int -> edx "TLS access" -; V15 rat2 [V15,T05] ( 3, 3 ) int -> edx "ThreadStaticBlockBase access" -; V16 rat3 [V16,T01] ( 5, 7 ) ref -> eax class-hnd "replacement local" <System.Threading.Tasks.Task>
+; V01 arg1 [V01,T03] ( 6, 4 ) ref -> esi class-hnd single-def <System.Object> +;* V02 tmp0 [V02 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V03 tmp1 [V03,T00] ( 10, 15 ) ref -> edi class-hnd single-def "Inlining Arg" <System.Threading.Tasks.Task> +;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V05 tmp3 [V05,T07] ( 4, 2.50) ubyte -> edx "Inline return value spill temp" +; V06 tmp4 [V06,T04] ( 4, 3 ) ref -> edx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V07 tmp5 [V07,T11] ( 3, 1 ) ubyte -> edx "Inline return value spill temp" +; V08 tmp6 [V08,T08] ( 3, 2.34) byref -> edx single-def "Inlining Arg" +;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> +; V10 tmp8 [V10,T12] ( 2, 1 ) int -> eax "Inline stloc first use temp" +; V11 tmp9 [V11,T10] ( 2, 2 ) byref -> edx single-def "argument with side effect" +; V12 rat0 [V12,T09] ( 3, 2 ) byref -> edx "TLS field access" +; V13 rat1 [V13,T05] ( 3, 3 ) int -> edx "TLS access" +; V14 rat2 [V14,T06] ( 3, 3 ) int -> edx "ThreadStaticBlockBase access" +; V15 rat3 [V15,T01] ( 5, 7 ) ref -> eax class-hnd "replacement local" <System.Threading.Tasks.Task> +; V16 rat4 [V16,T02] ( 5, 7 ) ref -> edi class-hnd "replacement local" <System.Threading.Tasks.Task>
; ; Lcl frame size = 0 @@ -43,7 +43,7 @@ G_M60851_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ;; size=6 bbWeight=1 PerfScore 1.50 G_M60851_IG03: ; bbWeight=0.50, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref cmp dword ptr [eax], 0xD1FFAB1E
- jne G_M60851_IG21
+ jne G_M60851_IG20
;; size=12 bbWeight=0.50 PerfScore 2.00 G_M60851_IG04: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz test eax, eax @@ -62,40 +62,30 @@ G_M60851_IG06: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 mov edi, esi ; gcrRegs +[edi] test edi, edi
- je SHORT G_M60851_IG09
+ je SHORT G_M60851_IG08
;; size=6 bbWeight=1 PerfScore 1.50
-G_M60851_IG07: ; bbWeight=0.25, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, 0xD1FFAB1E ; System.Threading.Tasks.Task - cmp dword ptr [edi], ecx - je SHORT G_M60851_IG09 - ;; size=9 bbWeight=0.25 PerfScore 1.06 -G_M60851_IG08: ; bbWeight=0.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edi] - mov edx, esi - ; gcrRegs +[edx] - call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[edx esi] +[eax] - mov edi, eax - ; gcrRegs +[edi] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M60851_IG09: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax]
+G_M60851_IG07: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + cmp dword ptr [edi], 0xD1FFAB1E + jne G_M60851_IG21 + ;; size=12 bbWeight=0.50 PerfScore 2.00 +G_M60851_IG08: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[esi]
or dword ptr [edi+0x1C], 0x20000 mov edx, gword ptr [edi+0x14] ; gcrRegs +[edx] test edx, edx
- je SHORT G_M60851_IG15 - ;; size=14 bbWeight=1 PerfScore 6.25 -G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=00000084 {edx edi}, byrefRegs=00000000 {}, byref, isz - cmp dword ptr [edx+0x1C], 1
je SHORT G_M60851_IG14
+ ;; size=14 bbWeight=1 PerfScore 6.25 +G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=00000084 {edx edi}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [edx+0x1C], 1 + je SHORT G_M60851_IG13
add edx, 36 ; gcrRegs -[edx] ; byrRegs +[edx] cmp gword ptr [edx], 0
- je SHORT G_M60851_IG12
+ je SHORT G_M60851_IG11
;; size=14 bbWeight=0.50 PerfScore 4.12
-G_M60851_IG11: ; bbWeight=0.17, gcrefRegs=00000080 {edi}, byrefRegs=00000004 {edx}, byref, isz
+G_M60851_IG10: ; bbWeight=0.17, gcrefRegs=00000080 {edi}, byrefRegs=00000004 {edx}, byref, isz
mov edx, gword ptr [edx] ; gcrRegs +[edx] ; byrRegs -[edx] @@ -103,22 +93,22 @@ G_M60851_IG11: ; bbWeight=0.17, gcrefRegs=00000080 {edi}, byrefRegs=00000 setne dl ; gcrRegs -[edx] movzx edx, dl
- jmp SHORT G_M60851_IG13
+ jmp SHORT G_M60851_IG12
;; size=14 bbWeight=0.17 PerfScore 1.41
-G_M60851_IG12: ; bbWeight=0.33, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M60851_IG11: ; bbWeight=0.33, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
xor edx, edx ;; size=2 bbWeight=0.33 PerfScore 0.08
-G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M60851_IG16
+G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz + jmp SHORT G_M60851_IG15
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
mov edx, 1
- jmp SHORT G_M60851_IG16
+ jmp SHORT G_M60851_IG15
;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
xor edx, edx ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M60851_IG16: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+G_M60851_IG15: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
test edx, edx sete dl movzx edx, dl @@ -128,9 +118,9 @@ G_M60851_IG16: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 setne cl movzx ecx, cl test edx, ecx
- je SHORT G_M60851_IG19
+ je SHORT G_M60851_IG18
;; size=33 bbWeight=1 PerfScore 6.50
-G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+G_M60851_IG16: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
mov edx, dword ptr FS:[0x002C] mov edx, dword ptr [edx] cmp dword ptr [edx+0x80], 4 @@ -143,7 +133,7 @@ G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000 ; byrRegs +[edx] add edx, 8 ;; size=36 bbWeight=0.50 PerfScore 7.25
-G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000004 {edx}, byref, isz
+G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000004 {edx}, byref, isz
add edx, 52 push 0 mov ecx, edi @@ -151,34 +141,34 @@ G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000 call [<unknown method>] ; gcrRegs -[ecx edi] ; byrRegs -[edx]
- jmp SHORT G_M60851_IG20
+ jmp SHORT G_M60851_IG19
;; size=15 bbWeight=0.50 PerfScore 3.25
-G_M60851_IG19: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[edi] mov ecx, dword ptr [edi+0x1C] and ecx, 0xD1FFAB1E cmp ecx, 0xD1FFAB1E
- je SHORT G_M60851_IG20
+ je SHORT G_M60851_IG19
lea ecx, bword ptr [edi+0x1C] ; byrRegs +[ecx] mov eax, dword ptr [edi+0x1C] or eax, 0xD1FFAB1E xchg dword ptr [ecx], eax test eax, 0xD1FFAB1E
- jne SHORT G_M60851_IG20
+ jne SHORT G_M60851_IG19
mov ecx, edi ; gcrRegs +[ecx] ; byrRegs -[ecx] call [<unknown method>] ; gcrRegs -[ecx edi] ;; size=45 bbWeight=0.50 PerfScore 15.38
-G_M60851_IG20: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M60851_IG19: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
pop esi pop edi pop ebp ret ;; size=4 bbWeight=1 PerfScore 2.50
-G_M60851_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M60851_IG20: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs +[esi] mov edx, esi ; gcrRegs +[edx] @@ -187,16 +177,27 @@ G_M60851_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi} ; gcrRegs -[edx] +[eax] jmp G_M60851_IG04 ;; size=17 bbWeight=0 PerfScore 0.00
+G_M60851_IG21: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + mov edx, esi + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; System.Threading.Tasks.Task + call CORINFO_HELP_CHKCASTCLASS_SPECIAL + ; gcrRegs -[edx esi] +[eax] + mov edi, eax + ; gcrRegs +[edi] + jmp G_M60851_IG08 + ;; size=19 bbWeight=0 PerfScore 0.00
G_M60851_IG22: ; bbWeight=0, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax esi] +[edi]
+ ; gcrRegs -[eax]
mov ecx, 4 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED ; byrRegs +[eax] mov edx, eax ; byrRegs +[edx]
- jmp SHORT G_M60851_IG18
+ jmp SHORT G_M60851_IG17
;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 288, prolog size 5, PerfScore 61.75, instruction count 92, allocated bytes for code 288 (MethodHash=8aa4124c) for method System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
+; Total bytes of code 301, prolog size 5, PerfScore 62.50, instruction count 93, allocated bytes for code 301 (MethodHash=8aa4124c) for method System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
; ============================================================

+16 (+12.31%) : 455391.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -10,23 +10,21 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 11, 7 ) ref -> esi class-hnd single-def <System.Type>
-; V01 tmp0 [V01,T05] ( 3, 2 ) ref -> eax "guarded devirt return temp"
+; V01 tmp0 [V01,T06] ( 3, 2 ) ref -> eax "guarded devirt return temp"
;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V03 tmp2 [V03,T06] ( 3, 2 ) ubyte -> edx "Inline return value spill temp" -;* V04 tmp3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V05 tmp4 [V05,T09] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V07 tmp6 [V07,T07] ( 3, 2.00) int -> ebx -; V08 tmp7 [V08,T08] ( 2, 2.00) ubyte -> edx "Inline stloc first use temp" -;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V10 tmp9 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V11 tmp10 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V12 tmp11 [V12,T02] ( 2, 4.00) byref -> eax single-def "Inlining Arg" -;* V13 tmp12 [V13,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V14 tmp13 [V14,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V15 tmp14 [V15 ] ( 0, 0 ) int -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP -; V16 tmp15 [V16,T04] ( 3, 3 ) int -> eax "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 cse0 [V17,T01] ( 3, 3 ) int -> edi "CSE - aggressive"
+; V03 tmp2 [V03,T05] ( 4, 2 ) ubyte -> edx "Inline return value spill temp" +; V04 tmp3 [V04,T02] ( 4, 4 ) ref -> edi class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V05 tmp4 [V05 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V06 tmp5 [V06,T07] ( 3, 2 ) int -> ebx +; V07 tmp6 [V07,T08] ( 2, 2 ) ubyte -> edx "Inline stloc first use temp" +;* V08 tmp7 [V08 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V09 tmp8 [V09 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V10 tmp9 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V11 tmp10 [V11,T03] ( 2, 4.00) byref -> eax single-def "Inlining Arg" +;* V12 tmp11 [V12,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V13 tmp12 [V13 ] ( 0, 0 ) int -> zero-ref "field V05.m_asTAddr (fldOffset=0x0)" P-INDEP +; V14 tmp13 [V14,T04] ( 3, 3.00) int -> eax "field V08.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 rat0 [V15,T01] ( 5, 7.50) ref -> edi class-hnd "replacement local" <System.RuntimeType>
; ; Lcl frame size = 0 @@ -40,94 +38,115 @@ G_M8853_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, ; gcrRegs +[esi] ;; size=8 bbWeight=1 PerfScore 4.50 G_M8853_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- mov edi, dword ptr [esi] - cmp edi, 0xD1FFAB1E - jne SHORT G_M8853_IG11 - mov eax, dword ptr [esi+0x0C]
+ mov ebx, esi + ; gcrRegs +[ebx] + cmp byte ptr [ebx], bl + mov edi, esi + ; gcrRegs +[edi] + test edi, edi + je SHORT G_M8853_IG05 + ;; size=10 bbWeight=1 PerfScore 4.75 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[ebx] + cmp dword ptr [edi], 0xD1FFAB1E + je SHORT G_M8853_IG05 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[edi] + xor edi, edi + ; gcrRegs +[edi] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + test edi, edi + je SHORT G_M8853_IG14 + ;; size=4 bbWeight=1 PerfScore 1.25 +G_M8853_IG06: ; bbWeight=1.00, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + mov eax, dword ptr [edi+0x0C]
test al, 2 jne SHORT G_M8853_IG13
- ;; size=17 bbWeight=1 PerfScore 6.50 -G_M8853_IG03: ; bbWeight=1.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov eax, dword ptr [eax] and eax, 0xD1FFAB1E xor ebx, ebx cmp eax, 0xD1FFAB1E sete bl
- ;; size=17 bbWeight=1.00 PerfScore 3.75 -G_M8853_IG04: ; bbWeight=1.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+ ;; size=24 bbWeight=1.00 PerfScore 7.00 +G_M8853_IG07: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
movzx edx, bl
- ;; size=3 bbWeight=1.00 PerfScore 0.25 -G_M8853_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test edx, edx
- jne SHORT G_M8853_IG09
+ jne SHORT G_M8853_IG15 + ;; size=7 bbWeight=1 PerfScore 1.50 +G_M8853_IG08: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edi]
cmp esi, 0xD1FFAB1E
- je SHORT G_M8853_IG07 - cmp edi, 0xD1FFAB1E
+ je SHORT G_M8853_IG10 + cmp dword ptr [esi], 0xD1FFAB1E
jne SHORT G_M8853_IG12 mov ecx, esi ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx esi] +[eax]
- ;; size=28 bbWeight=1 PerfScore 7.00 -G_M8853_IG06: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=24 bbWeight=1 PerfScore 8.50 +G_M8853_IG09: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ebx pop esi pop edi pop ebp ret ;; size=5 bbWeight=1 PerfScore 3.00
-G_M8853_IG07: ; bbWeight=0.58, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M8853_IG10: ; bbWeight=0.58, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] xor eax, eax ; gcrRegs +[eax] ;; size=2 bbWeight=0.58 PerfScore 0.14
-G_M8853_IG08: ; bbWeight=0.58, epilog, nogc, extend
+G_M8853_IG11: ; bbWeight=0.58, epilog, nogc, extend
pop ebx pop esi pop edi pop ebp ret ;; size=5 bbWeight=0.58 PerfScore 1.74
-G_M8853_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[eax] - mov eax, 0xD1FFAB1E - ; gcrRegs +[eax] - ;; size=5 bbWeight=0 PerfScore 0.00 -G_M8853_IG10: ; bbWeight=0, epilog, nogc, extend - pop ebx - pop esi - pop edi - pop ebp - ret - ;; size=5 bbWeight=0 PerfScore 0.00 -G_M8853_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M8853_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[esi] mov ecx, esi ; gcrRegs +[ecx] mov eax, dword ptr [esi]
+ mov eax, dword ptr [eax+0x58] + call [eax+0x10]<unknown method> + ; gcrRegs -[ecx esi] +[eax] + jmp SHORT G_M8853_IG09 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M8853_IG13: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] +[esi edi] + xor ebx, ebx + jmp SHORT G_M8853_IG07 + ;; size=4 bbWeight=0 PerfScore 0.00 +G_M8853_IG14: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edi] + mov ecx, esi + ; gcrRegs +[ecx] + mov eax, dword ptr [esi]
mov eax, dword ptr [eax+0x44] call [eax+0x0C]<unknown method> ; gcrRegs -[ecx] xor edx, edx test al, 32 setne dl
- jmp SHORT G_M8853_IG05 - ;; size=19 bbWeight=0 PerfScore 0.00 -G_M8853_IG12: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - mov ecx, esi - ; gcrRegs +[ecx] - mov eax, dword ptr [esi] - mov eax, dword ptr [eax+0x58] - call [eax+0x10]<unknown method> - ; gcrRegs -[ecx esi] +[eax] - jmp SHORT G_M8853_IG06 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax] +[esi] - xor ebx, ebx - jmp SHORT G_M8853_IG04 - ;; size=4 bbWeight=0 PerfScore 0.00
+ test edx, edx + je SHORT G_M8853_IG08 + ;; size=21 bbWeight=0 PerfScore 0.00 +G_M8853_IG15: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[esi] + mov eax, 0xD1FFAB1E + ; gcrRegs +[eax] + ;; size=5 bbWeight=0 PerfScore 0.00 +G_M8853_IG16: ; bbWeight=0, epilog, nogc, extend + pop ebx + pop esi + pop edi + pop ebp + ret + ;; size=5 bbWeight=0 PerfScore 0.00
-; Total bytes of code 130, prolog size 6, PerfScore 26.88, instruction count 58, allocated bytes for code 130 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 146, prolog size 6, PerfScore 34.44, instruction count 66, allocated bytes for code 146 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================

+34 (+566.67%) : 182676.dasm - T:TestEntryPoint():int (FullOpts)

@@ -2,7 +2,7 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; esp based frame
+; ebp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data @@ -10,21 +10,50 @@ ; ;* V00 loc0 [V00 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;* V01 tmp0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <<unknown class>>
-;* V02 tmp1 [V02,T00] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V03 tmp2 [V03,T02] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V04 tmp3 [V04,T01] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <<unknown class>>
+;* V02 tmp1 [V02,T01] ( 0, 0 ) ref -> zero-ref single-def "arr expr" +; V03 rat0 [V03,T00] ( 5, 7.50) ref -> eax class-hnd "replacement local" <<unknown class>>
; ; Lcl frame size = 0
-G_M32114_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG - ;; size=0 bbWeight=1 PerfScore 0.00 -G_M32114_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M32114_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG + push ebp + mov ebp, esp + ;; size=3 bbWeight=1 PerfScore 1.25 +G_M32114_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz + mov eax, 0xD1FFAB1E + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M32114_IG05 + ;; size=9 bbWeight=1 PerfScore 1.50 +G_M32114_IG03: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [eax], 0xD1FFAB1E + je SHORT G_M32114_IG05 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M32114_IG04: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + xor eax, eax + ; gcrRegs +[eax] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M32114_IG05: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + test eax, eax + je SHORT G_M32114_IG08 + ;; size=4 bbWeight=1 PerfScore 1.25 +G_M32114_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax]
mov eax, 100
- ;; size=5 bbWeight=1 PerfScore 0.25 -G_M32114_IG03: ; bbWeight=1, epilog, nogc, extend
+ ;; size=5 bbWeight=0.50 PerfScore 0.12 +G_M32114_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop ebp
ret
- ;; size=1 bbWeight=1 PerfScore 1.00
+ ;; size=2 bbWeight=0.50 PerfScore 0.75 +G_M32114_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref + mov eax, -1 + ;; size=5 bbWeight=0.50 PerfScore 0.12 +G_M32114_IG09: ; bbWeight=0.50, epilog, nogc, extend + pop ebp + ret + ;; size=2 bbWeight=0.50 PerfScore 0.75
-; Total bytes of code 6, prolog size 0, PerfScore 1.25, instruction count 2, allocated bytes for code 6 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
+; Total bytes of code 40, prolog size 3, PerfScore 7.81, instruction count 16, allocated bytes for code 40 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
; ============================================================

libraries.crossgen2.windows.x86.checked.mch

-34 (-58.62%) : 188346.dasm - CSharpx.Either+<>cDisplayClass13_0`1[System.Canon]:b0():System.Canon:this (FullOpts)

@@ -3,70 +3,37 @@ ; FullOpts code ; ReadyToRun compilation ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> esi this class-hnd single-def <CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]> -; V01 tmp0 [V01,T02] ( 3, 4.25) ref -> edi single-def "CASTCLASS eval op1" -; V02 tmp1 [V02,T03] ( 3, 1.25) int -> eax "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 6.75) ref -> ebx class-hnd "spilling QMark2" <System.__Canon> -; TEMP_01 int -> [ebp-0x10]
+; V00 this [V00,T00] ( 4, 4 ) ref -> esi this class-hnd single-def <CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]> +; V01 tmp0 [V01,T01] ( 2, 4 ) int -> ecx "argument with side effect"
;
-; Lcl frame size = 4
+; Lcl frame size = 0
G_M12636_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp - push edi
push esi
- push ebx - push eax
mov esi, ecx
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M12636_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
- ;; size=9 bbWeight=1 PerfScore 5.50 -G_M12636_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - mov edi, gword ptr [esi+0x04] - ; gcrRegs +[edi] - mov ebx, edi - ; gcrRegs +[ebx] - test ebx, ebx - je SHORT G_M12636_IG05 - ;; size=9 bbWeight=1 PerfScore 3.50 -G_M12636_IG03: ; bbWeight=0.25, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebx] - mov dword ptr [ebp-0x10], eax
mov ecx, dword ptr [esi] call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE]
- mov ecx, dword ptr [ebp-0x10] - cmp ecx, eax - je SHORT G_M12636_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.56 -G_M12636_IG04: ; bbWeight=0.12, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx]
+ ; gcr arg pop 0
mov ecx, eax
- mov edx, edi
+ mov edx, gword ptr [esi+0x04]
; gcrRegs +[edx] call [CORINFO_HELP_CHKCASTANY]
- ; gcrRegs -[edx edi] +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - ;; size=12 bbWeight=0.12 PerfScore 0.47 -G_M12636_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ebx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M12636_IG06: ; bbWeight=1, epilog, nogc, extend - pop ecx - pop ebx
+ ; gcrRegs -[edx] +[eax] + ; gcr arg pop 0 + ;; size=19 bbWeight=1 PerfScore 10.25 +G_M12636_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop edi - pop ebp
ret
- ;; size=6 bbWeight=1 PerfScore 3.50
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 58, prolog size 7, PerfScore 15.78, instruction count 29, allocated bytes for code 58 (MethodHash=bbb7cea3) for method CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
+; Total bytes of code 24, prolog size 1, PerfScore 13.00, instruction count 9, allocated bytes for code 24 (MethodHash=bbb7cea3) for method CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
; ============================================================

-30 (-52.63%) : 202125.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c11[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary2[System.String,System.Object]):System.Canon:this (FullOpts)

@@ -3,70 +3,42 @@ ; FullOpts code ; ReadyToRun compilation ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> edi this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> esi class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]> -; V02 tmp0 [V02,T03] ( 3, 1.25) int -> eax "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> ebx class-hnd "spilling QMark2" <System.__Canon> -; TEMP_01 int -> [ebp-0x10]
+; V00 this [V00,T00] ( 3, 3 ) ref -> esi this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> edi class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]> +; V02 tmp0 [V02,T02] ( 2, 4 ) int -> ecx "argument with side effect"
;
-; Lcl frame size = 4
+; Lcl frame size = 0
G_M31417_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push edi push esi
- push ebx - push eax - mov edi, ecx
+ mov esi, ecx + mov edi, edx
; gcrRegs +[edi]
- mov esi, edx
+ ;; size=6 bbWeight=1 PerfScore 2.50 +G_M31417_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
- ;; size=11 bbWeight=1 PerfScore 5.75 -G_M31417_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov ebx, esi - ; gcrRegs +[ebx] - test ebx, ebx - je SHORT G_M31417_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M31417_IG03: ; bbWeight=0.25, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebx] - mov dword ptr [ebp-0x10], eax - mov ecx, dword ptr [edi]
+ mov ecx, dword ptr [esi]
call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE]
- mov ecx, dword ptr [ebp-0x10] - cmp ecx, eax - je SHORT G_M31417_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.56 -G_M31417_IG04: ; bbWeight=0.12, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx]
+ ; gcr arg pop 0
mov ecx, eax
- mov edx, esi
+ mov edx, edi
; gcrRegs +[edx] call [CORINFO_HELP_CHKCASTANY]
- ; gcrRegs -[edx esi] +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - ;; size=12 bbWeight=0.12 PerfScore 0.47 -G_M31417_IG05: ; bbWeight=1, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ebx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M31417_IG06: ; bbWeight=1, epilog, nogc, extend - pop ecx - pop ebx
+ ; gcrRegs -[edx edi] +[eax] + ; gcr arg pop 0 + ;; size=18 bbWeight=1 PerfScore 8.50 +G_M31417_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi pop edi
- pop ebp
ret
- ;; size=6 bbWeight=1 PerfScore 3.50
+ ;; size=3 bbWeight=1 PerfScore 2.00
-; Total bytes of code 57, prolog size 7, PerfScore 14.03, instruction count 29, allocated bytes for code 57 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
+; Total bytes of code 27, prolog size 2, PerfScore 13.00, instruction count 12, allocated bytes for code 27 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
; ============================================================

-30 (-52.63%) : 171495.dasm - System.Linq.ParallelQuery1+<>c__11[System.Canon,System.Canon]:b1_0(System.Canon):System.__Canon:this (FullOpts)

@@ -3,70 +3,42 @@ ; FullOpts code ; ReadyToRun compilation ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> edi this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> esi class-hnd single-def <System.__Canon> -; V02 tmp0 [V02,T03] ( 3, 1.25) int -> eax "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> ebx class-hnd "spilling QMark2" <System.__Canon> -; TEMP_01 int -> [ebp-0x10]
+; V00 this [V00,T00] ( 3, 3 ) ref -> esi this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> edi class-hnd single-def <System.__Canon> +; V02 tmp0 [V02,T02] ( 2, 4 ) int -> ecx "argument with side effect"
;
-; Lcl frame size = 4
+; Lcl frame size = 0
G_M42611_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push edi push esi
- push ebx - push eax - mov edi, ecx
+ mov esi, ecx + mov edi, edx
; gcrRegs +[edi]
- mov esi, edx
+ ;; size=6 bbWeight=1 PerfScore 2.50 +G_M42611_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
- ;; size=11 bbWeight=1 PerfScore 5.75 -G_M42611_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov ebx, esi - ; gcrRegs +[ebx] - test ebx, ebx - je SHORT G_M42611_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M42611_IG03: ; bbWeight=0.25, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebx] - mov dword ptr [ebp-0x10], eax - mov ecx, dword ptr [edi]
+ mov ecx, dword ptr [esi]
call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE]
- mov ecx, dword ptr [ebp-0x10] - cmp ecx, eax - je SHORT G_M42611_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.56 -G_M42611_IG04: ; bbWeight=0.12, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx]
+ ; gcr arg pop 0
mov ecx, eax
- mov edx, esi
+ mov edx, edi
; gcrRegs +[edx] call [CORINFO_HELP_CHKCASTANY]
- ; gcrRegs -[edx esi] +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - ;; size=12 bbWeight=0.12 PerfScore 0.47 -G_M42611_IG05: ; bbWeight=1, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ebx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M42611_IG06: ; bbWeight=1, epilog, nogc, extend - pop ecx - pop ebx
+ ; gcrRegs -[edx edi] +[eax] + ; gcr arg pop 0 + ;; size=18 bbWeight=1 PerfScore 8.50 +G_M42611_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi pop edi
- pop ebp
ret
- ;; size=6 bbWeight=1 PerfScore 3.50
+ ;; size=3 bbWeight=1 PerfScore 2.00
-; Total bytes of code 57, prolog size 7, PerfScore 14.03, instruction count 29, allocated bytes for code 57 (MethodHash=645c598c) for method System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]:<Cast>b__1_0(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 27, prolog size 2, PerfScore 13.00, instruction count 12, allocated bytes for code 27 (MethodHash=645c598c) for method System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]:<Cast>b__1_0(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================

+0 (0.00%) : 203301.dasm - System.Xml.Linq.XDocument:GetFirstNodeSystem.__Canon:System.__Canon:this (FullOpts)

@@ -8,19 +8,18 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T07] ( 3, 3 ) ref -> ecx this class-hnd single-def <System.Xml.Linq.XDocument> -; V01 TypeCtx [V01,T04] ( 4, 4 ) int -> esi single-def
+; V00 this [V00,T08] ( 3, 3 ) ref -> ecx this class-hnd single-def <System.Xml.Linq.XDocument> +; V01 TypeCtx [V01,T06] ( 4, 4 ) int -> esi single-def
; V02 loc0 [V02,T01] ( 6, 18 ) ref -> ebx class-hnd <<unknown class>>
-;* V03 loc1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
+; V03 loc1 [V03,T04] ( 3, 8.50) ref -> eax class-hnd <System.__Canon>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V05 loc3 [V05,T02] ( 3, 17 ) ref -> eax "CASTCLASS eval op1" -; V06 tmp1 [V06,T08] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V07 tmp2 [V07,T00] ( 5, 20 ) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V08 tmp3 [V08,T03] ( 2, 16 ) int -> ecx "argument with side effect" -; V09 cse0 [V09,T06] ( 3, 6 ) int -> esi hoist "CSE - moderate" -; V10 cse1 [V10,T05] ( 3, 6 ) ref -> edi "CSE - moderate"
+;* V05 loc3 [V05,T05] ( 0, 0 ) int -> zero-ref "argument with side effect" +; V06 tmp1 [V06,T00] ( 3, 24 ) int -> [ebp-0x14] spill-single-def "argument with side effect" +; V07 tmp2 [V07,T02] ( 2, 16 ) ref -> edx "argument with side effect" +; V08 cse0 [V08,T03] ( 2, 5 ) int -> esi hoist "CSE - moderate" +; V09 cse1 [V09,T07] ( 3, 6 ) ref -> edi "CSE - moderate"
;
-; Lcl frame size = 4
+; Lcl frame size = 8
G_M55666_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG push ebp @@ -28,10 +27,10 @@ G_M55666_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, b push edi push esi push ebx
- push eax
+ sub esp, 8
mov dword ptr [ebp-0x10], edx mov esi, edx
- ;; size=12 bbWeight=1 PerfScore 6.50
+ ;; size=14 bbWeight=1 PerfScore 5.75
G_M55666_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs +[ecx] mov edi, gword ptr [ecx+0x10] @@ -42,7 +41,7 @@ G_M55666_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 mov ebx, eax ; gcrRegs +[ebx] test ebx, ebx
- je SHORT G_M55666_IG07
+ je SHORT G_M55666_IG04
mov ecx, esi call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE] ; gcrRegs -[eax] @@ -50,64 +49,45 @@ G_M55666_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 ;; size=27 bbWeight=1 PerfScore 10.25 G_M55666_IG03: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz mov ebx, gword ptr [ebx+0x0C]
- mov ecx, esi
+ mov eax, esi + mov dword ptr [ebp-0x14], eax + mov ecx, eax
mov edx, ebx ; gcrRegs +[edx] call [CORINFO_HELP_ISINSTANCEOFANY] ; gcrRegs -[edx] +[eax] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M55666_IG06 - ;; size=19 bbWeight=4 PerfScore 28.00 -G_M55666_IG04: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ebx edi] - mov ecx, esi - cmp dword ptr [edx], ecx - je SHORT G_M55666_IG09 - ;; size=6 bbWeight=1 PerfScore 4.25 -G_M55666_IG05: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [ebp-0x14]
call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - jmp SHORT G_M55666_IG09 - ;; size=12 bbWeight=0.50 PerfScore 2.75 -G_M55666_IG06: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax edx] +[ebx edi]
+ test eax, eax + jne SHORT G_M55666_IG06
cmp ebx, edi jne SHORT G_M55666_IG03
- ;; size=4 bbWeight=4 PerfScore 5.00 -G_M55666_IG07: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx edi]
+ ;; size=37 bbWeight=4 PerfScore 54.00 +G_M55666_IG04: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax ebx edi]
xor eax, eax ; gcrRegs +[eax] ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M55666_IG08: ; bbWeight=0.50, epilog, nogc, extend - pop ecx
+G_M55666_IG05: ; bbWeight=0.50, epilog, nogc, extend + lea esp, [ebp-0x0C]
pop ebx pop esi pop edi pop ebp ret
- ;; size=6 bbWeight=0.50 PerfScore 1.75 -G_M55666_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[eax] +[edx] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M55666_IG10: ; bbWeight=0.50, epilog, nogc, extend - pop ecx
+ ;; size=8 bbWeight=0.50 PerfScore 1.75 +G_M55666_IG06: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc + lea esp, [ebp-0x0C]
pop ebx pop esi pop edi pop ebp ret
- ;; size=6 bbWeight=0.50 PerfScore 1.75
+ ;; size=8 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 96, prolog size 12, PerfScore 60.50, instruction count 47, allocated bytes for code 96 (MethodHash=88e2268d) for method System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (FullOpts)
+; Total bytes of code 96, prolog size 14, PerfScore 73.62, instruction count 43, allocated bytes for code 96 (MethodHash=88e2268d) for method System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (FullOpts)
; ============================================================

+0 (0.00%) : 169994.dasm - Microsoft.Internal.Collections.WeakReferenceCollection1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List1[System.__Canon]:this (FullOpts)

@@ -8,21 +8,20 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T07] ( 4, 4 ) ref -> [ebp-0x3C] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]>
+; V00 this [V00,T08] ( 4, 4 ) ref -> [ebp-0x3C] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]>
; V01 loc0 [V01,T11] ( 3, 4 ) ref -> edi class-hnd exact single-def <System.Collections.Generic.List`1[System.__Canon]> ; V02 loc1 [V02 ] ( 6, 11 ) struct (16) [ebp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.List`1+Enumerator[System.WeakReference]>
-; V03 loc2 [V03,T06] ( 2, 8 ) ref -> [ebp-0x40] class-hnd spill-single-def <System.WeakReference> -;* V04 loc3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> -; V05 tmp0 [V05,T08] ( 3, 6 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]> -; V06 tmp1 [V06,T01] ( 3, 17 ) ref -> eax "CASTCLASS eval op1" -; V07 tmp2 [V07,T10] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T00] ( 5, 23 ) ref -> edx class-hnd "spilling QMark2" <System.__Canon> -; V09 tmp4 [V09,T03] ( 2, 16 ) int -> [ebp-0x34] spill-single-def "argument with side effect" -; V10 tmp5 [V10,T02] ( 2, 16 ) ref -> edx "argument with side effect" -; V11 EHSlots [V11 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar" -; V12 cse0 [V12,T05] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "CSE - aggressive" -; V13 cse1 [V13,T04] ( 7, 11 ) int -> ebx multi-def "CSE - aggressive" -; V14 cse2 [V14,T09] ( 3, 6 ) int -> esi "CSE - moderate"
+; V03 loc2 [V03,T05] ( 2, 8 ) ref -> [ebp-0x40] class-hnd spill-single-def <System.WeakReference> +; V04 loc3 [V04,T04] ( 3, 10 ) ref -> eax class-hnd <System.__Canon> +; V05 tmp0 [V05,T09] ( 3, 6 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]> +;* V06 tmp1 [V06,T06] ( 0, 0 ) int -> zero-ref "argument with side effect" +; V07 tmp2 [V07,T01] ( 2, 16 ) ref -> edx "argument with side effect" +; V08 tmp3 [V08,T00] ( 3, 24 ) int -> [ebp-0x34] spill-single-def "argument with side effect" +; V09 tmp4 [V09,T02] ( 2, 16 ) ref -> edx "argument with side effect" +; V10 EHSlots [V10 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar" +; V11 cse0 [V11,T10] ( 1, 1 ) int -> [ebp-0x38] spill-single-def hoist "CSE - moderate" +; V12 cse1 [V12,T07] ( 4, 7 ) int -> esi "CSE - moderate" +; V13 cse2 [V13,T03] ( 7, 11 ) int -> ebx multi-def "CSE - aggressive"
; ; Lcl frame size = 52 @@ -39,7 +38,7 @@ G_M63535_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov gword ptr [ebp-0x3C], ecx ; GC ptr vars +{V00} ;; size=23 bbWeight=1 PerfScore 9.83
-G_M63535_IG02: ; bbWeight=1, gcVars=00000080 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M63535_IG02: ; bbWeight=1, gcVars=00000100 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov ecx, gword ptr [ebp-0x3C] ; gcrRegs +[ecx] mov esi, dword ptr [ecx] @@ -69,8 +68,11 @@ G_M63535_IG03: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 mov edx, ebx call [<unknown method>] test eax, eax
- je SHORT G_M63535_IG09 - ;; size=21 bbWeight=1 PerfScore 7.00
+ je SHORT G_M63535_IG07 + mov ecx, esi + call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE] + mov dword ptr [ebp-0x38], eax + ;; size=32 bbWeight=1 PerfScore 11.25
G_M63535_IG04: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz lea ecx, [ebp-0x30] mov edx, ebx @@ -81,9 +83,7 @@ G_M63535_IG04: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000000 mov ecx, esi call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE] ; gcrRegs -[eax]
- mov ecx, eax - mov dword ptr [ebp-0x38], ecx - mov dword ptr [ebp-0x34], ecx
+ mov dword ptr [ebp-0x34], eax
mov ecx, gword ptr [ebp-0x40] ; gcrRegs +[ecx] cmp dword ptr [ecx], ecx @@ -97,44 +97,34 @@ G_M63535_IG04: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000000 ; gcrRegs -[edx] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M63535_IG08 - ;; size=58 bbWeight=4 PerfScore 92.00 -G_M63535_IG05: ; bbWeight=1, gcrefRegs=00000085 {eax edx edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [ebp-0x38] - cmp dword ptr [edx], ecx - je SHORT G_M63535_IG07 - ;; size=7 bbWeight=1 PerfScore 5.00 -G_M63535_IG06: ; bbWeight=0.50, gcrefRegs=00000081 {eax edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [ebp-0x34]
call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=10 bbWeight=0.50 PerfScore 1.75 -G_M63535_IG07: ; bbWeight=2, gcrefRegs=00000084 {edx edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
+ test eax, eax + je SHORT G_M63535_IG06 + ;; size=62 bbWeight=4 PerfScore 103.00 +G_M63535_IG05: ; bbWeight=2, gcrefRegs=00000081 {eax edi}, byrefRegs=00000000 {}, byref
mov ecx, edi ; gcrRegs +[ecx]
+ mov edx, eax + ; gcrRegs +[edx]
call [<unknown method>]
- ; gcrRegs -[ecx edx] - ;; size=8 bbWeight=2 PerfScore 6.50 -G_M63535_IG08: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[eax ecx edx] + ;; size=10 bbWeight=2 PerfScore 7.00 +G_M63535_IG06: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
lea ecx, [ebp-0x30] mov edx, ebx call [<unknown method>] test eax, eax jne SHORT G_M63535_IG04 ;; size=15 bbWeight=4 PerfScore 20.00
-G_M63535_IG09: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+G_M63535_IG07: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
lea ecx, [ebp-0x30] mov edx, ebx call [<unknown method>]
- jmp SHORT G_M63535_IG11
+ jmp SHORT G_M63535_IG09
;; size=13 bbWeight=1 PerfScore 5.75
-G_M63535_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M63535_IG08: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[edi] lea ecx, [ebp-0x30] mov ebx, dword ptr [(reloc)] ; System.Collections.Generic.List`1+Enumerator[System.WeakReference] @@ -143,12 +133,12 @@ G_M63535_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} pop eax jmp eax ;; size=20 bbWeight=0 PerfScore 0.00
-G_M63535_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M63535_IG09: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
; gcrRegs +[edi] mov eax, edi ; gcrRegs +[eax] ;; size=2 bbWeight=1 PerfScore 0.25
-G_M63535_IG12: ; bbWeight=1, epilog, nogc, extend
+G_M63535_IG10: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -157,9 +147,9 @@ G_M63535_IG12: ; bbWeight=1, epilog, nogc, extend ret ;; size=8 bbWeight=1 PerfScore 3.50
-; Total bytes of code 233, prolog size 20, PerfScore 174.08, instruction count 78, allocated bytes for code 233 (MethodHash=4d8107d0) for method Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List`1[System.__Canon]:this (FullOpts)
+; Total bytes of code 233, prolog size 20, PerfScore 183.08, instruction count 76, allocated bytes for code 233 (MethodHash=4d8107d0) for method Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List`1[System.__Canon]:this (FullOpts)
; ============================================================ *************** EH table for Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List`1[System.__Canon]:this 1 EH table entries, 1 total EH entries reported to VM
-EH#0: try [G_M63535_IG03..G_M63535_IG09) handled by [G_M63535_IG10..G_M63535_IG11) (fault)
+EH#0: try [G_M63535_IG03..G_M63535_IG07) handled by [G_M63535_IG08..G_M63535_IG09) (fault)
+3 (+0.70%) : 61897.dasm - Microsoft.CodeAnalysis.CSharp.BoundNodeExtensions:g__doRewrite|8_0[System.__Canon,System.__Canon,System.__Canon](Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.Func`4[System.__Canon,int,System.__Canon,System.__Canon],System.Func`5[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.__Canon,System.__Canon,System.__Canon],byref):System.__Canon (FullOpts)
@@ -9,43 +9,41 @@ ; 0 inlinees with PGO data; 6 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T21] ( 3, 3 ) ref -> [ebp-0x1C] class-hnd single-def <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> -; V01 arg1 [V01,T10] ( 6, 12 ) ref -> esi class-hnd single-def <System.__Canon> -; V02 arg2 [V02,T14] ( 5, 10 ) ref -> edi class-hnd single-def <System.Func`4[System.__Canon,int,System.__Canon,System.__Canon]> -; V03 arg3 [V03,T16] ( 3, 10 ) ref -> [ebp+0x10] class-hnd single-def <System.Func`5[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.__Canon,System.__Canon,System.__Canon]> -; V04 arg4 [V04,T15] ( 5, 10 ) byref -> ebx single-def -; V05 TypeCtx [V05,T19] ( 4, 8 ) int -> [ebp+0x08] single-def -; V06 loc0 [V06,T18] ( 4, 8 ) ref -> [ebp-0x20] ld-addr-op class-hnd <System.__Canon> -; V07 loc1 [V07,T13] ( 4, 11 ) ref -> [ebp-0x24] class-hnd spill-single-def <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator]>
+; V00 arg0 [V00,T23] ( 3, 3 ) ref -> [ebp-0x24] class-hnd single-def <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> +; V01 arg1 [V01,T09] ( 6, 12 ) ref -> esi class-hnd single-def <System.__Canon> +; V02 arg2 [V02,T12] ( 5, 10 ) ref -> edi class-hnd single-def <System.Func`4[System.__Canon,int,System.__Canon,System.__Canon]> +; V03 arg3 [V03,T14] ( 3, 10 ) ref -> [ebp+0x10] class-hnd single-def <System.Func`5[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.__Canon,System.__Canon,System.__Canon]> +; V04 arg4 [V04,T13] ( 5, 10 ) byref -> ebx single-def +; V05 TypeCtx [V05,T18] ( 4, 8 ) int -> [ebp+0x08] single-def +; V06 loc0 [V06,T17] ( 4, 8 ) ref -> [ebp-0x28] ld-addr-op class-hnd <System.__Canon> +; V07 loc1 [V07,T11] ( 4, 11 ) ref -> [ebp-0x2C] class-hnd spill-single-def <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator]>
; V08 loc2 [V08 ] ( 6, 20 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator>
-; V09 loc3 [V09,T20] ( 2, 8 ) ref -> [ebp-0x28] class-hnd spill-single-def <System.__Canon>
+; V09 loc3 [V09,T19] ( 2, 8 ) ref -> [ebp-0x30] class-hnd spill-single-def <System.__Canon>
;* V10 loc4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
-;* V11 loc5 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> -; V12 loc6 [V12,T05] ( 6, 16 ) ref -> registers class-hnd <System.__Canon> -; V13 loc7 [V13,T00] ( 6, 24 ) ref -> [ebp-0x2C] class-hnd <Microsoft.CodeAnalysis.CSharp.BoundExpression> -; V14 loc8 [V14,T12] ( 6, 12 ) int -> eax
+; V11 loc5 [V11,T15] ( 3, 10 ) ref -> eax class-hnd <System.__Canon> +; V12 loc6 [V12,T04] ( 6, 16 ) ref -> registers class-hnd <System.__Canon> +; V13 loc7 [V13,T02] ( 6, 20 ) ref -> [ebp-0x34] class-hnd <Microsoft.CodeAnalysis.CSharp.BoundExpression> +; V14 loc8 [V14,T10] ( 6, 12 ) int -> ecx
;* V15 loc9 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
-;* V16 loc10 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> -; V17 loc11 [V17,T17] ( 3, 10 ) ref -> [ebp-0x30] class-hnd spill-single-def <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> -; V18 loc12 [V18,T03] ( 3, 17 ) ref -> eax "CASTCLASS eval op1" -; V19 tmp1 [V19,T22] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V20 tmp2 [V20,T01] ( 5, 23 ) ref -> edx class-hnd "spilling QMark2" <System.__Canon> -; V21 tmp3 [V21,T04] ( 3, 17 ) ref -> eax "CASTCLASS eval op1" -; V22 tmp4 [V22,T23] ( 3, 5 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V23 tmp5 [V23,T02] ( 5, 23 ) ref -> edx class-hnd "spilling QMark2" <System.__Canon> -; V24 tmp6 [V24,T24] ( 3, 0 ) ref -> eax class-hnd exact "Single-def Box Helper" <<unknown class>> -; V25 tmp7 [V25,T25] ( 3, 0 ) ref -> eax class-hnd exact "Single-def Box Helper" <<unknown class>> -; V26 tmp8 [V26,T06] ( 2, 16 ) ref -> ecx class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> -; V27 tmp9 [V27,T26] ( 2, 0 ) ref -> eax class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> -; V28 tmp10 [V28,T27] ( 2, 0 ) ref -> esi class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundExpression> -; V29 tmp11 [V29,T07] ( 2, 16 ) ref -> ecx class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> -; V30 tmp12 [V30,T28] ( 2, 0 ) ref -> eax class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> -; V31 tmp13 [V31,T29] ( 2, 0 ) ref -> esi class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundExpression> -; V32 tmp14 [V32,T08] ( 2, 16 ) int -> edx "argument with side effect" -; V33 tmp15 [V33,T09] ( 2, 16 ) int -> ecx "argument with side effect" -; V34 cse0 [V34,T11] ( 5, 14 ) int -> [ebp-0x18] spill-single-def "CSE - moderate"
+; V16 loc10 [V16,T16] ( 3, 10 ) ref -> eax class-hnd <System.__Canon> +; V17 loc11 [V17,T22] ( 3, 6 ) ref -> [ebp-0x38] class-hnd spill-single-def <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> +; V18 loc12 [V18,T24] ( 3, 0 ) ref -> eax class-hnd exact "Single-def Box Helper" <<unknown class>> +; V19 tmp1 [V19,T25] ( 3, 0 ) ref -> eax class-hnd exact "Single-def Box Helper" <<unknown class>> +; V20 tmp2 [V20,T05] ( 2, 16 ) ref -> ecx class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> +; V21 tmp3 [V21,T26] ( 2, 0 ) ref -> eax class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> +; V22 tmp4 [V22,T27] ( 2, 0 ) ref -> esi class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundExpression> +; V23 tmp5 [V23,T06] ( 2, 16 ) ref -> ecx class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> +; V24 tmp6 [V24,T28] ( 2, 0 ) ref -> eax class-hnd exact "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator> +; V25 tmp7 [V25,T29] ( 2, 0 ) ref -> esi class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.BoundExpression> +;* V26 tmp8 [V26,T20] ( 0, 0 ) int -> zero-ref "argument with side effect" +; V27 tmp9 [V27,T00] ( 3, 24 ) int -> [ebp-0x18] spill-single-def "argument with side effect" +; V28 tmp10 [V28,T07] ( 2, 16 ) ref -> edx "argument with side effect" +;* V29 tmp11 [V29,T21] ( 0, 0 ) int -> zero-ref "argument with side effect" +; V30 tmp12 [V30,T01] ( 3, 24 ) int -> [ebp-0x1C] spill-single-def "argument with side effect" +; V31 tmp13 [V31,T08] ( 2, 16 ) ref -> edx "argument with side effect" +; V32 cse0 [V32,T03] ( 3, 12 ) int -> [ebp-0x20] spill-single-def "CSE - aggressive"
;
-; Lcl frame size = 36
+; Lcl frame size = 44
G_M31080_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -53,12 +51,12 @@ G_M31080_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 36
+ sub esp, 44
xor eax, eax mov dword ptr [ebp-0x14], eax mov eax, dword ptr [ebp+0x08] mov dword ptr [ebp-0x10], eax
- mov gword ptr [ebp-0x1C], ecx
+ mov gword ptr [ebp-0x24], ecx
; GC ptr vars +{V00} mov esi, edx ; gcrRegs +[esi] @@ -67,24 +65,24 @@ G_M31080_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, bword ptr [ebp+0x0C] ; byrRegs +[ebx] ;; size=31 bbWeight=1 PerfScore 12.00
-G_M31080_IG02: ; bbWeight=1, gcVars=00200000 {V00}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, gcvars, byref
+G_M31080_IG02: ; bbWeight=1, gcVars=00800000 {V00}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, gcvars, byref
xor ecx, ecx ; gcrRegs +[ecx]
- mov gword ptr [ebp-0x20], ecx
+ mov gword ptr [ebp-0x28], ecx
; GC ptr vars +{V06} mov ecx, dword ptr [(reloc)] ; Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator] ; gcrRegs -[ecx] call [<unknown method>] ; gcrRegs +[eax]
- mov gword ptr [ebp-0x24], eax
+ mov gword ptr [ebp-0x2C], eax
; GC ptr vars +{V07} mov ecx, dword ptr [ebp+0x08] call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE] ; gcrRegs -[eax] push eax
- mov edx, gword ptr [ebp-0x24]
+ mov edx, gword ptr [ebp-0x2C]
; gcrRegs +[edx]
- mov ecx, gword ptr [ebp-0x1C]
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx] ; GC ptr vars -{V00} call [Microsoft.CodeAnalysis.CSharp.BoundNodeExtensions:<RewriteInterpolatedStringAddition>g__pushLeftNodes|8_1[System.__Canon,System.__Canon,System.__Canon](Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator])] @@ -93,79 +91,63 @@ G_M31080_IG02: ; bbWeight=1, gcVars=00200000 {V00}, gcrefRegs=000000C0 {e G_M31080_IG03: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, byref push dword ptr [(reloc)] lea edx, [ebp-0x14]
- mov ecx, gword ptr [ebp-0x24]
+ mov ecx, gword ptr [ebp-0x2C]
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] test eax, eax
- je G_M31080_IG17
+ je G_M31080_IG11
;; size=26 bbWeight=8 PerfScore 62.00
-G_M31080_IG04: ; bbWeight=4, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, byref, isz
+G_M31080_IG04: ; bbWeight=4, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, byref
mov ecx, gword ptr [ebp-0x14] ; gcrRegs +[ecx] mov eax, gword ptr [ecx+0x10] ; gcrRegs +[eax]
- mov gword ptr [ebp-0x2C], eax
+ mov gword ptr [ebp-0x34], eax
; GC ptr vars +{V13} mov ecx, dword ptr [ebp+0x08] ; gcrRegs -[ecx] call [CORINFO_HELP_READYTORUN_GENERIC_HANDLE] ; gcrRegs -[eax]
- mov ecx, eax - mov dword ptr [ebp-0x18], ecx - mov edx, ecx - mov edx, gword ptr [ebp-0x2C]
+ mov dword ptr [ebp-0x20], eax + mov edx, eax + mov dword ptr [ebp-0x18], edx + mov ecx, edx + mov edx, gword ptr [ebp-0x34]
; gcrRegs +[edx] call [CORINFO_HELP_ISINSTANCEOFANY] ; gcrRegs -[edx] +[eax] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M31080_IG07 - ;; size=40 bbWeight=4 PerfScore 60.00 -G_M31080_IG05: ; bbWeight=1, gcVars=00002000 {V07}, gcrefRegs=000000C5 {eax edx esi edi}, byrefRegs=00000008 {ebx}, gcvars, byref, isz - ; GC ptr vars -{V06 V13}
mov ecx, dword ptr [ebp-0x18]
- cmp dword ptr [edx], ecx - je SHORT G_M31080_IG14 - ;; size=7 bbWeight=1 PerfScore 5.00 -G_M31080_IG06: ; bbWeight=0.50, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000008 {ebx}, byref, isz - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - jmp SHORT G_M31080_IG14 - ;; size=12 bbWeight=0.50 PerfScore 2.75 -G_M31080_IG07: ; bbWeight=4, gcVars=00042001 {V06 V07 V13}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, gcvars, byref - ; gcrRegs -[eax edx] - ; GC ptr vars +{V00 V06 V13 V18} - mov ecx, gword ptr [ebp-0x2C]
+ test eax, eax + jne G_M31080_IG09 + ;; size=56 bbWeight=4 PerfScore 80.00 +G_M31080_IG05: ; bbWeight=2, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, byref + ; gcrRegs -[eax] + mov ecx, gword ptr [ebp-0x34]
; gcrRegs +[ecx]
- ; GC ptr vars -{V00 V13 V18}
+ ; GC ptr vars -{V13}
call [CORINFO_HELP_READYTORUN_ISINSTANCEOF] ; gcrRegs -[ecx] +[eax] test eax, eax
- je G_M31080_IG19 - ;; size=17 bbWeight=4 PerfScore 21.00 -G_M31080_IG08: ; bbWeight=2, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, byref - ; gcrRegs -[eax] - mov eax, gword ptr [ebp-0x20] - ; gcrRegs +[eax] - ;; size=3 bbWeight=2 PerfScore 2.00 -G_M31080_IG09: ; bbWeight=4, gcVars=00002000 {V07}, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000008 {ebx}, gcvars, byref, isz
+ je G_M31080_IG13 + mov eax, gword ptr [ebp-0x28] + ;; size=20 bbWeight=2 PerfScore 12.50 +G_M31080_IG06: ; bbWeight=4, gcVars=00000800 {V07}, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000008 {ebx}, gcvars, byref, isz
; GC ptr vars -{V06}
- mov gword ptr [ebp-0x28], eax
+ mov gword ptr [ebp-0x30], eax
; GC ptr vars +{V09} mov ecx, gword ptr [ebp-0x14] ; gcrRegs +[ecx] mov ecx, gword ptr [ecx+0x14] mov eax, ecx
- mov ecx, dword ptr [ebp-0x18]
+ mov ecx, dword ptr [ebp-0x20]
; gcrRegs -[ecx]
- mov gword ptr [ebp-0x2C], eax
+ mov dword ptr [ebp-0x1C], ecx + mov gword ptr [ebp-0x34], eax
; GC ptr vars +{V13} mov edx, eax ; gcrRegs +[edx] @@ -173,38 +155,44 @@ G_M31080_IG09: ; bbWeight=4, gcVars=00002000 {V07}, gcrefRegs=000000C1 {e ; gcrRegs -[edx] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M31080_IG15 - ;; size=31 bbWeight=4 PerfScore 44.00 -G_M31080_IG10: ; bbWeight=1, gcVars=00102000 {V07 V09}, gcrefRegs=000000C5 {eax edx esi edi}, byrefRegs=00000008 {ebx}, gcvars, byref, isz - ; GC ptr vars -{V13} - mov ecx, dword ptr [ebp-0x18] - cmp dword ptr [edx], ecx - je SHORT G_M31080_IG12 - ;; size=7 bbWeight=1 PerfScore 5.00 -G_M31080_IG11: ; bbWeight=0.50, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000008 {ebx}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [ebp-0x1C]
call [CORINFO_HELP_CHKCASTANY] ; gcrRegs -[edx]
+ test eax, eax + jne SHORT G_M31080_IG10 + ;; size=43 bbWeight=4 PerfScore 64.00 +G_M31080_IG07: ; bbWeight=2, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000008 {ebx}, byref + ; gcrRegs -[eax] + mov ecx, gword ptr [ebp-0x34]
...

libraries.pmi.windows.x86.checked.mch

-14 (-42.42%) : 299274.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c11[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary2[System.String,System.Object]):System.Canon:this (FullOpts)

@@ -2,51 +2,35 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> esi this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> edx class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]> -; V02 tmp0 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> esi this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> edx class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
; ; Lcl frame size = 0 G_M31417_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
- ; gcrRegs +[esi] - ;; size=6 bbWeight=1 PerfScore 2.50 -G_M31417_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M31417_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M31417_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M31417_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref + ; gcrRegs +[edx esi]
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx]
- cmp dword ptr [eax], ecx - je SHORT G_M31417_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M31417_IG04: ; bbWeight=0.12, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M31417_IG05: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 9.00 +G_M31417_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 33, prolog size 4, PerfScore 9.12, instruction count 17, allocated bytes for code 33 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 11.75, instruction count 9, allocated bytes for code 19 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
; ============================================================

-16 (-39.02%) : 283005.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T02] ( 4, 3.12) ref -> eax class-hnd single-def <System.Object> -; V01 TypeCtx [V01,T01] ( 4, 3.25) int -> edx single-def
+; V00 arg0 [V00,T01] ( 3, 3 ) ref -> eax class-hnd single-def <System.Object> +; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> edx single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03,T03] ( 3, 1.25) int -> edx "fgMakeTemp is creating a new local variable" -; V04 tmp1 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 4 @@ -23,39 +21,20 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov eax, ecx ; gcrRegs +[eax] ;; size=9 bbWeight=1 PerfScore 3.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz - mov ecx, eax - ; gcrRegs +[ecx] - test ecx, ecx - je SHORT G_M8451_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x20] - mov edx, dword ptr [edx] - cmp dword ptr [ecx], edx - je SHORT G_M8451_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ecx] - mov ecx, edx
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + mov ecx, dword ptr [edx+0x20] + mov ecx, dword ptr [ecx]
mov edx, eax ; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov ecx, eax - ; gcrRegs +[ecx] - ;; size=11 bbWeight=0.12 PerfScore 0.22 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ecx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 41, prolog size 7, PerfScore 9.22, instruction count 20, allocated bytes for code 41 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 25, prolog size 7, PerfScore 10.50, instruction count 12, allocated bytes for code 25 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================

-16 (-39.02%) : 28948.dasm - Microsoft.FSharp.Core.Operators+Unchecked:UnboxSystem.__Canon:System.__Canon (FullOpts)

@@ -7,10 +7,8 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T02] ( 4, 3.12) ref -> eax class-hnd single-def <System.Object> -; V01 TypeCtx [V01,T01] ( 4, 3.25) int -> edx single-def -; V02 loc0 [V02,T03] ( 3, 1.25) int -> edx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V00 arg0 [V00,T01] ( 3, 3 ) ref -> eax class-hnd single-def <System.Object> +; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> edx single-def
; ; Lcl frame size = 4 @@ -22,39 +20,20 @@ G_M7606_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov eax, ecx ; gcrRegs +[eax] ;; size=9 bbWeight=1 PerfScore 3.50
-G_M7606_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz - mov ecx, eax - ; gcrRegs +[ecx] - test ecx, ecx - je SHORT G_M7606_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M7606_IG03: ; bbWeight=0.25, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x20] - mov edx, dword ptr [edx] - cmp dword ptr [ecx], edx - je SHORT G_M7606_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M7606_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ecx] - mov ecx, edx
+G_M7606_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + mov ecx, dword ptr [edx+0x20] + mov ecx, dword ptr [ecx]
mov edx, eax ; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov ecx, eax - ; gcrRegs +[ecx] - ;; size=11 bbWeight=0.12 PerfScore 0.22 -G_M7606_IG05: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ecx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M7606_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 5.25 +G_M7606_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 41, prolog size 7, PerfScore 9.22, instruction count 20, allocated bytes for code 41 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 25, prolog size 7, PerfScore 10.50, instruction count 12, allocated bytes for code 25 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================

+5 (+6.94%) : 212163.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary2[System.__Canon,System.Nullable1[int]]:Contains(System.Object):ubyte:this (FullOpts)

@@ -7,79 +7,74 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 5, 4.25) ref -> esi this class-hnd single-def <Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]> -; V01 arg1 [V01,T03] ( 4, 3.12) ref -> edx class-hnd single-def <System.Object> -; V02 tmp0 [V02,T06] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> edi class-hnd "spilling QMark2" <System.__Canon> -;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V05 tmp3 [V05,T05] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup" -; V06 rat0 [V06,T04] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" -; V07 rat1 [V07,T02] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
+; V00 this [V00,T00] ( 4, 4 ) ref -> esi this class-hnd single-def <Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]> +; V01 arg1 [V01,T02] ( 3, 3 ) ref -> edi class-hnd single-def <System.Object> +;* V02 tmp0 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V03 tmp1 [V03,T04] ( 3, 4 ) int -> [ebp-0x10] "VirtualCall with runtime lookup" +; V04 tmp2 [V04,T05] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V05 cse0 [V05,T06] ( 3, 3 ) int -> ebx "CSE - aggressive" +; V06 rat0 [V06,T03] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" +; V07 rat1 [V07,T01] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M43207_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp mov ebp, esp push edi push esi
+ push ebx + push eax
mov esi, ecx ; gcrRegs +[esi]
- ;; size=7 bbWeight=1 PerfScore 3.50 -G_M43207_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx]
mov edi, edx ; gcrRegs +[edi]
- test edi, edi - je SHORT G_M43207_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M43207_IG03: ; bbWeight=0.25, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx] - cmp dword ptr [edi], ecx - je SHORT G_M43207_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M43207_IG04: ; bbWeight=0.12, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edi] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[edx] +[eax] - mov edi, eax - ; gcrRegs +[edi] - ;; size=7 bbWeight=0.12 PerfScore 0.16 -G_M43207_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax] - mov ecx, dword ptr [esi]
+ ;; size=11 bbWeight=1 PerfScore 5.75 +G_M43207_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + mov ebx, dword ptr [esi] + mov ecx, ebx
mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx] mov eax, dword ptr [edx+0x30] test eax, eax
- je SHORT G_M43207_IG07 - ;; size=14 bbWeight=1 PerfScore 9.25 -G_M43207_IG06: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M43207_IG08 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M43207_IG07: ; bbWeight=0.20, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M43207_IG04 + ;; size=16 bbWeight=1 PerfScore 9.50 +G_M43207_IG03: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + mov dword ptr [ebp-0x10], eax + jmp SHORT G_M43207_IG05 + ;; size=5 bbWeight=0.80 PerfScore 2.40 +G_M43207_IG04: ; bbWeight=0.20, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov edx, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS
- ;; size=10 bbWeight=0.20 PerfScore 0.25 -G_M43207_IG08: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, esi - ; gcrRegs +[ecx]
+ mov dword ptr [ebp-0x10], eax + ;; size=13 bbWeight=0.20 PerfScore 0.45 +G_M43207_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + mov ecx, dword ptr [ebx+0x24] + mov ecx, dword ptr [ecx] + mov ecx, dword ptr [ecx]
mov edx, edi ; gcrRegs +[edx]
+ call CORINFO_HELP_CHKCASTANY + ; gcrRegs -[edx edi] +[eax] + mov edx, eax + ; gcrRegs +[edx] + mov ecx, esi + ; gcrRegs +[ecx] + mov eax, dword ptr [ebp-0x10] + ; gcrRegs -[eax]
nop call [eax]
- ; gcrRegs -[ecx edx edi] - ;; size=9 bbWeight=1 PerfScore 3.75 -G_M43207_IG09: ; bbWeight=1, epilog, nogc, extend
+ ; gcrRegs -[ecx edx] + ;; size=26 bbWeight=1 PerfScore 12.00 +G_M43207_IG06: ; bbWeight=1, epilog, nogc, extend + pop ecx + pop ebx
pop esi pop edi pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=6 bbWeight=1 PerfScore 3.50
-; Total bytes of code 72, prolog size 5, PerfScore 25.51, instruction count 33, allocated bytes for code 72 (MethodHash=32ef5738) for method Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 77, prolog size 7, PerfScore 33.60, instruction count 36, allocated bytes for code 77 (MethodHash=32ef5738) for method Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
; ============================================================

+20 (+7.91%) : 69159.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)

@@ -8,25 +8,24 @@ ; 2 inlinees with PGO data; 5 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T09] ( 3, 2.50) ref -> ecx this class-hnd single-def <System.Data.ColumnTypeConverter> -; V01 arg1 [V01,T10] ( 3, 2.50) ref -> edx class-hnd single-def <System.ComponentModel.ITypeDescriptorContext>
+; V00 this [V00,T08] ( 3, 2.50) ref -> ecx this class-hnd single-def <System.Data.ColumnTypeConverter> +; V01 arg1 [V01,T09] ( 3, 2.50) ref -> edx class-hnd single-def <System.ComponentModel.ITypeDescriptorContext>
; V02 arg2 [V02,T12] ( 1, 0.50) ref -> [ebp+0x0C] class-hnd single-def <System.Globalization.CultureInfo>
-; V03 arg3 [V03,T01] ( 6, 22.11) ref -> esi class-hnd single-def <System.Object> -; V04 loc0 [V04,T04] ( 8, 21.50) int -> edi -; V05 tmp0 [V05,T07] ( 2, 4 ) ubyte -> eax "Inline return value spill temp"
+; V03 arg3 [V03,T06] ( 5, 7.76) ref -> esi class-hnd single-def <System.Object> +; V04 loc0 [V04,T03] ( 10, 21.50) int -> edi +; V05 tmp0 [V05,T10] ( 2, 4 ) ubyte -> eax "Inline return value spill temp"
; V06 tmp1 [V06,T00] ( 6, 60.22) ref -> eax class-hnd exact "Inlining Arg" <System.String>
-;* V07 tmp2 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -;* V08 tmp3 [V08,T05] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V09 tmp4 [V09,T06] ( 2, 8 ) byref -> ecx "impAppendStmt"
+; V07 tmp2 [V07,T04] ( 4, 19.64) ref -> edx class-hnd exact "Inline stloc first use temp" <System.String> +; V08 tmp3 [V08,T05] ( 2, 8 ) byref -> ecx "impAppendStmt" +;* V09 tmp4 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V15 tmp10 [V15,T02] ( 3, 24 ) ref -> ecx "arr expr" -; V16 tmp11 [V16,T03] ( 3, 24 ) ref -> ecx "argument with side effect" -; V17 tmp12 [V17,T11] ( 3, 3 ) ref -> eax single-def "arr expr" -;* V18 cse0 [V18,T08] ( 0, 0 ) int -> zero-ref multi-def "CSE - moderate"
+; V14 tmp9 [V14,T01] ( 3, 24 ) ref -> ecx "arr expr" +; V15 tmp10 [V15,T02] ( 3, 24 ) ref -> ecx "argument with side effect" +; V16 tmp11 [V16,T11] ( 3, 3 ) ref -> eax single-def "arr expr" +;* V17 cse0 [V17,T07] ( 0, 0 ) int -> zero-ref multi-def "CSE - moderate"
; ; Lcl frame size = 0 @@ -41,28 +40,28 @@ G_M21223_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} G_M21223_IG02: ; bbWeight=1, gcrefRegs=00000046 {ecx edx esi}, byrefRegs=00000000 {}, byref ; gcrRegs +[ecx edx] test esi, esi
- je G_M21223_IG15
+ je G_M21223_IG16
;; size=8 bbWeight=1 PerfScore 1.25 G_M21223_IG03: ; bbWeight=0.50, gcrefRegs=00000046 {ecx edx esi}, byrefRegs=00000000 {}, byref cmp dword ptr [esi], 0xD1FFAB1E
- jne G_M21223_IG15
+ jne G_M21223_IG16
xor edi, edi test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M21223_IG18
+ je G_M21223_IG19
;; size=27 bbWeight=0.50 PerfScore 4.12 G_M21223_IG04: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[ecx edx] mov ecx, gword ptr [D1FFAB1EH] ; gcrRegs +[ecx] cmp dword ptr [ecx+0x04], 0
- jle SHORT G_M21223_IG10
+ jle SHORT G_M21223_IG11
;; size=12 bbWeight=0.50 PerfScore 3.00 G_M21223_IG05: ; bbWeight=4, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[ecx] mov ecx, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[ecx] cmp edi, dword ptr [ecx+0x04]
- jae G_M21223_IG17
+ jae G_M21223_IG18
mov ecx, gword ptr [ecx+4*edi+0x08] mov eax, dword ptr [ecx] mov eax, dword ptr [eax+0x2C] @@ -70,105 +69,117 @@ G_M21223_IG05: ; bbWeight=4, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[ecx] +[eax] cmp byte ptr [eax], al cmp eax, esi
- je SHORT G_M21223_IG12
+ je SHORT G_M21223_IG13
;; size=33 bbWeight=4 PerfScore 77.00
-G_M21223_IG06: ; bbWeight=14.11, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [eax+0x04] - cmp edx, dword ptr [esi+0x04] - jne SHORT G_M21223_IG08
+G_M21223_IG06: ; bbWeight=1.76, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref + mov edx, esi + ; gcrRegs +[edx] + test edx, edx + je G_M21223_IG20 + ;; size=10 bbWeight=1.76 PerfScore 2.65 +G_M21223_IG07: ; bbWeight=14.11, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz + mov ecx, dword ptr [eax+0x04] + cmp ecx, dword ptr [edx+0x04] + jne SHORT G_M21223_IG20
;; size=8 bbWeight=14.11 PerfScore 84.66
-G_M21223_IG07: ; bbWeight=2, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz
+G_M21223_IG08: ; bbWeight=2, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
lea ecx, bword ptr [eax+0x08] ; byrRegs +[ecx]
- mov edx, dword ptr [eax+0x04] - add edx, edx - push edx - lea edx, bword ptr [esi+0x08]
+ mov eax, dword ptr [eax+0x04] + ; gcrRegs -[eax] + add eax, eax + push eax + add edx, 8 + ; gcrRegs -[edx]
; byrRegs +[edx] call [<unknown method>]
- ; gcrRegs -[eax]
; byrRegs -[ecx edx] test eax, eax
- jne SHORT G_M21223_IG12 - ;; size=22 bbWeight=2 PerfScore 17.00 -G_M21223_IG08: ; bbWeight=4, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M21223_IG13 + ;; size=22 bbWeight=2 PerfScore 16.50 +G_M21223_IG09: ; bbWeight=4, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
inc edi test byte ptr [D1FFAB1EH], 1 ; global ptr
- je SHORT G_M21223_IG19
+ je SHORT G_M21223_IG21
;; size=10 bbWeight=4 PerfScore 17.00
-G_M21223_IG09: ; bbWeight=4, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M21223_IG10: ; bbWeight=4, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov eax, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[eax] cmp dword ptr [eax+0x04], edi jg SHORT G_M21223_IG05 ;; size=10 bbWeight=4 PerfScore 24.00
-G_M21223_IG10: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M21223_IG11: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax esi] mov eax, 0xD1FFAB1E ; gcrRegs +[eax] ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M21223_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG12: ; bbWeight=0.50, epilog, nogc, extend
pop esi pop edi pop ebp ret 8 ;; size=6 bbWeight=0.50 PerfScore 1.75
-G_M21223_IG12: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M21223_IG13: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] test byte ptr [D1FFAB1EH], 1 ; global ptr
- je SHORT G_M21223_IG20
+ je SHORT G_M21223_IG22
;; size=9 bbWeight=0.50 PerfScore 2.00
-G_M21223_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M21223_IG14: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[eax] cmp edi, dword ptr [eax+0x04]
- jae SHORT G_M21223_IG17
+ jae SHORT G_M21223_IG18
mov eax, gword ptr [eax+4*edi+0x08] ;; size=14 bbWeight=0.50 PerfScore 4.00
-G_M21223_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG15: ; bbWeight=0.50, epilog, nogc, extend
pop esi pop edi pop ebp ret 8 ;; size=6 bbWeight=0.50 PerfScore 1.75
-G_M21223_IG15: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000046 {ecx edx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M21223_IG16: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000046 {ecx edx esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] +[ecx edx esi] push gword ptr [ebp+0x0C] push esi call [System.ComponentModel.TypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this] ; gcrRegs -[ecx edx esi] +[eax] ;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M21223_IG16: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG17: ; bbWeight=0.50, epilog, nogc, extend
pop esi pop edi pop ebp ret 8 ;; size=6 bbWeight=0.50 PerfScore 1.75
-G_M21223_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M21223_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] call CORINFO_HELP_RNGCHKFAIL ;; size=5 bbWeight=0 PerfScore 0.00
-G_M21223_IG18: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M21223_IG19: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi] mov ecx, 0xD1FFAB1E mov edx, 54 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M21223_IG04 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M21223_IG19: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M21223_IG20: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + inc edi + test byte ptr [D1FFAB1EH], 1 ; global ptr + jne SHORT G_M21223_IG10 + ;; size=10 bbWeight=0 PerfScore 0.00 +G_M21223_IG21: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E mov edx, 54 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
- jmp SHORT G_M21223_IG09
+ jmp SHORT G_M21223_IG10
;; size=17 bbWeight=0 PerfScore 0.00
-G_M21223_IG20: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M21223_IG22: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi] mov ecx, 0xD1FFAB1E mov edx, 54 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
- jmp SHORT G_M21223_IG13
+ jmp SHORT G_M21223_IG14
;; size=17 bbWeight=0 PerfScore 0.00
-; Total bytes of code 253, prolog size 5, PerfScore 246.16, instruction count 77, allocated bytes for code 253 (MethodHash=3d9fad18) for method System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
+; Total bytes of code 273, prolog size 5, PerfScore 248.31, instruction count 83, allocated bytes for code 273 (MethodHash=3d9fad18) for method System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
; ============================================================

+26 (+15.29%) : 197944.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper2[System.__Canon,System.Nullable1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)

@@ -7,25 +7,24 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 10, 6 ) ref -> esi this class-hnd single-def <Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]> -; V01 arg1 [V01,T01] ( 7, 3.75) ref -> edx class-hnd single-def <System.Object> -; V02 tmp0 [V02,T10] ( 2, 2 ) ref -> edi class-hnd single-def "bubbling QMark2" <<unknown class>> -; V03 tmp1 [V03,T13] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T02] ( 5, 3.75) ref -> ebx class-hnd "spilling QMark2" <System.__Canon> -;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V06 tmp4 [V06,T08] ( 3, 2 ) int -> eax "VirtualCall with runtime lookup" -; V07 tmp5 [V07,T11] ( 2, 2 ) ref -> edi class-hnd single-def "bubbling QMark2" <<unknown class>> -; V08 tmp6 [V08,T14] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V09 tmp7 [V09,T03] ( 5, 3.75) ref -> ebx class-hnd "spilling QMark2" <System.__Canon> -;* V10 tmp8 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V11 tmp9 [V11,T09] ( 3, 2 ) int -> eax "VirtualCall with runtime lookup" -; V12 cse0 [V12,T12] ( 3, 1.50) ref -> edi "CSE - moderate" -; V13 rat0 [V13,T06] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V14 rat1 [V14,T04] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V15 rat2 [V15,T07] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V16 rat3 [V16,T05] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V00 this [V00,T00] ( 8, 5.50) ref -> esi this class-hnd single-def <Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]> +; V01 arg1 [V01,T01] ( 5, 3.50) ref -> edi class-hnd single-def <System.Object> +;* V02 tmp0 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V03 tmp1 [V03,T07] ( 3, 2 ) int -> [ebp-0x10] "VirtualCall with runtime lookup" +;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V05 tmp3 [V05,T08] ( 3, 2 ) int -> [ebp-0x14] "VirtualCall with runtime lookup" +; V06 tmp4 [V06,T09] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V07 tmp5 [V07,T10] ( 2, 2 ) ref -> ebx single-def "argument with side effect" +; V08 tmp6 [V08,T11] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V09 tmp7 [V09,T12] ( 2, 2 ) ref -> [ebp-0x1C] spill-single-def "argument with side effect" +; V10 cse0 [V10,T13] ( 3, 1.50) ref -> ebx "CSE - moderate" +; V11 cse1 [V11,T02] ( 6, 3 ) int -> [ebp-0x18] multi-def "CSE - aggressive" +; V12 rat0 [V12,T05] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V13 rat1 [V13,T03] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +; V14 rat2 [V14,T06] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V15 rat3 [V15,T04] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 0
+; Lcl frame size = 16
G_M50150_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG push ebp @@ -33,142 +32,134 @@ G_M50150_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, b push edi push esi push ebx
+ sub esp, 16
mov esi, ecx ; gcrRegs +[esi]
- ;; size=8 bbWeight=1 PerfScore 4.50 -G_M50150_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - cmp gword ptr [esi+0x08], 0 - je SHORT G_M50150_IG11 - ;; size=6 bbWeight=1 PerfScore 4.00 -G_M50150_IG03: ; bbWeight=0.50, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - mov edi, gword ptr [esi+0x08]
+ mov edi, edx
; gcrRegs +[edi]
- mov ebx, edx - ; gcrRegs +[ebx] - test ebx, ebx - je SHORT G_M50150_IG06 - ;; size=9 bbWeight=0.50 PerfScore 1.75 -G_M50150_IG04: ; bbWeight=0.25, gcrefRegs=000000CC {edx ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx] - cmp dword ptr [ebx], ecx - je SHORT G_M50150_IG06 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M50150_IG05: ; bbWeight=0.12, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[edx] +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - ;; size=7 bbWeight=0.12 PerfScore 0.16 -G_M50150_IG06: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax] - mov ecx, dword ptr [esi]
+ ;; size=13 bbWeight=1 PerfScore 5.00 +G_M50150_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + cmp gword ptr [esi+0x08], 0 + je SHORT G_M50150_IG08 + ;; size=6 bbWeight=1 PerfScore 4.00 +G_M50150_IG03: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + mov ebx, dword ptr [esi] + mov ecx, ebx
mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx] mov eax, dword ptr [edx+0x10] test eax, eax
- je SHORT G_M50150_IG08 - ;; size=14 bbWeight=0.50 PerfScore 4.62 -G_M50150_IG07: ; bbWeight=0.40, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M50150_IG09 - ;; size=2 bbWeight=0.40 PerfScore 0.80 -G_M50150_IG08: ; bbWeight=0.10, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M50150_IG05 + ;; size=16 bbWeight=0.50 PerfScore 4.75 +G_M50150_IG04: ; bbWeight=0.40, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + mov dword ptr [ebp-0x14], eax + jmp SHORT G_M50150_IG06 + ;; size=5 bbWeight=0.40 PerfScore 1.20 +G_M50150_IG05: ; bbWeight=0.10, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov edx, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS
- ;; size=10 bbWeight=0.10 PerfScore 0.12 -G_M50150_IG09: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref - mov ecx, edi - ; gcrRegs +[ecx] - mov edx, ebx
+ mov dword ptr [ebp-0x14], eax + ;; size=13 bbWeight=0.10 PerfScore 0.23 +G_M50150_IG06: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + mov edx, gword ptr [esi+0x08]
; gcrRegs +[edx]
+ mov gword ptr [ebp-0x1C], edx + ; GC ptr vars +{V09} + mov ecx, dword ptr [ebx+0x24] + mov ecx, dword ptr [ecx] + mov ecx, dword ptr [ecx] + mov edx, edi + call CORINFO_HELP_CHKCASTANY + ; gcrRegs -[edx edi] +[eax] + mov edx, eax + ; gcrRegs +[edx] + mov ecx, gword ptr [ebp-0x1C] + ; gcrRegs +[ecx] + mov eax, dword ptr [ebp-0x14] + ; gcrRegs -[eax]
nop
+ ; GC ptr vars -{V09}
call [eax]
- ; gcrRegs -[ecx edx ebx edi] - ;; size=9 bbWeight=0.50 PerfScore 1.88 -G_M50150_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ ; gcrRegs -[ecx edx] + ;; size=33 bbWeight=0.50 PerfScore 7.88 +G_M50150_IG07: ; bbWeight=0.50, epilog, nogc, extend + lea esp, [ebp-0x0C]
pop ebx pop esi pop edi pop ebp ret
- ;; size=5 bbWeight=0.50 PerfScore 1.50 -G_M50150_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs +[edx] - mov edi, gword ptr [esi+0x0C]
+ ;; size=8 bbWeight=0.50 PerfScore 1.75 +G_M50150_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[edi]
- test edi, edi - je SHORT G_M50150_IG19 - mov ebx, edx
+ mov ebx, gword ptr [esi+0x0C]
; gcrRegs +[ebx] test ebx, ebx
- je SHORT G_M50150_IG14 - ;; size=13 bbWeight=0.50 PerfScore 2.38 -G_M50150_IG12: ; bbWeight=0.25, gcrefRegs=000000CC {edx ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx] - cmp dword ptr [ebx], ecx - je SHORT G_M50150_IG14 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M50150_IG13: ; bbWeight=0.12, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[edx] +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - ;; size=7 bbWeight=0.12 PerfScore 0.16 -G_M50150_IG14: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax]
+ je SHORT G_M50150_IG13
mov ecx, dword ptr [esi]
+ mov eax, ecx + mov dword ptr [ebp-0x18], eax + mov ecx, eax
mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx]
- mov eax, dword ptr [edx+0x14] - test eax, eax - je SHORT G_M50150_IG16 - ;; size=14 bbWeight=0.50 PerfScore 4.62 -G_M50150_IG15: ; bbWeight=0.40, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M50150_IG17 - ;; size=2 bbWeight=0.40 PerfScore 0.80 -G_M50150_IG16: ; bbWeight=0.10, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref
+ mov edx, dword ptr [edx+0x14] + test edx, edx + je SHORT G_M50150_IG10 + ;; size=28 bbWeight=0.50 PerfScore 7.00 +G_M50150_IG09: ; bbWeight=0.40, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz + mov dword ptr [ebp-0x10], edx + jmp SHORT G_M50150_IG11 + ;; size=5 bbWeight=0.40 PerfScore 1.20 +G_M50150_IG10: ; bbWeight=0.10, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref
mov edx, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS
- ;; size=10 bbWeight=0.10 PerfScore 0.12 -G_M50150_IG17: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref - mov ecx, edi - ; gcrRegs +[ecx] - mov edx, ebx
+ mov dword ptr [ebp-0x10], eax + ;; size=13 bbWeight=0.10 PerfScore 0.23 +G_M50150_IG11: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref + mov eax, dword ptr [ebp-0x18] + mov ecx, dword ptr [eax+0x24] + mov ecx, dword ptr [ecx] + mov ecx, dword ptr [ecx] + mov edx, edi
; gcrRegs +[edx]
+ call CORINFO_HELP_CHKCASTANY + ; gcrRegs -[edx edi] +[eax] + mov edx, eax + ; gcrRegs +[edx] + mov ecx, ebx + ; gcrRegs +[ecx] + mov eax, dword ptr [ebp-0x10] + ; gcrRegs -[eax]
nop call [eax]
- ; gcrRegs -[ecx edx ebx edi] - ;; size=9 bbWeight=0.50 PerfScore 1.88 -G_M50150_IG18: ; bbWeight=0.50, epilog, nogc, extend
+ ; gcrRegs -[ecx edx ebx] + ;; size=29 bbWeight=0.50 PerfScore 6.50 +G_M50150_IG12: ; bbWeight=0.50, epilog, nogc, extend + lea esp, [ebp-0x0C]
pop ebx pop esi pop edi pop ebp ret
- ;; size=5 bbWeight=0.50 PerfScore 1.50 -G_M50150_IG19: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs +[edx]
+ ;; size=8 bbWeight=0.50 PerfScore 1.75 +G_M50150_IG13: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs +[edi]
mov ecx, gword ptr [esi+0x04] ...

libraries_tests.run.windows.x86.Release.mch

-16 (-39.02%) : 544490.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -8,11 +8,9 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 43152 ; Final local variable assignments ;
-; V00 arg0 [V00,T02] ( 4, 3.25) ref -> eax class-hnd single-def <System.Object> -; V01 TypeCtx [V01,T01] ( 4, 3.50) int -> edx single-def
+; V00 arg0 [V00,T01] ( 3, 3 ) ref -> eax class-hnd single-def <System.Object> +; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> edx single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03,T03] ( 3, 2.50) int -> edx "fgMakeTemp is creating a new local variable" -; V04 tmp1 [V04,T00] ( 5, 7.50) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 4 @@ -24,39 +22,20 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov eax, ecx ; gcrRegs +[eax] ;; size=9 bbWeight=1 PerfScore 3.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz - mov ecx, eax - ; gcrRegs +[ecx] - test ecx, ecx - je SHORT G_M8451_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x20] - mov edx, dword ptr [edx] - cmp dword ptr [ecx], edx - je SHORT G_M8451_IG05 - ;; size=9 bbWeight=0.50 PerfScore 4.00 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ecx] - mov ecx, edx
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + mov ecx, dword ptr [edx+0x20] + mov ecx, dword ptr [ecx]
mov edx, eax ; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov ecx, eax - ; gcrRegs +[ecx] - ;; size=11 bbWeight=0.25 PerfScore 0.44 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, ecx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 41, prolog size 7, PerfScore 11.44, instruction count 20, allocated bytes for code 41 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 25, prolog size 7, PerfScore 10.50, instruction count 12, allocated bytes for code 25 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================

-18 (-38.30%) : 113550.dasm - System.Threading.AsyncLocal`1[System.Canon]:get_Value():System.Canon:this (Tier1)

@@ -2,64 +2,43 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; Tier1 code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> esi this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> -; V01 loc0 [V01,T02] ( 3, 2.12) ref -> eax class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 4, 4 ) ref -> esi this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> +; V01 loc0 [V01,T01] ( 2, 2 ) ref -> edx class-hnd single-def <System.Object>
;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V03 tmp0 [V03,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp1 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 0 G_M1970_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M1970_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
- ;; size=6 bbWeight=1 PerfScore 2.50 -G_M1970_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, esi ; gcrRegs +[ecx] call [System.Threading.ExecutionContext:GetLocalValue(System.Threading.IAsyncLocal):System.Object] ; gcrRegs -[ecx] +[eax]
+ ; gcr arg pop 0
mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M1970_IG05 - ;; size=14 bbWeight=1 PerfScore 4.75 -G_M1970_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx]
- cmp dword ptr [edx], ecx - je SHORT G_M1970_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M1970_IG04: ; bbWeight=0.12, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M1970_IG05: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M1970_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; gcr arg pop 0 + ;; size=24 bbWeight=1 PerfScore 12.50 +G_M1970_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 47, prolog size 4, PerfScore 12.69, instruction count 22, allocated bytes for code 47 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
+; Total bytes of code 29, prolog size 1, PerfScore 15.25, instruction count 12, allocated bytes for code 29 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
; ============================================================

-14 (-34.15%) : 106154.dasm - Microsoft.Extensions.DependencyInjection.ServiceDescriptor:get_KeyedImplementationFactory():System.Func`3[System.IServiceProvider,System.Object,System.Object]:this (Tier1)

@@ -3,55 +3,38 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; ebp based frame
+; esp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 165 ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 4 ) ref -> ecx this class-hnd single-def <Microsoft.Extensions.DependencyInjection.ServiceDescriptor> -; V01 tmp0 [V01,T02] ( 3, 4.50) ref -> edx single-def "CASTCLASS eval op1" -; V02 tmp1 [V02,T03] ( 3, 2.50) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 7.50) ref -> eax class-hnd "spilling QMark2" <System.Func`3[System.IServiceProvider,System.Object,System.Object]>
+; V00 this [V00,T00] ( 4, 4 ) ref -> ecx this class-hnd single-def <Microsoft.Extensions.DependencyInjection.ServiceDescriptor>
; ; Lcl frame size = 0 G_M44006_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp - ;; size=3 bbWeight=1 PerfScore 1.25
+ ;; size=0 bbWeight=1 PerfScore 0.00
G_M44006_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs +[ecx] cmp gword ptr [ecx+0x04], 0
- je SHORT G_M44006_IG06
+ je SHORT G_M44006_IG04
mov edx, gword ptr [ecx+0x14] ; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M44006_IG05 - ;; size=15 bbWeight=1 PerfScore 7.50 -G_M44006_IG03: ; bbWeight=0.50, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ecx]
mov ecx, 0xD1FFAB1E ; System.Func`3[System.IServiceProvider,System.Object,System.Object]
- cmp dword ptr [eax], ecx - je SHORT G_M44006_IG05 - ;; size=9 bbWeight=0.50 PerfScore 2.12 -G_M44006_IG04: ; bbWeight=0.25, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
+ ; gcrRegs -[ecx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.25 PerfScore 0.25 -G_M44006_IG05: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc - pop ebp
+ ;; size=19 bbWeight=1 PerfScore 7.25 +G_M44006_IG03: ; bbWeight=1, epilog, nogc, extend
ret
- ;; size=2 bbWeight=1 PerfScore 1.50 -G_M44006_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+ ;; size=1 bbWeight=1 PerfScore 1.00 +G_M44006_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] call [Microsoft.Extensions.DependencyInjection.ServiceDescriptor:ThrowNonKeyedDescriptor()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 41, prolog size 3, PerfScore 12.62, instruction count 16, allocated bytes for code 41 (MethodHash=4da25419) for method Microsoft.Extensions.DependencyInjection.ServiceDescriptor:get_KeyedImplementationFactory():System.Func`3[System.IServiceProvider,System.Object,System.Object]:this (Tier1)
+; Total bytes of code 27, prolog size 0, PerfScore 8.25, instruction count 8, allocated bytes for code 27 (MethodHash=4da25419) for method Microsoft.Extensions.DependencyInjection.ServiceDescriptor:get_KeyedImplementationFactory():System.Func`3[System.IServiceProvider,System.Object,System.Object]:this (Tier1)
; ============================================================

+18 (+7.44%) : 159546.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedSystem.__Canon:System.__Canon:this (Tier1)

@@ -11,27 +11,27 @@ ; ; V00 this [V00,T00] ( 9, 4.86) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.SyntaxNode> ; V01 arg1 [V01,T01] ( 5, 4.20) byref -> edi single-def
-; V02 arg2 [V02,T09] ( 4, 1.33) int -> ebx single-def -; V03 TypeCtx [V03,T10] ( 2, 1.30) int -> [ebp+0x08] single-def -; V04 loc0 [V04,T04] ( 4, 3.60) ref -> [ebp-0x14] class-hnd <System.__Canon>
+; V02 arg2 [V02,T08] ( 4, 1.33) int -> [ebp+0x0C] single-def +; V03 TypeCtx [V03,T07] ( 2, 1.60) int -> [ebp+0x08] single-def +; V04 loc0 [V04,T03] ( 4, 3.60) ref -> [ebp-0x14] class-hnd <System.__Canon>
;* V05 loc1 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <Microsoft.CodeAnalysis.GreenNode> ;* V06 loc2 [V06 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ; V07 loc3 [V07,T02] ( 5, 5.32) ref -> ecx class-hnd single-def "spilling ret_expr" <Microsoft.CodeAnalysis.GreenNode> ;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling ret_expr"
-;* V09 tmp2 [V09 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V10 tmp3 [V10,T07] ( 3, 1.50) int -> ecx "fgMakeTemp is creating a new local variable" -; V11 tmp4 [V11,T03] ( 5, 4.50) ref -> edx class-hnd "spilling QMark2" <System.__Canon> -;* V12 tmp5 [V12 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V13 tmp6 [V13,T05] ( 7, 3.00) ref -> [ebp-0x18] "guarded devirt return temp" -;* V14 tmp7 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.QualifiedNameSyntax> -; V15 tmp8 [V15,T11] ( 4, 1.20) int -> ebx "guarded devirt return temp" -;* V16 tmp9 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.CSharp.Syntax.QualifiedNameSyntax> -; V17 tmp10 [V17,T08] ( 4, 1.35) ref -> eax "guarded devirt return temp" -;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.IdentifierNameSyntax> -; V19 tmp12 [V19,T06] ( 5, 2.70) ref -> eax class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax> -;* V20 tmp13 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.__Canon>
+; V09 tmp2 [V09,T06] ( 2, 2.40) ref -> edx class-hnd single-def "impAppendStmt" <System.__Canon> +;* V10 tmp3 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V11 tmp4 [V11,T04] ( 7, 3.00) ref -> [ebp-0x18] "guarded devirt return temp" +;* V12 tmp5 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.QualifiedNameSyntax> +; V13 tmp6 [V13,T09] ( 4, 1.20) int -> registers "guarded devirt return temp" +;* V14 tmp7 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.CSharp.Syntax.QualifiedNameSyntax> +; V15 tmp8 [V15,T10] ( 3, 1.20) ref -> eax "guarded devirt return temp" +;* V16 tmp9 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.IdentifierNameSyntax> +; V17 tmp10 [V17,T05] ( 5, 2.70) ref -> eax class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax> +;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.__Canon> +; TEMP_02 ref -> [ebp-0x1C] +; TEMP_01 int -> [ebp-0x20]
;
-; Lcl frame size = 12
+; Lcl frame size = 20
G_M56915_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -39,66 +39,75 @@ G_M56915_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 12
+ sub esp, 20 + xor eax, eax + mov dword ptr [ebp-0x1C], eax
mov eax, dword ptr [ebp+0x08] mov dword ptr [ebp-0x10], eax mov esi, ecx ; gcrRegs +[esi] mov edi, edx ; byrRegs +[edi]
- mov ebx, dword ptr [ebp+0x0C] - ;; size=22 bbWeight=1 PerfScore 9.00 -G_M56915_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz
+ mov eax, dword ptr [ebp+0x0C] + ;; size=27 bbWeight=1 PerfScore 10.25 +G_M56915_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
mov edx, gword ptr [edi] ; gcrRegs +[edx] mov gword ptr [ebp-0x14], edx ; GC ptr vars +{V04} test edx, edx
- jne SHORT G_M56915_IG13 - ;; size=9 bbWeight=1 PerfScore 4.25 -G_M56915_IG03: ; bbWeight=0.73, gcVars=00000010 {V04}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref
+ jne G_M56915_IG13 + ;; size=13 bbWeight=1 PerfScore 4.25 +G_M56915_IG03: ; bbWeight=0.73, gcVars=00000008 {V04}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref
; gcrRegs -[edx] mov ecx, gword ptr [esi+0x0C] ; gcrRegs +[ecx] cmp dword ptr [ecx], 0xD1FFAB1E
- je G_M56915_IG20
+ je G_M56915_IG14
;; size=15 bbWeight=0.73 PerfScore 4.40 G_M56915_IG04: ; bbWeight=0.46, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000080 {edi}, byref
- mov edx, ebx
+ mov dword ptr [ebp+0x0C], eax + mov edx, eax
mov eax, dword ptr [ecx] mov eax, dword ptr [eax+0x30] call [eax+0x10]<unknown method> ; gcrRegs -[ecx] +[eax]
- ;; size=10 bbWeight=0.46 PerfScore 3.35 -G_M56915_IG05: ; bbWeight=0.73, gcrefRegs=00000041 {eax esi}, byrefRegs=00000080 {edi}, byref
+ ;; size=13 bbWeight=0.46 PerfScore 3.81 +G_M56915_IG05: ; bbWeight=0.73, gcrefRegs=00000041 {eax esi}, byrefRegs=00000080 {edi}, byref, isz
mov gword ptr [ebp-0x18], eax
- ; GC ptr vars +{V13}
+ ; GC ptr vars +{V11}
test eax, eax mov edx, gword ptr [ebp-0x14] ; gcrRegs +[edx]
- je G_M56915_IG18 - ;; size=14 bbWeight=0.73 PerfScore 2.38 -G_M56915_IG06: ; bbWeight=0.60, gcVars=00000020 {V13}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref, isz
+ je SHORT G_M56915_IG11 + ;; size=10 bbWeight=0.73 PerfScore 2.38 +G_M56915_IG06: ; bbWeight=0.60, gcVars=00000010 {V11}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref
; gcrRegs -[eax edx] ; GC ptr vars -{V04} cmp dword ptr [esi], 0xD1FFAB1E
- je SHORT G_M56915_IG16 - ;; size=8 bbWeight=0.60 PerfScore 2.40
+ je G_M56915_IG16 + ;; size=12 bbWeight=0.60 PerfScore 2.40
G_M56915_IG07: ; bbWeight=0.33, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref mov ecx, esi ; gcrRegs +[ecx]
- mov edx, ebx - mov ebx, dword ptr [esi] - mov ebx, dword ptr [ebx+0x30]
+ mov gword ptr [ebp-0x1C], ecx + mov edx, dword ptr [ebp+0x0C] + mov ecx, dword ptr [esi] + ; gcrRegs -[ecx] + mov ecx, dword ptr [ecx+0x30] + mov dword ptr [ebp-0x20], ecx + mov ecx, gword ptr [ebp-0x1C] + ; gcrRegs +[ecx] + mov ebx, dword ptr [ebp-0x20]
call [ebx]Microsoft.CodeAnalysis.SyntaxNode:GetChildPosition(int):int:this ; gcrRegs -[ecx] mov ebx, eax
- ;; size=13 bbWeight=0.33 PerfScore 2.56
+ ;; size=26 bbWeight=0.33 PerfScore 4.12
G_M56915_IG08: ; bbWeight=0.60, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz mov eax, gword ptr [ebp-0x18] ; gcrRegs +[eax] cmp dword ptr [eax], 0xD1FFAB1E
- je SHORT G_M56915_IG14
+ je SHORT G_M56915_IG15
;; size=11 bbWeight=0.60 PerfScore 3.00 G_M56915_IG09: ; bbWeight=0.33, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref ; gcrRegs -[eax] @@ -112,39 +121,65 @@ G_M56915_IG09: ; bbWeight=0.33, gcrefRegs=00000040 {esi}, byrefRegs=00000 mov eax, dword ptr [eax] ; gcrRegs -[eax] mov eax, dword ptr [eax+0x3C]
- ; GC ptr vars -{V13}
+ ; GC ptr vars -{V11}
call [eax+0x0C]<unknown method> ; gcrRegs -[ecx edx esi] +[eax] ;; size=16 bbWeight=0.33 PerfScore 3.13
-G_M56915_IG10: ; bbWeight=0.60, gcrefRegs=00000001 {eax}, byrefRegs=00000080 {edi}, byref, isz
+G_M56915_IG10: ; bbWeight=0.60, gcrefRegs=00000001 {eax}, byrefRegs=00000080 {edi}, byref + mov ebx, dword ptr [ebp+0x08] + mov ecx, dword ptr [ebx+0x20] + mov ecx, dword ptr [ecx]
mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M56915_IG17 - ;; size=6 bbWeight=0.60 PerfScore 0.90 -G_M56915_IG11: ; bbWeight=0.30, gcrefRegs=00000005 {eax edx}, byrefRegs=00000080 {edi}, byref, isz - mov esi, dword ptr [ebp+0x08] - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M56915_IG17 - ;; size=12 bbWeight=0.30 PerfScore 2.70 -G_M56915_IG12: ; bbWeight=0.15, gcrefRegs=00000001 {eax}, byrefRegs=00000080 {edi}, byref, isz
+ call CORINFO_HELP_CHKCASTANY
; gcrRegs -[edx]
- jmp SHORT G_M56915_IG15 - ;; size=2 bbWeight=0.15 PerfScore 0.30 -G_M56915_IG13: ; bbWeight=0.50, gcVars=00000010 {V04}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[eax]
+ mov edx, eax + ; gcrRegs +[edx] + push 0 + mov ecx, edi + ; byrRegs +[ecx] + call <unknown method> + ; gcrRegs -[edx] + ; byrRegs -[ecx] + mov edx, gword ptr [edi] + ; gcrRegs +[edx] + mov esi, edx + ; gcrRegs +[esi] + mov edx, esi + ;; size=32 bbWeight=0.60 PerfScore 6.75 +G_M56915_IG11: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax esi]
; byrRegs -[edi]
- ; GC ptr vars +{V04}
+ mov eax, edx + ; gcrRegs +[eax] + ;; size=2 bbWeight=1 PerfScore 0.25 +G_M56915_IG12: ; bbWeight=1, epilog, nogc, extend + lea esp, [ebp-0x0C] + pop ebx + pop esi + pop edi + pop ebp + ret 8 + ;; size=10 bbWeight=1 PerfScore 4.50 +G_M56915_IG13: ; bbWeight=0.50, gcVars=00000008 {V04}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax edx] + ; GC ptr vars +{V03 V04}
mov edx, gword ptr [ebp-0x14] ; gcrRegs +[edx]
- jmp SHORT G_M56915_IG18
+ jmp SHORT G_M56915_IG11
;; size=5 bbWeight=0.50 PerfScore 1.50
-G_M56915_IG14: ; bbWeight=0.27, gcVars=00000020 {V13}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref, isz - ; gcrRegs -[edx] +[esi]
+G_M56915_IG14: ; bbWeight=0.27, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000080 {edi}, byref + ; gcrRegs -[edx] +[ecx esi]
; byrRegs +[edi]
- ; GC ptr vars -{V04} +{V13}
+ mov dword ptr [ebp+0x0C], eax + mov edx, eax + call [Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.QualifiedNameSyntax:GetSlot(int):Microsoft.CodeAnalysis.GreenNode:this] + ; gcrRegs -[ecx] +[eax] + jmp G_M56915_IG05 + ;; size=16 bbWeight=0.27 PerfScore 1.70 +G_M56915_IG15: ; bbWeight=0.27, gcVars=00000010 {V11}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref, isz + ; gcrRegs -[eax] + ; GC ptr vars -{V03} +{V11}
mov ecx, 0xD1FFAB1E ; Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax] @@ -153,7 +188,7 @@ G_M56915_IG14: ; bbWeight=0.27, gcVars=00000020 {V13}, gcrefRegs=00000040 ; byrRegs +[edx] mov ebx, gword ptr [ebp-0x18] ; gcrRegs +[ebx]
- ; GC ptr vars -{V13}
+ ; GC ptr vars -{V04 V11}
call CORINFO_HELP_ASSIGN_REF_EBX ; gcrRegs -[ebx] ; byrRegs -[edx] @@ -164,65 +199,18 @@ G_M56915_IG14: ; bbWeight=0.27, gcVars=00000020 {V13}, gcrefRegs=00000040 ; byrRegs -[edx] jmp SHORT G_M56915_IG10 ;; size=34 bbWeight=0.27 PerfScore 2.23
-G_M56915_IG15: ; bbWeight=0.15, gcrefRegs=00000001 {eax}, byrefRegs=00000080 {edi}, byref, isz - mov edx, eax - ; gcrRegs +[edx] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
...

+18 (+7.44%) : 180000.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b_100(System.Object):this (Tier1)

@@ -8,17 +8,17 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.ThreadPoolTaskScheduler+<>c>
-; V01 arg1 [V01,T02] ( 6, 4.12) ref -> esi class-hnd single-def <System.Object> -; V02 tmp0 [V02,T09] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 10, 13.75) ref -> edi class-hnd "spilling QMark2" <System.Threading.Tasks.Task> -;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V05 tmp3 [V05,T08] ( 4, 1.50) ubyte -> ebx "Inline return value spill temp" -; V06 tmp4 [V06,T05] ( 4, 2 ) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V07 tmp5 [V07,T07] ( 2, 2 ) byref -> edx single-def "argument with side effect" -; V08 rat0 [V08,T06] ( 3, 2 ) byref -> edx "TLS field access" -; V09 rat1 [V09,T03] ( 3, 3 ) int -> edx "TLS access" -; V10 rat2 [V10,T04] ( 3, 3 ) int -> edx "ThreadStaticBlockBase access" -; V11 rat3 [V11,T01] ( 5, 7 ) ref -> eax class-hnd "replacement local" <System.Threading.Tasks.Task>
+; V01 arg1 [V01,T03] ( 6, 4 ) ref -> esi class-hnd single-def <System.Object> +; V02 tmp0 [V02,T00] ( 7, 11 ) ref -> edi class-hnd single-def "Inlining Arg" <System.Threading.Tasks.Task> +;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V04 tmp2 [V04,T09] ( 4, 1.50) ubyte -> ebx "Inline return value spill temp" +; V05 tmp3 [V05,T06] ( 4, 2 ) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V06 tmp4 [V06,T08] ( 2, 2 ) byref -> edx single-def "argument with side effect" +; V07 rat0 [V07,T07] ( 3, 2 ) byref -> edx "TLS field access" +; V08 rat1 [V08,T04] ( 3, 3 ) int -> edx "TLS access" +; V09 rat2 [V09,T05] ( 3, 3 ) int -> edx "ThreadStaticBlockBase access" +; V10 rat3 [V10,T01] ( 5, 7 ) ref -> eax class-hnd "replacement local" <System.Threading.Tasks.Task> +; V11 rat4 [V11,T02] ( 5, 7 ) ref -> edi class-hnd "replacement local" <System.Threading.Tasks.Task>
; ; Lcl frame size = 0 @@ -39,7 +39,7 @@ G_M60851_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ;; size=6 bbWeight=1 PerfScore 1.50 G_M60851_IG03: ; bbWeight=0.50, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref cmp dword ptr [eax], 0xD1FFAB1E
- jne G_M60851_IG16
+ jne G_M60851_IG12
;; size=12 bbWeight=0.50 PerfScore 2.00 G_M60851_IG04: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz xor ecx, ecx @@ -50,21 +50,25 @@ G_M60851_IG04: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=0000 mov edi, esi ; gcrRegs +[edi] test edi, edi
- jne SHORT G_M60851_IG11
+ je SHORT G_M60851_IG06
;; size=19 bbWeight=1 PerfScore 6.00
-G_M60851_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M60851_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + cmp dword ptr [edi], 0xD1FFAB1E + jne G_M60851_IG13 + ;; size=12 bbWeight=0.50 PerfScore 2.00 +G_M60851_IG06: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi] or dword ptr [edi+0x1C], 0x20000 mov ecx, gword ptr [edi+0x14] ; gcrRegs +[ecx] test ecx, ecx
- jne G_M60851_IG17
+ jne G_M60851_IG14
;; size=18 bbWeight=1 PerfScore 6.25
-G_M60851_IG06: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M60851_IG07: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[ecx] xor ebx, ebx ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M60851_IG07: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+G_M60851_IG08: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
xor edx, edx test ebx, ebx sete dl @@ -74,22 +78,22 @@ G_M60851_IG07: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 setne cl movzx ecx, cl test edx, ecx
- je SHORT G_M60851_IG15 - ;; size=32 bbWeight=1 PerfScore 6.50 -G_M60851_IG08: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ je G_M60851_IG17 + ;; size=36 bbWeight=1 PerfScore 6.50 +G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
mov edx, dword ptr FS:[0x002C] mov edx, dword ptr [edx+0x0C] cmp dword ptr [edx+0x80], 3
- jl SHORT G_M60851_IG14
+ jl SHORT G_M60851_IG16
mov edx, dword ptr [edx+0x84] mov edx, dword ptr [edx+0x0C] test edx, edx
- je SHORT G_M60851_IG14
+ je SHORT G_M60851_IG16
mov edx, bword ptr [edx] ; byrRegs +[edx] add edx, 8 ;; size=37 bbWeight=0.50 PerfScore 7.25
-G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000004 {edx}, byref
+G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000004 {edx}, byref
add edx, 52 push 0 mov ecx, edi @@ -98,51 +102,14 @@ G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000 ; gcrRegs -[ecx edi] ; byrRegs -[edx] ;; size=13 bbWeight=0.50 PerfScore 2.25
-G_M60851_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M60851_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ebx pop esi pop edi pop ebp ret ;; size=5 bbWeight=1 PerfScore 3.00
-G_M60851_IG11: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs +[esi edi] - mov ecx, 0xD1FFAB1E ; System.Threading.Tasks.Task - cmp dword ptr [edi], ecx - je SHORT G_M60851_IG05 - ;; size=9 bbWeight=0.25 PerfScore 1.06 -G_M60851_IG12: ; bbWeight=0.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[edi] - mov edx, esi - ; gcrRegs +[edx] - call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[edx esi] +[eax] - mov edi, eax - ; gcrRegs +[edi] - jmp SHORT G_M60851_IG05 - ;; size=11 bbWeight=0.12 PerfScore 0.44 -G_M60851_IG13: ; bbWeight=0, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax] - mov ebx, 1 - jmp SHORT G_M60851_IG07 - ;; size=7 bbWeight=0 PerfScore 0.00 -G_M60851_IG14: ; bbWeight=0, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, 3 - call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED - ; byrRegs +[eax] - mov edx, eax - ; byrRegs +[edx] - jmp SHORT G_M60851_IG09 - ;; size=14 bbWeight=0 PerfScore 0.00 -G_M60851_IG15: ; bbWeight=0, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - ; byrRegs -[eax edx] - mov ecx, edi - ; gcrRegs +[ecx] - call [System.Threading.Tasks.Task:ExecuteEntryCancellationRequestedOrCanceled():this] - ; gcrRegs -[ecx edi] - jmp SHORT G_M60851_IG10 - ;; size=10 bbWeight=0 PerfScore 0.00 -G_M60851_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M60851_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs +[esi] mov edx, esi ; gcrRegs +[edx] @@ -151,19 +118,50 @@ G_M60851_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[edx] +[eax] jmp G_M60851_IG04 ;; size=17 bbWeight=0 PerfScore 0.00
-G_M60851_IG17: ; bbWeight=0, gcrefRegs=00000082 {ecx edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax esi] +[ecx edi]
+G_M60851_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + mov edx, esi + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; System.Threading.Tasks.Task + call CORINFO_HELP_CHKCASTCLASS_SPECIAL + ; gcrRegs -[edx esi] +[eax] + mov edi, eax + ; gcrRegs +[edi] + jmp G_M60851_IG06 + ;; size=19 bbWeight=0 PerfScore 0.00 +G_M60851_IG14: ; bbWeight=0, gcrefRegs=00000082 {ecx edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] +[ecx]
cmp dword ptr [ecx+0x1C], 1
- je SHORT G_M60851_IG13
+ je SHORT G_M60851_IG15
add ecx, 36 ; gcrRegs -[ecx] ; byrRegs +[ecx] call [System.Threading.CancellationToken:get_IsCancellationRequested():ubyte:this] ; byrRegs -[ecx] mov ebx, eax
- jmp G_M60851_IG07
+ jmp G_M60851_IG08
;; size=22 bbWeight=0 PerfScore 0.00
+G_M60851_IG15: ; bbWeight=0, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref + mov ebx, 1 + jmp G_M60851_IG08 + ;; size=10 bbWeight=0 PerfScore 0.00 +G_M60851_IG16: ; bbWeight=0, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz + mov ecx, 3 + call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED + ; byrRegs +[eax] + mov edx, eax + ; byrRegs +[edx] + jmp SHORT G_M60851_IG10 + ;; size=14 bbWeight=0 PerfScore 0.00 +G_M60851_IG17: ; bbWeight=0, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz + ; byrRegs -[eax edx] + mov ecx, edi + ; gcrRegs +[ecx] + call [System.Threading.Tasks.Task:ExecuteEntryCancellationRequestedOrCanceled():this] + ; gcrRegs -[ecx edi] + jmp SHORT G_M60851_IG11 + ;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 242, prolog size 6, PerfScore 40.88, instruction count 78, allocated bytes for code 242 (MethodHash=8aa4124c) for method System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
+; Total bytes of code 260, prolog size 6, PerfScore 41.38, instruction count 78, allocated bytes for code 260 (MethodHash=8aa4124c) for method System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
; ============================================================

+10 (+10.99%) : 401036.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)

@@ -10,12 +10,10 @@ ; Final local variable assignments ; ; V00 this [V00,T02] ( 3, 3 ) ref -> ecx this class-hnd single-def <OLEDB.Test.ModuleCore.CTestCase>
-; V01 tmp0 [V01,T03] ( 3, 4.50) ref -> edx single-def "CASTCLASS eval op1" -; V02 tmp1 [V02,T06] ( 3, 2.50) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 7.50) ref -> eax class-hnd "spilling QMark2" <OLEDB.Test.ModuleCore.CTestModule> -; V04 cse0 [V04,T05] ( 4, 3 ) ref -> esi "CSE - aggressive" -; V05 rat0 [V05,T04] ( 3, 4 ) ref -> edx "Spilling to split statement for tree" -; V06 rat1 [V06,T01] ( 6, 7 ) ref -> eax class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
+; V01 cse0 [V01,T04] ( 5, 3 ) ref -> esi "CSE - aggressive" +; V02 rat0 [V02,T03] ( 3, 4 ) ref -> edx "Spilling to split statement for tree" +; V03 rat1 [V03,T00] ( 6, 7 ) ref -> ecx class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule> +; V04 rat2 [V04,T01] ( 5, 7 ) ref -> eax class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
; ; Lcl frame size = 0 @@ -30,56 +28,54 @@ G_M5100_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 ; gcrRegs +[esi] mov edx, esi ; gcrRegs +[edx]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax
+ mov ecx, edx + test ecx, ecx
jne SHORT G_M5100_IG08 ;; size=11 bbWeight=1 PerfScore 3.75
-G_M5100_IG03: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ecx edx] - test eax, eax
+G_M5100_IG03: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edx] + test ecx, ecx
je SHORT G_M5100_IG10 ;; size=4 bbWeight=1 PerfScore 1.25 G_M5100_IG04: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax] - mov edx, esi - ; gcrRegs +[edx] - mov eax, edx
+ ; gcrRegs -[ecx] + mov eax, esi
; gcrRegs +[eax] test eax, eax
- je SHORT G_M5100_IG07 - ;; size=8 bbWeight=1 PerfScore 1.75 -G_M5100_IG05: ; bbWeight=0.50, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M5100_IG06 + ;; size=6 bbWeight=1 PerfScore 1.50 +G_M5100_IG05: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
; gcrRegs -[esi]
- mov ecx, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule - cmp dword ptr [eax], ecx - je SHORT G_M5100_IG07 - ;; size=9 bbWeight=0.50 PerfScore 2.12 -G_M5100_IG06: ; bbWeight=0.25, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[edx] +[eax] - ;; size=5 bbWeight=0.25 PerfScore 0.25 -G_M5100_IG07: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
pop esi pop ebp ret ;; size=3 bbWeight=1 PerfScore 2.00
-G_M5100_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs +[edx esi]
+G_M5100_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs +[esi]
cmp dword ptr [eax], 0xD1FFAB1E
+ jne SHORT G_M5100_IG12 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M5100_IG07: ; bbWeight=0.22, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[esi] + jmp SHORT G_M5100_IG05 + ;; size=2 bbWeight=0.22 PerfScore 0.45 +G_M5100_IG08: ; bbWeight=0.50, gcrefRegs=00000046 {ecx edx esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] +[ecx edx esi] + cmp dword ptr [ecx], 0xD1FFAB1E
je SHORT G_M5100_IG03 ;; size=8 bbWeight=0.50 PerfScore 2.00 G_M5100_IG09: ; bbWeight=0, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax]
+ ; gcrRegs -[ecx]
mov ecx, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule call CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[edx] +[eax]
- test eax, eax
+ mov ecx, eax + ; gcrRegs +[ecx] + test ecx, ecx
jne SHORT G_M5100_IG04
- ;; size=14 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
G_M5100_IG10: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[eax]
+ ; gcrRegs -[eax ecx]
mov edx, esi ; gcrRegs +[edx] mov ecx, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestCase @@ -96,7 +92,16 @@ G_M5100_IG11: ; bbWeight=0, epilog, nogc, extend pop ebp ret ;; size=3 bbWeight=0 PerfScore 0.00
+G_M5100_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax] +[esi] + mov edx, esi + ; gcrRegs +[edx] + mov ecx, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule + call CORINFO_HELP_CHKCASTCLASS + ; gcrRegs -[edx esi] +[eax] + jmp SHORT G_M5100_IG05 + ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 91, prolog size 4, PerfScore 15.38, instruction count 36, allocated bytes for code 91 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
+; Total bytes of code 101, prolog size 4, PerfScore 15.20, instruction count 39, allocated bytes for code 101 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
; ============================================================

librariestestsnotieredcompilation.run.windows.x86.Release.mch

-14 (-42.42%) : 91003.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c11[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary2[System.String,System.Object]):System.Canon:this (FullOpts)

@@ -2,51 +2,35 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> esi this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> edx class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]> -; V02 tmp0 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> esi this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> edx class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
; ; Lcl frame size = 0 G_M31417_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
- ; gcrRegs +[esi] - ;; size=6 bbWeight=1 PerfScore 2.50 -G_M31417_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M31417_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M31417_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M31417_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref + ; gcrRegs +[edx esi]
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx]
- cmp dword ptr [eax], ecx - je SHORT G_M31417_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M31417_IG04: ; bbWeight=0.12, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M31417_IG05: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 9.00 +G_M31417_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 33, prolog size 4, PerfScore 9.12, instruction count 17, allocated bytes for code 33 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 11.75, instruction count 9, allocated bytes for code 19 (MethodHash=9c5d8546) for method System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
; ============================================================

-41 (-42.27%) : 62857.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>cDisplayClass1_0`2[System.Canon,System.Canon]:b0(System.Object,System.Object):this (FullOpts)

@@ -2,104 +2,65 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T03] ( 5, 3.50) ref -> esi this class-hnd single-def <System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T04] ( 4, 3.12) ref -> edx class-hnd single-def <System.Object> -; V02 arg2 [V02,T07] ( 2, 1.12) ref -> edi class-hnd single-def <System.Object> -; V03 tmp0 [V03,T02] ( 3, 6 ) ref -> ebx class-hnd single-def "bubbling QMark2" <<unknown class>> -; V04 tmp1 [V04,T05] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> [ebp-0x10] class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp3 [V06,T06] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V07 tmp4 [V07,T01] ( 5, 6.75) ref -> edx class-hnd "spilling QMark2" <System.__Canon>
+; V00 this [V00,T00] ( 4, 4 ) ref -> esi this class-hnd single-def <System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T02] ( 3, 3 ) ref -> edx class-hnd single-def <System.Object> +; V02 arg2 [V02,T05] ( 1, 1 ) ref -> [esp+0x14] class-hnd single-def <System.Object> +; V03 tmp0 [V03,T03] ( 2, 4 ) ref -> [esp+0x00] spill-single-def "argument with side effect" +; V04 tmp1 [V04,T01] ( 3, 6 ) ref -> edi single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) int -> ebx "CSE - aggressive"
; ; Lcl frame size = 4 G_M23900_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push edi push esi push ebx push eax mov esi, ecx
- ; gcrRegs +[esi] - mov edi, gword ptr [ebp+0x08]
+ ;; size=6 bbWeight=1 PerfScore 4.25 +G_M23900_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref + ; gcrRegs +[edx esi] + mov edi, gword ptr [esi+0x04]
; gcrRegs +[edi]
- ;; size=12 bbWeight=1 PerfScore 6.50 -G_M23900_IG02: ; bbWeight=1, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - mov ebx, gword ptr [esi+0x04] - ; gcrRegs +[ebx] - mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M23900_IG05 - ;; size=9 bbWeight=1 PerfScore 3.50 -G_M23900_IG03: ; bbWeight=0.25, gcrefRegs=000000CD {eax edx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx] - cmp dword ptr [eax], ecx - je SHORT G_M23900_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M23900_IG04: ; bbWeight=0.12, gcrefRegs=000000CC {edx ebx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
+ mov ebx, dword ptr [ecx] + mov ecx, dword ptr [ebx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- mov gword ptr [ebp-0x10], eax - ; GC ptr vars +{V05} - mov eax, gword ptr [ebp-0x10] - ;; size=11 bbWeight=0.12 PerfScore 0.38 -G_M23900_IG05: ; bbWeight=1, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz - ; GC ptr vars -{V05} - mov edx, edi - ; gcrRegs +[edx] - test edx, edx - je SHORT G_M23900_IG08 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M23900_IG06: ; bbWeight=0.25, gcrefRegs=000000CD {eax edx ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx+0x04] - cmp dword ptr [edx], ecx - je SHORT G_M23900_IG08 - ;; size=14 bbWeight=0.25 PerfScore 3.00 -G_M23900_IG07: ; bbWeight=0.12, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov gword ptr [ebp-0x10], eax - ; GC ptr vars +{V05} - mov edx, edi
+ ; gcr arg pop 0 + mov gword ptr [esp], eax + ; GC ptr vars +{V03} + mov ecx, dword ptr [ebx+0x04] + mov edx, gword ptr [esp+0x14]
; gcrRegs +[edx] call CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[edx edi] - mov edx, eax
+ ; gcrRegs -[edx] + ; gcr arg pop 0 + push eax + ; gcr arg push 0 + mov edx, gword ptr [esp+0x04]
; gcrRegs +[edx]
- mov eax, gword ptr [ebp-0x10] - ;; size=15 bbWeight=0.12 PerfScore 0.44 -G_M23900_IG08: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000004D {eax edx ebx esi}, byrefRegs=00000000 {}, gcvars, byref - ; GC ptr vars -{V05} - push edx - mov edx, eax - mov ecx, gword ptr [ebx+0x04]
+ mov ecx, gword ptr [edi+0x04]
; gcrRegs +[ecx]
- call [ebx+0x0C]<unknown method> - ; gcrRegs -[eax ecx edx ebx] - ;; size=9 bbWeight=1 PerfScore 6.25 -G_M23900_IG09: ; bbWeight=1, epilog, nogc, extend
+ ; GC ptr vars -{V03} + call [edi+0x0C]<unknown method> + ; gcrRegs -[eax ecx edx edi] + ; gcr arg pop 1 + ;; size=43 bbWeight=1 PerfScore 23.00 +G_M23900_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop ebx pop esi pop edi
- pop ebp
ret 4
- ;; size=8 bbWeight=1 PerfScore 4.50
+ ;; size=7 bbWeight=1 PerfScore 4.00
-; Total bytes of code 97, prolog size 7, PerfScore 29.06, instruction count 45, allocated bytes for code 97 (MethodHash=6e11a2a3) for method System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
+; Total bytes of code 56, prolog size 4, PerfScore 31.25, instruction count 24, allocated bytes for code 56 (MethodHash=6e11a2a3) for method System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
; ============================================================

-14 (-41.18%) : 139255.dasm - System.Linq.ParallelQuery1+<>c__21[System.Canon,System.Canon]:b2_1(System.Canon):System.__Canon:this (FullOpts)

@@ -2,51 +2,35 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> esi this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> edx class-hnd single-def <System.__Canon> -; V02 tmp0 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> esi this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> edx class-hnd single-def <System.__Canon>
; ; Lcl frame size = 0 G_M53670_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
- ; gcrRegs +[esi] - ;; size=6 bbWeight=1 PerfScore 2.50 -G_M53670_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M53670_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M53670_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M53670_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref + ; gcrRegs +[edx esi]
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx+0x04]
- cmp dword ptr [eax], ecx - je SHORT G_M53670_IG05 - ;; size=14 bbWeight=0.25 PerfScore 3.00 -G_M53670_IG04: ; bbWeight=0.12, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M53670_IG05: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcr arg pop 0 + ;; size=15 bbWeight=1 PerfScore 9.00 +G_M53670_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 34, prolog size 4, PerfScore 9.12, instruction count 17, allocated bytes for code 34 (MethodHash=8f1c2e59) for method System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 20, prolog size 1, PerfScore 11.75, instruction count 9, allocated bytes for code 20 (MethodHash=8f1c2e59) for method System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================

+17 (+43.59%) : 98001.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:b_160():this (FullOpts)

@@ -8,24 +8,24 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> esi this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> esi this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
-; V02 tmp0 [V02,T01] ( 3, 0 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -; V03 tmp1 [V03,T02] ( 2, 0 ) ref -> edx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> -; V04 tmp2 [V04,T03] ( 2, 0 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V05 tmp3 [V05,T04] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping>
+; V02 tmp0 [V02,T01] ( 3, 6 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +; V03 tmp1 [V03,T03] ( 2, 4 ) ref -> edx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> +; V04 tmp2 [V04,T02] ( 3, 6 ) ref -> ebx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V05 tmp3 [V05,T04] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect"
; ; Lcl frame size = 0
-G_M51850_IG01: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
+G_M51850_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp mov ebp, esp push esi
+ push ebx
mov esi, ecx ; gcrRegs +[esi]
- ;; size=6 bbWeight=0 PerfScore 0.00 -G_M51850_IG02: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+ ;; size=7 bbWeight=1 PerfScore 3.50 +G_M51850_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, gword ptr [esi+0x04] ; gcrRegs +[ecx] mov edx, gword ptr [esi+0x08] @@ -34,15 +34,26 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 push 0 call [<unknown method>] ; gcrRegs -[ecx edx]
- mov ecx, gword ptr [esi+0x04] - ; gcrRegs +[ecx] - cmp byte ptr [ecx], cl
+ mov ebx, gword ptr [esi+0x04] + ; gcrRegs +[ebx] + cmp byte ptr [ebx], bl
mov ecx, 0xD1FFAB1E
+ ; gcrRegs +[ecx]
call [System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)] ; gcrRegs -[ecx esi]
- int3 - ;; size=33 bbWeight=0 PerfScore 0.00
+ mov edx, 0xD1FFAB1E + mov ecx, ebx + ; gcrRegs +[ecx] + call [System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this] + ; gcrRegs -[ecx ebx] + ;; size=45 bbWeight=1 PerfScore 22.75 +G_M51850_IG03: ; bbWeight=1, epilog, nogc, extend + pop ebx + pop esi + pop ebp + ret + ;; size=4 bbWeight=1 PerfScore 2.50
-; Total bytes of code 39, prolog size 4, PerfScore 0.00, instruction count 14, allocated bytes for code 39 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
+; Total bytes of code 56, prolog size 5, PerfScore 28.75, instruction count 21, allocated bytes for code 56 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
; ============================================================

+17 (+43.59%) : 98315.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:b_220():this (FullOpts)

@@ -8,24 +8,24 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> esi this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> esi this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>>
-; V02 tmp0 [V02,T01] ( 3, 0 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -; V03 tmp1 [V03,T02] ( 2, 0 ) ref -> edx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> -; V04 tmp2 [V04,T03] ( 2, 0 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -;* V05 tmp3 [V05,T04] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataColumnMapping>
+; V02 tmp0 [V02,T01] ( 3, 6 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +; V03 tmp1 [V03,T03] ( 2, 4 ) ref -> edx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> +; V04 tmp2 [V04,T02] ( 3, 6 ) ref -> ebx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +;* V05 tmp3 [V05,T04] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect"
; ; Lcl frame size = 0
-G_M18245_IG01: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
+G_M18245_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp mov ebp, esp push esi
+ push ebx
mov esi, ecx ; gcrRegs +[esi]
- ;; size=6 bbWeight=0 PerfScore 0.00 -G_M18245_IG02: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+ ;; size=7 bbWeight=1 PerfScore 3.50 +G_M18245_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, gword ptr [esi+0x04] ; gcrRegs +[ecx] mov edx, gword ptr [esi+0x08] @@ -34,15 +34,26 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 push 0 call [<unknown method>] ; gcrRegs -[ecx edx]
- mov ecx, gword ptr [esi+0x04] - ; gcrRegs +[ecx] - cmp byte ptr [ecx], cl
+ mov ebx, gword ptr [esi+0x04] + ; gcrRegs +[ebx] + cmp byte ptr [ebx], bl
mov ecx, 0xD1FFAB1E
+ ; gcrRegs +[ecx]
call [System.Data.Common.DataColumnMappingCollection:ValidateType(System.Object)] ; gcrRegs -[ecx esi]
- int3 - ;; size=33 bbWeight=0 PerfScore 0.00
+ mov edx, 0xD1FFAB1E + mov ecx, ebx + ; gcrRegs +[ecx] + call [System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this] + ; gcrRegs -[ecx ebx] + ;; size=45 bbWeight=1 PerfScore 22.75 +G_M18245_IG03: ; bbWeight=1, epilog, nogc, extend + pop ebx + pop esi + pop ebp + ret + ;; size=4 bbWeight=1 PerfScore 2.50
-; Total bytes of code 39, prolog size 4, PerfScore 0.00, instruction count 14, allocated bytes for code 39 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
+; Total bytes of code 56, prolog size 5, PerfScore 28.75, instruction count 21, allocated bytes for code 56 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
; ============================================================

+18 (+90.00%) : 96687.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>cDisplayClass7_0:b2():this (FullOpts)

@@ -8,28 +8,37 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 3, 2 ) ref -> ecx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0> -; V01 tmp0 [V01,T01] ( 2, 0 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V03 tmp2 [V03,T02] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V04 tmp3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping>
+; V00 this [V00,T01] ( 3, 3 ) ref -> ecx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0> +; V01 tmp0 [V01,T00] ( 3, 6 ) ref -> ebx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection>
; ; Lcl frame size = 0
-G_M51219_IG01: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
+G_M51219_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp mov ebp, esp
- ;; size=3 bbWeight=0 PerfScore 0.00 -G_M51219_IG02: ; bbWeight=0, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
+ push ebx + ;; size=4 bbWeight=1 PerfScore 2.25 +G_M51219_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
; gcrRegs +[ecx]
- mov ecx, gword ptr [ecx+0x04] - cmp byte ptr [ecx], cl
+ mov ebx, gword ptr [ecx+0x04] + ; gcrRegs +[ebx] + cmp byte ptr [ebx], bl
mov ecx, 0xD1FFAB1E call [System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)] ; gcrRegs -[ecx]
- int3 - ;; size=17 bbWeight=0 PerfScore 0.00
+ push 0xD1FFAB1E + mov ecx, ebx + ; gcrRegs +[ecx] + xor edx, edx + call [System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this] + ; gcrRegs -[ecx ebx] + ;; size=31 bbWeight=1 PerfScore 12.75 +G_M51219_IG03: ; bbWeight=1, epilog, nogc, extend + pop ebx + pop ebp + ret + ;; size=3 bbWeight=1 PerfScore 2.00
-; Total bytes of code 20, prolog size 3, PerfScore 0.00, instruction count 7, allocated bytes for code 20 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
+; Total bytes of code 38, prolog size 4, PerfScore 17.00, instruction count 14, allocated bytes for code 38 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
; ============================================================

realworld.run.windows.x86.checked.mch

-14 (-42.42%) : 34197.dasm - System.Management.Automation.PSTypeExtensions+<>c7`1[System.Canon]:b7_1(System.Object):System.Canon:this (FullOpts)

@@ -2,51 +2,35 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; FullOpts code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> esi this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> edx class-hnd single-def <System.Object> -; V02 tmp0 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp1 [V03,T00] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> esi this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> edx class-hnd single-def <System.Object>
; ; Lcl frame size = 0 G_M56342_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp - mov ebp, esp
push esi mov esi, ecx
- ; gcrRegs +[esi] - ;; size=6 bbWeight=1 PerfScore 2.50 -G_M56342_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[edx] - mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M56342_IG05 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M56342_IG03: ; bbWeight=0.25, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=3 bbWeight=1 PerfScore 1.25 +G_M56342_IG02: ; bbWeight=1, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref + ; gcrRegs +[edx esi]
mov ecx, dword ptr [esi] mov ecx, dword ptr [ecx+0x24] mov ecx, dword ptr [ecx] mov ecx, dword ptr [ecx]
- cmp dword ptr [eax], ecx - je SHORT G_M56342_IG05 - ;; size=13 bbWeight=0.25 PerfScore 3.00 -G_M56342_IG04: ; bbWeight=0.12, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M56342_IG05: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcr arg pop 0 + ;; size=14 bbWeight=1 PerfScore 9.00 +G_M56342_IG03: ; bbWeight=1, epilog, nogc, extend
pop esi
- pop ebp
ret
- ;; size=3 bbWeight=1 PerfScore 2.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 33, prolog size 4, PerfScore 9.12, instruction count 17, allocated bytes for code 33 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 11.75, instruction count 9, allocated bytes for code 19 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
; ============================================================

-19 (-32.76%) : 678.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,10 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) int -> esi single-def -; V01 loc0 [V01,T02] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1" -; V02 tmp1 [V02,T03] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> ecx single-def +; V01 loc0 [V01,T01] ( 2, 4 ) ref -> edx single-def "argument with side effect" +; V02 cse0 [V02,T02] ( 3, 3 ) int -> esi "CSE - aggressive"
; ; Lcl frame size = 4 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push esi push eax mov dword ptr [ebp-0x08], ecx
- mov esi, ecx - ;; size=10 bbWeight=1 PerfScore 4.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx]
+ ;; size=8 bbWeight=1 PerfScore 4.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov esi, dword ptr [ecx+0x20] + mov ecx, dword ptr [esi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[eax] mov ecx, eax @@ -33,36 +31,17 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs -[ecx] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M13946_IG05 - ;; size=24 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx] - cmp dword ptr [edx], ecx - je SHORT G_M13946_IG05 - ;; size=9 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
+ mov ecx, dword ptr [esi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=27 bbWeight=1 PerfScore 11.50 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop esi pop ebp ret ;; size=4 bbWeight=1 PerfScore 2.50
-; Total bytes of code 58, prolog size 8, PerfScore 19.19, instruction count 26, allocated bytes for code 58 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 39, prolog size 8, PerfScore 18.25, instruction count 17, allocated bytes for code 39 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================

-14 (-30.43%) : 35682.dasm - System.Management.Automation.Language.GetSafeValueVisitor:VisitArrayExpression(System.Management.Automation.Language.ArrayExpressionAst):System.Object:this (FullOpts)

@@ -8,12 +8,10 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) ref -> eax this class-hnd single-def <System.Management.Automation.Language.GetSafeValueVisitor> -; V01 arg1 [V01,T03] ( 3, 3 ) ref -> edx class-hnd single-def <System.Management.Automation.Language.ArrayExpressionAst> -; V02 tmp0 [V02,T04] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1" -; V03 tmp1 [V03,T05] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <<unknown class>> -; V05 tmp3 [V05,T01] ( 3, 6 ) ref -> ecx single-def "argument with side effect"
+; V00 this [V00,T01] ( 3, 3 ) ref -> eax this class-hnd single-def <System.Management.Automation.Language.GetSafeValueVisitor> +; V01 arg1 [V01,T02] ( 3, 3 ) ref -> edx class-hnd single-def <System.Management.Automation.Language.ArrayExpressionAst> +; V02 tmp0 [V02,T00] ( 3, 6 ) ref -> ecx single-def "argument with side effect" +; V03 tmp1 [V03,T03] ( 2, 4 ) ref -> edx single-def "argument with side effect"
; ; Lcl frame size = 0 @@ -23,7 +21,7 @@ G_M20846_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov eax, ecx ; gcrRegs +[eax] ;; size=5 bbWeight=1 PerfScore 1.50
-G_M20846_IG02: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
+G_M20846_IG02: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref
; gcrRegs +[edx] mov ecx, gword ptr [edx+0x10] ; gcrRegs +[ecx] @@ -35,33 +33,15 @@ G_M20846_IG02: ; bbWeight=1, gcrefRegs=00000005 {eax edx}, byrefRegs=0000 ; gcrRegs -[ecx edx] +[eax] mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je SHORT G_M20846_IG05 - ;; size=19 bbWeight=1 PerfScore 10.75 -G_M20846_IG03: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; <unknown class>
- cmp dword ptr [edx], ecx - je SHORT G_M20846_IG05 - ;; size=9 bbWeight=0.25 PerfScore 1.06 -G_M20846_IG04: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx]
- mov edx, eax - ; gcrRegs +[edx] - ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M20846_IG05: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov eax, edx - ; gcrRegs +[eax] - ;; size=2 bbWeight=1 PerfScore 0.25 -G_M20846_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=25 bbWeight=1 PerfScore 10.75 +G_M20846_IG03: ; bbWeight=1, epilog, nogc, extend
pop ebp ret ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 46, prolog size 3, PerfScore 15.25, instruction count 20, allocated bytes for code 46 (MethodHash=55a8ae91) for method System.Management.Automation.Language.GetSafeValueVisitor:VisitArrayExpression(System.Management.Automation.Language.ArrayExpressionAst):System.Object:this (FullOpts)
+; Total bytes of code 32, prolog size 3, PerfScore 13.75, instruction count 13, allocated bytes for code 32 (MethodHash=55a8ae91) for method System.Management.Automation.Language.GetSafeValueVisitor:VisitArrayExpression(System.Management.Automation.Language.ArrayExpressionAst):System.Object:this (FullOpts)
; ============================================================

+0 (0.00%) : 32168.dasm - System.Dynamic.Utils.TypeUtils:IsIntegerOrBool(System.Type):ubyte (FullOpts)

@@ -9,22 +9,17 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 8, 7 ) ref -> esi class-hnd <System.Type>
-; V01 loc0 [V01,T01] ( 3, 1.50) int -> eax -; V02 tmp0 [V02,T02] ( 2, 1 ) int -> eax "Inline return value spill temp" -;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V13 tmp11 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V15 tmp13 [V15 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V16 tmp14 [V16 ] ( 0, 0 ) int -> zero-ref "index expr"
+;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref +; V02 tmp0 [V02,T01] ( 3, 1.50) int -> eax "Inline return value spill temp" +;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> +;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "index expr"
; ; Lcl frame size = 0

+11 (+2.60%) : 7406.dasm - FSharp.Compiler.CheckExpressions:ComputeAccessAndCompPath(FSharp.Compiler.CheckExpressions+TcEnv,Microsoft.FSharp.Core.FSharpOption1[FSharp.Compiler.CheckExpressions+DeclKind],FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption1[FSharp.Compiler.Syntax.SynAccess],Microsoft.FSharp.Core.FSharpOption1[FSharp.Compiler.TypedTree+Accessibility],FSharp.Compiler.TypedTree+ParentRef):System.Tuple2[FSharp.Compiler.TypedTree+Accessibility,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CompilationPath]] (FullOpts)

@@ -10,12 +10,12 @@ ; ; V00 arg0 [V00,T02] ( 4, 3.50) ref -> esi class-hnd single-def <FSharp.Compiler.CheckExpressions+TcEnv> ; V01 arg1 [V01,T03] ( 4, 3.50) ref -> edx class-hnd single-def <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CheckExpressions+DeclKind]>
-; V02 arg2 [V02,T28] ( 1, 0.50) struct (16) [ebp+0x14] single-def <FSharp.Compiler.Text.Range> -; V03 arg3 [V03,T12] ( 3, 2 ) ref -> edi class-hnd single-def <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess]> -; V04 arg4 [V04,T26] ( 2, 1.50) ref -> [ebp+0x0C] class-hnd single-def <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+Accessibility]> -; V05 arg5 [V05,T13] ( 3, 2 ) ref -> ebx class-hnd single-def <FSharp.Compiler.TypedTree+ParentRef> -; V06 loc0 [V06,T27] ( 2, 1.50) ref -> [ebp-0x14] class-hnd exact spill-single-def <FSharp.Compiler.TypedTree+CompilationPath> -; V07 loc1 [V07,T11] ( 3, 2.50) ubyte -> [ebp-0x10] spill-single-def
+; V02 arg2 [V02,T26] ( 1, 0.50) struct (16) [ebp+0x14] single-def <FSharp.Compiler.Text.Range> +; V03 arg3 [V03,T11] ( 3, 2 ) ref -> edi class-hnd single-def <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess]> +; V04 arg4 [V04,T23] ( 2, 1.50) ref -> ebx class-hnd single-def <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+Accessibility]> +; V05 arg5 [V05,T24] ( 2, 1.50) ref -> [ebp+0x08] class-hnd single-def <FSharp.Compiler.TypedTree+ParentRef> +; V06 loc0 [V06,T25] ( 2, 1.50) ref -> [ebp-0x14] class-hnd exact spill-single-def <FSharp.Compiler.TypedTree+CompilationPath> +; V07 loc1 [V07,T10] ( 3, 2.50) ubyte -> [ebp-0x10] spill-single-def
;* V08 loc2 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CheckExpressions+DeclKind]> ;* V09 loc3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <FSharp.Compiler.ErrorLogger+Error> ;* V10 loc4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <FSharp.Compiler.TypedTree+Accessibility> @@ -23,35 +23,33 @@ ;* V12 loc6 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess]> ;* V13 loc7 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;* V14 loc8 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <<unknown class>>
-; V15 tmp0 [V15,T16] ( 3, 2 ) int -> edx -; V16 tmp1 [V16,T06] ( 6, 3 ) ref -> edi -; V17 tmp2 [V17,T14] ( 3, 2 ) ref -> edi
+; V15 tmp0 [V15,T14] ( 3, 2 ) int -> edx +; V16 tmp1 [V16,T05] ( 6, 3 ) ref -> ebx +; V17 tmp2 [V17,T12] ( 3, 2 ) ref -> ebx
;* V18 tmp3 [V18 ] ( 0, 0 ) ref -> zero-ref single-def ;* V19 tmp4 [V19 ] ( 0, 0 ) ref -> zero-ref
-; V20 tmp5 [V20,T15] ( 3, 2 ) ref -> ebx
+; V20 tmp5 [V20,T13] ( 3, 2 ) ref -> edi
; V21 tmp6 [V21,T00] ( 4, 8 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <System.Tuple`2[FSharp.Compiler.TypedTree+Accessibility,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CompilationPath]]>
-; V22 tmp7 [V22,T25] ( 2, 2 ) int -> eax "fgMakeTemp is creating a new local variable" -; V23 tmp8 [V23,T04] ( 5, 5 ) ref -> ecx class-hnd "spilling QMark2" <<unknown class>> -; V24 tmp9 [V24,T01] ( 6, 6 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "NewObj constructor temp" <FSharp.Compiler.ErrorLogger+Error> -; V25 tmp10 [V25,T17] ( 2, 2 ) ref -> eax class-hnd single-def "Inlining Arg" <System.Tuple`2[int,System.String]> -;* V26 tmp11 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.__Canon> -; V27 tmp12 [V27,T18] ( 2, 2 ) ref -> edi class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath]> -; V28 tmp13 [V28,T05] ( 4, 4 ) ref -> [ebp-0x1C] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath]> -; V29 tmp14 [V29,T07] ( 3, 3 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.TypedTree+Accessibility> -;* V30 tmp15 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <FSharp.Compiler.TypedTree+Accessibility>
+; V22 tmp7 [V22,T01] ( 6, 6 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "NewObj constructor temp" <FSharp.Compiler.ErrorLogger+Error> +; V23 tmp8 [V23,T15] ( 2, 2 ) ref -> eax class-hnd single-def "Inlining Arg" <System.Tuple`2[int,System.String]> +;* V24 tmp9 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.__Canon> +; V25 tmp10 [V25,T16] ( 2, 2 ) ref -> edi class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath]> +; V26 tmp11 [V26,T04] ( 4, 4 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath]> +; V27 tmp12 [V27,T06] ( 3, 3 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.TypedTree+Accessibility> +;* V28 tmp13 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <FSharp.Compiler.TypedTree+Accessibility> +;* V29 tmp14 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath]> +; V30 tmp15 [V30,T17] ( 2, 2 ) ref -> eax class-hnd exact single-def "Inlining Arg" <FSharp.Compiler.TypedTree+Accessibility>
;* V31 tmp16 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath]>
-; V32 tmp17 [V32,T19] ( 2, 2 ) ref -> eax class-hnd exact single-def "Inlining Arg" <FSharp.Compiler.TypedTree+Accessibility> -;* V33 tmp18 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath]> -; V34 tmp19 [V34,T20] ( 2, 2 ) ref -> edi class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V35 tmp20 [V35,T08] ( 3, 3 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.TypedTree+Accessibility> -; V36 tmp21 [V36,T21] ( 2, 2 ) ref -> esi class-hnd exact single-def "Inlining Arg" <FSharp.Compiler.TypedTree+CompilationPath> -; V37 tmp22 [V37,T09] ( 3, 3 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CompilationPath]> -; V38 tmp23 [V38,T22] ( 2, 2 ) ref -> ecx single-def "argument with side effect" -; V39 tmp24 [V39,T23] ( 2, 2 ) ref -> ecx single-def "argument with side effect" -; V40 tmp25 [V40,T24] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V41 rat0 [V41,T10] ( 3, 3 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
+; V32 tmp17 [V32,T18] ( 2, 2 ) ref -> ebx class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V33 tmp18 [V33,T07] ( 3, 3 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.TypedTree+Accessibility> +; V34 tmp19 [V34,T19] ( 2, 2 ) ref -> esi class-hnd exact single-def "Inlining Arg" <FSharp.Compiler.TypedTree+CompilationPath> +; V35 tmp20 [V35,T08] ( 3, 3 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CompilationPath]> +; V36 tmp21 [V36,T20] ( 2, 2 ) ref -> ecx single-def "argument with side effect" +; V37 tmp22 [V37,T21] ( 2, 2 ) ref -> ecx single-def "argument with side effect" +; V38 tmp23 [V38,T22] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V39 rat0 [V39,T09] ( 3, 3 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 12
G_M49966_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -59,13 +57,13 @@ G_M49966_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 16
+ sub esp, 12
vzeroupper mov esi, ecx ; gcrRegs +[esi] mov edi, gword ptr [ebp+0x10] ; gcrRegs +[edi]
- mov ebx, gword ptr [ebp+0x08]
+ mov ebx, gword ptr [ebp+0x0C]
; gcrRegs +[ebx] ;; size=20 bbWeight=1 PerfScore 7.75 G_M49966_IG02: ; bbWeight=1, gcrefRegs=000000CC {edx ebx esi edi}, byrefRegs=00000000 {}, byref, isz @@ -77,33 +75,37 @@ G_M49966_IG02: ; bbWeight=1, gcrefRegs=000000CC {edx ebx esi edi}, byrefR test edx, edx jne SHORT G_M49966_IG04 ;; size=10 bbWeight=1 PerfScore 4.25
-G_M49966_IG03: ; bbWeight=0.50, gcVars=08000000 {V06}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M49966_IG03: ; bbWeight=0.50, gcVars=02000000 {V06}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[ecx edx]
+ mov eax, gword ptr [ebp+0x08] + ; gcrRegs +[eax]
mov edx, 1 jmp SHORT G_M49966_IG05
- ;; size=7 bbWeight=0.50 PerfScore 1.12
+ ;; size=10 bbWeight=0.50 PerfScore 1.62
G_M49966_IG04: ; bbWeight=0.50, gcrefRegs=000000CC {edx ebx esi edi}, byrefRegs=00000000 {}, byref
- ; gcrRegs +[edx]
+ ; gcrRegs -[eax] +[edx]
mov ecx, gword ptr [edx+0x04] ; gcrRegs +[ecx] call [FSharp.Compiler.CheckExpressions+DeclKind:IsModuleOrMemberOrExtensionBinding(FSharp.Compiler.CheckExpressions+DeclKind):ubyte] ; gcrRegs -[ecx edx] mov edx, eax
- ;; size=11 bbWeight=0.50 PerfScore 2.62 -G_M49966_IG05: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov eax, gword ptr [ebp+0x08] + ; gcrRegs +[eax] + ;; size=14 bbWeight=0.50 PerfScore 3.12 +G_M49966_IG05: ; bbWeight=1, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz
movzx edx, dl mov dword ptr [ebp-0x10], edx test edi, edi je SHORT G_M49966_IG07 ;; size=10 bbWeight=1 PerfScore 2.50
-G_M49966_IG06: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M49966_IG06: ; bbWeight=0.50, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz
test edx, edx jne SHORT G_M49966_IG09
+ mov gword ptr [ebp+0x08], eax
mov ecx, 0xD1FFAB1E ; FSharp.Compiler.ErrorLogger+Error call CORINFO_HELP_NEWSFAST
- ; gcrRegs +[eax]
mov gword ptr [ebp-0x18], eax
- ; GC ptr vars +{V24}
+ ; GC ptr vars +{V22}
call [FSComp.SR:tcMultipleVisibilityAttributesWithLet():System.Tuple`2[int,System.String]] mov ecx, gword ptr [ebp-0x18] ; gcrRegs +[ecx] @@ -122,182 +124,187 @@ G_M49966_IG06: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRe ; gcrRegs +[ecx] mov edx, gword ptr [ebp-0x18] ; gcrRegs +[edx]
- ; GC ptr vars -{V24}
+ ; GC ptr vars -{V22}
call [<unknown method>] ; gcrRegs -[eax ecx edx]
- mov edx, dword ptr [ebp-0x10] - ;; size=78 bbWeight=0.50 PerfScore 12.12 -G_M49966_IG07: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov eax, gword ptr [ebp+0x0C]
+ mov eax, gword ptr [ebp+0x08]
; gcrRegs +[eax]
- test eax, eax
+ mov edx, dword ptr [ebp-0x10] + ;; size=84 bbWeight=0.50 PerfScore 13.12 +G_M49966_IG07: ; bbWeight=1, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz + test ebx, ebx
je SHORT G_M49966_IG10
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M49966_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs -[edi] ; GC ptr vars -{V06}
- mov edi, gword ptr [eax+0x04] - ; gcrRegs +[edi] - jmp SHORT G_M49966_IG14
+ mov ebx, gword ptr [ebx+0x04] + jmp SHORT G_M49966_IG15
;; size=5 bbWeight=0.50 PerfScore 2.00
-G_M49966_IG09: ; bbWeight=0.25, gcVars=08000000 {V06}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[eax] - ; GC ptr vars +{V06 V27}
+G_M49966_IG09: ; bbWeight=0.25, gcVars=02000000 {V06}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs +[edi] + ; GC ptr vars +{V06 V25}
mov edx, dword ptr [ebp-0x10] jmp SHORT G_M49966_IG07 ;; size=5 bbWeight=0.25 PerfScore 0.75
-G_M49966_IG10: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M49966_IG10: ; bbWeight=0.50, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[ebx]
test edi, edi
- je SHORT G_M49966_IG11 - mov eax, gword ptr [edi+0x04] - ; gcrRegs +[eax] - mov edi, dword ptr [eax+0x04]
+ je SHORT G_M49966_IG12 + mov ebx, gword ptr [edi+0x04] + ; gcrRegs +[ebx] + mov edi, dword ptr [ebx+0x04]
; gcrRegs -[edi] cmp edi, 2
- ja SHORT G_M49966_IG11 - lea eax, [@RWD00]
+ ja SHORT G_M49966_IG12 + mov gword ptr [ebp+0x08], eax + lea ebx, [@RWD00] + ; gcrRegs -[ebx] + mov ebx, dword ptr [ebx+4*edi] + lea eax, G_M49966_IG02
; gcrRegs -[eax]
- mov eax, dword ptr [eax+4*edi] - lea ecx, G_M49966_IG02 - add eax, ecx - jmp eax - ;; size=34 bbWeight=0.50 PerfScore 6.12 -G_M49966_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars -{V06 V27} - mov edi, gword ptr [D1FFAB1EH] ; static handle - ; gcrRegs +[edi] - jmp SHORT G_M49966_IG14
+ add ebx, eax + jmp ebx + ;; size=37 bbWeight=0.50 PerfScore 6.62 +G_M49966_IG11: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref + ; GC ptr vars -{V06 V25} + mov eax, gword ptr [ebp+0x08] + ; gcrRegs +[eax] + ;; size=3 bbWeight=0.25 PerfScore 0.25 +G_M49966_IG12: ; bbWeight=0.50, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz + mov ebx, gword ptr [D1FFAB1EH] ; static handle + ; gcrRegs +[ebx] + jmp SHORT G_M49966_IG15
;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M49966_IG12: ; bbWeight=0.50, gcVars=08000000 {V06}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[edi] - ; GC ptr vars +{V06 V27}
+G_M49966_IG13: ; bbWeight=0.50, gcVars=02000000 {V06}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax ebx] + ; GC ptr vars +{V06 V25}
mov edi, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[edi] mov ecx, 0xD1FFAB1E ; Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+CompilationPath] call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax]
- mov gword ptr [ebp-0x1C], eax - ; GC ptr vars +{V28} - lea edx, bword ptr [eax+0x04] - ; byrRegs +[edx] - mov ecx, gword ptr [ebp-0x14] - ; gcrRegs +[ecx] - ; GC ptr vars -{V06 V27} - call CORINFO_HELP_ASSIGN_REF_ECX - ; gcrRegs -[ecx] - ; byrRegs -[edx] - lea edx, bword ptr [eax+0x08] - ; byrRegs +[edx] - call CORINFO_HELP_ASSIGN_REF_EDI - ; gcrRegs -[eax edi]
...

+5 (+2.79%) : 34117.dasm - System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)

@@ -8,25 +8,24 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 5, 5 ) ref -> [ebp-0x10] this class-hnd single-def <System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]> -; V01 arg1 [V01,T02] ( 8, 17 ) ref -> esi class-hnd single-def <System.Management.Automation.Interpreter.InterpretedFrame> -; V02 loc0 [V02,T07] ( 3, 6 ) ref -> [ebp-0x14] class-hnd exact spill-single-def <<unknown class>> -; V03 loc1 [V03,T03] ( 6, 18 ) int -> ebx
+; V00 this [V00,T05] ( 4, 4 ) ref -> [ebp-0x1C] this class-hnd single-def <System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 8, 17 ) ref -> esi class-hnd single-def <System.Management.Automation.Interpreter.InterpretedFrame> +; V02 loc0 [V02,T06] ( 3, 6 ) ref -> [ebp-0x20] class-hnd exact spill-single-def <<unknown class>> +; V03 loc1 [V03,T02] ( 6, 18 ) int -> [ebp-0x10]
;* V04 tmp0 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp1 [V05,T04] ( 3, 17 ) ref -> edx "CASTCLASS eval op1" -; V06 tmp2 [V06,T09] ( 3, 5 ) int -> edi "fgMakeTemp is creating a new local variable" -; V07 tmp3 [V07,T00] ( 5, 27 ) ref -> ecx class-hnd "spilling QMark2" <System.__Canon> -; V08 tmp4 [V08,T05] ( 4, 16 ) int -> edx "Inline stloc first use temp" -; V09 tmp5 [V09,T01] ( 3, 24 ) ref -> ecx class-hnd "impAppendStmt" <<unknown class>> -; V10 tmp6 [V10,T14] ( 3, 3 ) int -> edx single-def "Inline stloc first use temp" -; V11 tmp7 [V11,T12] ( 2, 4 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> -; V12 tmp8 [V12,T13] ( 2, 4 ) int -> ecx "argument with side effect" -; V13 cse0 [V13,T15] ( 3, 3 ) int -> ebx "CSE - moderate" -; V14 rat0 [V14,T10] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" -; V15 rat1 [V15,T11] ( 3, 4 ) int -> ecx "runtime lookup" -; V16 rat2 [V16,T08] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
+; V05 tmp1 [V05,T03] ( 4, 16 ) int -> edi "Inline stloc first use temp" +; V06 tmp2 [V06,T00] ( 3, 24 ) ref -> [ebp-0x24] class-hnd spill-single-def "impAppendStmt" <<unknown class>> +; V07 tmp3 [V07,T13] ( 3, 3 ) int -> edx single-def "Inline stloc first use temp" +; V08 tmp4 [V08,T11] ( 2, 4 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> +; V09 tmp5 [V09,T12] ( 2, 4 ) int -> ecx "argument with side effect" +; V10 tmp6 [V10,T04] ( 2, 16 ) int -> ebx "argument with side effect" +; V11 cse0 [V11,T14] ( 3, 3 ) int -> [ebp-0x14] spill-single-def "CSE - moderate" +; V12 cse1 [V12,T07] ( 3, 6 ) int -> [ebp-0x18] spill-single-def "CSE - moderate" +; V13 rat0 [V13,T09] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" +; V14 rat1 [V14,T10] ( 3, 4 ) int -> ecx "runtime lookup" +; V15 rat2 [V15,T08] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 24
G_M52320_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -34,22 +33,24 @@ G_M52320_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 8 - mov gword ptr [ebp-0x10], ecx
+ sub esp, 24 + mov gword ptr [ebp-0x1C], ecx
; GC ptr vars +{V00} mov esi, edx ; gcrRegs +[esi] ;; size=14 bbWeight=1 PerfScore 5.75
-G_M52320_IG02: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz - mov edi, gword ptr [ebp-0x10]
+G_M52320_IG02: ; bbWeight=1, gcVars=00000020 {V00}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz + mov edi, gword ptr [ebp-0x1C]
; gcrRegs +[edi]
- mov ecx, dword ptr [edi]
+ mov ebx, dword ptr [edi] + mov dword ptr [ebp-0x18], ebx + mov ecx, ebx
mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx] mov eax, dword ptr [edx+0x08] test eax, eax je SHORT G_M52320_IG04
- ;; size=17 bbWeight=1 PerfScore 10.25
+ ;; size=22 bbWeight=1 PerfScore 11.50
G_M52320_IG03: ; bbWeight=0.80, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[edi] mov ecx, eax @@ -61,82 +62,73 @@ G_M52320_IG04: ; bbWeight=0.20, gcrefRegs=00000040 {esi}, byrefRegs=00000 mov ecx, eax ;; size=12 bbWeight=0.20 PerfScore 0.30 G_M52320_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- mov edi, gword ptr [ebp-0x10]
+ mov edi, gword ptr [ebp-0x1C]
; gcrRegs +[edi]
- mov ebx, dword ptr [edi+0x04] - mov edx, ebx
+ mov eax, dword ptr [edi+0x04] + mov dword ptr [ebp-0x14], eax + mov edx, eax
call CORINFO_HELP_NEWARR_1_OBJ ; gcrRegs -[edi] +[eax]
- mov gword ptr [ebp-0x14], eax
+ mov gword ptr [ebp-0x20], eax
; GC ptr vars +{V02}
- dec ebx - js SHORT G_M52320_IG11 - ;; size=19 bbWeight=1 PerfScore 6.50 -G_M52320_IG06: ; bbWeight=0.50, gcVars=000000C0 {V00 V02}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+ mov edx, dword ptr [ebp-0x14] + dec edx + mov dword ptr [ebp-0x10], edx + test edx, edx + jl SHORT G_M52320_IG07 + ;; size=30 bbWeight=1 PerfScore 9.75 +G_M52320_IG06: ; bbWeight=4, gcVars=00000060 {V00 V02}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov eax, gword ptr [ebp-0x14] - ; gcrRegs +[eax] - ;; size=3 bbWeight=0.50 PerfScore 0.50 -G_M52320_IG07: ; bbWeight=4, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, gword ptr [esi+0x14] ; gcrRegs +[ecx]
- mov edx, dword ptr [esi+0x24] - dec edx - mov dword ptr [esi+0x24], edx - cmp edx, dword ptr [ecx+0x04] - jae SHORT G_M52320_IG14 - mov edx, gword ptr [ecx+4*edx+0x08] - ; gcrRegs +[edx] - mov ecx, edx - test ecx, ecx - je SHORT G_M52320_IG10 - ;; size=25 bbWeight=4 PerfScore 51.00 -G_M52320_IG08: ; bbWeight=1, gcrefRegs=00000047 {eax ecx edx esi}, byrefRegs=00000000 {}, byref, isz - mov edi, gword ptr [ebp-0x10] - ; gcrRegs +[edi] - mov edi, dword ptr [edi] - ; gcrRegs -[edi] - mov edi, dword ptr [edi+0x24] - mov edi, dword ptr [edi] - mov edi, dword ptr [edi] - cmp dword ptr [ecx], edi - je SHORT G_M52320_IG10 - ;; size=16 bbWeight=1 PerfScore 13.00 -G_M52320_IG09: ; bbWeight=0.50, gcrefRegs=00000045 {eax edx esi}, byrefRegs=00000000 {}, byref
+ mov gword ptr [ebp-0x24], ecx + ; GC ptr vars +{V06} + mov edi, dword ptr [esi+0x24] + dec edi + mov dword ptr [esi+0x24], edi + mov ebx, dword ptr [ebx+0x24] + mov ebx, dword ptr [ebx] + mov ebx, dword ptr [ebx] + mov ecx, ebx
; gcrRegs -[ecx]
- mov ecx, edi
+ mov ebx, gword ptr [ebp-0x24] + ; gcrRegs +[ebx] + cmp edi, dword ptr [ebx+0x04] + jae SHORT G_M52320_IG09 + mov edx, gword ptr [ebx+4*edi+0x08] + ; gcrRegs +[edx] + ; GC ptr vars -{V00 V06}
call CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[edx] - mov ecx, eax - ; gcrRegs +[ecx] - mov eax, gword ptr [ebp-0x14] - ;; size=12 bbWeight=0.50 PerfScore 1.25 -G_M52320_IG10: ; bbWeight=4, gcrefRegs=00000043 {eax ecx esi}, byrefRegs=00000000 {}, byref, isz - push ecx
+ ; gcrRegs -[edx ebx] +[eax] + push eax
; gcr arg push 0
- mov ecx, eax - mov edx, ebx
+ mov edx, dword ptr [ebp-0x10] + mov ecx, gword ptr [ebp-0x20] + ; gcrRegs +[ecx]
call CORINFO_HELP_ARRADDR_ST ; gcrRegs -[eax ecx] ; gcr arg pop 1
- dec ebx - jns SHORT G_M52320_IG13 - ;; size=13 bbWeight=4 PerfScore 15.00 -G_M52320_IG11: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+ mov edi, dword ptr [ebp-0x10] + dec edi + mov dword ptr [ebp-0x10], edi + mov ebx, dword ptr [ebp-0x18] + jns SHORT G_M52320_IG06 + ;; size=63 bbWeight=4 PerfScore 115.00 +G_M52320_IG07: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, gword ptr [esi+0x14] ; gcrRegs +[ecx] mov edx, dword ptr [esi+0x24] lea eax, [edx+0x01] mov dword ptr [esi+0x24], eax
- push gword ptr [ebp-0x14]
+ push gword ptr [ebp-0x20]
; gcr arg push 0
- ; GC ptr vars -{V02}
+ ; GC ptr vars -{V02} +{V00}
call CORINFO_HELP_ARRADDR_ST ; gcrRegs -[ecx esi] ; gcr arg pop 1 mov eax, 1 ;; size=25 bbWeight=1 PerfScore 7.75
-G_M52320_IG12: ; bbWeight=1, epilog, nogc, extend
+G_M52320_IG08: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -144,20 +136,11 @@ G_M52320_IG12: ; bbWeight=1, epilog, nogc, extend pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M52320_IG13: ; bbWeight=2, gcVars=000000C0 {V00 V02}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs +[esi] - ; GC ptr vars +{V02 V07} - mov eax, gword ptr [ebp-0x14] - ; gcrRegs +[eax] - jmp SHORT G_M52320_IG07 - ;; size=5 bbWeight=2 PerfScore 6.00 -G_M52320_IG14: ; bbWeight=0, gcVars=00000040 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[eax esi] - ; GC ptr vars -{V02 V07}
+G_M52320_IG09: ; bbWeight=0, gcVars=00000020 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 179, prolog size 14, PerfScore 122.60, instruction count 72, allocated bytes for code 179 (MethodHash=1c78339f) for method System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
+; Total bytes of code 184, prolog size 14, PerfScore 155.35, instruction count 71, allocated bytes for code 184 (MethodHash=1c78339f) for method System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
; ============================================================

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.x86.checked.mch 91 79 10 2 -1,239 +66
benchmarks.run_pgo.windows.x86.checked.mch 1,967 1,949 17 1 -15,320 +97
benchmarks.run_tiered.windows.x86.checked.mch 52 42 8 2 -749 +59
coreclr_tests.run.windows.x86.checked.mch 238 202 19 17 -3,159 +309
libraries.crossgen2.windows.x86.checked.mch 1,035 1,032 1 2 -29,761 +3
libraries.pmi.windows.x86.checked.mch 563 515 27 21 -8,722 +236
libraries_tests.run.windows.x86.Release.mch 1,048 976 52 20 -14,853 +1,094
librariestestsnotieredcompilation.run.windows.x86.Release.mch 740 690 29 21 -13,431 +396
realworld.run.windows.x86.checked.mch 150 140 2 8 -2,344 +16
5,884 5,625 165 94 -89,578 +2,276

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x86.checked.mch 22,792 4 22,788 0 (0.00%) 1,707 (6.97%)
benchmarks.run_pgo.windows.x86.checked.mch 99,058 41,640 57,418 0 (0.00%) 17,949 (15.34%)
benchmarks.run_tiered.windows.x86.checked.mch 47,458 28,737 18,721 0 (0.00%) 1,240 (2.55%)
coreclr_tests.run.windows.x86.checked.mch 564,443 320,020 244,423 0 (0.00%) 10,272 (1.79%)
libraries.crossgen2.windows.x86.checked.mch 242,501 15 242,486 0 (0.00%) 58 (0.02%)
libraries.pmi.windows.x86.checked.mch 276,722 6 276,716 0 (0.00%) 28,819 (9.43%)
libraries_tests.run.windows.x86.Release.mch 593,218 424,879 168,339 0 (0.00%) 33,882 (5.40%)
librariestestsnotieredcompilation.run.windows.x86.Release.mch 288,229 21,909 266,320 0 (0.00%) 28,180 (8.91%)
realworld.run.windows.x86.checked.mch 31,259 3 31,256 0 (0.00%) 4,731 (13.15%)
2,165,680 837,213 1,328,467 0 (0.00%) 126,838 (5.53%)

jit-analyze output

benchmarks.run.windows.x86.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 5980860 (overridden on cmd)
Total bytes of diff: 5979687 (overridden on cmd)
Total bytes of delta: -1173 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          15 : 12207.dasm (2.40 % of base)
          12 : 6042.dasm (3.97 % of base)
           6 : 12216.dasm (9.68 % of base)
           6 : 14074.dasm (9.68 % of base)
           6 : 23860.dasm (9.68 % of base)
           6 : 24196.dasm (9.68 % of base)
           6 : 14668.dasm (9.68 % of base)
           6 : 16056.dasm (9.68 % of base)
           2 : 12807.dasm (0.32 % of base)
           1 : 2731.dasm (0.12 % of base)

Top file improvements (bytes):
         -86 : 4084.dasm (-2.47 % of base)
         -47 : 12149.dasm (-1.72 % of base)
         -33 : 19896.dasm (-9.12 % of base)
         -33 : 6195.dasm (-12.55 % of base)
         -31 : 8078.dasm (-6.42 % of base)
         -30 : 8107.dasm (-11.81 % of base)
         -28 : 17440.dasm (-6.10 % of base)
         -24 : 12976.dasm (-11.01 % of base)
         -24 : 2635.dasm (-19.35 % of base)
         -22 : 18692.dasm (-11.64 % of base)
         -22 : 8355.dasm (-13.50 % of base)
         -22 : 17650.dasm (-27.16 % of base)
         -21 : 12822.dasm (-4.61 % of base)
         -20 : 14507.dasm (-9.35 % of base)
         -19 : 15575.dasm (-20.65 % of base)
         -19 : 16565.dasm (-20.65 % of base)
         -19 : 3558.dasm (-28.79 % of base)
         -19 : 678.dasm (-32.76 % of base)
         -18 : 511.dasm (-8.45 % of base)
         -18 : 12004.dasm (-38.30 % of base)

59 total files with Code Size differences (49 improved, 10 regressed), 2 unchanged.

Top method regressions (bytes):
          15 (2.40 % of base) : 12207.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          12 (3.97 % of base) : 6042.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           6 (9.68 % of base) : 12216.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
           6 (9.68 % of base) : 24196.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
           6 (9.68 % of base) : 14074.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
           6 (9.68 % of base) : 14668.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
           6 (9.68 % of base) : 16056.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
           6 (9.68 % of base) : 23860.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
           2 (0.32 % of base) : 12807.dasm - System.Xml.Serialization.TempAssembly:LoadAssemblyByPath(System.Type,System.String):System.Reflection.Assembly (FullOpts)
           1 (0.12 % of base) : 2731.dasm - ProtoBuf.Internal.TypeHelper`1[System.__Canon]:.cctor() (FullOpts)

Top method improvements (bytes):
         -86 (-2.47 % of base) : 4084.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -47 (-1.72 % of base) : 12149.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -33 (-9.12 % of base) : 19896.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -33 (-12.55 % of base) : 6195.dasm - System.Net.Http.Headers.HttpHeaders:AddValueToStoreValue[System.__Canon](System.__Canon,byref) (FullOpts)
         -31 (-6.42 % of base) : 8078.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -30 (-11.81 % of base) : 8107.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-6.10 % of base) : 17440.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -24 (-19.35 % of base) : 2635.dasm - System.Threading.Tasks.TaskFactory`1+<>c__56`1[System.__Canon,System.__Canon]:<ContinueWhenAllImpl>b__56_0(System.Threading.Tasks.Task`1[System.__Canon],System.Object):System.__Canon:this (FullOpts)
         -24 (-11.01 % of base) : 12976.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -22 (-11.64 % of base) : 18692.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -22 (-27.16 % of base) : 17650.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -22 (-13.50 % of base) : 8355.dasm - System.Collections.Generic.List`1[System.__Canon]:System.Collections.IList.Add(System.Object):int:this (FullOpts)
         -21 (-4.61 % of base) : 12822.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
         -20 (-9.35 % of base) : 14507.dasm - System.Collections.Generic.Dictionary`2[int,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (FullOpts)
         -19 (-20.65 % of base) : 16565.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetRequiredService[System.__Canon](System.IServiceProvider):System.__Canon (FullOpts)
         -19 (-20.65 % of base) : 15575.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetService[System.__Canon](System.IServiceProvider):System.__Canon (FullOpts)
         -19 (-32.76 % of base) : 678.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -19 (-28.79 % of base) : 3558.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -18 (-8.14 % of base) : 12270.dasm - System.Collections.Perf_Frozen`1[System.__Canon]:GetUniqueValues(int):System.__Canon[]:this (FullOpts)
         -18 (-8.45 % of base) : 511.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (FullOpts)

Top method regressions (percentages):
           6 (9.68 % of base) : 12216.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
           6 (9.68 % of base) : 24196.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
           6 (9.68 % of base) : 14074.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
           6 (9.68 % of base) : 14668.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
           6 (9.68 % of base) : 16056.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
           6 (9.68 % of base) : 23860.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          12 (3.97 % of base) : 6042.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
          15 (2.40 % of base) : 12207.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           2 (0.32 % of base) : 12807.dasm - System.Xml.Serialization.TempAssembly:LoadAssemblyByPath(System.Type,System.String):System.Reflection.Assembly (FullOpts)
           1 (0.12 % of base) : 2731.dasm - ProtoBuf.Internal.TypeHelper`1[System.__Canon]:.cctor() (FullOpts)

Top method improvements (percentages):
         -14 (-41.18 % of base) : 7049.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -16 (-39.02 % of base) : 3752.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -18 (-38.30 % of base) : 12004.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -19 (-32.76 % of base) : 678.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -14 (-29.79 % of base) : 1476.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -19 (-28.79 % of base) : 3558.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -22 (-27.16 % of base) : 17650.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -17 (-22.67 % of base) : 16892.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -17 (-21.79 % of base) : 7769.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -12 (-21.43 % of base) : 20615.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -19 (-20.65 % of base) : 16565.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetRequiredService[System.__Canon](System.IServiceProvider):System.__Canon (FullOpts)
         -19 (-20.65 % of base) : 15575.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetService[System.__Canon](System.IServiceProvider):System.__Canon (FullOpts)
         -24 (-19.35 % of base) : 2635.dasm - System.Threading.Tasks.TaskFactory`1+<>c__56`1[System.__Canon,System.__Canon]:<ContinueWhenAllImpl>b__56_0(System.Threading.Tasks.Task`1[System.__Canon],System.Object):System.__Canon:this (FullOpts)
         -12 (-15.38 % of base) : 13610.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,int,System.__Canon]:Add(int,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -14 (-15.22 % of base) : 9002.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -15 (-14.85 % of base) : 5225.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (FullOpts)
         -10 (-14.71 % of base) : 15625.dasm - MicroBenchmarks.Serializers.Json_FromStream`1[System.__Canon]:DataContractJsonSerializer_():System.__Canon:this (FullOpts)
         -10 (-14.71 % of base) : 6901.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:DataContractSerializer_():System.__Canon:this (FullOpts)
         -10 (-14.71 % of base) : 13524.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:XmlSerializer_():System.__Canon:this (FullOpts)
         -22 (-13.50 % of base) : 8355.dasm - System.Collections.Generic.List`1[System.__Canon]:System.Collections.IList.Add(System.Object):int:this (FullOpts)


benchmarks.run_pgo.windows.x86.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 27314129 (overridden on cmd)
Total bytes of diff: 27298906 (overridden on cmd)
Total bytes of delta: -15223 (-0.06 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          28 : 75828.dasm (1.63 % of base)
          14 : 66532.dasm (10.61 % of base)
          11 : 34697.dasm (1.75 % of base)
           6 : 30788.dasm (9.68 % of base)
           6 : 45613.dasm (9.68 % of base)
           6 : 110521.dasm (9.68 % of base)
           6 : 113462.dasm (9.68 % of base)
           6 : 58362.dasm (9.68 % of base)
           6 : 50330.dasm (9.68 % of base)
           1 : 110930.dasm (0.31 % of base)
           1 : 41037.dasm (0.31 % of base)
           1 : 90196.dasm (0.31 % of base)
           1 : 100799.dasm (0.31 % of base)
           1 : 86225.dasm (0.31 % of base)
           1 : 95737.dasm (0.31 % of base)
           1 : 104717.dasm (0.31 % of base)
           1 : 28628.dasm (0.31 % of base)

Top file improvements (bytes):
        -128 : 79777.dasm (-4.46 % of base)
         -89 : 19526.dasm (-2.47 % of base)
         -48 : 83738.dasm (-5.01 % of base)
         -47 : 31492.dasm (-1.69 % of base)
         -46 : 75830.dasm (-3.07 % of base)
         -46 : 2323.dasm (-17.23 % of base)
         -33 : 76000.dasm (-8.87 % of base)
         -31 : 80596.dasm (-1.21 % of base)
         -28 : 69547.dasm (-6.05 % of base)
         -26 : 19722.dasm (-18.44 % of base)
         -25 : 53318.dasm (-4.20 % of base)
         -25 : 108022.dasm (-4.66 % of base)
         -19 : 101281.dasm (-3.18 % of base)
         -19 : 27521.dasm (-3.18 % of base)
         -19 : 52085.dasm (-3.18 % of base)
         -19 : 87130.dasm (-3.18 % of base)
         -19 : 100513.dasm (-3.18 % of base)
         -19 : 50806.dasm (-3.18 % of base)
         -19 : 9124.dasm (-32.76 % of base)
         -19 : 54266.dasm (-3.18 % of base)

52 total files with Code Size differences (35 improved, 17 regressed), 1 unchanged.

Top method regressions (bytes):
          28 (1.63 % of base) : 75828.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
          14 (10.61 % of base) : 66532.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          11 (1.75 % of base) : 34697.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
           6 (9.68 % of base) : 30788.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
           6 (9.68 % of base) : 113462.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
           6 (9.68 % of base) : 45613.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
           6 (9.68 % of base) : 50330.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
           6 (9.68 % of base) : 58362.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
           6 (9.68 % of base) : 110521.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
           1 (0.31 % of base) : 110930.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 41037.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 90196.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 100799.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 86225.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 95737.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 104717.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 28628.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)

Top method improvements (bytes):
        -128 (-4.46 % of base) : 79777.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -89 (-2.47 % of base) : 19526.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier0-FullOpts)
         -48 (-5.01 % of base) : 83738.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -47 (-1.69 % of base) : 31492.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier0-FullOpts)
         -46 (-3.07 % of base) : 75830.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol):ubyte:this (Tier1)
         -46 (-17.23 % of base) : 2323.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -33 (-8.87 % of base) : 76000.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -31 (-1.21 % of base) : 80596.dasm - Microsoft.CodeAnalysis.CSharp.LocalRewriter:MakeConversionNodeCore(Microsoft.CodeAnalysis.CSharp.BoundConversion,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Conversion,ubyte,ubyte,Microsoft.CodeAnalysis.ConstantValue,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)
         -28 (-6.05 % of base) : 69547.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier0-FullOpts)
         -26 (-18.44 % of base) : 19722.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
         -25 (-4.20 % of base) : 53318.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -25 (-4.66 % of base) : 108022.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-32.76 % of base) : 9124.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -19 (-3.18 % of base) : 101281.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-3.18 % of base) : 27521.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-3.18 % of base) : 52085.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-3.18 % of base) : 87130.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-3.18 % of base) : 100513.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-3.18 % of base) : 50806.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-3.18 % of base) : 54266.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          14 (10.61 % of base) : 66532.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
           6 (9.68 % of base) : 30788.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
           6 (9.68 % of base) : 113462.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
           6 (9.68 % of base) : 45613.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
           6 (9.68 % of base) : 50330.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
           6 (9.68 % of base) : 58362.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
           6 (9.68 % of base) : 110521.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          11 (1.75 % of base) : 34697.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
          28 (1.63 % of base) : 75828.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
           1 (0.31 % of base) : 110930.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 41037.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 90196.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 86225.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 95737.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 104717.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 28628.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 100799.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)

Top method improvements (percentages):
         -19 (-32.76 % of base) : 9124.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -17 (-21.79 % of base) : 49257.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -26 (-18.44 % of base) : 19722.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
         -46 (-17.23 % of base) : 2323.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -15 (-15.15 % of base) : 49219.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -12 (-12.77 % of base) : 46464.dasm - System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (Tier0-FullOpts)
         -18 (-11.46 % of base) : 83889.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -10 (-10.64 % of base) : 84774.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -33 (-8.87 % of base) : 76000.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -12 (-8.70 % of base) : 84995.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -14 (-7.07 % of base) : 21285.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
          -8 (-6.11 % of base) : 83619.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier0-FullOpts)
         -28 (-6.05 % of base) : 69547.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier0-FullOpts)
         -14 (-5.98 % of base) : 29353.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier0-FullOpts)
         -48 (-5.01 % of base) : 83738.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -25 (-4.66 % of base) : 108022.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -12 (-4.55 % of base) : 1207.dasm - System.Linq.EnumerableSorter`2[System.__Canon,int]:ComputeKeys(System.__Canon[],int):this (Tier0-FullOpts)
        -128 (-4.46 % of base) : 79777.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -25 (-4.20 % of base) : 53318.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -10 (-3.73 % of base) : 936.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier0-FullOpts)


benchmarks.run_tiered.windows.x86.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 8634134 (overridden on cmd)
Total bytes of diff: 8633444 (overridden on cmd)
Total bytes of delta: -690 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          12 : 46831.dasm (3.97 % of base)
          11 : 23725.dasm (1.80 % of base)
           6 : 28206.dasm (9.68 % of base)
           6 : 27513.dasm (9.68 % of base)
           6 : 47631.dasm (9.68 % of base)
           6 : 21314.dasm (9.68 % of base)
           6 : 30801.dasm (9.68 % of base)
           6 : 48289.dasm (9.68 % of base)

Top file improvements (bytes):
         -86 : 4763.dasm (-2.47 % of base)
         -47 : 23814.dasm (-1.72 % of base)
         -33 : 39214.dasm (-9.12 % of base)
         -31 : 18630.dasm (-6.42 % of base)
         -30 : 31959.dasm (-11.81 % of base)
         -28 : 33818.dasm (-6.10 % of base)
         -26 : 9950.dasm (-18.44 % of base)
         -21 : 25288.dasm (-4.34 % of base)
         -19 : 21574.dasm (-28.79 % of base)
         -19 : 7625.dasm (-32.76 % of base)
         -18 : 1151.dasm (-8.45 % of base)
         -18 : 24065.dasm (-38.30 % of base)
         -18 : 42988.dasm (-11.46 % of base)
         -17 : 14035.dasm (-21.79 % of base)
         -17 : 46483.dasm (-21.79 % of base)
         -17 : 8286.dasm (-3.33 % of base)
         -16 : 19649.dasm (-39.02 % of base)
         -16 : 18061.dasm (-13.33 % of base)
         -15 : 13883.dasm (-14.85 % of base)
         -14 : 5575.dasm (-7.07 % of base)

46 total files with Code Size differences (38 improved, 8 regressed), 2 unchanged.

Top method regressions (bytes):
          12 (3.97 % of base) : 46831.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (Tier1)
          11 (1.80 % of base) : 23725.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:.ctor(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier0-FullOpts)
           6 (9.68 % of base) : 21314.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
           6 (9.68 % of base) : 48289.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
           6 (9.68 % of base) : 27513.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
           6 (9.68 % of base) : 28206.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
           6 (9.68 % of base) : 30801.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
           6 (9.68 % of base) : 47631.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)

Top method improvements (bytes):
         -86 (-2.47 % of base) : 4763.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier0-FullOpts)
         -47 (-1.72 % of base) : 23814.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier0-FullOpts)
         -33 (-9.12 % of base) : 39214.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -31 (-6.42 % of base) : 18630.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (Tier1)
         -30 (-11.81 % of base) : 31959.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -28 (-6.10 % of base) : 33818.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier0-FullOpts)
         -26 (-18.44 % of base) : 9950.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
         -21 (-4.34 % of base) : 25288.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -19 (-32.76 % of base) : 7625.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -19 (-28.79 % of base) : 21574.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -18 (-11.46 % of base) : 42988.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -18 (-8.45 % of base) : 1151.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -18 (-38.30 % of base) : 24065.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -17 (-21.79 % of base) : 46483.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -17 (-3.33 % of base) : 8286.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
         -17 (-21.79 % of base) : 14035.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -16 (-39.02 % of base) : 19649.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -16 (-13.33 % of base) : 18061.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -15 (-14.85 % of base) : 13883.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -14 (-7.07 % of base) : 5575.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)

Top method regressions (percentages):
           6 (9.68 % of base) : 21314.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
           6 (9.68 % of base) : 48289.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
           6 (9.68 % of base) : 27513.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
           6 (9.68 % of base) : 28206.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
           6 (9.68 % of base) : 30801.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
           6 (9.68 % of base) : 47631.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          12 (3.97 % of base) : 46831.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (Tier1)
          11 (1.80 % of base) : 23725.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:.ctor(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier0-FullOpts)

Top method improvements (percentages):
         -16 (-39.02 % of base) : 19649.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -18 (-38.30 % of base) : 24065.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -19 (-32.76 % of base) : 7625.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -14 (-29.79 % of base) : 26353.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (Tier1)
         -19 (-28.79 % of base) : 21574.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -17 (-21.79 % of base) : 46483.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -17 (-21.79 % of base) : 14035.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -26 (-18.44 % of base) : 9950.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
         -15 (-14.85 % of base) : 13883.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -16 (-13.33 % of base) : 18061.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -12 (-12.77 % of base) : 28140.dasm - System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (Tier0-FullOpts)
         -14 (-12.50 % of base) : 23823.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:<OnTryRead>g__ReadDictionaryKey|10_0(System.Text.Json.Serialization.JsonConverter`1[System.__Canon],byref,byref,System.Text.Json.JsonSerializerOptions):System.__Canon (Tier1)
         -30 (-11.81 % of base) : 31959.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -18 (-11.46 % of base) : 42988.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -10 (-10.87 % of base) : 40604.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -12 (-10.00 % of base) : 15568.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -10 (-9.43 % of base) : 26382.dasm - System.Linq.Expressions.ExpressionVisitor:VisitAndConvert[System.__Canon](System.__Canon,System.String):System.__Canon:this (Tier1)
         -33 (-9.12 % of base) : 39214.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -10 (-8.62 % of base) : 38095.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -18 (-8.45 % of base) : 1151.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)


coreclr_tests.run.windows.x86.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 291128494 (overridden on cmd)
Total bytes of diff: 291125644 (overridden on cmd)
Total bytes of delta: -2850 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          46 : 2925.dasm (0.81 % of base)
          46 : 2946.dasm (0.81 % of base)
          34 : 182676.dasm (566.67 % of base)
          21 : 242297.dasm (3.24 % of base)
          21 : 495141.dasm (3.23 % of base)
          18 : 454622.dasm (0.77 % of base)
          16 : 455391.dasm (12.31 % of base)
          14 : 165169.dasm (2.78 % of base)
          14 : 164784.dasm (2.78 % of base)
          14 : 167780.dasm (2.78 % of base)
          13 : 461036.dasm (4.51 % of base)
          12 : 449004.dasm (0.70 % of base)
          11 : 280815.dasm (1.75 % of base)
          11 : 542347.dasm (1.75 % of base)
           9 : 568562.dasm (1.31 % of base)
           5 : 301798.dasm (1.74 % of base)
           2 : 301955.dasm (0.23 % of base)
           1 : 421568.dasm (0.31 % of base)
           1 : 439488.dasm (0.31 % of base)

Top file improvements (bytes):
        -128 : 483384.dasm (-4.46 % of base)
         -54 : 304552.dasm (-6.76 % of base)
         -54 : 118.dasm (-6.85 % of base)
         -48 : 449974.dasm (-5.21 % of base)
         -46 : 483330.dasm (-3.13 % of base)
         -44 : 172385.dasm (-18.80 % of base)
         -44 : 172408.dasm (-18.80 % of base)
         -43 : 165097.dasm (-29.25 % of base)
         -42 : 454647.dasm (-3.64 % of base)
         -38 : 167298.dasm (-2.81 % of base)
         -33 : 188081.dasm (-9.12 % of base)
         -33 : 233167.dasm (-1.55 % of base)
         -33 : 304551.dasm (-4.66 % of base)
         -33 : 116.dasm (-4.73 % of base)
         -33 : 327.dasm (-4.67 % of base)
         -33 : 483124.dasm (-1.55 % of base)
         -33 : 304779.dasm (-4.60 % of base)
         -33 : 448432.dasm (-8.87 % of base)
         -32 : 228198.dasm (-21.33 % of base)
         -31 : 189925.dasm (-6.03 % of base)

68 total files with Code Size differences (49 improved, 19 regressed), 17 unchanged.

Top method regressions (bytes):
          46 (0.81 % of base) : 2925.dasm - Program:TestCase0003() (FullOpts)
          46 (0.81 % of base) : 2946.dasm - Program:TestCase0003() (FullOpts)
          34 (566.67 % of base) : 182676.dasm - T:TestEntryPoint():int (FullOpts)
          21 (3.24 % of base) : 242297.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          21 (3.23 % of base) : 495141.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (Tier0-FullOpts)
          18 (0.77 % of base) : 454622.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          16 (12.31 % of base) : 455391.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          14 (2.78 % of base) : 165169.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          14 (2.78 % of base) : 164784.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          14 (2.78 % of base) : 167780.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (4.51 % of base) : 461036.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          12 (0.70 % of base) : 449004.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
          11 (1.75 % of base) : 280815.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          11 (1.75 % of base) : 542347.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
           9 (1.31 % of base) : 568562.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.__Canon]:IndexOf(System.__Canon[],System.__Canon,int,int):int:this (Tier1)
           5 (1.74 % of base) : 301798.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           2 (0.23 % of base) : 301955.dasm - Microsoft.Build.Execution.BuildManager+<>c__DisplayClass100_0:<IssueBuildRequestForBuildSubmission>g__IssueBuildSubmissionToSchedulerImpl|1(Microsoft.Build.Execution.BuildSubmission,ubyte):this (FullOpts)
           1 (0.31 % of base) : 421568.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 439488.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)

Top method improvements (bytes):
        -128 (-4.46 % of base) : 483384.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -54 (-6.85 % of base) : 118.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (FullOpts)
         -54 (-6.76 % of base) : 304552.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (Tier0-FullOpts)
         -48 (-5.21 % of base) : 449974.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -46 (-3.13 % of base) : 483330.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol):ubyte:this (Tier1)
         -44 (-18.80 % of base) : 172408.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -44 (-18.80 % of base) : 172385.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -43 (-29.25 % of base) : 165097.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -42 (-3.64 % of base) : 454647.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
         -38 (-2.81 % of base) : 167298.dasm - Microsoft.CSharp.RuntimeBinder.ComInterop.SplatInvokeBinder:Bind(System.Object[],System.Collections.ObjectModel.ReadOnlyCollection`1[System.Linq.Expressions.ParameterExpression],System.Linq.Expressions.LabelTarget):System.Linq.Expressions.Expression:this (FullOpts)
         -33 (-4.73 % of base) : 116.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -33 (-4.66 % of base) : 304551.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (Tier0-FullOpts)
         -33 (-4.67 % of base) : 327.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -33 (-4.60 % of base) : 304779.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (Tier0-FullOpts)
         -33 (-1.55 % of base) : 233167.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:AddMemberToCandidateSet[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,ubyte,ubyte,ubyte,System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon],ubyte,byref,ubyte,ubyte):this (FullOpts)
         -33 (-1.55 % of base) : 483124.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:AddMemberToCandidateSet[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,ubyte,ubyte,ubyte,System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon],ubyte,byref,ubyte,ubyte):this (Tier0-FullOpts)
         -33 (-9.12 % of base) : 188081.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -33 (-8.87 % of base) : 448432.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -32 (-21.33 % of base) : 228198.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -31 (-6.03 % of base) : 189925.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)

Top method regressions (percentages):
          34 (566.67 % of base) : 182676.dasm - T:TestEntryPoint():int (FullOpts)
          16 (12.31 % of base) : 455391.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          13 (4.51 % of base) : 461036.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          21 (3.24 % of base) : 242297.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          21 (3.23 % of base) : 495141.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (Tier0-FullOpts)
          14 (2.78 % of base) : 165169.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          14 (2.78 % of base) : 164784.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          14 (2.78 % of base) : 167780.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          11 (1.75 % of base) : 280815.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          11 (1.75 % of base) : 542347.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (Tier0-FullOpts)
           5 (1.74 % of base) : 301798.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           9 (1.31 % of base) : 568562.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.__Canon]:IndexOf(System.__Canon[],System.__Canon,int,int):int:this (Tier1)
          46 (0.81 % of base) : 2925.dasm - Program:TestCase0003() (FullOpts)
          46 (0.81 % of base) : 2946.dasm - Program:TestCase0003() (FullOpts)
          18 (0.77 % of base) : 454622.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          12 (0.70 % of base) : 449004.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
           1 (0.31 % of base) : 421568.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.31 % of base) : 439488.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
           2 (0.23 % of base) : 301955.dasm - Microsoft.Build.Execution.BuildManager+<>c__DisplayClass100_0:<IssueBuildRequestForBuildSubmission>g__IssueBuildSubmissionToSchedulerImpl|1(Microsoft.Build.Execution.BuildSubmission,ubyte):this (FullOpts)

Top method improvements (percentages):
         -19 (-32.76 % of base) : 305349.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -14 (-29.79 % of base) : 165957.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -43 (-29.25 % of base) : 165097.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -22 (-27.16 % of base) : 185631.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -26 (-26.26 % of base) : 234649.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -10 (-25.64 % of base) : 204308.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -14 (-25.45 % of base) : 300488.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -15 (-25.00 % of base) : 205532.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -19 (-25.00 % of base) : 145276.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -19 (-25.00 % of base) : 236496.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -19 (-23.46 % of base) : 164772.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)
         -19 (-23.46 % of base) : 204301.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -32 (-21.33 % of base) : 228198.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -10 (-21.28 % of base) : 240822.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -18 (-19.15 % of base) : 280783.dasm - System.CommandLine.Binding.ArgumentConverter:GetValueOrDefault[System.__Canon](System.CommandLine.Binding.ArgumentConversionResult):System.__Canon (FullOpts)
         -18 (-19.15 % of base) : 543945.dasm - System.CommandLine.Binding.ArgumentConverter:GetValueOrDefault[System.__Canon](System.CommandLine.Binding.ArgumentConversionResult):System.__Canon (Tier1)
         -44 (-18.80 % of base) : 172408.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -44 (-18.80 % of base) : 172385.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -26 (-18.31 % of base) : 281197.dasm - ILCompiler.DependencyAnalysisFramework.DependencyAnalyzer`2[ILCompiler.DependencyAnalysisFramework.NoLogStrategy`1[System.__Canon],System.__Canon]:add_ComputeDependencyRoutine(System.Action`1[System.__Canon]):this (FullOpts)
         -26 (-18.31 % of base) : 543085.dasm - ILCompiler.DependencyAnalysisFramework.DependencyAnalyzer`2[ILCompiler.DependencyAnalysisFramework.NoLogStrategy`1[System.__Canon],System.__Canon]:add_ComputeDependencyRoutine(System.Action`1[System.__Canon]):this (Tier0-FullOpts)


libraries.crossgen2.windows.x86.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 31699024 (overridden on cmd)
Total bytes of diff: 31669266 (overridden on cmd)
Total bytes of delta: -29758 (-0.09 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
           3 : 61897.dasm (0.70 % of base)

Top file improvements (bytes):
        -219 : 205234.dasm (-5.02 % of base)
        -208 : 239025.dasm (-34.61 % of base)
        -204 : 239029.dasm (-33.06 % of base)
        -192 : 188865.dasm (-17.20 % of base)
        -180 : 188864.dasm (-17.11 % of base)
        -178 : 73188.dasm (-26.22 % of base)
        -169 : 73760.dasm (-24.14 % of base)
        -169 : 73761.dasm (-23.54 % of base)
        -168 : 188862.dasm (-17.00 % of base)
        -156 : 188860.dasm (-16.88 % of base)
        -144 : 188858.dasm (-16.74 % of base)
        -143 : 239027.dasm (-31.29 % of base)
        -140 : 239020.dasm (-31.96 % of base)
        -132 : 188856.dasm (-16.58 % of base)
        -123 : 73911.dasm (-18.66 % of base)
        -123 : 74655.dasm (-18.66 % of base)
        -120 : 188854.dasm (-16.39 % of base)
        -117 : 205293.dasm (-6.81 % of base)
        -109 : 149678.dasm (-10.05 % of base)
        -109 : 233583.dasm (-14.83 % of base)

84 total files with Code Size differences (83 improved, 1 regressed), 2 unchanged.

Top method regressions (bytes):
           3 (0.70 % of base) : 61897.dasm - Microsoft.CodeAnalysis.CSharp.BoundNodeExtensions:<RewriteInterpolatedStringAddition>g__doRewrite|8_0[System.__Canon,System.__Canon,System.__Canon](Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.Func`4[System.__Canon,int,System.__Canon,System.__Canon],System.Func`5[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.__Canon,System.__Canon,System.__Canon],byref):System.__Canon (FullOpts)

Top method improvements (bytes):
        -219 (-5.02 % of base) : 205234.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
        -208 (-34.61 % of base) : 239025.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
        -204 (-33.06 % of base) : 239029.dasm - System.Linq.Expressions.Interpreter.FuncCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
        -192 (-17.20 % of base) : 188865.dasm - CommandLine.ParserResultExtensions:MapResult[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon](CommandLine.ParserResult`1[System.Object],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -180 (-17.11 % of base) : 188864.dasm - CommandLine.ParserResultExtensions:MapResult[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon](CommandLine.ParserResult`1[System.Object],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -178 (-26.22 % of base) : 73188.dasm - Microsoft.FSharp.Collections.SetTreeModule:rebalance[System.__Canon](Microsoft.FSharp.Collections.SetTree`1[System.__Canon],System.__Canon,Microsoft.FSharp.Collections.SetTree`1[System.__Canon]):Microsoft.FSharp.Collections.SetTree`1[System.__Canon] (FullOpts)
        -169 (-24.14 % of base) : 73760.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -169 (-23.54 % of base) : 73761.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -168 (-17.00 % of base) : 188862.dasm - CommandLine.ParserResultExtensions:MapResult[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon](CommandLine.ParserResult`1[System.Object],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -156 (-16.88 % of base) : 188860.dasm - CommandLine.ParserResultExtensions:MapResult[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon](CommandLine.ParserResult`1[System.Object],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -144 (-16.74 % of base) : 188858.dasm - CommandLine.ParserResultExtensions:MapResult[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon](CommandLine.ParserResult`1[System.Object],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -143 (-31.29 % of base) : 239027.dasm - System.Linq.Expressions.Interpreter.FuncCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
        -140 (-31.96 % of base) : 239020.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
        -132 (-16.58 % of base) : 188856.dasm - CommandLine.ParserResultExtensions:MapResult[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon](CommandLine.ParserResult`1[System.Object],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -123 (-18.66 % of base) : 74655.dasm - Microsoft.FSharp.Collections.MapTreeModule:rebalance[int,System.__Canon](Microsoft.FSharp.Collections.MapTree`2[int,System.__Canon],int,System.__Canon,Microsoft.FSharp.Collections.MapTree`2[int,System.__Canon]):Microsoft.FSharp.Collections.MapTree`2[int,System.__Canon] (FullOpts)
        -123 (-18.66 % of base) : 73911.dasm - Microsoft.FSharp.Collections.MapTreeModule:rebalance[System.__Canon,System.__Canon](Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.__Canon],System.__Canon,System.__Canon,Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.__Canon] (FullOpts)
        -120 (-16.39 % of base) : 188854.dasm - CommandLine.ParserResultExtensions:MapResult[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon](CommandLine.ParserResult`1[System.Object],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -117 (-6.81 % of base) : 205293.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
        -109 (-10.05 % of base) : 149678.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -109 (-14.83 % of base) : 233583.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)

Top method regressions (percentages):
           3 (0.70 % of base) : 61897.dasm - Microsoft.CodeAnalysis.CSharp.BoundNodeExtensions:<RewriteInterpolatedStringAddition>g__doRewrite|8_0[System.__Canon,System.__Canon,System.__Canon](Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.Func`4[System.__Canon,int,System.__Canon,System.__Canon],System.Func`5[Microsoft.CodeAnalysis.CSharp.BoundBinaryOperator,System.__Canon,System.__Canon,System.__Canon,System.__Canon],byref):System.__Canon (FullOpts)

Top method improvements (percentages):
         -34 (-58.62 % of base) : 188346.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -74 (-54.41 % of base) : 196726.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.__Canon]:System.Collections.IDictionary.Add(System.Object,System.Object):this (FullOpts)
         -74 (-54.41 % of base) : 196731.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (FullOpts)
         -74 (-54.41 % of base) : 196871.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.__Canon]:System.Collections.IDictionary.Add(System.Object,System.Object):this (FullOpts)
         -74 (-54.41 % of base) : 196876.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (FullOpts)
         -84 (-53.50 % of base) : 205306.dasm - System.Text.Json.Serialization.Converters.ImmutableDictionaryOfTKeyTValueConverter`3[System.__Canon,System.__Canon,System.__Canon]:ConvertCollection(byref,System.Text.Json.JsonSerializerOptions):this (FullOpts)
         -84 (-53.50 % of base) : 205276.dasm - System.Text.Json.Serialization.Converters.ImmutableEnumerableOfTConverter`2[System.__Canon,System.__Canon]:ConvertCollection(byref,System.Text.Json.JsonSerializerOptions):this (FullOpts)
         -30 (-52.63 % of base) : 202125.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -30 (-52.63 % of base) : 171495.dasm - System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]:<Cast>b__1_0(System.__Canon):System.__Canon:this (FullOpts)
         -73 (-51.77 % of base) : 121548.dasm - Microsoft.CodeAnalysis.Emit.PEModuleBuilder`9[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Translate(Microsoft.CodeAnalysis.Symbols.ITypeSymbolInternal,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.Cci.ITypeReference:this (FullOpts)
         -73 (-51.77 % of base) : 87611.dasm - Microsoft.CodeAnalysis.Emit.PEModuleBuilder`9[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Translate(Microsoft.CodeAnalysis.Symbols.ITypeSymbolInternal,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.Cci.ITypeReference:this (FullOpts)
         -45 (-50.00 % of base) : 173971.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -40 (-50.00 % of base) : 66653.dasm - System.Data.SortExpressionBuilder`1+<>c__DisplayClass10_0`1[System.__Canon,System.__Canon]:<CloneCast>b__0(System.__Canon):System.Object:this (FullOpts)
         -40 (-50.00 % of base) : 228744.dasm - System.Diagnostics.DiagnosticSourceEventSource+TransformSpec+PropertySpec+PropertyFetch+RefTypedFetchProperty`2[System.__Canon,System.__Canon]:Fetch(System.Object):System.Object:this (FullOpts)
         -75 (-50.00 % of base) : 205312.dasm - System.Text.Json.Serialization.Converters.SmallObjectWithParameterizedConstructorConverter`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:CreateObject(byref):System.Object:this (FullOpts)
         -45 (-50.00 % of base) : 205878.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.__Canon]:<SetSetter>b__0(System.Object,System.Object):this (FullOpts)
         -45 (-50.00 % of base) : 205880.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.__Canon]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (FullOpts)
         -43 (-50.00 % of base) : 229885.dasm - System.Threading.Tasks.Dataflow.ActionBlock`1+<>c[System.__Canon]:<ProcessMessageWithTask>b__8_0(System.Threading.Tasks.Task,System.Object):this (FullOpts)
         -44 (-47.83 % of base) : 174046.dasm - Microsoft.Extensions.Hosting.HostApplicationBuilder+<>c__DisplayClass30_0`1[System.__Canon]:<ConfigureContainer>b__1(System.Object):this (FullOpts)
         -30 (-46.15 % of base) : 241509.dasm - System.Collections.ObjectModel.KeyedCollection`2[System.__Canon,System.__Canon]:get_Items():System.Collections.Generic.List`1[System.__Canon]:this (FullOpts)


libraries.pmi.windows.x86.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 36396395 (overridden on cmd)
Total bytes of diff: 36387909 (overridden on cmd)
Total bytes of delta: -8486 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          52 : 99937.dasm (3.33 % of base)
          30 : 93098.dasm (2.16 % of base)
          26 : 197944.dasm (15.29 % of base)
          20 : 69159.dasm (7.91 % of base)
          14 : 197941.dasm (6.60 % of base)
          11 : 226828.dasm (1.75 % of base)
           8 : 118546.dasm (0.38 % of base)
           8 : 156501.dasm (0.35 % of base)
           8 : 156511.dasm (1.38 % of base)
           7 : 211184.dasm (1.45 % of base)
           5 : 208083.dasm (1.74 % of base)
           5 : 212165.dasm (6.94 % of base)
           5 : 197947.dasm (3.82 % of base)
           5 : 212163.dasm (6.94 % of base)
           4 : 234547.dasm (5.13 % of base)
           4 : 236134.dasm (5.13 % of base)
           4 : 258539.dasm (1.04 % of base)
           3 : 193733.dasm (2.56 % of base)
           3 : 212152.dasm (3.23 % of base)
           2 : 229326.dasm (2.60 % of base)

Top file improvements (bytes):
        -253 : 219452.dasm (-20.91 % of base)
        -109 : 77841.dasm (-12.88 % of base)
        -107 : 194560.dasm (-10.07 % of base)
         -89 : 285599.dasm (-2.47 % of base)
         -82 : 177273.dasm (-6.22 % of base)
         -78 : 177918.dasm (-36.11 % of base)
         -64 : 29224.dasm (-13.50 % of base)
         -64 : 29231.dasm (-13.01 % of base)
         -63 : 71551.dasm (-14.82 % of base)
         -60 : 177920.dasm (-4.77 % of base)
         -56 : 170250.dasm (-19.58 % of base)
         -48 : 259668.dasm (-13.75 % of base)
         -46 : 226796.dasm (-3.21 % of base)
         -46 : 69082.dasm (-15.97 % of base)
         -45 : 228126.dasm (-0.92 % of base)
         -44 : 70988.dasm (-28.95 % of base)
         -44 : 10120.dasm (-7.63 % of base)
         -43 : 293203.dasm (-29.25 % of base)
         -43 : 291468.dasm (-29.25 % of base)
         -42 : 14338.dasm (-15.00 % of base)

69 total files with Code Size differences (45 improved, 24 regressed), 20 unchanged.

Top method regressions (bytes):
          52 (3.33 % of base) : 99937.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          30 (2.16 % of base) : 93098.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          26 (15.29 % of base) : 197944.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
          20 (7.91 % of base) : 69159.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
          14 (6.60 % of base) : 197941.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.get_Item(System.Object):System.Object:this (FullOpts)
          11 (1.75 % of base) : 226828.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           8 (1.38 % of base) : 156511.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:GetDeletedSynthesizedMethods(Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Emit.EncLambdaInfo]):System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[Microsoft.CodeAnalysis.CodeGen.DebugId,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal]]:this (FullOpts)
           8 (0.35 % of base) : 156501.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
           8 (0.38 % of base) : 118546.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Emit.EmitBaseline,Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
           7 (1.45 % of base) : 211184.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)
           5 (6.94 % of base) : 212163.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
           5 (6.94 % of base) : 212165.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
           5 (1.74 % of base) : 208083.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           5 (3.82 % of base) : 197947.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
           4 (5.13 % of base) : 234547.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (5.13 % of base) : 236134.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (1.04 % of base) : 258539.dasm - System.Net.Http.Http3RequestStream:HandleReadResponseContentException(System.Exception,System.Threading.CancellationToken):this (FullOpts)
           3 (3.23 % of base) : 212152.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:get_Item(System.Object):System.Object:this (FullOpts)
           3 (2.56 % of base) : 193733.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           2 (2.60 % of base) : 229326.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)

Top method improvements (bytes):
        -253 (-20.91 % of base) : 219452.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -109 (-12.88 % of base) : 77841.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -107 (-10.07 % of base) : 194560.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
         -89 (-2.47 % of base) : 285599.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -82 (-6.22 % of base) : 177273.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
         -78 (-36.11 % of base) : 177918.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -64 (-13.50 % of base) : 29224.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -64 (-13.01 % of base) : 29231.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -63 (-14.82 % of base) : 71551.dasm - System.Data.UniqueConstraint:IsConstraintViolated():ubyte:this (FullOpts)
         -60 (-4.77 % of base) : 177920.dasm - System.Xml.Serialization.XmlSchemas:GetSchemaItem(System.Xml.Schema.XmlSchemaObject,System.String,System.String):System.String (FullOpts)
         -56 (-19.58 % of base) : 170250.dasm - System.Xml.Schema.Compiler:CanonicalizeParticle(System.Xml.Schema.XmlSchemaParticle,ubyte):System.Xml.Schema.XmlSchemaParticle:this (FullOpts)
         -48 (-13.75 % of base) : 259668.dasm - System.Net.Http.Headers.ObjectCollection`1[System.__Canon]:CopyTo(System.__Canon[],int):this (FullOpts)
         -46 (-3.21 % of base) : 226796.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:UnionWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
         -46 (-15.97 % of base) : 69082.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -45 (-0.92 % of base) : 228126.dasm - System.ComponentModel.Composition.MetadataViewGenerator:GenerateInterfaceViewProxyType(System.Type):System.Type (FullOpts)
         -44 (-28.95 % of base) : 70988.dasm - System.Data.EnumerableRowCollection`1+<>c__DisplayClass16_0[System.__Canon]:<GetLinqDataView>b__4(System.Data.DataRow,System.Data.DataRow):int:this (FullOpts)
         -44 (-7.63 % of base) : 10120.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
         -43 (-29.25 % of base) : 293203.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -43 (-29.25 % of base) : 291468.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -42 (-15.00 % of base) : 14338.dasm - Microsoft.FSharp.Core.FSharpFunc`2[ubyte,System.Nullable`1[int]]:InvokeFast[long,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpFunc`2[ubyte,Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[long,System.Nullable`1[int]]]],ubyte,System.Nullable`1[int],long):System.Nullable`1[int] (FullOpts)

Top method regressions (percentages):
          26 (15.29 % of base) : 197944.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
          20 (7.91 % of base) : 69159.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
           5 (6.94 % of base) : 212163.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
           5 (6.94 % of base) : 212165.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
          14 (6.60 % of base) : 197941.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.get_Item(System.Object):System.Object:this (FullOpts)
           4 (5.13 % of base) : 234547.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (5.13 % of base) : 236134.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           5 (3.82 % of base) : 197947.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
          52 (3.33 % of base) : 99937.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
           3 (3.23 % of base) : 212152.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:get_Item(System.Object):System.Object:this (FullOpts)
           2 (2.60 % of base) : 229326.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
           2 (2.60 % of base) : 293205.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
           2 (2.60 % of base) : 291470.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
           3 (2.56 % of base) : 193733.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
          30 (2.16 % of base) : 93098.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          11 (1.75 % of base) : 226828.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           5 (1.74 % of base) : 208083.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           7 (1.45 % of base) : 211184.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)
           8 (1.38 % of base) : 156511.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:GetDeletedSynthesizedMethods(Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Emit.EncLambdaInfo]):System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[Microsoft.CodeAnalysis.CodeGen.DebugId,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal]]:this (FullOpts)
           1 (1.09 % of base) : 222566.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)

Top method improvements (percentages):
         -14 (-42.42 % of base) : 299274.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -16 (-39.02 % of base) : 28948.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -16 (-39.02 % of base) : 283005.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -14 (-38.89 % of base) : 188625.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -16 (-36.36 % of base) : 146379.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -16 (-36.36 % of base) : 108269.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -78 (-36.11 % of base) : 177918.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -14 (-35.90 % of base) : 74048.dasm - System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
         -14 (-34.15 % of base) : 268314.dasm - System.Runtime.Serialization.DataNode`1[System.__Canon]:set_Value(System.Object):this (FullOpts)
         -14 (-32.56 % of base) : 222389.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -14 (-32.56 % of base) : 222568.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -14 (-32.56 % of base) : 224242.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -14 (-32.56 % of base) : 175112.dasm - System.Xml.Xsl.Runtime.XmlQuerySequence`1[System.__Canon]:System.Collections.IList.IndexOf(System.Object):int:this (FullOpts)
         -33 (-29.73 % of base) : 177839.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -19 (-29.69 % of base) : 188345.dasm - CommandLine.Infrastructure.ReflectionHelper:CreateDefaultImmutableInstance[System.__Canon](System.Type[]):System.__Canon (FullOpts)
         -19 (-29.69 % of base) : 199518.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
         -43 (-29.25 % of base) : 293203.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -43 (-29.25 % of base) : 291468.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -14 (-29.17 % of base) : 285053.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass9_1[System.__Canon]:<SetGetter>b__1(System.Object):System.__Canon:this (FullOpts)
         -14 (-29.17 % of base) : 284721.dasm - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1+<>c__DisplayClass29_0[System.__Canon]:<SetCreateObject>b__0():System.__Canon:this (FullOpts)


libraries_tests.run.windows.x86.Release.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 157355291 (overridden on cmd)
Total bytes of diff: 157341532 (overridden on cmd)
Total bytes of delta: -13759 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          78 : 49473.dasm (1.51 % of base)
          69 : 77684.dasm (1.57 % of base)
          66 : 277524.dasm (2.40 % of base)
          58 : 291084.dasm (4.85 % of base)
          50 : 54395.dasm (2.15 % of base)
          48 : 77678.dasm (2.63 % of base)
          48 : 567091.dasm (2.81 % of base)
          46 : 51625.dasm (2.10 % of base)
          46 : 52454.dasm (0.98 % of base)
          32 : 570930.dasm (1.52 % of base)
          32 : 567089.dasm (1.91 % of base)
          32 : 150577.dasm (0.70 % of base)
          32 : 79755.dasm (1.50 % of base)
          31 : 77649.dasm (1.89 % of base)
          28 : 49478.dasm (1.48 % of base)
          28 : 140455.dasm (6.19 % of base)
          26 : 155172.dasm (1.25 % of base)
          25 : 93921.dasm (5.63 % of base)
          22 : 616876.dasm (6.32 % of base)
          21 : 572158.dasm (1.02 % of base)

Top file improvements (bytes):
        -183 : 374818.dasm (-13.72 % of base)
        -164 : 373204.dasm (-11.29 % of base)
        -131 : 374812.dasm (-10.13 % of base)
        -128 : 152229.dasm (-4.32 % of base)
         -95 : 374814.dasm (-9.64 % of base)
         -89 : 312319.dasm (-2.38 % of base)
         -86 : 76983.dasm (-3.82 % of base)
         -86 : 389206.dasm (-9.91 % of base)
         -84 : 570879.dasm (-2.06 % of base)
         -78 : 374810.dasm (-5.69 % of base)
         -72 : 374815.dasm (-7.42 % of base)
         -72 : 438918.dasm (-7.56 % of base)
         -64 : 567602.dasm (-1.70 % of base)
         -63 : 221583.dasm (-14.82 % of base)
         -60 : 374153.dasm (-5.57 % of base)
         -59 : 483139.dasm (-11.03 % of base)
         -58 : 374817.dasm (-8.30 % of base)
         -58 : 77650.dasm (-3.92 % of base)
         -58 : 483037.dasm (-7.20 % of base)
         -58 : 567090.dasm (-4.01 % of base)

84 total files with Code Size differences (52 improved, 32 regressed), 20 unchanged.

Top method regressions (bytes):
          78 (1.51 % of base) : 49473.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          69 (1.57 % of base) : 77684.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.PropertySymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          66 (2.40 % of base) : 277524.dasm - System.IO.Tests.BaseSymbolicLinks_FileSystem:ResolveLinkTarget_Succeeds(System.String,ubyte):this (Tier1)
          58 (4.85 % of base) : 291084.dasm - System.Security.AccessControl.ObjectSecurity:GetSecurityDescriptorBinaryForm():ubyte[]:this (Tier1)
          50 (2.15 % of base) : 54395.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          48 (2.63 % of base) : 77678.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromParameter(byref,Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol):ubyte:this (Tier1)
          48 (2.81 % of base) : 567091.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromParameter(byref,Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol):ubyte:this (Tier1)
          46 (2.10 % of base) : 51625.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromParameter(byref,Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol):ubyte:this (Tier1)
          46 (0.98 % of base) : 52454.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.PropertySymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          32 (1.91 % of base) : 567089.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
          32 (1.52 % of base) : 570930.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          32 (1.50 % of base) : 79755.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          32 (0.70 % of base) : 150577.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
          31 (1.89 % of base) : 77649.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
          28 (1.48 % of base) : 49478.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations,int):ubyte:this (Tier1)
          28 (6.19 % of base) : 140455.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          26 (1.25 % of base) : 155172.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.DocumentationCommentParser:ParseNameAttribute(byref,byref,byref):this (Tier1)
          25 (5.63 % of base) : 93921.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          22 (6.32 % of base) : 616876.dasm - System.Threading.Tasks.ConcurrentExclusiveSchedulerPair+<>c:<CompleteTaskAsync>b__30_0(System.Object):this (Tier1)
          21 (1.02 % of base) : 572158.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.DocumentationCommentParser:ParseNameAttribute(byref,byref,byref):this (Tier1)

Top method improvements (bytes):
        -183 (-13.72 % of base) : 374818.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (Tier0-FullOpts)
        -164 (-11.29 % of base) : 373204.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (Tier0-FullOpts)
        -131 (-10.13 % of base) : 374812.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (Tier0-FullOpts)
        -128 (-4.32 % of base) : 152229.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -95 (-9.64 % of base) : 374814.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (Tier0-FullOpts)
         -89 (-2.38 % of base) : 312319.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier0-FullOpts)
         -86 (-3.82 % of base) : 76983.dasm - Microsoft.CodeAnalysis.LanguageService.AbstractDeclaredSymbolInfoFactoryService`10[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:AddDeclaredSymbolInfos(Microsoft.CodeAnalysis.SyntaxNode,System.__Canon,Roslyn.Utilities.StringTable,System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.FindSymbols.DeclaredSymbolInfo],System.Collections.Generic.Dictionary`2[System.String,System.String],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[int]],System.String,System.String,System.Threading.CancellationToken):this (Tier0-FullOpts)
         -86 (-9.91 % of base) : 389206.dasm - System.Xml.XslCompiledTransformApiTests.CSameInstanceXsltArgumentListTransform:SharedArgList(System.Object):int:this (Tier0-FullOpts)
         -84 (-2.06 % of base) : 570879.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.PropertySymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
         -78 (-5.69 % of base) : 374810.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (Tier0-FullOpts)
         -72 (-7.42 % of base) : 374815.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (Tier0-FullOpts)
         -72 (-7.56 % of base) : 438918.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (Tier0-FullOpts)
         -64 (-1.70 % of base) : 567602.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.MethodSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
         -63 (-14.82 % of base) : 221583.dasm - System.Data.UniqueConstraint:IsConstraintViolated():ubyte:this (Tier0-FullOpts)
         -60 (-5.57 % of base) : 374153.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (Tier0-FullOpts)
         -59 (-11.03 % of base) : 483139.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPublicKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
         -58 (-3.92 % of base) : 77650.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol):ubyte:this (Tier1)
         -58 (-4.01 % of base) : 567090.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromType(byref,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol):ubyte:this (Tier1)
         -58 (-8.30 % of base) : 374817.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (Tier0-FullOpts)
         -58 (-7.20 % of base) : 483037.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)

Top method regressions (percentages):
          10 (10.99 % of base) : 401036.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
          18 (7.44 % of base) : 159546.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
          18 (7.44 % of base) : 180000.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          22 (6.32 % of base) : 616876.dasm - System.Threading.Tasks.ConcurrentExclusiveSchedulerPair+<>c:<CompleteTaskAsync>b__30_0(System.Object):this (Tier1)
          15 (6.20 % of base) : 160974.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
          28 (6.19 % of base) : 140455.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          25 (5.63 % of base) : 93921.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          15 (4.89 % of base) : 615148.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAllImpl>b__57_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task[]],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          58 (4.85 % of base) : 291084.dasm - System.Security.AccessControl.ObjectSecurity:GetSecurityDescriptorBinaryForm():ubyte[]:this (Tier1)
           6 (3.19 % of base) : 345307.dasm - System.Threading.CancellationTokenSource:Invoke(System.Delegate,System.Object,System.Threading.CancellationTokenSource) (Tier1)
          14 (2.93 % of base) : 60998.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.__Canon]:this (Tier1)
           4 (2.86 % of base) : 393159.dasm - System.Xml.Schema.XsdBuilder:BuildIdentityConstraint_Refer(System.Xml.Schema.XsdBuilder,System.String) (Tier1)
          48 (2.81 % of base) : 567091.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromParameter(byref,Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol):ubyte:this (Tier1)
           7 (2.80 % of base) : 161480.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
          48 (2.63 % of base) : 77678.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromParameter(byref,Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol):ubyte:this (Tier1)
           4 (2.61 % of base) : 616817.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
           3 (2.56 % of base) : 113885.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (Tier1)
          66 (2.40 % of base) : 277524.dasm - System.IO.Tests.BaseSymbolicLinks_FileSystem:ResolveLinkTarget_Succeeds(System.String,ubyte):this (Tier1)
          10 (2.26 % of base) : 317102.dasm - System.Delegate:GetMethodImpl():System.Reflection.MethodInfo:this (Tier1)
          50 (2.15 % of base) : 54395.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)

Top method improvements (percentages):
         -16 (-39.02 % of base) : 544490.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -18 (-38.30 % of base) : 113550.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -14 (-34.15 % of base) : 116268.dasm - Microsoft.Extensions.DependencyInjection.ServiceDescriptor:get_ImplementationFactory():System.Func`2[System.IServiceProvider,System.Object]:this (Tier1)
         -14 (-34.15 % of base) : 106154.dasm - Microsoft.Extensions.DependencyInjection.ServiceDescriptor:get_KeyedImplementationFactory():System.Func`3[System.IServiceProvider,System.Object,System.Object]:this (Tier1)
         -22 (-33.33 % of base) : 499902.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -19 (-32.76 % of base) : 1604.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -43 (-29.25 % of base) : 106191.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (Tier1)
         -14 (-25.93 % of base) : 131362.dasm - System.Composition.Hosting.Providers.Lazy.LazyWithMetadataExportDescriptorProvider+<>c__DisplayClass2_2`2[System.__Canon,System.__Canon]:<GetLazyDefinitions>b__4():System.__Canon:this (Tier1)
         -14 (-25.93 % of base) : 93669.dasm - System.Composition.Hosting.Providers.Lazy.LazyWithMetadataExportDescriptorProvider+<>c__DisplayClass2_3`2[System.__Canon,System.__Canon]:<GetLazyDefinitions>b__4():System.__Canon:this (Tier1)
         -15 (-25.86 % of base) : 301970.dasm - (dynamicClass):lambda_method241(System.Runtime.CompilerServices.Closure):long (FullOpts)
         -15 (-25.00 % of base) : 549280.dasm - System.Text.Json.Serialization.Converters.ConcurrentStackOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -15 (-25.00 % of base) : 550225.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -15 (-25.00 % of base) : 550224.dasm - System.Text.Json.Serialization.Converters.StackOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -36 (-25.00 % of base) : 548790.dasm - System.Text.Json.Serialization.Converters.StackOrQueueConverter`1[System.__Canon]:Add(byref,byref):this (Tier1)
         -15 (-25.00 % of base) : 107515.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -15 (-25.00 % of base) : 106089.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -19 (-25.00 % of base) : 106921.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -19 (-25.00 % of base) : 271428.dasm - Xunit.Assert:ThrowsAny[System.__Canon](System.Action):System.__Canon (Tier1)
         -16 (-23.88 % of base) : 572204.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -19 (-23.46 % of base) : 104810.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)


librariestestsnotieredcompilation.run.windows.x86.Release.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 89450088 (overridden on cmd)
Total bytes of diff: 89437053 (overridden on cmd)
Total bytes of delta: -13035 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         186 : 177307.dasm (9.90 % of base)
          37 : 187233.dasm (3.07 % of base)
          36 : 150308.dasm (12.33 % of base)
          18 : 72529.dasm (1.01 % of base)
          18 : 96687.dasm (90.00 % of base)
          17 : 98315.dasm (43.59 % of base)
          17 : 98001.dasm (43.59 % of base)
          11 : 4093.dasm (1.75 % of base)
           6 : 206119.dasm (0.42 % of base)
           6 : 207770.dasm (0.42 % of base)
           6 : 71034.dasm (1.80 % of base)
           4 : 99438.dasm (5.13 % of base)
           3 : 38656.dasm (2.56 % of base)
           3 : 37932.dasm (0.48 % of base)
           2 : 38500.dasm (0.48 % of base)
           2 : 37929.dasm (0.71 % of base)
           2 : 38267.dasm (0.69 % of base)
           2 : 38284.dasm (0.30 % of base)
           2 : 95632.dasm (0.32 % of base)
           2 : 147322.dasm (0.63 % of base)

Top file improvements (bytes):
        -470 : 217490.dasm (-10.50 % of base)
        -364 : 314172.dasm (-7.29 % of base)
        -253 : 64885.dasm (-20.91 % of base)
        -189 : 199016.dasm (-17.68 % of base)
        -189 : 218517.dasm (-17.68 % of base)
        -184 : 172983.dasm (-14.05 % of base)
        -172 : 14922.dasm (-18.90 % of base)
        -164 : 172100.dasm (-11.29 % of base)
        -145 : 199610.dasm (-13.39 % of base)
        -145 : 218226.dasm (-13.39 % of base)
        -128 : 172977.dasm (-10.26 % of base)
         -92 : 172979.dasm (-9.70 % of base)
         -89 : 147888.dasm (-2.38 % of base)
         -88 : 203658.dasm (-7.17 % of base)
         -88 : 205011.dasm (-7.17 % of base)
         -86 : 21029.dasm (-3.82 % of base)
         -78 : 172975.dasm (-5.89 % of base)
         -72 : 207662.dasm (-7.56 % of base)
         -72 : 172980.dasm (-7.56 % of base)
         -71 : 11965.dasm (-18.21 % of base)

80 total files with Code Size differences (53 improved, 27 regressed), 20 unchanged.

Top method regressions (bytes):
         186 (9.90 % of base) : 177307.dasm - (dynamicClass):<xsl:template match="/">(System.Xml.Xsl.Runtime.XmlQueryRuntime) (FullOpts)
          37 (3.07 % of base) : 187233.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          36 (12.33 % of base) : 150308.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
          18 (1.01 % of base) : 72529.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
          18 (90.00 % of base) : 96687.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          17 (43.59 % of base) : 98315.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          17 (43.59 % of base) : 98001.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          11 (1.75 % of base) : 4093.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           6 (1.80 % of base) : 71034.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.LengthBucketsFrozenSet+GSW]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
           6 (0.42 % of base) : 206119.dasm - System.Runtime.Serialization.Tests.DataContractSerializerHelper:SerializeAndDeserialize[System.__Canon](System.__Canon,System.String,System.Runtime.Serialization.DataContractSerializerSettings,System.Func`1[System.Runtime.Serialization.DataContractSerializer],ubyte,ubyte):System.__Canon (FullOpts)
           6 (0.42 % of base) : 207770.dasm - System.Runtime.Serialization.Tests.DataContractSerializerHelper:SerializeAndDeserialize[System.__Canon](System.__Canon,System.String,System.Runtime.Serialization.DataContractSerializerSettings,System.Func`1[System.Runtime.Serialization.DataContractSerializer],ubyte,ubyte):System.__Canon (FullOpts)
           4 (5.13 % of base) : 99438.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           3 (0.48 % of base) : 37932.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEmpty(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           3 (2.56 % of base) : 38656.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           2 (0.30 % of base) : 38284.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEquivalentTo[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.71 % of base) : 37929.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.82 % of base) : 38026.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.82 % of base) : 38301.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.69 % of base) : 38267.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.48 % of base) : 38500.dasm - FluentAssertions.Primitives.ReferenceTypeAssertions`2[System.__Canon,System.__Canon]:BeOfType(System.Type,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)

Top method improvements (bytes):
        -470 (-10.50 % of base) : 217490.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -364 (-7.29 % of base) : 314172.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -253 (-20.91 % of base) : 64885.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -189 (-17.68 % of base) : 199016.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -189 (-17.68 % of base) : 218517.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -184 (-14.05 % of base) : 172983.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -172 (-18.90 % of base) : 14922.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (FullOpts)
        -164 (-11.29 % of base) : 172100.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -145 (-13.39 % of base) : 199610.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -145 (-13.39 % of base) : 218226.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -128 (-10.26 % of base) : 172977.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
         -92 (-9.70 % of base) : 172979.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
         -89 (-2.38 % of base) : 147888.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -88 (-7.17 % of base) : 203658.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
         -88 (-7.17 % of base) : 205011.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
         -86 (-3.82 % of base) : 21029.dasm - Microsoft.CodeAnalysis.LanguageService.AbstractDeclaredSymbolInfoFactoryService`10[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:AddDeclaredSymbolInfos(Microsoft.CodeAnalysis.SyntaxNode,System.__Canon,Roslyn.Utilities.StringTable,System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.FindSymbols.DeclaredSymbolInfo],System.Collections.Generic.Dictionary`2[System.String,System.String],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[int]],System.String,System.String,System.Threading.CancellationToken):this (FullOpts)
         -78 (-5.89 % of base) : 172975.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)
         -72 (-7.56 % of base) : 172980.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (FullOpts)
         -72 (-7.56 % of base) : 207662.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (FullOpts)
         -71 (-18.21 % of base) : 11965.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:DecodeCustomAttributeFixedArgumentOrThrow(Microsoft.CodeAnalysis.Symbols.ITypeSymbolInternal,byref):Microsoft.CodeAnalysis.TypedConstant:this (FullOpts)

Top method regressions (percentages):
          18 (90.00 % of base) : 96687.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          17 (43.59 % of base) : 98315.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          17 (43.59 % of base) : 98001.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          36 (12.33 % of base) : 150308.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
         186 (9.90 % of base) : 177307.dasm - (dynamicClass):<xsl:template match="/">(System.Xml.Xsl.Runtime.XmlQueryRuntime) (FullOpts)
           4 (5.13 % of base) : 99438.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
          37 (3.07 % of base) : 187233.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
           2 (2.60 % of base) : 86001.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
           3 (2.56 % of base) : 38656.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           6 (1.80 % of base) : 71034.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.LengthBucketsFrozenSet+GSW]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
           2 (1.75 % of base) : 169982.dasm - Tests.Collections.ICollectionTest`1+<>c__DisplayClass35_0[System.__Canon]:<CollectionShouldContainAllItems>b__0(System.Object):this (FullOpts)
          11 (1.75 % of base) : 4093.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           2 (1.22 % of base) : 38220.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           1 (1.09 % of base) : 71643.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
          18 (1.01 % of base) : 72529.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
           2 (0.82 % of base) : 38026.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.82 % of base) : 38301.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.71 % of base) : 37929.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.69 % of base) : 38267.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (0.63 % of base) : 147322.dasm - System.Management.CompatSwitches:GetSwitchValueFromRegistry():ubyte (FullOpts)

Top method improvements (percentages):
         -14 (-42.42 % of base) : 91003.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -41 (-42.27 % of base) : 62857.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
         -14 (-41.18 % of base) : 139255.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
         -16 (-39.02 % of base) : 35496.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -16 (-39.02 % of base) : 148059.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -14 (-38.89 % of base) : 42952.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -14 (-38.89 % of base) : 48585.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -14 (-38.89 % of base) : 48576.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-38.89 % of base) : 42945.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-38.89 % of base) : 48578.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-38.89 % of base) : 42947.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-32.56 % of base) : 73149.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -14 (-32.56 % of base) : 71672.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -14 (-32.56 % of base) : 69722.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -18 (-30.51 % of base) : 173012.dasm - System.Xml.Schema.XmlSchemaSimpleType:get_DerivedFrom():System.Xml.XmlQualifiedName:this (FullOpts)
         -14 (-30.43 % of base) : 99944.dasm - System.Diagnostics.DiagnosticSourceEventSource+TransformSpec+PropertySpec+PropertyFetch+RefTypedFetchProperty`2[System.__Canon,System.__Canon]:Fetch(System.Object):System.Object:this (FullOpts)
         -14 (-29.79 % of base) : 835.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -33 (-29.73 % of base) : 172414.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -19 (-29.69 % of base) : 22556.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
         -43 (-29.25 % of base) : 1821.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)


realworld.run.windows.x86.checked.mch

To reproduce these diffs on Windows x86: superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 7928176 (overridden on cmd)
Total bytes of diff: 7925848 (overridden on cmd)
Total bytes of delta: -2328 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          11 : 7406.dasm (2.60 % of base)
           5 : 34117.dasm (2.79 % of base)

Top file improvements (bytes):
        -172 : 34118.dasm (-36.36 % of base)
        -118 : 34847.dasm (-36.20 % of base)
         -67 : 35557.dasm (-22.26 % of base)
         -56 : 34114.dasm (-21.46 % of base)
         -46 : 35351.dasm (-21.30 % of base)
         -38 : 34102.dasm (-22.09 % of base)
         -33 : 24878.dasm (-1.55 % of base)
         -33 : 16922.dasm (-12.55 % of base)
         -33 : 30643.dasm (-9.12 % of base)
         -32 : 26652.dasm (-15.17 % of base)
         -29 : 35722.dasm (-15.43 % of base)
         -28 : 18335.dasm (-6.10 % of base)
         -26 : 34076.dasm (-1.90 % of base)
         -25 : 32092.dasm (-2.72 % of base)
         -25 : 8441.dasm (-27.17 % of base)
         -24 : 7368.dasm (-6.20 % of base)
         -24 : 12661.dasm (-15.89 % of base)
         -24 : 34071.dasm (-20.17 % of base)
         -23 : 23129.dasm (-2.35 % of base)
         -22 : 35197.dasm (-14.57 % of base)

60 total files with Code Size differences (58 improved, 2 regressed), 8 unchanged.

Top method regressions (bytes):
          11 (2.60 % of base) : 7406.dasm - FSharp.Compiler.CheckExpressions:ComputeAccessAndCompPath(FSharp.Compiler.CheckExpressions+TcEnv,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CheckExpressions+DeclKind],FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+Accessibility],FSharp.Compiler.TypedTree+ParentRef):System.Tuple`2[FSharp.Compiler.TypedTree+Accessibility,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CompilationPath]] (FullOpts)
           5 (2.79 % of base) : 34117.dasm - System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)

Top method improvements (bytes):
        -172 (-36.36 % of base) : 34118.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`6[System.__Canon,ubyte,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
        -118 (-36.20 % of base) : 34847.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -67 (-22.26 % of base) : 35557.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -56 (-21.46 % of base) : 34114.dasm - System.Management.Automation.Interpreter.FuncCallInstruction`4[System.__Canon,System.__Canon,ubyte,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -46 (-21.30 % of base) : 35351.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -38 (-22.09 % of base) : 34102.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -33 (-1.55 % of base) : 24878.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:AddMemberToCandidateSet[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,ubyte,ubyte,ubyte,System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon],ubyte,byref,ubyte,ubyte):this (FullOpts)
         -33 (-9.12 % of base) : 30643.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -33 (-12.55 % of base) : 16922.dasm - System.Net.Http.Headers.HttpHeaders:AddValueToStoreValue[System.__Canon](System.__Canon,byref) (FullOpts)
         -32 (-15.17 % of base) : 26652.dasm - System.Linq.ImmutableArrayExtensions:SequenceEqual[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`3[System.__Canon,System.__Canon,ubyte]):ubyte (FullOpts)
         -29 (-15.43 % of base) : 35722.dasm - System.Runtime.InteropServices.CustomMarshalers.ComDataHelpers:GetOrCreateManagedViewFromComData[System.__Canon,System.__Canon](System.Object,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
         -28 (-6.10 % of base) : 18335.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -26 (-1.90 % of base) : 34076.dasm - System.Management.Automation.ScriptBlock:BindArgumentsForScriptblockInvoke(System.Management.Automation.RuntimeDefinedParameter[],System.Object[],System.Management.Automation.ExecutionContext,ubyte,System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable],System.Management.Automation.MutableTuple):System.Object[] (FullOpts)
         -25 (-27.17 % of base) : 8441.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -25 (-2.72 % of base) : 32092.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)
         -24 (-6.20 % of base) : 7368.dasm - FSharp.Compiler.CheckDeclarations+TcDeclarations:SplitTyconDefn(FSharp.Compiler.Syntax.SynTypeDefn):System.Tuple`2[FSharp.Compiler.CheckDeclarations+MutRecDefnsPhase1DataForTycon,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] (FullOpts)
         -24 (-15.89 % of base) : 12661.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -24 (-20.17 % of base) : 34071.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -23 (-2.35 % of base) : 23129.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
         -22 (-11.64 % of base) : 22237.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)

Top method regressions (percentages):
           5 (2.79 % of base) : 34117.dasm - System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
          11 (2.60 % of base) : 7406.dasm - FSharp.Compiler.CheckExpressions:ComputeAccessAndCompPath(FSharp.Compiler.CheckExpressions+TcEnv,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CheckExpressions+DeclKind],FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+Accessibility],FSharp.Compiler.TypedTree+ParentRef):System.Tuple`2[FSharp.Compiler.TypedTree+Accessibility,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CompilationPath]] (FullOpts)

Top method improvements (percentages):
         -14 (-42.42 % of base) : 34197.dasm - System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
        -172 (-36.36 % of base) : 34118.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`6[System.__Canon,ubyte,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
        -118 (-36.20 % of base) : 34847.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -19 (-32.76 % of base) : 678.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -14 (-30.43 % of base) : 35682.dasm - System.Management.Automation.Language.GetSafeValueVisitor:VisitArrayExpression(System.Management.Automation.Language.ArrayExpressionAst):System.Object:this (FullOpts)
         -14 (-29.79 % of base) : 32223.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -19 (-28.79 % of base) : 20817.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -25 (-27.17 % of base) : 8441.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -22 (-27.16 % of base) : 18823.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -14 (-26.42 % of base) : 19039.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -67 (-22.26 % of base) : 35557.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -38 (-22.09 % of base) : 34102.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -56 (-21.46 % of base) : 34114.dasm - System.Management.Automation.Interpreter.FuncCallInstruction`4[System.__Canon,System.__Canon,ubyte,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -46 (-21.30 % of base) : 35351.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -24 (-20.17 % of base) : 34071.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -12 (-19.67 % of base) : 4537.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -12 (-17.91 % of base) : 9493.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -14 (-17.72 % of base) : 24543.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (FullOpts)
         -14 (-17.50 % of base) : 34856.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -12 (-16.44 % of base) : 10856.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)