Assembly Diffs

linux arm

Diffs are based on 2,100,809 contexts (829,328 MinOpts, 1,271,481 FullOpts).

MISSED contexts: base: 71,274 (3.08%), diff: 209,854 (9.08%)

Overall (+130,620 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 9,047,232 -78
benchmarks.run_pgo.linux.arm.checked.mch 44,462,940 -25,578
benchmarks.run_tiered.linux.arm.checked.mch 14,457,706 -592
coreclr_tests.run.linux.arm.checked.mch 298,554,316 +144,326
libraries.crossgen2.linux.arm.checked.mch 34,520,558 -16,194
libraries.pmi.linux.arm.checked.mch 36,667,164 -9,228
libraries_tests.run.linux.arm.Release.mch 211,844,980 +46,244
librariestestsnotieredcompilation.run.linux.arm.Release.mch 76,532,706 -5,962
realworld.run.linux.arm.checked.mch 10,176,194 -2,318

FullOpts (+130,620 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 8,658,030 -78
benchmarks.run_pgo.linux.arm.checked.mch 33,262,974 -25,578
benchmarks.run_tiered.linux.arm.checked.mch 5,804,706 -592
coreclr_tests.run.linux.arm.checked.mch 86,076,728 +144,326
libraries.crossgen2.linux.arm.checked.mch 34,519,328 -16,194
libraries.pmi.linux.arm.checked.mch 36,560,940 -9,228
libraries_tests.run.linux.arm.Release.mch 90,875,848 +46,244
librariestestsnotieredcompilation.run.linux.arm.Release.mch 66,461,970 -5,962
realworld.run.linux.arm.checked.mch 9,740,894 -2,318

Example diffs

benchmarks.run.linux.arm.checked.mch

-28 (-51.85%) : 4416.dasm - System.Collections.TryGetValueFalse`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.TryGetValueFalse`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.TryGetValueFalse`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_M53474_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_M53474_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r1] - mov r0, r1 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M53474_IG05
;; size=6 bbWeight=1 PerfScore 3.00
-G_M53474_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_M53474_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M53474_IG04: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r2
+G_M53474_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_M53474_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_M53474_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=cb9b2f1d) for method System.Collections.TryGetValueFalse`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=cb9b2f1d) for method System.Collections.TryGetValueFalse`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%) : 5379.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%) : 437.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

+44 (+13.84%) : 8903.dasm - System.Tests.Perf_Array:ArrayCreate3D():System.Array:this (FullOpts)

@@ -11,43 +11,42 @@ ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def ptr <System.Tests.Perf_Array> ; V01 OutArgs [V01 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array>
-; V03 tmp2 [V03,T00] ( 4, 6 ) int -> r4 "Inlining Arg" -; V04 tmp3 [V04,T05] ( 2, 4 ) int -> r1 "Inlining Arg" -; V05 tmp4 [V05,T06] ( 2, 4 ) int -> r0 "Inlining Arg" -;* V06 tmp5 [V06,T14] ( 0, 0 ) ref -> zero-ref single-def ptr "CASTCLASS eval op1" -;* V07 tmp6 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V08 tmp7 [V08,T15] ( 0, 0 ) ref -> zero-ref class-hnd exact ptr "Inline stloc first use temp" <System.RuntimeType> -; V09 tmp8 [V09 ] ( 4, 4 ) struct (12) [sp+0x48] do-not-enreg[XS] addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" -; V10 tmp9 [V10,T10] ( 2, 2 ) int -> r3 "Inline stloc first use temp" -; V11 tmp10 [V11,T16] ( 1, 1 ) int -> [sp+0x44] do-not-enreg[V] "GSCookie dummy for inlinee" -; V12 tmp11 [V12,T08] ( 2, 2 ) ref -> r0 class-hnd single-def "Inline return value spill temp" <System.Array> -; V13 tmp12 [V13 ] ( 3, 3 ) ref -> [sp+0x40] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V14 tmp13 [V14 ] ( 3, 6 ) ref -> [sp+0x3C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> -; V15 tmp14 [V15 ] ( 5, 10 ) struct ( 8) [sp+0x34] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V16 tmp15 [V16 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V17 tmp16 [V17 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V18 tmp17 [V18,T02] ( 3, 5 ) ref -> r0 class-hnd exact single-def "dup spill" <System.RuntimeType> -; V19 tmp18 [V19,T09] ( 2, 2 ) byref -> r1 single-def -;* V20 tmp19 [V20 ] ( 0, 0 ) ref -> zero-ref single-def ptr -;* V21 tmp20 [V21 ] ( 0, 0 ) byref -> zero-ref single-def ptr -; V22 tmp21 [V22,T07] ( 3, 2 ) int -> r2 -;* V23 tmp22 [V23 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V24 tmp23 [V24 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V25 tmp24 [V25 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V26 tmp25 [V26,T04] ( 2, 4 ) ref -> r0 single-def "Single return block return value" -; V27 FramesRoot [V27,T01] ( 5, 5 ) int -> r5 "Pinvoke FrameListRoot" -; V28 PInvokeFrame [V28 ] ( 6, 6 ) struct (36) [sp+0x10] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V29 tmp28 [V29 ] ( 4, 6 ) int -> [sp+0x34] do-not-enreg[X] addr-exposed "field V15._ptr (fldOffset=0x0)" P-DEP -; V30 tmp29 [V30 ] ( 3, 5 ) int -> [sp+0x38] do-not-enreg[X] addr-exposed "field V15._handle (fldOffset=0x4)" P-DEP -; V31 tmp30 [V31,T11] ( 2, 2 ) int -> r0 "field V16._ptr (fldOffset=0x0)" P-INDEP -; V32 tmp31 [V32,T12] ( 2, 2 ) int -> r1 "field V16._handle (fldOffset=0x4)" P-INDEP -;* V33 tmp32 [V33 ] ( 0, 0 ) int -> zero-ref "field V17._ptr (fldOffset=0x0)" P-INDEP -; V34 tmp33 [V34,T13] ( 2, 2 ) int -> r2 "field V23._ptr (fldOffset=0x0)" P-INDEP -; V35 tmp34 [V35,T17] ( 2, 0 ) ref -> r1 single-def "argument with side effect" -;* V36 tmp35 [V36 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -;* V37 tmp36 [V37 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -; V38 GsCookie [V38 ] ( 1, 1 ) int -> [sp+0x54] do-not-enreg[X] addr-exposed "GSSecurityCookie" -; V39 cse0 [V39,T03] ( 4, 4 ) int -> r0 "CSE - aggressive"
+; V03 tmp2 [V03,T01] ( 4, 6 ) int -> r4 "Inlining Arg" +; V04 tmp3 [V04,T06] ( 2, 4 ) int -> r1 "Inlining Arg" +; V05 tmp4 [V05,T07] ( 2, 4 ) int -> r0 "Inlining Arg" +; V06 tmp5 [V06,T08] ( 3, 3 ) ref -> r3 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V07 tmp6 [V07 ] ( 4, 4 ) struct (12) [sp+0x48] do-not-enreg[XS] addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" +; V08 tmp7 [V08,T12] ( 2, 2 ) int -> r2 "Inline stloc first use temp" +; V09 tmp8 [V09,T16] ( 1, 1 ) int -> [sp+0x44] do-not-enreg[V] "GSCookie dummy for inlinee" +; V10 tmp9 [V10,T10] ( 2, 2 ) ref -> r0 class-hnd single-def "Inline return value spill temp" <System.Array> +; V11 tmp10 [V11 ] ( 3, 3 ) ref -> [sp+0x40] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V12 tmp11 [V12 ] ( 3, 6 ) ref -> [sp+0x3C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> +; V13 tmp12 [V13 ] ( 5, 10 ) struct ( 8) [sp+0x34] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V14 tmp13 [V14 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V15 tmp14 [V15 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V16 tmp15 [V16,T03] ( 3, 5 ) ref -> r0 class-hnd exact single-def "dup spill" <System.RuntimeType> +; V17 tmp16 [V17,T11] ( 2, 2 ) byref -> r1 single-def +;* V18 tmp17 [V18 ] ( 0, 0 ) ref -> zero-ref single-def ptr +;* V19 tmp18 [V19 ] ( 0, 0 ) byref -> zero-ref single-def ptr +; V20 tmp19 [V20,T09] ( 3, 2 ) int -> r3 +;* V21 tmp20 [V21 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V22 tmp21 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V23 tmp22 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V24 tmp23 [V24,T05] ( 2, 4 ) ref -> r0 single-def "Single return block return value" +; V25 FramesRoot [V25,T02] ( 5, 5 ) int -> r5 "Pinvoke FrameListRoot" +; V26 PInvokeFrame [V26 ] ( 6, 6 ) struct (36) [sp+0x10] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V27 tmp26 [V27 ] ( 4, 6 ) int -> [sp+0x34] do-not-enreg[X] addr-exposed "field V13._ptr (fldOffset=0x0)" P-DEP +; V28 tmp27 [V28 ] ( 3, 5 ) int -> [sp+0x38] do-not-enreg[X] addr-exposed "field V13._handle (fldOffset=0x4)" P-DEP +; V29 tmp28 [V29,T13] ( 2, 2 ) int -> r0 "field V14._ptr (fldOffset=0x0)" P-INDEP +; V30 tmp29 [V30,T14] ( 2, 2 ) int -> r1 "field V14._handle (fldOffset=0x4)" P-INDEP +;* V31 tmp30 [V31 ] ( 0, 0 ) int -> zero-ref "field V15._ptr (fldOffset=0x0)" P-INDEP +; V32 tmp31 [V32,T15] ( 2, 2 ) int -> r3 "field V21._ptr (fldOffset=0x0)" P-INDEP +; V33 tmp32 [V33,T17] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +;* V34 tmp33 [V34 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +;* V35 tmp34 [V35 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V36 GsCookie [V36 ] ( 1, 1 ) int -> [sp+0x54] do-not-enreg[X] addr-exposed "GSSecurityCookie" +; V37 cse0 [V37,T04] ( 4, 4 ) int -> r0 "CSE - aggressive" +; V38 rat0 [V38,T00] ( 5, 7.50) ref -> r3 "replacement local"
; ; Lcl frame size = 92 @@ -56,11 +55,11 @@ G_M53848_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub sp, 92 add r11, sp, 120 movs r1, 0
- str r1, [sp+0x40] // [V13 tmp12] - str r1, [sp+0x3C] // [V14 tmp13]
+ str r1, [sp+0x40] // [V11 tmp10] + str r1, [sp+0x3C] // [V12 tmp11]
movw r1, 0xd1ff movt r1, 0xd1ff
- str r1, [sp+0x54] // [V38 GsCookie]
+ str r1, [sp+0x54] // [V36 GsCookie]
;; size=26 bbWeight=1 PerfScore 9.00 G_M53848_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz add r4, sp, 20 @@ -72,7 +71,7 @@ G_M53848_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr r0, [r0] and r0, r0, 1 cmp r0, 1
- bne SHORT G_M53848_IG14
+ bne SHORT G_M53848_IG17
;; size=30 bbWeight=1 PerfScore 10.00 G_M53848_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movw r0, 0xd1ff @@ -81,105 +80,126 @@ G_M53848_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r4, r0 mov r1, r0 cmp r4, 0
- blt SHORT G_M53848_IG15
+ blt SHORT G_M53848_IG18 + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r3, 0 + beq SHORT G_M53848_IG06 + ;; size=30 bbWeight=1 PerfScore 11.00 +G_M53848_IG04: ; bbWeight=0.50, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r3] + ldr r2, [r3] + movw lr, 0xd1ff + movt lr, 0xd1ff + cmp r2, lr + beq SHORT G_M53848_IG06 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M53848_IG05: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r3] + movs r3, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M53848_IG06: ; bbWeight=1, gcrefRegs=0008 {r3}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M53848_IG19
str r4, [sp+0x48] str r1, [sp+0x4C] str r0, [sp+0x50]
- add r3, sp, 72 - movw r0, 0xd1ff - movt r0, 0xd1ff - str r0, [sp+0x3C] // [V14 tmp13]
+ add r2, sp, 72 + str r3, [sp+0x3C] // [V12 tmp11]
movs r0, 0
- str r0, [sp+0x40] // [V13 tmp12] - ;; size=40 bbWeight=1 PerfScore 16.00 -G_M53848_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - str r0, [sp+0x34] // [V15 tmp14] - str r0, [sp+0x38] // [V15 tmp14+0x04] - add r0, sp, 60 // [V14 tmp13] - str r0, [sp+0x34] // [V29 tmp28] - ldr r0, [sp+0x3C] // [V14 tmp13]
+ str r0, [sp+0x40] // [V11 tmp10] + ;; size=18 bbWeight=1 PerfScore 9.00 +G_M53848_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r3] + str r0, [sp+0x34] // [V13 tmp12] + str r0, [sp+0x38] // [V13 tmp12+0x04] + add r0, sp, 60 // [V12 tmp11] + str r0, [sp+0x34] // [V27 tmp26] + ldr r0, [sp+0x3C] // [V12 tmp11]
; gcrRegs +[r0]
- add r1, sp, 52 // [V15 tmp14]
+ add r1, sp, 52 // [V13 tmp12]
; byrRegs +[r1] cmp r0, 0
- bne SHORT G_M53848_IG06
+ bne SHORT G_M53848_IG09
;; size=16 bbWeight=1 PerfScore 8.00
-G_M53848_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref, isz
+G_M53848_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref, isz
; gcrRegs -[r0]
- movs r2, 0 - b SHORT G_M53848_IG07
+ movs r3, 0 + b SHORT G_M53848_IG10
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M53848_IG06: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0002 {r1}, byref
+G_M53848_IG09: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0002 {r1}, byref
; gcrRegs +[r0]
- ldr r2, [r0+0x0C]
+ ldr r3, [r0+0x0C]
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M53848_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref
+G_M53848_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref
; gcrRegs -[r0]
- str r2, [r1+0x04] - ldr r0, [sp+0x34] // [V29 tmp28] - ldr r1, [sp+0x38] // [V30 tmp29]
+ str r3, [r1+0x04] + ldr r0, [sp+0x34] // [V27 tmp26] + ldr r1, [sp+0x38] // [V28 tmp27]
; byrRegs -[r1]
- add r2, sp, 64 // [V13 tmp12]
+ add r3, sp, 64 // [V11 tmp10]
mov lr, 0 str lr, [sp] // [V01 OutArgs] ;; size=16 bbWeight=1 PerfScore 6.00
-G_M53848_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M53848_IG11: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
str lr, [sp+0x04] // [V01 OutArgs+0x04]
- str r2, [sp+0x08] // [V01 OutArgs+0x08]
+ str r3, [sp+0x08] // [V01 OutArgs+0x08] + mov r3, r2
movs r2, 3 movw lr, 0xd1ff movt lr, 0xd1ff
- str lr, [sp+0x1C] // [V28 PInvokeFrame+0x0c] - movw lr, LOW ADDRESS G_M53848_IG11 - movt lr, HIGH ADDRESS G_M53848_IG11 - str lr, [sp+0x24] // [V28 PInvokeFrame+0x14]
+ str lr, [sp+0x1C] // [V26 PInvokeFrame+0x0c] + movw lr, LOW ADDRESS G_M53848_IG14 + movt lr, HIGH ADDRESS G_M53848_IG14 + str lr, [sp+0x24] // [V26 PInvokeFrame+0x14]
mov lr, 0 strb lr, [r5+0x08]
- ;; size=40 bbWeight=1 PerfScore 11.00 -G_M53848_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ;; size=42 bbWeight=1 PerfScore 12.00 +G_M53848_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw lr, 0xd1ff movt lr, 0xd1ff ;; size=8 bbWeight=1 PerfScore 2.00
-G_M53848_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M53848_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
blx lr // <unknown method> ;; size=2 bbWeight=1 PerfScore 1.00
-G_M53848_IG11: ; bbWeight=1, isz, extend
+G_M53848_IG14: ; bbWeight=1, isz, extend
movs r3, 1 strb r3, [r5+0x08] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] cmp r3, 0
- beq SHORT G_M53848_IG12
+ beq SHORT G_M53848_IG15
movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_STOP_FOR_GC ;; size=28 bbWeight=1 PerfScore 10.00
-G_M53848_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M53848_IG15: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
movs r0, 0
- str r0, [sp+0x24] // [V28 PInvokeFrame+0x14] - ldr r0, [sp+0x40] // [V13 tmp12]
+ str r0, [sp+0x24] // [V26 PInvokeFrame+0x14] + ldr r0, [sp+0x40] // [V11 tmp10]
; gcrRegs +[r0]
- ldr r1, [sp+0x18] // [V28 PInvokeFrame+0x08]
+ ldr r1, [sp+0x18] // [V26 PInvokeFrame+0x08]
; byrRegs +[r1] ...

+42 (+14.48%) : 13067.dasm - System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)

@@ -8,37 +8,36 @@ ; 0 inlinees with PGO data; 7 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 3, 3 ) ref -> [sp+0x38] this class-hnd single-def <System.Tests.Perf_Array>
+; V00 this [V00,T02] ( 3, 3 ) ref -> [sp+0x38] this class-hnd single-def <System.Tests.Perf_Array>
; V01 OutArgs [V01 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array> ; V03 tmp2 [V03 ] ( 3, 6 ) int -> [sp+0x4C] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
-;* V04 tmp3 [V04,T10] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* 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,T03] ( 3, 4 ) int -> r4 "Inlining Arg" -; V08 tmp7 [V08,T05] ( 2, 2 ) ref -> r1 class-hnd single-def "Inline return value spill temp" <System.Array> -; V09 tmp8 [V09 ] ( 4, 4 ) ref -> [sp+0x48] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V10 tmp9 [V10 ] ( 3, 6 ) ref -> [sp+0x44] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> -; V11 tmp10 [V11 ] ( 5, 10 ) struct ( 8) [sp+0x3C] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V12 tmp11 [V12 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V13 tmp12 [V13 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V14 tmp13 [V14,T02] ( 3, 5 ) ref -> r0 class-hnd exact single-def "dup spill" <System.RuntimeType> -; V15 tmp14 [V15,T06] ( 2, 2 ) byref -> r1 single-def -;* V16 tmp15 [V16 ] ( 0, 0 ) ref -> zero-ref single-def -;* V17 tmp16 [V17 ] ( 0, 0 ) byref -> zero-ref single-def -; V18 tmp17 [V18,T04] ( 3, 2 ) int -> r3 -;* V19 tmp18 [V19 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V21 tmp20 [V21 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V22 FramesRoot [V22,T00] ( 5, 5 ) int -> r5 "Pinvoke FrameListRoot" -; V23 PInvokeFrame [V23 ] ( 6, 6 ) struct (36) [sp+0x14] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V24 tmp23 [V24 ] ( 4, 6 ) int -> [sp+0x3C] do-not-enreg[X] addr-exposed "field V11._ptr (fldOffset=0x0)" P-DEP -; V25 tmp24 [V25 ] ( 3, 5 ) int -> [sp+0x40] do-not-enreg[X] addr-exposed "field V11._handle (fldOffset=0x4)" P-DEP -; V26 tmp25 [V26,T07] ( 2, 2 ) int -> r0 "field V12._ptr (fldOffset=0x0)" P-INDEP -; V27 tmp26 [V27,T08] ( 2, 2 ) int -> r1 "field V12._handle (fldOffset=0x4)" P-INDEP -;* V28 tmp27 [V28 ] ( 0, 0 ) int -> zero-ref "field V13._ptr (fldOffset=0x0)" P-INDEP -; V29 tmp28 [V29,T09] ( 2, 2 ) int -> r3 "field V19._ptr (fldOffset=0x0)" P-INDEP -; V30 tmp29 [V30,T12] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+; V04 tmp3 [V04,T05] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V05 tmp4 [V05,T04] ( 3, 4 ) int -> r4 "Inlining Arg" +; V06 tmp5 [V06,T07] ( 2, 2 ) ref -> r1 class-hnd single-def "Inline return value spill temp" <System.Array> +; V07 tmp6 [V07 ] ( 4, 4 ) ref -> [sp+0x48] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V08 tmp7 [V08 ] ( 3, 6 ) ref -> [sp+0x44] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> +; V09 tmp8 [V09 ] ( 5, 10 ) struct ( 8) [sp+0x3C] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V11 tmp10 [V11 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V12 tmp11 [V12,T03] ( 3, 5 ) ref -> r0 class-hnd exact single-def "dup spill" <System.RuntimeType> +; V13 tmp12 [V13,T08] ( 2, 2 ) byref -> r1 single-def +;* V14 tmp13 [V14 ] ( 0, 0 ) ref -> zero-ref single-def +;* V15 tmp14 [V15 ] ( 0, 0 ) byref -> zero-ref single-def +; V16 tmp15 [V16,T06] ( 3, 2 ) int -> r3 +;* V17 tmp16 [V17 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V18 tmp17 [V18 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V19 tmp18 [V19 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V20 FramesRoot [V20,T01] ( 5, 5 ) int -> r5 "Pinvoke FrameListRoot" +; V21 PInvokeFrame [V21 ] ( 6, 6 ) struct (36) [sp+0x14] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V22 tmp21 [V22 ] ( 4, 6 ) int -> [sp+0x3C] do-not-enreg[X] addr-exposed "field V09._ptr (fldOffset=0x0)" P-DEP +; V23 tmp22 [V23 ] ( 3, 5 ) int -> [sp+0x40] do-not-enreg[X] addr-exposed "field V09._handle (fldOffset=0x4)" P-DEP +; V24 tmp23 [V24,T09] ( 2, 2 ) int -> r0 "field V10._ptr (fldOffset=0x0)" P-INDEP +; V25 tmp24 [V25,T10] ( 2, 2 ) int -> r1 "field V10._handle (fldOffset=0x4)" P-INDEP +;* V26 tmp25 [V26 ] ( 0, 0 ) int -> zero-ref "field V11._ptr (fldOffset=0x0)" P-INDEP +; V27 tmp26 [V27,T11] ( 2, 2 ) int -> r3 "field V17._ptr (fldOffset=0x0)" P-INDEP +; V28 tmp27 [V28,T12] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V29 rat0 [V29,T00] ( 5, 7.50) ref -> r0 "replacement local"
; ; Lcl frame size = 84 @@ -47,12 +46,12 @@ G_M58256_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub sp, 84 add r11, sp, 112 movs r1, 0
- str r1, [sp+0x48] // [V09 tmp8] - str r1, [sp+0x44] // [V10 tmp9]
+ str r1, [sp+0x48] // [V07 tmp6] + str r1, [sp+0x44] // [V08 tmp7]
str r0, [sp+0x38] // [V00 this] ; GC ptr vars +{V00} ;; size=18 bbWeight=1 PerfScore 7.00
-G_M58256_IG02: ; bbWeight=1, gcVars=00000002 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M58256_IG02: ; bbWeight=1, gcVars=00000004 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
add r4, sp, 24 movw r3, 0xd1ff movt r3, 0xd1ff @@ -62,7 +61,7 @@ G_M58256_IG02: ; bbWeight=1, gcVars=00000002 {V00}, gcrefRegs=0000 {}, by ldr r0, [r0] and r0, r0, 1 cmp r0, 1
- bne SHORT G_M58256_IG14
+ bne SHORT G_M58256_IG17
;; size=30 bbWeight=1 PerfScore 10.00 G_M58256_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movw r0, 0xd1ff @@ -71,84 +70,104 @@ G_M58256_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str r0, [sp+0x4C] // [V03 tmp2] ldr r4, [sp+0x4C] // [V03 tmp2] cmp r4, 0
- blt SHORT G_M58256_IG15
+ blt SHORT G_M58256_IG18
movw r0, 0xd1ff movt r0, 0xd1ff
- str r0, [sp+0x44] // [V10 tmp9] - movs r0, 0 - str r0, [sp+0x48] // [V09 tmp8] - ;; size=32 bbWeight=1 PerfScore 12.00 -G_M58256_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - str r0, [sp+0x3C] // [V11 tmp10] - str r0, [sp+0x40] // [V11 tmp10+0x04] - add r0, sp, 68 // [V10 tmp9] - str r0, [sp+0x3C] // [V24 tmp23] - ldr r0, [sp+0x44] // [V10 tmp9]
+ cmp r0, 0 + beq SHORT G_M58256_IG06 + ;; size=30 bbWeight=1 PerfScore 11.00 +G_M58256_IG04: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r0]
- add r1, sp, 60 // [V11 tmp10]
+ ldr r1, [r0] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r1, r3 + beq SHORT G_M58256_IG06 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M58256_IG05: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0] + movs r0, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M58256_IG06: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + cmp r0, 0 + beq SHORT G_M58256_IG19 + str r0, [sp+0x44] // [V08 tmp7] + movs r0, 0 + ; gcrRegs -[r0] + str r0, [sp+0x48] // [V07 tmp6] + ;; size=10 bbWeight=1 PerfScore 5.00 +G_M58256_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + str r0, [sp+0x3C] // [V09 tmp8] + str r0, [sp+0x40] // [V09 tmp8+0x04] + add r0, sp, 68 // [V08 tmp7] + str r0, [sp+0x3C] // [V22 tmp21] + ldr r0, [sp+0x44] // [V08 tmp7] + ; gcrRegs +[r0] + add r1, sp, 60 // [V09 tmp8]
; byrRegs +[r1] cmp r0, 0
- bne SHORT G_M58256_IG06
+ bne SHORT G_M58256_IG09
;; size=16 bbWeight=1 PerfScore 8.00
-G_M58256_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref, isz
+G_M58256_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref, isz
; gcrRegs -[r0] movs r3, 0
- b SHORT G_M58256_IG07
+ b SHORT G_M58256_IG10
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M58256_IG06: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0002 {r1}, byref
+G_M58256_IG09: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0002 {r1}, byref
; gcrRegs +[r0] ldr r3, [r0+0x0C] ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M58256_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref
+G_M58256_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref
; gcrRegs -[r0] str r3, [r1+0x04]
- ldr r0, [sp+0x3C] // [V24 tmp23] - ldr r1, [sp+0x40] // [V25 tmp24]
+ ldr r0, [sp+0x3C] // [V22 tmp21] + ldr r1, [sp+0x40] // [V23 tmp22]
; byrRegs -[r1]
- add r3, sp, 72 // [V09 tmp8]
+ add r3, sp, 72 // [V07 tmp6]
movs r2, 0 str r2, [sp] // [V01 OutArgs] ;; size=12 bbWeight=1 PerfScore 6.00
-G_M58256_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M58256_IG11: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
str r2, [sp+0x04] // [V01 OutArgs+0x04] str r3, [sp+0x08] // [V01 OutArgs+0x08] add r3, sp, 76 // [V03 tmp2] movs r2, 1 movw lr, 0xd1ff movt lr, 0xd1ff
- str lr, [sp+0x20] // [V23 PInvokeFrame+0x0c] - movw lr, LOW ADDRESS G_M58256_IG11 - movt lr, HIGH ADDRESS G_M58256_IG11 - str lr, [sp+0x28] // [V23 PInvokeFrame+0x14]
+ str lr, [sp+0x20] // [V21 PInvokeFrame+0x0c] + movw lr, LOW ADDRESS G_M58256_IG14 + movt lr, HIGH ADDRESS G_M58256_IG14 + str lr, [sp+0x28] // [V21 PInvokeFrame+0x14]
mov lr, 0 strb lr, [r5+0x08] ;; size=40 bbWeight=1 PerfScore 12.00
-G_M58256_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M58256_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw lr, 0xd1ff movt lr, 0xd1ff ;; size=8 bbWeight=1 PerfScore 2.00
-G_M58256_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M58256_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
blx lr // <unknown method> ;; size=2 bbWeight=1 PerfScore 1.00
-G_M58256_IG11: ; bbWeight=1, isz, extend
+G_M58256_IG14: ; bbWeight=1, isz, extend
movs r3, 1 strb r3, [r5+0x08] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] cmp r3, 0
- beq SHORT G_M58256_IG12
+ beq SHORT G_M58256_IG15
movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_STOP_FOR_GC ;; size=28 bbWeight=1 PerfScore 10.00
-G_M58256_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M58256_IG15: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r1, 0
- str r1, [sp+0x28] // [V23 PInvokeFrame+0x14] - ldr r1, [sp+0x48] // [V09 tmp8]
+ str r1, [sp+0x28] // [V21 PInvokeFrame+0x14] + ldr r1, [sp+0x48] // [V07 tmp6]
; gcrRegs +[r1] movs r0, 0
- str r0, [sp+0x48] // [V09 tmp8]
+ str r0, [sp+0x48] // [V07 tmp6]
ldr r7, [sp+0x38] // [V00 this] ; gcrRegs +[r7] adds r0, r7, 4 @@ -159,15 +178,15 @@ G_M58256_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1 r7] ; byrRegs -[r0]
- ldr r0, [sp+0x1C] // [V23 PInvokeFrame+0x08]
+ ldr r0, [sp+0x1C] // [V21 PInvokeFrame+0x08]
; byrRegs +[r0] str r0, [r5+0x0C] ;; size=28 bbWeight=1 PerfScore 12.00
-G_M58256_IG13: ; bbWeight=1, epilog, nogc, extend
+G_M58256_IG16: ; bbWeight=1, epilog, nogc, extend
add sp, 84 pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M58256_IG14: ; bbWeight=0, gcVars=00000002 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M58256_IG17: ; bbWeight=0, gcVars=00000004 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; byrRegs -[r0] ; GC ptr vars +{V00} movw r0, 0xd1ff @@ -178,7 +197,7 @@ G_M58256_IG14: ; bbWeight=0, gcVars=00000002 {V00}, gcrefRegs=0000 {}, by blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE b SHORT G_M58256_IG03 ...

+42 (+15.56%) : 38070.dasm - System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)

@@ -12,34 +12,33 @@ ; V01 OutArgs [V01 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array> ; V03 tmp2 [V03 ] ( 3, 6 ) int -> [sp+0x44] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
-;* V04 tmp3 [V04,T10] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* 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,T02] ( 3, 4 ) int -> r4 "Inlining Arg" -; V08 tmp7 [V08,T05] ( 2, 2 ) ref -> r0 class-hnd single-def "Inline return value spill temp" <System.Array> -; V09 tmp8 [V09 ] ( 3, 3 ) ref -> [sp+0x40] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V10 tmp9 [V10 ] ( 3, 6 ) ref -> [sp+0x3C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> -; V11 tmp10 [V11 ] ( 5, 10 ) struct ( 8) [sp+0x34] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V12 tmp11 [V12 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V13 tmp12 [V13 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V14 tmp13 [V14,T01] ( 3, 5 ) ref -> r0 class-hnd exact single-def "dup spill" <System.RuntimeType> -; V15 tmp14 [V15,T06] ( 2, 2 ) byref -> r1 single-def -;* V16 tmp15 [V16 ] ( 0, 0 ) ref -> zero-ref single-def -;* V17 tmp16 [V17 ] ( 0, 0 ) byref -> zero-ref single-def -; V18 tmp17 [V18,T04] ( 3, 2 ) int -> r3 -;* V19 tmp18 [V19 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V21 tmp20 [V21 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V22 tmp21 [V22,T03] ( 2, 4 ) ref -> r0 single-def "Single return block return value" -; V23 FramesRoot [V23,T00] ( 5, 5 ) int -> r5 "Pinvoke FrameListRoot" -; V24 PInvokeFrame [V24 ] ( 6, 6 ) struct (36) [sp+0x10] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V25 tmp24 [V25 ] ( 4, 6 ) int -> [sp+0x34] do-not-enreg[X] addr-exposed "field V11._ptr (fldOffset=0x0)" P-DEP -; V26 tmp25 [V26 ] ( 3, 5 ) int -> [sp+0x38] do-not-enreg[X] addr-exposed "field V11._handle (fldOffset=0x4)" P-DEP -; V27 tmp26 [V27,T07] ( 2, 2 ) int -> r0 "field V12._ptr (fldOffset=0x0)" P-INDEP -; V28 tmp27 [V28,T08] ( 2, 2 ) int -> r1 "field V12._handle (fldOffset=0x4)" P-INDEP -;* V29 tmp28 [V29 ] ( 0, 0 ) int -> zero-ref "field V13._ptr (fldOffset=0x0)" P-INDEP -; V30 tmp29 [V30,T09] ( 2, 2 ) int -> r3 "field V19._ptr (fldOffset=0x0)" P-INDEP -; V31 tmp30 [V31,T12] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+; V04 tmp3 [V04,T05] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V05 tmp4 [V05,T03] ( 3, 4 ) int -> r4 "Inlining Arg" +; V06 tmp5 [V06,T07] ( 2, 2 ) ref -> r0 class-hnd single-def "Inline return value spill temp" <System.Array> +; V07 tmp6 [V07 ] ( 3, 3 ) ref -> [sp+0x40] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V08 tmp7 [V08 ] ( 3, 6 ) ref -> [sp+0x3C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> +; V09 tmp8 [V09 ] ( 5, 10 ) struct ( 8) [sp+0x34] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V11 tmp10 [V11 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V12 tmp11 [V12,T02] ( 3, 5 ) ref -> r0 class-hnd exact single-def "dup spill" <System.RuntimeType> +; V13 tmp12 [V13,T08] ( 2, 2 ) byref -> r1 single-def +;* V14 tmp13 [V14 ] ( 0, 0 ) ref -> zero-ref single-def +;* V15 tmp14 [V15 ] ( 0, 0 ) byref -> zero-ref single-def +; V16 tmp15 [V16,T06] ( 3, 2 ) int -> r3 +;* V17 tmp16 [V17 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V18 tmp17 [V18 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V19 tmp18 [V19 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V20 tmp19 [V20,T04] ( 2, 4 ) ref -> r0 single-def "Single return block return value" +; V21 FramesRoot [V21,T01] ( 5, 5 ) int -> r5 "Pinvoke FrameListRoot" +; V22 PInvokeFrame [V22 ] ( 6, 6 ) struct (36) [sp+0x10] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V23 tmp22 [V23 ] ( 4, 6 ) int -> [sp+0x34] do-not-enreg[X] addr-exposed "field V09._ptr (fldOffset=0x0)" P-DEP +; V24 tmp23 [V24 ] ( 3, 5 ) int -> [sp+0x38] do-not-enreg[X] addr-exposed "field V09._handle (fldOffset=0x4)" P-DEP +; V25 tmp24 [V25,T09] ( 2, 2 ) int -> r0 "field V10._ptr (fldOffset=0x0)" P-INDEP +; V26 tmp25 [V26,T10] ( 2, 2 ) int -> r1 "field V10._handle (fldOffset=0x4)" P-INDEP +;* V27 tmp26 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._ptr (fldOffset=0x0)" P-INDEP +; V28 tmp27 [V28,T11] ( 2, 2 ) int -> r3 "field V17._ptr (fldOffset=0x0)" P-INDEP +; V29 tmp28 [V29,T12] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V30 rat0 [V30,T00] ( 5, 7.50) ref -> r0 "replacement local"
; ; Lcl frame size = 76 @@ -48,8 +47,8 @@ G_M36762_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub sp, 76 add r11, sp, 104 movs r1, 0
- str r1, [sp+0x40] // [V09 tmp8] - str r1, [sp+0x3C] // [V10 tmp9]
+ str r1, [sp+0x40] // [V07 tmp6] + str r1, [sp+0x3C] // [V08 tmp7]
;; size=16 bbWeight=1 PerfScore 6.00 G_M36762_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz add r4, sp, 20 @@ -61,7 +60,7 @@ G_M36762_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr r0, [r0] and r0, r0, 1 cmp r0, 1
- bne SHORT G_M36762_IG14
+ bne SHORT G_M36762_IG17
;; size=30 bbWeight=1 PerfScore 10.00 G_M36762_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movw r0, 0xd1ff @@ -70,91 +69,111 @@ G_M36762_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str r0, [sp+0x44] // [V03 tmp2] ldr r4, [sp+0x44] // [V03 tmp2] cmp r4, 0
- blt SHORT G_M36762_IG15
+ blt SHORT G_M36762_IG18
movw r0, 0xd1ff movt r0, 0xd1ff
- str r0, [sp+0x3C] // [V10 tmp9] - movs r0, 0 - str r0, [sp+0x40] // [V09 tmp8] - ;; size=32 bbWeight=1 PerfScore 12.00 -G_M36762_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - str r0, [sp+0x34] // [V11 tmp10] - str r0, [sp+0x38] // [V11 tmp10+0x04] - add r0, sp, 60 // [V10 tmp9] - str r0, [sp+0x34] // [V25 tmp24] - ldr r0, [sp+0x3C] // [V10 tmp9]
+ cmp r0, 0 + beq SHORT G_M36762_IG06 + ;; size=30 bbWeight=1 PerfScore 11.00 +G_M36762_IG04: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r0]
- add r1, sp, 52 // [V11 tmp10]
+ ldr r1, [r0] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r1, r3 + beq SHORT G_M36762_IG06 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M36762_IG05: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0] + movs r0, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M36762_IG06: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + cmp r0, 0 + beq SHORT G_M36762_IG19 + str r0, [sp+0x3C] // [V08 tmp7] + movs r0, 0 + ; gcrRegs -[r0] + str r0, [sp+0x40] // [V07 tmp6] + ;; size=10 bbWeight=1 PerfScore 5.00 +G_M36762_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + str r0, [sp+0x34] // [V09 tmp8] + str r0, [sp+0x38] // [V09 tmp8+0x04] + add r0, sp, 60 // [V08 tmp7] + str r0, [sp+0x34] // [V23 tmp22] + ldr r0, [sp+0x3C] // [V08 tmp7] + ; gcrRegs +[r0] + add r1, sp, 52 // [V09 tmp8]
; byrRegs +[r1] cmp r0, 0
- bne SHORT G_M36762_IG06
+ bne SHORT G_M36762_IG09
;; size=16 bbWeight=1 PerfScore 8.00
-G_M36762_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref, isz
+G_M36762_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref, isz
; gcrRegs -[r0] movs r3, 0
- b SHORT G_M36762_IG07
+ b SHORT G_M36762_IG10
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M36762_IG06: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0002 {r1}, byref
+G_M36762_IG09: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0002 {r1}, byref
; gcrRegs +[r0] ldr r3, [r0+0x0C] ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M36762_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref
+G_M36762_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref
; gcrRegs -[r0] str r3, [r1+0x04]
- ldr r0, [sp+0x34] // [V25 tmp24] - ldr r1, [sp+0x38] // [V26 tmp25]
+ ldr r0, [sp+0x34] // [V23 tmp22] + ldr r1, [sp+0x38] // [V24 tmp23]
; byrRegs -[r1]
- add r3, sp, 64 // [V09 tmp8]
+ add r3, sp, 64 // [V07 tmp6]
movs r2, 0 str r2, [sp] // [V01 OutArgs] ;; size=12 bbWeight=1 PerfScore 6.00
-G_M36762_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M36762_IG11: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
str r2, [sp+0x04] // [V01 OutArgs+0x04] str r3, [sp+0x08] // [V01 OutArgs+0x08] add r3, sp, 68 // [V03 tmp2] movs r2, 1 movw lr, 0xd1ff movt lr, 0xd1ff
- str lr, [sp+0x1C] // [V24 PInvokeFrame+0x0c] - movw lr, LOW ADDRESS G_M36762_IG11 - movt lr, HIGH ADDRESS G_M36762_IG11 - str lr, [sp+0x24] // [V24 PInvokeFrame+0x14]
+ str lr, [sp+0x1C] // [V22 PInvokeFrame+0x0c] + movw lr, LOW ADDRESS G_M36762_IG14 + movt lr, HIGH ADDRESS G_M36762_IG14 + str lr, [sp+0x24] // [V22 PInvokeFrame+0x14]
mov lr, 0 strb lr, [r5+0x08] ;; size=40 bbWeight=1 PerfScore 12.00
-G_M36762_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M36762_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw lr, 0xd1ff movt lr, 0xd1ff ;; size=8 bbWeight=1 PerfScore 2.00
-G_M36762_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M36762_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
blx lr // <unknown method> ;; size=2 bbWeight=1 PerfScore 1.00
-G_M36762_IG11: ; bbWeight=1, isz, extend
+G_M36762_IG14: ; bbWeight=1, isz, extend
movs r3, 1 strb r3, [r5+0x08] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] cmp r3, 0
- beq SHORT G_M36762_IG12
+ beq SHORT G_M36762_IG15
movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_STOP_FOR_GC ;; size=28 bbWeight=1 PerfScore 10.00
-G_M36762_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M36762_IG15: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 0
- str r0, [sp+0x24] // [V24 PInvokeFrame+0x14] - ldr r0, [sp+0x40] // [V09 tmp8]
+ str r0, [sp+0x24] // [V22 PInvokeFrame+0x14] + ldr r0, [sp+0x40] // [V07 tmp6]
; gcrRegs +[r0]
- ldr r1, [sp+0x18] // [V24 PInvokeFrame+0x08]
+ ldr r1, [sp+0x18] // [V22 PInvokeFrame+0x08]
; byrRegs +[r1] str r1, [r5+0x0C] ;; size=10 bbWeight=1 PerfScore 5.00
-G_M36762_IG13: ; bbWeight=1, epilog, nogc, extend
+G_M36762_IG16: ; bbWeight=1, epilog, nogc, extend
add sp, 76 pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M36762_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M36762_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] ; byrRegs -[r1] movw r0, 0xd1ff @@ -165,7 +184,7 @@ G_M36762_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE b SHORT G_M36762_IG03 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M36762_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M36762_IG18: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r0, 0xd1ff movw r1, 0xd1ff movt r1, 0xd1ff @@ -184,8 +203,17 @@ G_M36762_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[r1] bkpt ;; size=40 bbWeight=0 PerfScore 0.00
+G_M36762_IG19: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + movs r0, 57 + movs r1, 80 + movw r3, 0xd1ff + movt r3, 0xd1ff + ldr r3, [r3] + blx r3 // System.ThrowHelper:ThrowArgumentException(int,int) + bkpt
...

benchmarks.run_pgo.linux.arm.checked.mch

-22 (-47.83%) : 83677.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%) : 134809.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 126 ; 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%) : 150433.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 (+14.77%) : 85040.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 "replacement local"
;
-; 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 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_IG12
+ 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_IG16
+ 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.67, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG11: ; bbWeight=0.67, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r4] movs r0, 0 ;; size=2 bbWeight=0.67 PerfScore 0.67
-G_M8853_IG09: ; bbWeight=0.67, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG12: ; bbWeight=0.67, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0.67 PerfScore 0.67
-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_IG18
+ 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,16 +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] - 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_IG13: ; 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] @@ -119,26 +137,26 @@ 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_IG17
movs r3, 0
- b SHORT G_M8853_IG15
+ b SHORT G_M8853_IG18
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG14: ; 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_IG15: ; 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_IG16: ; 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_IG17: ; 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_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4] mov r0, r4 ; gcrRegs +[r0] @@ -147,10 +165,10 @@ G_M8853_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byre ldr r3, [r3+0x10] blx r3 // <unknown method> ; gcrRegs -[r4]
- b SHORT G_M8853_IG11
+ b SHORT G_M8853_IG14
;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 176, prolog size 8, PerfScore 44.33, 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.08, 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
FF end FF end

+26 (+16.88%) : 21560.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 "replacement local"
;
-; 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%) : 80736.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 "replacement local"
;
-; 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

benchmarks.run_tiered.linux.arm.checked.mch

-22 (-47.83%) : 6512.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%) : 3209.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%) : 13832.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%) : 75556.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():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_M50369_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_M50369_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_M50369_IG07
+ ble SHORT G_M50369_IG04
movw r6, 0xd1ff movt r6, 0xd1ff ldr r7, [r6] ; gcrRegs +[r7]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M50369_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_M50369_IG06 - ;; size=8 bbWeight=4 PerfScore 16.00 -G_M50369_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_M50369_IG06 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M50369_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_M50369_IG06: ; bbWeight=4, gcrefRegs=0088 {r3 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M50369_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]
add r0, r6, 8
- 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_M50369_IG03
- ;; size=22 bbWeight=4 PerfScore 32.00 -G_M50369_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=4 PerfScore 60.00 +G_M50369_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=c13d3b3e) for method PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
+; Total bytes of code 106, prolog size 12, PerfScore 80.00, instruction count 35, allocated bytes for code 106 (MethodHash=c13d3b3e) for method PerfLabTests.CastingPerf:FooObjIsFoo():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%) : 72765.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

+10 (+10.64%) : 77339.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

coreclr_tests.run.linux.arm.checked.mch

-30 (-44.12%) : 475614.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

-32 (-41.03%) : 1062.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

-32 (-41.03%) : 474403.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

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

@@ -11,75 +11,92 @@ ; ; 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,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,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,T09] ( 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 "replacement local"
;
-; 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_IG12 - 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_IG16
+ 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_IG10
+ 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
- bne SHORT G_M8853_IG08 - ;; size=16 bbWeight=1 PerfScore 6.00 -G_M8853_IG06: ; bbWeight=0.51, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ bne SHORT G_M8853_IG11 + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M8853_IG09: ; bbWeight=0.51, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r4] movs r0, 0 ;; size=2 bbWeight=0.51 PerfScore 0.51
-G_M8853_IG07: ; bbWeight=0.51, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG10: ; bbWeight=0.51, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=0.51 PerfScore 0.51
-G_M8853_IG08: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4]
- cmp r5, r6 - bne SHORT G_M8853_IG15
+ 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 @@ -87,20 +104,17 @@ G_M8853_IG08: ; 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_IG09: ; 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_IG12: ; 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_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[r0] - movw r0, 0xd1ff - movt r0, 0xd1ff - ;; size=8 bbWeight=0 PerfScore 0.00 -G_M8853_IG11: ; bbWeight=0, epilog, nogc, extend - pop {r4,r5,r6,r7,r11,pc}
+G_M8853_IG13: ; 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_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r4]
+G_M8853_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -110,17 +124,27 @@ G_M8853_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byre ; gcrRegs -[r0] and r0, r0, 32 cmp r0, 32
- beq SHORT G_M8853_IG13
+ beq SHORT G_M8853_IG15
movs r3, 0
- b SHORT G_M8853_IG14
+ b SHORT G_M8853_IG16
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG13: ; 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_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M8853_IG05 - ;; size=2 bbWeight=0 PerfScore 0.00 -G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+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] + 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 +G_M8853_IG19: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r4]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -128,15 +152,10 @@ G_M8853_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ldr r3, [r3+0x10] blx r3 // <unknown method> ; gcrRegs -[r4]
- b SHORT G_M8853_IG09
+ b SHORT G_M8853_IG12
;; size=12 bbWeight=0 PerfScore 0.00
-G_M8853_IG16: ; 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.02, 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.77, instruction count 70, allocated bytes for code 180 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -148,7 +167,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) @@ -164,7 +183,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

+32 (+20.51%) : 154839.dasm - System.Type:get_IsSerializable():ubyte:this (Tier1)

@@ -5,36 +5,35 @@ ; optimized using Dynamic PGO ; r11 based frame ; partially interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 6
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 6
; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 10, 5 ) ref -> r4 this class-hnd single-def <System.Type> -; V01 loc0 [V01,T00] ( 11, 22.92) ref -> r0 class-hnd <System.Type>
+; V00 this [V00,T00] ( 10, 5 ) ref -> r4 this class-hnd single-def <System.Type> +; V01 loc0 [V01,T01] ( 10, 7 ) ref -> r0 class-hnd <System.Type>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03,T05] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V04 tmp2 [V04,T04] ( 3, 2 ) int -> r0 "guarded devirt return temp" -;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V06 tmp4 [V06,T06] ( 3, 1 ) ref -> r0 "guarded devirt return temp" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V08 tmp6 [V08,T03] ( 3, 2 ) ref -> r0 "guarded devirt return temp" -;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V10 cse0 [V10,T02] ( 5, 3.75) int -> r5 "CSE - aggressive"
+; V03 tmp1 [V03,T04] ( 3, 2 ) int -> r0 "guarded devirt return temp" +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V05 tmp3 [V05,T05] ( 3, 1 ) ref -> r0 "guarded devirt return temp" +;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V07 tmp5 [V07,T03] ( 3, 2 ) ref -> r0 "guarded devirt return temp" +;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V09 rat0 [V09,T02] ( 5, 3.75) ref -> r3 "replacement local"
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M39137_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r11,lr}
+ push {r3,r4,r11,lr}
add r11, sp, 8 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M39137_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ldr r0, [r4]
- movw r5, 0xd1ff - movt r5, 0xd1ff - cmp r0, r5 - bne SHORT G_M39137_IG15
+ movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M39137_IG17
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -45,70 +44,100 @@ G_M39137_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre G_M39137_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ands r0, r0, 0x2000 cmp r0, 0
- beq SHORT G_M39137_IG11
+ beq SHORT G_M39137_IG14
;; size=8 bbWeight=1 PerfScore 3.00 G_M39137_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[r4] movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50 G_M39137_IG05: ; bbWeight=0.50, epilog, nogc, extend
- pop {r4,r5,r11,pc}
+ pop {r3,r4,r11,pc}
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M39137_IG06: ; bbWeight=16.67, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M39137_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r0]
+ mov r3, r0 + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M39137_IG09 + ;; size=6 bbWeight=0.50 PerfScore 1.50 +G_M39137_IG07: ; bbWeight=0.25, gcrefRegs=0009 {r0 r3}, byrefRegs=0000 {}, byref, isz + ldr r2, [r3] + movw r1, 0xd1ff + movt r1, 0xd1ff + cmp r2, r1 + beq SHORT G_M39137_IG09 + ;; size=14 bbWeight=0.25 PerfScore 1.25 +G_M39137_IG08: ; bbWeight=0.12, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref + ; gcrRegs -[r3] + movs r3, 0 + ;; size=2 bbWeight=0.12 PerfScore 0.12 +G_M39137_IG09: ; bbWeight=0.50, gcrefRegs=0009 {r0 r3}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M39137_IG12 + ;; size=4 bbWeight=0.50 PerfScore 1.00 +G_M39137_IG10: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff cmp r0, r3 beq SHORT G_M39137_IG04
- ;; size=12 bbWeight=16.67 PerfScore 66.67 -G_M39137_IG07: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
movw r3, 0xd1ff movt r3, 0xd1ff cmp r0, r3 beq SHORT G_M39137_IG04 ldr r3, [r0]
- cmp r3, r5
+ movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2
bne SHORT G_M39137_IG16 movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M39137_IG08: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ ;; size=50 bbWeight=1 PerfScore 17.00 +G_M39137_IG11: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
cmp r0, 0
- bne SHORT G_M39137_IG06
+ bne SHORT G_M39137_IG10
;; size=4 bbWeight=1 PerfScore 2.00
-G_M39137_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M39137_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0] movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M39137_IG10: ; bbWeight=0.50, epilog, nogc, extend - pop {r4,r5,r11,pc}
+G_M39137_IG13: ; bbWeight=0.50, epilog, nogc, extend + pop {r3,r4,r11,pc}
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M39137_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M39137_IG14: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4] ldr r0, [r4]
- cmp r0, r5 - bne SHORT G_M39137_IG17
+ movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M39137_IG15
mov r0, r4 ; gcrRegs +[r0]
- ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M39137_IG12: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r4] - cmp r0, 0 - beq SHORT G_M39137_IG09 - ;; size=4 bbWeight=0.50 PerfScore 1.00 -G_M39137_IG13: ; bbWeight=0.25, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - cmp r3, r5 - beq SHORT G_M39137_IG06 - ;; size=6 bbWeight=0.25 PerfScore 0.75 -G_M39137_IG14: ; bbWeight=0.12, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - b SHORT G_M39137_IG09 - ;; size=2 bbWeight=0.12 PerfScore 0.12
+ b SHORT G_M39137_IG06 + ;; size=18 bbWeight=0.50 PerfScore 3.50
G_M39137_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs +[r4]
+ ; gcrRegs -[r0] + mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4] + ldr r3, [r3+0x38] + ldr r3, [r3] + blx r3 // <unknown method> + ; gcrRegs -[r4] + b SHORT G_M39137_IG06 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M39137_IG16: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ldr r3, [r0] + ldr r3, [r3+0x58] + ldr r3, [r3+0x10] + blx r3 // <unknown method> + b SHORT G_M39137_IG11 + ;; size=10 bbWeight=0 PerfScore 0.00 +G_M39137_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0] +[r4]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -118,27 +147,8 @@ G_M39137_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ; gcrRegs -[r0] b SHORT G_M39137_IG03 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M39137_IG16: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r4] +[r0] - ldr r3, [r0] - ldr r3, [r3+0x58] - ldr r3, [r3+0x10] - blx r3 // <unknown method> - b SHORT G_M39137_IG08 - ;; size=10 bbWeight=0 PerfScore 0.00 -G_M39137_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r4] - ldr r3, [r3+0x38] - ldr r3, [r3] - blx r3 // <unknown method> - ; gcrRegs -[r4] - b SHORT G_M39137_IG12 - ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 156, prolog size 8, PerfScore 100.54, instruction count 63, allocated bytes for code 156 (MethodHash=114f671e) for method System.Type:get_IsSerializable():ubyte:this (Tier1)
+; Total bytes of code 188, prolog size 8, PerfScore 43.38, instruction count 73, allocated bytes for code 188 (MethodHash=114f671e) for method System.Type:get_IsSerializable():ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -150,7 +160,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 78 (0x0004e) Actual length = 156 (0x00009c)
+ Function Length : 94 (0x0005e) Actual length = 188 (0x0000bc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -162,7 +172,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 30 pop {r4,r5,r11,lr} ; opsize 32
+ A8 18 pop {r3,r4,r11,lr} ; opsize 32
FF end FF end

+46 (+766.67%) : 374886.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 "replacement local"
;
-; 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.crossgen2.linux.arm.checked.mch

-32 (-43.24%) : 180393.dasm - System.Linq.ParallelQuery1+<>c__11[System.Canon,System.Canon]:b1_0(System.Canon):System.__Canon:this (FullOpts)

@@ -3,70 +3,49 @@ ; FullOpts code ; ReadyToRun compilation ; 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 -> r6 this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r5 class-hnd single-def <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r5 this class-hnd single-def <System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r6 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 -> r0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r7 class-hnd "spilling QMark2" <System.__Canon>
+; V03 tmp1 [V03,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M42611_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r11,lr} - sub sp, 12 - add r11, sp, 32 - str r0, [r11-0x1C] - mov r6, r0 - ; gcrRegs +[r6] - mov r5, r1
+ push {r2,r3,r4,r5,r6,lr} + str r0, [sp+0x04] + mov r5, r0
; gcrRegs +[r5]
- ;; size=18 bbWeight=1 PerfScore 6.00 -G_M42611_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz - mov r7, r5 - ; gcrRegs +[r7] - cmp r7, 0 - beq SHORT G_M42611_IG05 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M42611_IG03: ; bbWeight=0.25, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz - ldr r8, [r7] - ldr r0, [r6]
+ mov r6, r1 + ; gcrRegs +[r6] + ;; size=8 bbWeight=1 PerfScore 4.00 +G_M42611_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref + ldr r0, [r5]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_GENERIC_HANDLE
- cmp r8, r0 - beq SHORT G_M42611_IG05 - ;; size=24 bbWeight=0.25 PerfScore 2.25 -G_M42611_IG04: ; bbWeight=0.12, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref - ; gcrRegs -[r7] - mov r1, r5
+ ; gcr arg pop 0 + mov r1, r6
; gcrRegs +[r1] movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E add r3, pc ldr r3, [r3] blx r3 // CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[r1 r5] +[r0] - mov r7, r0 - ; gcrRegs +[r7] - ;; size=18 bbWeight=0.12 PerfScore 0.88 -G_M42611_IG05: ; bbWeight=1, gcrefRegs=00C0 {r6 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r7 - ; gcrRegs +[r0]
+ ; gcrRegs -[r1 r6] +[r0] + ; gcr arg pop 0 + ;; size=32 bbWeight=1 PerfScore 12.00 +G_M42611_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,r5,r6,pc}
;; size=2 bbWeight=1 PerfScore 1.00
-G_M42611_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r5,r6,r7,r8,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 74, prolog size 14, PerfScore 15.12, instruction count 28, allocated bytes for code 74 (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 42, prolog size 4, PerfScore 17.00, instruction count 17, allocated bytes for code 42 (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)
; ============================================================ Unwind Info: @@ -78,11 +57,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 74 (0x00004a)
+ 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 - A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
+ ED 7C pop {r2,r3,r4,r5,r6,lr} ; opsize 16 + FF end
FF end

-32 (-43.24%) : 144370.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,49 @@ ; FullOpts code ; ReadyToRun compilation ; 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 -> r6 this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> r5 class-hnd single-def <System.Collections.Generic.IDictionary`2[System.String,System.Object]>
+; V00 this [V00,T00] ( 3, 3 ) ref -> r5 this class-hnd single-def <System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r6 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 -> r0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r7 class-hnd "spilling QMark2" <System.__Canon>
+; V03 tmp1 [V03,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M31417_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r11,lr} - sub sp, 12 - add r11, sp, 32 - str r0, [r11-0x1C] - mov r6, r0 - ; gcrRegs +[r6] - mov r5, r1
+ push {r2,r3,r4,r5,r6,lr} + str r0, [sp+0x04] + mov r5, r0
; gcrRegs +[r5]
- ;; size=18 bbWeight=1 PerfScore 6.00 -G_M31417_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz - mov r7, r5 - ; gcrRegs +[r7] - cmp r7, 0 - beq SHORT G_M31417_IG05 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M31417_IG03: ; bbWeight=0.25, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz - ldr r8, [r7] - ldr r0, [r6]
+ mov r6, r1 + ; gcrRegs +[r6] + ;; size=8 bbWeight=1 PerfScore 4.00 +G_M31417_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref + ldr r0, [r5]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_GENERIC_HANDLE
- cmp r8, r0 - beq SHORT G_M31417_IG05 - ;; size=24 bbWeight=0.25 PerfScore 2.25 -G_M31417_IG04: ; bbWeight=0.12, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref - ; gcrRegs -[r7] - mov r1, r5
+ ; gcr arg pop 0 + mov r1, r6
; gcrRegs +[r1] movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E add r3, pc ldr r3, [r3] blx r3 // CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[r1 r5] +[r0] - mov r7, r0 - ; gcrRegs +[r7] - ;; size=18 bbWeight=0.12 PerfScore 0.88 -G_M31417_IG05: ; bbWeight=1, gcrefRegs=00C0 {r6 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r7 - ; gcrRegs +[r0]
+ ; gcrRegs -[r1 r6] +[r0] + ; gcr arg pop 0 + ;; size=32 bbWeight=1 PerfScore 12.00 +G_M31417_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,r5,r6,pc}
;; size=2 bbWeight=1 PerfScore 1.00
-G_M31417_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r5,r6,r7,r8,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 74, prolog size 14, PerfScore 15.12, instruction count 28, allocated bytes for code 74 (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 42, prolog size 4, PerfScore 17.00, instruction count 17, allocated bytes for code 42 (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: @@ -78,11 +57,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 74 (0x00004a)
+ 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 - A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
+ ED 7C pop {r2,r3,r4,r5,r6,lr} ; opsize 16 + FF end
FF end

-30 (-40.54%) : 173430.dasm - CSharpx.Either+<>cDisplayClass13_0`1[System.Canon]:b0():System.Canon:this (FullOpts)

@@ -3,70 +3,48 @@ ; FullOpts code ; ReadyToRun compilation ; 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 -> r5 this class-hnd single-def <CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]>
+; V00 this [V00,T00] ( 4, 4 ) ref -> r5 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 -> r6 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) int -> r0 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> r7 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) int -> r0 "argument with side effect"
; ; Lcl frame size = 12 G_M12636_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r11,lr}
+ push {r4,r5,lr}
sub sp, 12
- add r11, sp, 32 - str r0, [r11-0x1C]
+ str r0, [sp+0x04]
mov r5, r0 ; gcrRegs +[r5]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M12636_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r6, [r5+0x04] - ; gcrRegs +[r6] - mov r7, r6 - ; gcrRegs +[r7] - cmp r7, 0 - beq SHORT G_M12636_IG05
;; size=8 bbWeight=1 PerfScore 4.00
-G_M12636_IG03: ; bbWeight=0.25, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz - ldr r8, [r7]
+G_M12636_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
ldr r0, [r5] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_GENERIC_HANDLE
- cmp r8, r0 - beq SHORT G_M12636_IG05 - ;; size=24 bbWeight=0.25 PerfScore 2.25 -G_M12636_IG04: ; bbWeight=0.12, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref - ; gcrRegs -[r7] - mov r1, r6
+ ; gcr arg pop 0 + ldr r1, [r5+0x04]
; gcrRegs +[r1] movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E add r3, pc ldr r3, [r3] blx r3 // CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[r1 r6] +[r0] - mov r7, r0 - ; gcrRegs +[r7] - ;; size=18 bbWeight=0.12 PerfScore 0.88 -G_M12636_IG05: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r7 - ; gcrRegs +[r0] - ;; size=2 bbWeight=1 PerfScore 1.00 -G_M12636_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; gcrRegs -[r1] +[r0] + ; gcr arg pop 0 + ;; size=32 bbWeight=1 PerfScore 12.00 +G_M12636_IG03: ; bbWeight=1, epilog, nogc, extend
add sp, 12
- pop {r4,r5,r6,r7,r8,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ pop {r4,r5,pc} + ;; size=4 bbWeight=1 PerfScore 2.00
-; Total bytes of code 74, prolog size 14, PerfScore 15.12, instruction count 28, allocated bytes for code 74 (MethodHash=bbb7cea3) for method CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
+; Total bytes of code 44, prolog size 6, PerfScore 18.00, instruction count 18, allocated bytes for code 44 (MethodHash=bbb7cea3) for method CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -78,11 +56,12 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 74 (0x00004a)
+ Function Length : 22 (0x00016) Actual length = 44 (0x00002c)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ---- 03 add sp, sp, #12 ; opsize 16
- A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
+ D5 pop {r4,r5,lr} ; opsize 16 + FF end
FF end

+2 (+0.88%) : 99916.dasm - Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE.PENamedTypeSymbol+VB$StateMachine156GetMembers`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)

@@ -11,32 +11,35 @@ ; ; V00 this [V00,T00] ( 23, 13 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE.PENamedTypeSymbol+VB$StateMachine_156_GetMembers`1[System.__Canon]> ; V01 loc0 [V01,T03] ( 3, 2.50) int -> r0 single-def
-; V02 loc1 [V02,T09] ( 2, 1 ) int -> r0 single-def -; V03 loc2 [V03,T10] ( 2, 1 ) int -> r2 single-def -; V04 loc3 [V04,T05] ( 5, 2 ) ref -> r6 class-hnd <Microsoft.CodeAnalysis.VisualBasic.Symbol>
+; V02 loc1 [V02,T08] ( 2, 1 ) int -> r0 single-def +; V03 loc2 [V03,T09] ( 2, 1 ) int -> r2 single-def +; V04 loc3 [V04,T05] ( 3, 1.50) ref -> r6 class-hnd <Microsoft.CodeAnalysis.VisualBasic.Symbol>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "dup spill"
-; V07 tmp2 [V07,T04] ( 3, 2.50) int -> r0 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T06] ( 3, 2 ) ref -> r1 class-hnd "spilling QMark2" <System.__Canon> -;* V09 tmp4 [V09 ] ( 0, 0 ) int -> zero-ref "dup spill" -;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref "dup spill" -;* V11 tmp6 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V12 tmp7 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V13 tmp8 [V13 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V14 tmp9 [V14,T01] ( 3, 3 ) ref -> r0 "arr expr" -; V15 tmp10 [V15,T02] ( 3, 3 ) int -> r3 "index expr" -; V16 cse0 [V16,T07] ( 3, 1.50) int -> r0 "CSE - moderate" -; V17 cse1 [V17,T08] ( 3, 1.50) int -> r3 "CSE - moderate"
+;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "dup spill" +;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "dup spill" +;* V09 tmp4 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V10 tmp5 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V11 tmp6 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V12 tmp7 [V12,T01] ( 3, 3 ) ref -> r0 "arr expr" +; V13 tmp8 [V13,T02] ( 3, 3 ) int -> r3 "index expr" +; V14 tmp9 [V14,T04] ( 2, 2 ) int -> r0 "argument with side effect" +; V15 cse0 [V15,T06] ( 3, 1.50) int -> r0 "CSE - moderate" +; V16 cse1 [V16,T07] ( 3, 1.50) int -> r3 "CSE - moderate" +; TEMP_01 ref -> [r11-0x18]
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M58417_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r4,r5,r6,r7,r11,lr}
+ push {r4,r5,r6,r11,lr} + sub sp, 12
add r11, sp, 24
+ movs r1, 0 + str r1, [sp]
str r0, [r11-0x14] mov r5, r0 ; gcrRegs +[r5]
- ;; size=14 bbWeight=1 PerfScore 4.00
+ ;; size=20 bbWeight=1 PerfScore 7.00
G_M58417_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz ldr r0, [r5+0x08] cmp r0, 0 @@ -44,14 +47,15 @@ G_M58417_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ;; size=6 bbWeight=1 PerfScore 3.00 G_M58417_IG03: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz cmp r0, 1
- beq SHORT G_M58417_IG13
+ beq SHORT G_M58417_IG10
;; size=4 bbWeight=0.50 PerfScore 1.00 G_M58417_IG04: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50 G_M58417_IG05: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r6,r7,r11,pc} - ;; size=4 bbWeight=0.50 PerfScore 0.50
+ add sp, 12 + pop {r4,r5,r6,r11,pc} + ;; size=6 bbWeight=0.50 PerfScore 1.00
G_M58417_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz mov r1, -1 str r1, [r5+0x08] @@ -89,7 +93,7 @@ G_M58417_IG08: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, b ldr r3, [r5+0x20] ldr r2, [r0+0x04] cmp r3, r2
- bhs SHORT G_M58417_IG14
+ bhs SHORT G_M58417_IG11
adds r0, 8 ; gcrRegs -[r0] ; byrRegs +[r0] @@ -109,17 +113,12 @@ G_M58417_IG08: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, b ldr r3, [r5+0x10] cmp r0, r3 bne SHORT G_M58417_IG04
- ldr r7, [r6]
ldr r0, [r5] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_GENERIC_HANDLE
- cmp r7, r0 - beq SHORT G_M58417_IG10 - ;; size=62 bbWeight=0.50 PerfScore 13.50 -G_M58417_IG09: ; bbWeight=0.25, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
mov r1, r6 ; gcrRegs +[r1] movw r3, LOW RELOC 0xD1FFAB1E @@ -128,19 +127,12 @@ G_M58417_IG09: ; bbWeight=0.25, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {} ldr r3, [r3] blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1 r6] +[r0]
- mov r1, r0 - ; gcrRegs +[r1] - b SHORT G_M58417_IG11 - ;; size=20 bbWeight=0.25 PerfScore 2.00 -G_M58417_IG10: ; bbWeight=0.25, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0-r1] +[r6] - mov r1, r6 - ; gcrRegs +[r1] - ;; size=2 bbWeight=0.25 PerfScore 0.25 -G_M58417_IG11: ; bbWeight=0.50, gcrefRegs=0022 {r1 r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r6]
+ str r0, [sp]
adds r0, r5, 4
+ ; gcrRegs -[r0]
; byrRegs +[r0]
+ ldr r1, [sp] + ; gcrRegs +[r1]
movw r12, LOW RELOC 0xD1FFAB1E movt r12, HIGH RELOC 0xD1FFAB1E add r12, pc @@ -150,11 +142,12 @@ G_M58417_IG11: ; bbWeight=0.50, gcrefRegs=0022 {r1 r5}, byrefRegs=0000 {} ; byrRegs -[r0] movs r0, 1 str r0, [r5+0x08]
- ;; size=22 bbWeight=0.50 PerfScore 4.00 -G_M58417_IG12: ; bbWeight=0.50, epilog, nogc, extend - pop {r2,r3,r4,r5,r6,r7,r11,pc} - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M58417_IG13: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=98 bbWeight=0.50 PerfScore 20.00 +G_M58417_IG09: ; bbWeight=0.50, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r11,pc} + ;; size=6 bbWeight=0.50 PerfScore 1.00 +G_M58417_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz
mov r0, -1 str r0, [r5+0x08] ldr r0, [r5+0x20] @@ -165,7 +158,7 @@ G_M58417_IG13: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, ble SHORT G_M58417_IG08 b SHORT G_M58417_IG04 ;; size=20 bbWeight=0.50 PerfScore 4.50
-G_M58417_IG14: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M58417_IG11: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E add r3, pc @@ -174,7 +167,7 @@ G_M58417_IG14: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 228, prolog size 12, PerfScore 45.25, instruction count 94, allocated bytes for code 228 (MethodHash=c8251bce) for method Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE.PENamedTypeSymbol+VB$StateMachine_156_GetMembers`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
+; Total bytes of code 230, prolog size 18, PerfScore 49.50, instruction count 95, allocated bytes for code 230 (MethodHash=c8251bce) for method Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE.PENamedTypeSymbol+VB$StateMachine_156_GetMembers`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -186,7 +179,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 114 (0x00072) Actual length = 228 (0x0000e4)
+ Function Length : 115 (0x00073) Actual length = 230 (0x0000e6)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -198,7 +191,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 FC pop {r2,r3,r4,r5,r6,r7,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

+2 (+0.90%) : 66643.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.PENamedTypeSymbol+d187`1[System.Canon]:MoveNext():ubyte:this (FullOpts)

@@ -11,29 +11,32 @@ ; ; V00 this [V00,T00] ( 22, 12.50) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.PENamedTypeSymbol+<GetMembers>d__187`1[System.__Canon]> ; V01 loc0 [V01,T03] ( 3, 2.50) int -> r0 single-def
-; V02 loc1 [V02,T05] ( 5, 2 ) ref -> r6 class-hnd <Microsoft.CodeAnalysis.CSharp.Symbol>
+; V02 loc1 [V02,T05] ( 3, 1.50) ref -> r6 class-hnd <Microsoft.CodeAnalysis.CSharp.Symbol>
;* V03 loc2 [V03 ] ( 0, 0 ) int -> zero-ref ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T04] ( 3, 2.50) int -> r0 "fgMakeTemp is creating a new local variable" -; V06 tmp2 [V06,T06] ( 3, 2 ) ref -> r1 class-hnd "spilling QMark2" <System.__Canon> -;* V07 tmp3 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V08 tmp4 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V10 tmp6 [V10,T01] ( 3, 3 ) ref -> r0 "arr expr" -; V11 tmp7 [V11,T02] ( 3, 3 ) int -> r3 "index expr" -; V12 cse0 [V12,T07] ( 3, 1.50) int -> r0 "CSE - moderate" -; V13 cse1 [V13,T08] ( 3, 1.50) int -> r0 "CSE - moderate" -; V14 cse2 [V14,T09] ( 3, 1.50) int -> r3 "CSE - moderate"
+;* V05 tmp1 [V05 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V06 tmp2 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V08 tmp4 [V08,T01] ( 3, 3 ) ref -> r0 "arr expr" +; V09 tmp5 [V09,T02] ( 3, 3 ) int -> r3 "index expr" +; V10 tmp6 [V10,T04] ( 2, 2 ) int -> r0 "argument with side effect" +; V11 cse0 [V11,T06] ( 3, 1.50) int -> r0 "CSE - moderate" +; V12 cse1 [V12,T07] ( 3, 1.50) int -> r0 "CSE - moderate" +; V13 cse2 [V13,T08] ( 3, 1.50) int -> r3 "CSE - moderate" +; TEMP_01 ref -> [r11-0x18]
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M27500_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r4,r5,r6,r7,r11,lr}
+ push {r4,r5,r6,r11,lr} + sub sp, 12
add r11, sp, 24
+ movs r1, 0 + str r1, [sp]
str r0, [r11-0x14] mov r5, r0 ; gcrRegs +[r5]
- ;; size=14 bbWeight=1 PerfScore 4.00
+ ;; size=20 bbWeight=1 PerfScore 7.00
G_M27500_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz ldr r0, [r5+0x08] cmp r0, 0 @@ -41,14 +44,15 @@ G_M27500_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ;; size=6 bbWeight=1 PerfScore 3.00 G_M27500_IG03: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz cmp r0, 1
- beq SHORT G_M27500_IG13
+ beq SHORT G_M27500_IG10
;; size=4 bbWeight=0.50 PerfScore 1.00 G_M27500_IG04: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50 G_M27500_IG05: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r6,r7,r11,pc} - ;; size=4 bbWeight=0.50 PerfScore 0.50
+ add sp, 12 + pop {r4,r5,r6,r11,pc} + ;; size=6 bbWeight=0.50 PerfScore 1.00
G_M27500_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz mov r1, -1 str r1, [r5+0x08] @@ -83,7 +87,7 @@ G_M27500_IG08: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, b ldr r3, [r5+0x24] ldr r2, [r0+0x04] cmp r3, r2
- bhs SHORT G_M27500_IG14
+ bhs SHORT G_M27500_IG11
adds r0, 8 ; gcrRegs -[r0] ; byrRegs +[r0] @@ -103,17 +107,12 @@ G_M27500_IG08: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, b ldr r3, [r5+0x18] cmp r0, r3 bne SHORT G_M27500_IG04
- ldr r7, [r6]
ldr r0, [r5] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_GENERIC_HANDLE
- cmp r7, r0 - beq SHORT G_M27500_IG10 - ;; size=62 bbWeight=0.50 PerfScore 13.50 -G_M27500_IG09: ; bbWeight=0.25, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
mov r1, r6 ; gcrRegs +[r1] movw r3, LOW RELOC 0xD1FFAB1E @@ -122,19 +121,12 @@ G_M27500_IG09: ; bbWeight=0.25, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {} ldr r3, [r3] blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1 r6] +[r0]
- mov r1, r0 - ; gcrRegs +[r1] - b SHORT G_M27500_IG11 - ;; size=20 bbWeight=0.25 PerfScore 2.00 -G_M27500_IG10: ; bbWeight=0.25, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0-r1] +[r6] - mov r1, r6 - ; gcrRegs +[r1] - ;; size=2 bbWeight=0.25 PerfScore 0.25 -G_M27500_IG11: ; bbWeight=0.50, gcrefRegs=0022 {r1 r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r6]
+ str r0, [sp]
adds r0, r5, 4
+ ; gcrRegs -[r0]
; byrRegs +[r0]
+ ldr r1, [sp] + ; gcrRegs +[r1]
movw r12, LOW RELOC 0xD1FFAB1E movt r12, HIGH RELOC 0xD1FFAB1E add r12, pc @@ -144,11 +136,12 @@ G_M27500_IG11: ; bbWeight=0.50, gcrefRegs=0022 {r1 r5}, byrefRegs=0000 {} ; byrRegs -[r0] movs r0, 1 str r0, [r5+0x08]
- ;; size=22 bbWeight=0.50 PerfScore 4.00 -G_M27500_IG12: ; bbWeight=0.50, epilog, nogc, extend - pop {r2,r3,r4,r5,r6,r7,r11,pc} - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M27500_IG13: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=98 bbWeight=0.50 PerfScore 20.00 +G_M27500_IG09: ; bbWeight=0.50, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r11,pc} + ;; size=6 bbWeight=0.50 PerfScore 1.00 +G_M27500_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz
mov r0, -1 str r0, [r5+0x08] ldr r0, [r5+0x24] @@ -159,7 +152,7 @@ G_M27500_IG13: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, blt SHORT G_M27500_IG08 b SHORT G_M27500_IG04 ;; size=20 bbWeight=0.50 PerfScore 4.50
-G_M27500_IG14: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M27500_IG11: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E add r3, pc @@ -168,7 +161,7 @@ G_M27500_IG14: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 222, prolog size 12, PerfScore 43.75, instruction count 91, allocated bytes for code 222 (MethodHash=bcbf9493) for method Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.PENamedTypeSymbol+<GetMembers>d__187`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
+; Total bytes of code 224, prolog size 18, PerfScore 48.00, instruction count 92, allocated bytes for code 224 (MethodHash=bcbf9493) for method Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.PENamedTypeSymbol+<GetMembers>d__187`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -180,7 +173,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 111 (0x0006f) Actual length = 222 (0x0000de)
+ Function Length : 112 (0x00070) Actual length = 224 (0x0000e0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -192,7 +185,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 FC pop {r2,r3,r4,r5,r6,r7,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

+4 (+1.10%) : 154907.dasm - Microsoft.Internal.Collections.WeakReferenceCollection1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List1[System.__Canon]:this (FullOpts)

@@ -8,22 +8,21 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T07] ( 4, 4 ) ref -> [sp+0x04] this class-hnd EH-live single-def <Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]>
+; V00 this [V00,T08] ( 4, 4 ) ref -> [sp+0x04] this class-hnd EH-live single-def <Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]>
; V01 loc0 [V01,T11] ( 3, 4 ) ref -> r7 class-hnd exact single-def <System.Collections.Generic.List`1[System.__Canon]> ; V02 loc1 [V02 ] ( 6, 11 ) struct (16) [sp+0x0C] 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 -> r9 class-hnd <System.WeakReference> -;* V04 loc3 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
+; V03 loc2 [V03,T05] ( 2, 8 ) ref -> r10 class-hnd <System.WeakReference> +; V04 loc3 [V04,T04] ( 3, 10 ) ref -> r1 class-hnd <System.__Canon>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T08] ( 3, 6 ) ref -> r7 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]> -; V07 tmp2 [V07,T01] ( 3, 17 ) ref -> r1 "CASTCLASS eval op1" -; V08 tmp3 [V08,T10] ( 3, 5 ) int -> r10 "fgMakeTemp is creating a new local variable" -; V09 tmp4 [V09,T00] ( 5, 23 ) ref -> r3 class-hnd "spilling QMark2" <System.__Canon> -; V10 tmp5 [V10,T03] ( 2, 16 ) int -> [sp+0x08] spill-single-def "argument with side effect" -; V11 tmp6 [V11,T02] ( 2, 16 ) ref -> r1 "argument with side effect" -; V12 PSPSym [V12,T12] ( 1, 1 ) int -> [sp+0x20] do-not-enreg[V] "PSPSym" -; V13 cse0 [V13,T05] ( 3, 9 ) int -> r10 "CSE - aggressive" -; V14 cse1 [V14,T04] ( 7, 11 ) int -> r8 multi-def "CSE - aggressive" -; V15 cse2 [V15,T09] ( 3, 6 ) int -> r6 "CSE - aggressive"
+; V06 tmp1 [V06,T09] ( 3, 6 ) ref -> r7 class-hnd exact single-def "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]> +;* V07 tmp2 [V07,T06] ( 0, 0 ) int -> zero-ref "argument with side effect" +; V08 tmp3 [V08,T01] ( 2, 16 ) ref -> r1 "argument with side effect" +; V09 tmp4 [V09,T00] ( 3, 24 ) int -> [sp+0x08] spill-single-def "argument with side effect" +; V10 tmp5 [V10,T02] ( 2, 16 ) ref -> r1 "argument with side effect" +; V11 PSPSym [V11,T12] ( 1, 1 ) int -> [sp+0x20] do-not-enreg[V] "PSPSym" +; V12 cse0 [V12,T10] ( 1, 1 ) int -> r9 hoist "CSE - aggressive" +; V13 cse1 [V13,T03] ( 7, 11 ) int -> r8 multi-def "CSE - aggressive" +; V14 cse2 [V14,T07] ( 4, 7 ) int -> r6 "CSE - aggressive"
; ; Lcl frame size = 36 @@ -37,14 +36,14 @@ G_M63535_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref str r1, [sp+0x14] // [V02 loc1+0x08] str r1, [sp+0x18] // [V02 loc1+0x0c] add r1, sp, 72
- str r1, [sp+0x20] // [V12 PSPSym]
+ str r1, [sp+0x20] // [V11 PSPSym]
str r0, [r11-0x24] str r0, [sp+0x04] // [V00 this] ; GC ptr vars +{V00} mov r5, r0 ; gcrRegs +[r5] ;; size=32 bbWeight=1 PerfScore 13.00
-G_M63535_IG02: ; bbWeight=1, gcVars=00000080 {V00}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
+G_M63535_IG02: ; bbWeight=1, gcVars=00000100 {V00}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
ldr r6, [r5] mov r0, r6 movw r4, LOW RELOC 0xD1FFAB1E @@ -96,8 +95,16 @@ G_M63535_IG03: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b blx r3 // <unknown method> ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M63535_IG09 - ;; size=36 bbWeight=1 PerfScore 13.00
+ beq SHORT G_M63535_IG07 + mov r0, r6 + movw r4, LOW RELOC 0xD1FFAB1E + movt r4, HIGH RELOC 0xD1FFAB1E + add r4, pc + ldr r3, [r4] + blx r3 // CORINFO_HELP_READYTORUN_GENERIC_HANDLE + ; gcr arg pop 0 + mov r9, r0 + ;; size=54 bbWeight=1 PerfScore 20.00
G_M63535_IG04: ; bbWeight=4, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz mov r1, r8 add r0, sp, 12 @@ -108,8 +115,8 @@ G_M63535_IG04: ; bbWeight=4, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b blx r3 // <unknown method> ; gcrRegs +[r0] ; gcr arg pop 0
- mov r9, r0 - ; gcrRegs +[r9]
+ mov r10, r0 + ; gcrRegs +[r10]
mov r0, r6 ; gcrRegs -[r0] movw r4, LOW RELOC 0xD1FFAB1E @@ -118,21 +125,20 @@ G_M63535_IG04: ; bbWeight=4, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_GENERIC_HANDLE ; gcr arg pop 0
- mov r10, r0 - str r10, [sp+0x08] // [V10 tmp5] - mov r0, r9
+ str r0, [sp+0x08] // [V09 tmp4] + mov r0, r10
; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc
- ldr r1, [r0] - ldr r2, [r4] - blx r2 // <unknown method> - ; gcrRegs -[r9]
+ ldr r2, [r0] + ldr r3, [r4] + blx r3 // <unknown method> + ; gcrRegs -[r10]
; gcr arg pop 0 mov r1, r0 ; gcrRegs +[r1]
- ldr r0, [sp+0x08] // [V10 tmp5]
+ ldr r0, [sp+0x08] // [V09 tmp4]
; gcrRegs -[r0] movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E @@ -143,20 +149,8 @@ G_M63535_IG04: ; bbWeight=4, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b ; gcr arg pop 0 mov r1, r0 ; gcrRegs +[r1]
- mov r3, r1 - ; gcrRegs +[r3] - cmp r3, 0 - beq SHORT G_M63535_IG08 - ;; size=86 bbWeight=4 PerfScore 136.00 -G_M63535_IG05: ; bbWeight=1, gcrefRegs=00AA {r1 r3 r5 r7}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [sp+0x08] // [V09 tmp4]
; gcrRegs -[r0]
- ldr r0, [r3] - cmp r0, r10 - beq SHORT G_M63535_IG07 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M63535_IG06: ; bbWeight=0.50, gcrefRegs=00A2 {r1 r5 r7}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - mov r0, r10
movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E add r3, pc @@ -164,25 +158,24 @@ G_M63535_IG06: ; bbWeight=0.50, gcrefRegs=00A2 {r1 r5 r7}, byrefRegs=0000 blx r3 // CORINFO_HELP_CHKCASTANY ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- mov r3, r0 - ; gcrRegs +[r3] - ;; size=18 bbWeight=0.50 PerfScore 3.50 -G_M63535_IG07: ; bbWeight=2, gcrefRegs=00A8 {r3 r5 r7}, byrefRegs=0000 {}, byref
+ mov r1, r0 + ; gcrRegs +[r1] + cmp r1, 0 + beq SHORT G_M63535_IG06 + ;; size=98 bbWeight=4 PerfScore 156.00 +G_M63535_IG05: ; bbWeight=2, gcrefRegs=00A2 {r1 r5 r7}, byrefRegs=0000 {}, byref
; gcrRegs -[r0] mov r0, r7 ; gcrRegs +[r0]
- mov r1, r3 - ; gcrRegs +[r1]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4]
- ; gcrRegs -[r3]
blx r3 // <unknown method> ; gcrRegs -[r0-r1] ; gcr arg pop 0
- ;; size=18 bbWeight=2 PerfScore 14.00 -G_M63535_IG08: ; bbWeight=4, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=16 bbWeight=2 PerfScore 12.00 +G_M63535_IG06: ; bbWeight=4, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
mov r1, r8 add r0, sp, 12 // [V02 loc1] movw r4, LOW RELOC 0xD1FFAB1E @@ -194,7 +187,7 @@ G_M63535_IG08: ; bbWeight=4, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b cmp r0, 0 bne SHORT G_M63535_IG04 ;; size=22 bbWeight=4 PerfScore 36.00
-G_M63535_IG09: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref
+G_M63535_IG07: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref
mov r1, r8 add r0, sp, 12 // [V02 loc1] movw r4, LOW RELOC 0xD1FFAB1E @@ -206,17 +199,17 @@ G_M63535_IG09: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b mov r0, r7 ; gcrRegs +[r0] ;; size=20 bbWeight=1 PerfScore 8.00
-G_M63535_IG10: ; bbWeight=1, epilog, nogc, extend
+G_M63535_IG08: ; bbWeight=1, epilog, nogc, extend
add sp, 36 pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M63535_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc
+G_M63535_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc
; gcrRegs -[r0 r5 r7] push {r3,r4,r5,r6,r7,r8,r9,r10,r11,lr} add r3, r11, 8 str r3, [sp] ;; size=10 bbWeight=0 PerfScore 0.00
-G_M63535_IG12: ; bbWeight=0, gcVars=00000080 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M63535_IG10: ; bbWeight=0, gcVars=00000100 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r1, LOW RELOC 0xD1FFAB1E movt r1, HIGH RELOC 0xD1FFAB1E add r1, pc @@ -230,11 +223,11 @@ G_M63535_IG12: ; bbWeight=0, gcVars=00000080 {V00}, gcrefRegs=0000 {}, by blx r3 // <unknown method> ; gcr arg pop 0 ;; size=34 bbWeight=0 PerfScore 0.00
-G_M63535_IG13: ; bbWeight=0, funclet epilog, nogc, extend
+G_M63535_IG11: ; bbWeight=0, funclet epilog, nogc, extend
pop {r3,r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 362, prolog size 32, PerfScore 255.50, instruction count 138, allocated bytes for code 362 (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 366, prolog size 32, PerfScore 274.00, instruction count 139, allocated bytes for code 366 (MethodHash=4d8107d0) for method Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List`1[System.__Canon]:this (FullOpts)
; ============================================================ Unwind Info: @@ -246,7 +239,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 157 (0x0009d) Actual length = 314 (0x00013a)
+ Function Length : 159 (0x0009f) Actual length = 318 (0x00013e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ---- @@ -274,4 +267,4 @@ Unwind Info: *************** EH table for Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List`1[System.__Canon]:this 1 EH table entries, 0 duplicate clauses, 0 cloned finallys, 1 total EH entries reported to VM
-EH#0: try [G_M63535_IG03..G_M63535_IG09) handled by [G_M63535_IG11..END) (fault)
+EH#0: try [G_M63535_IG03..G_M63535_IG07) handled by [G_M63535_IG09..END) (fault)
libraries.pmi.linux.arm.checked.mch
-28 (-51.85%) : 277457.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:b__1_0(System.Collections.Generic.IDictionary`2[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%) : 252417.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%) : 16094.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

+28 (+7.82%) : 143912.dasm - System.Reflection.Emit.TypeBuilderImpl:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (FullOpts)

@@ -8,28 +8,28 @@ ; 1 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T03] ( 8, 7 ) ref -> r4 this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl> -; V01 arg1 [V01,T05] ( 3, 3 ) ref -> r6 class-hnd single-def <System.String> -; V02 arg2 [V02,T04] ( 4, 3.50) ref -> r5 class-hnd single-def <System.Type> -; V03 arg3 [V03,T06] ( 3, 3 ) ref -> r7 class-hnd single-def <System.Type[]> -; V04 arg4 [V04,T14] ( 1, 1 ) ref -> [sp+0x20] class-hnd single-def <System.Type[]> -; V05 arg5 [V05,T11] ( 2, 1.50) int -> r8 single-def
+; V00 this [V00,T04] ( 8, 7 ) ref -> r4 this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl> +; V01 arg1 [V01,T06] ( 3, 3 ) ref -> r6 class-hnd single-def <System.String> +; V02 arg2 [V02,T05] ( 4, 3.50) ref -> r5 class-hnd single-def <System.Type> +; V03 arg3 [V03,T07] ( 3, 3 ) ref -> r7 class-hnd single-def <System.Type[]> +; V04 arg4 [V04,T16] ( 1, 1 ) ref -> [sp+0x20] class-hnd single-def <System.Type[]> +; V05 arg5 [V05,T13] ( 2, 1.50) int -> r8 single-def
;* V06 loc0 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <System.Reflection.Emit.FieldBuilderImpl> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V08 tmp1 [V08,T01] ( 12, 21 ) ref -> r9 class-hnd exact single-def "NewObj constructor temp" <System.Reflection.Emit.FieldBuilderImpl>
-;* V09 tmp2 [V09,T12] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V10 tmp3 [V10,T00] ( 7, 19 ) ref -> r0 class-hnd "Inline stloc first use temp" <System.Type> -;* V11 tmp4 [V11,T13] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V12 tmp5 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V13 tmp6 [V13,T15] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V14 tmp7 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V15 tmp8 [V15,T07] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V16 tmp9 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V17 tmp10 [V17,T08] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -; V19 tmp12 [V19,T02] ( 7, 11 ) ref -> r0 class-hnd single-def "Inlining Arg" <<unknown class>> -; V20 tmp13 [V20,T10] ( 3, 2.46) ref -> r1 class-hnd single-def "Inline stloc first use temp" <<unknown class>> -; V21 tmp14 [V21,T09] ( 4, 2.91) int -> r3 "Inline stloc first use temp"
+;* V09 tmp2 [V09,T14] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V10 tmp3 [V10,T00] ( 9, 21.50) ref -> r0 class-hnd "Inline stloc first use temp" <System.Type> +;* V11 tmp4 [V11,T15] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V12 tmp5 [V12,T17] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V13 tmp6 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V14 tmp7 [V14,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V15 tmp8 [V15,T12] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V16 tmp9 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +; V17 tmp10 [V17,T03] ( 7, 11 ) ref -> r0 class-hnd single-def "Inlining Arg" <<unknown class>> +; V18 tmp11 [V18,T11] ( 3, 2.46) ref -> r1 class-hnd single-def "Inline stloc first use temp" <<unknown class>> +; V19 tmp12 [V19,T10] ( 4, 2.91) int -> r3 "Inline stloc first use temp" +; V20 rat0 [V20,T09] ( 3, 2.50) ref -> r3 "replacement local" +; V21 rat1 [V21,T02] ( 3, 10 ) ref -> r1 "replacement local"
; ; Lcl frame size = 0 @@ -57,7 +57,7 @@ G_M54407_IG02: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 ldr r0, [r4+0x20] ; gcrRegs +[r0] cmp r0, 0
- bne SHORT G_M54407_IG08
+ bne SHORT G_M54407_IG11
;; size=20 bbWeight=1 PerfScore 8.00 G_M54407_IG03: ; bbWeight=0.50, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0] @@ -66,31 +66,53 @@ G_M54407_IG03: ; bbWeight=0.50, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0 movw r3, 0xd1ff movt r3, 0xd1ff cmp r0, r3
- bne SHORT G_M54407_IG05
+ beq SHORT G_M54407_IG11 + mov r3, r0 + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M54407_IG08 + ;; size=20 bbWeight=0.50 PerfScore 4.00 +G_M54407_IG04: ; bbWeight=0.25, gcrefRegs=00F9 {r0 r3 r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz + ldr r3, [r3] + ; gcrRegs -[r3] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M54407_IG08 + ;; size=14 bbWeight=0.25 PerfScore 1.25 +G_M54407_IG05: ; bbWeight=0.50, gcrefRegs=00F1 {r0 r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
b SHORT G_M54407_IG08
- ;; size=16 bbWeight=0.50 PerfScore 3.00 -G_M54407_IG04: ; bbWeight=2, gcrefRegs=00F1 {r0 r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M54407_IG06: ; bbWeight=2, gcrefRegs=00F1 {r0 r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
movw r1, 0xd1ff movt r1, 0xd1ff cmp r0, r1
- beq SHORT G_M54407_IG07 - ;; size=12 bbWeight=2 PerfScore 8.00 -G_M54407_IG05: ; bbWeight=4, gcrefRegs=00F1 {r0 r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M54407_IG10 + mov r1, r0 + ; gcrRegs +[r1] + cmp r1, 0 + beq SHORT G_M54407_IG08 + ;; size=18 bbWeight=2 PerfScore 14.00 +G_M54407_IG07: ; bbWeight=1, gcrefRegs=00F3 {r0 r1 r4 r5 r6 r7}, byrefRegs=0000 {}, byref + ldr r1, [r1] + ; gcrRegs -[r1] + ;; size=2 bbWeight=1 PerfScore 1.00 +G_M54407_IG08: ; bbWeight=4, gcrefRegs=00F1 {r0 r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
ldr r3, [r0] ldr r3, [r3+0x58] ldr r3, [r3+0x10] blx r3 // <unknown method> cmp r0, 0
- bne SHORT G_M54407_IG04
+ bne SHORT G_M54407_IG06
;; size=12 bbWeight=4 PerfScore 24.00
-G_M54407_IG06: ; bbWeight=0.50, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+G_M54407_IG09: ; bbWeight=0.50, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
- b SHORT G_M54407_IG08
+ b SHORT G_M54407_IG11
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M54407_IG07: ; bbWeight=0.50, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+G_M54407_IG10: ; bbWeight=0.50, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
ands r1, r8, 16 cmp r1, 0
- bne SHORT G_M54407_IG08
+ bne SHORT G_M54407_IG11
add r0, r4, 32 ; byrRegs +[r0] mov r1, r5 @@ -101,7 +123,7 @@ G_M54407_IG07: ; bbWeight=0.50, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0 ; gcrRegs -[r1] ; byrRegs -[r0] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M54407_IG08: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+G_M54407_IG11: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
movw r0, 0xd1ff movt r0, 0xd1ff movw r3, 0xd1ff @@ -115,9 +137,9 @@ G_M54407_IG08: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 ldr r1, [r1] and r1, r1, 1 cmp r1, 1
- bne SHORT G_M54407_IG14
+ bne SHORT G_M54407_IG17
;; size=38 bbWeight=1 PerfScore 12.00
-G_M54407_IG09: ; bbWeight=1, gcrefRegs=02F0 {r4 r5 r6 r7 r9}, byrefRegs=0000 {}, byref, isz
+G_M54407_IG12: ; bbWeight=1, gcrefRegs=02F0 {r4 r5 r6 r7 r9}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0] movw r1, 0xd1ff movt r1, 0xd1ff @@ -190,9 +212,9 @@ G_M54407_IG09: ; bbWeight=1, gcrefRegs=02F0 {r4 r5 r6 r7 r9}, byrefRegs=0 ldr r3, [r0+0x08] ldr lr, [r1+0x04] cmp lr, r3
- bls SHORT G_M54407_IG11
+ bls SHORT G_M54407_IG14
;; size=144 bbWeight=1 PerfScore 46.00
-G_M54407_IG10: ; bbWeight=0.46, gcrefRegs=0203 {r0 r1 r9}, byrefRegs=0000 {}, byref, isz
+G_M54407_IG13: ; bbWeight=0.46, gcrefRegs=0203 {r0 r1 r9}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r4] add lr, r3, 1 str lr, [r0+0x08] @@ -211,9 +233,9 @@ G_M54407_IG10: ; bbWeight=0.46, gcrefRegs=0203 {r0 r1 r9}, byrefRegs=0000 blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1] ; byrRegs -[r0]
- b SHORT G_M54407_IG12
+ b SHORT G_M54407_IG15
;; size=28 bbWeight=0.46 PerfScore 4.57
-G_M54407_IG11: ; bbWeight=0.04, gcrefRegs=0201 {r0 r9}, byrefRegs=0000 {}, byref
+G_M54407_IG14: ; bbWeight=0.04, gcrefRegs=0201 {r0 r9}, byrefRegs=0000 {}, byref
; gcrRegs +[r0] mov r1, r9 ; gcrRegs +[r1] @@ -223,14 +245,14 @@ G_M54407_IG11: ; bbWeight=0.04, gcrefRegs=0201 {r0 r9}, byrefRegs=0000 {} blx r3 // <unknown method> ; gcrRegs -[r0-r1] ;; size=14 bbWeight=0.04 PerfScore 0.22
-G_M54407_IG12: ; bbWeight=1, gcrefRegs=0200 {r9}, byrefRegs=0000 {}, byref
+G_M54407_IG15: ; bbWeight=1, gcrefRegs=0200 {r9}, byrefRegs=0000 {}, byref
mov r0, r9 ; gcrRegs +[r0] ;; size=2 bbWeight=1 PerfScore 1.00
-G_M54407_IG13: ; bbWeight=1, epilog, nogc, extend
+G_M54407_IG16: ; bbWeight=1, epilog, nogc, extend
pop {r4,r5,r6,r7,r8,r9,r11,pc} ;; size=4 bbWeight=1 PerfScore 1.00
-G_M54407_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=02F0 {r4 r5 r6 r7 r9}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M54407_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=02F0 {r4 r5 r6 r7 r9}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] +[r4-r7] movw r0, 0xd1ff movt r0, 0xd1ff @@ -238,10 +260,10 @@ G_M54407_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=02F0 {r4 r5 r6 movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
- b SHORT G_M54407_IG09
+ b SHORT G_M54407_IG12
;; size=22 bbWeight=0 PerfScore 0.00
-; Total bytes of code 358, prolog size 8, PerfScore 119.28, instruction count 122, allocated bytes for code 358 (MethodHash=3e1f2b78) for method System.Reflection.Emit.TypeBuilderImpl:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (FullOpts)
+; Total bytes of code 386, prolog size 8, PerfScore 129.03, instruction count 134, allocated bytes for code 386 (MethodHash=3e1f2b78) for method System.Reflection.Emit.TypeBuilderImpl:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (FullOpts)
; ============================================================ Unwind Info: @@ -253,7 +275,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 179 (0x000b3) Actual length = 358 (0x000166)
+ Function Length : 193 (0x000c1) Actual length = 386 (0x000182)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+28 (+11.76%) : 143902.dasm - System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)

@@ -8,23 +8,23 @@ ; 1 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 15, 9 ) ref -> r4 this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl>
+; V00 this [V00,T02] ( 15, 9 ) ref -> r4 this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl>
;# 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 "Inlining Arg" <<unknown class>>
-;* V03 tmp2 [V03,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V04 tmp3 [V04,T00] ( 7, 19 ) ref -> r0 class-hnd "Inline stloc first use temp" <System.Type> -;* V05 tmp4 [V05,T07] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V07 tmp6 [V07,T08] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V08 tmp7 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V09 tmp8 [V09,T02] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V11 tmp10 [V11,T04] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V12 tmp11 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -; V13 tmp12 [V13,T09] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V14 tmp13 [V14,T10] ( 2, 0 ) ref -> r1 single-def "argument with side effect" -; V15 cse0 [V15,T05] ( 3, 1.50) int -> r0 "CSE - moderate" -; V16 cse1 [V16,T03] ( 3, 3 ) ref -> r5 "CSE - aggressive"
+;* V03 tmp2 [V03,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V04 tmp3 [V04,T00] ( 9, 21.50) ref -> r0 class-hnd "Inline stloc first use temp" <System.Type> +;* V05 tmp4 [V05,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V06 tmp5 [V06,T10] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V07 tmp6 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V08 tmp7 [V08,T03] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V09 tmp8 [V09,T06] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +; V11 tmp10 [V11,T11] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V12 tmp11 [V12,T12] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V13 cse0 [V13,T07] ( 3, 1.50) int -> r0 "CSE - moderate" +; V14 cse1 [V14,T05] ( 3, 3 ) ref -> r5 "CSE - aggressive" +; V15 rat0 [V15,T04] ( 3, 2.50) ref -> r3 "replacement local" +; V16 rat1 [V16,T01] ( 3, 10 ) ref -> r1 "replacement local"
; ; Lcl frame size = 0 @@ -64,41 +64,63 @@ G_M47746_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0010 {r4}, ldr r0, [r0+0x08] ; gcrRegs -[r0] cmp r0, 0
- bne SHORT G_M47746_IG11
+ bne SHORT G_M47746_IG14
ldr r0, [r4+0x44] ands r0, r0, 32 cmp r0, 0
- bne SHORT G_M47746_IG11
+ bne SHORT G_M47746_IG14
mov r0, r4 ; gcrRegs +[r0] movw r5, 0xd1ff movt r5, 0xd1ff cmp r0, r5
- bne SHORT G_M47746_IG09 - b SHORT G_M47746_IG10 - ;; size=34 bbWeight=0.50 PerfScore 7.00 -G_M47746_IG08: ; bbWeight=2, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M47746_IG13 + mov r3, r0 + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M47746_IG12 + ;; size=38 bbWeight=0.50 PerfScore 8.00 +G_M47746_IG08: ; bbWeight=0.25, gcrefRegs=0039 {r0 r3 r4 r5}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r5]
+ ldr r3, [r3] + ; gcrRegs -[r3] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M47746_IG12 + ;; size=14 bbWeight=0.25 PerfScore 1.25 +G_M47746_IG09: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz + b SHORT G_M47746_IG12 + ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M47746_IG10: ; bbWeight=2, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
cmp r0, r5
- beq SHORT G_M47746_IG11 - ;; size=4 bbWeight=2 PerfScore 4.00 -G_M47746_IG09: ; bbWeight=4, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M47746_IG14 + mov r1, r0 + ; gcrRegs +[r1] + cmp r1, 0 + beq SHORT G_M47746_IG12 + ;; size=10 bbWeight=2 PerfScore 10.00 +G_M47746_IG11: ; bbWeight=1, gcrefRegs=0033 {r0 r1 r4 r5}, byrefRegs=0000 {}, byref + ldr r1, [r1] + ; gcrRegs -[r1] + ;; size=2 bbWeight=1 PerfScore 1.00 +G_M47746_IG12: ; bbWeight=4, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r3, [r0] ldr r3, [r3+0x58] ldr r3, [r3+0x10] blx r3 // <unknown method> cmp r0, 0
- bne SHORT G_M47746_IG08
+ bne SHORT G_M47746_IG10
;; size=12 bbWeight=4 PerfScore 24.00
-G_M47746_IG10: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M47746_IG13: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] ldr r0, [r4+0x44] and r1, r0, 384 cmp r1, 384
- beq SHORT G_M47746_IG11
+ beq SHORT G_M47746_IG14
and r0, r0, 32 cmp r0, 32
- beq SHORT G_M47746_IG12
+ beq SHORT G_M47746_IG15
mov r0, r4 ; gcrRegs +[r0] movs r1, 6 @@ -107,7 +129,7 @@ G_M47746_IG10: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ldr r3, [r3] blx r3 // <unknown method> ;; size=36 bbWeight=0.50 PerfScore 6.50
-G_M47746_IG11: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M47746_IG14: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0] mov r0, r4 ; gcrRegs +[r0] @@ -131,7 +153,7 @@ G_M47746_IG11: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ; gcrRegs -[r0] b SHORT G_M47746_IG03 ;; size=46 bbWeight=0.50 PerfScore 8.50
-G_M47746_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M47746_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r4] movw r0, 0xd1ff movt r0, 0xd1ff @@ -162,7 +184,7 @@ G_M47746_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=62 bbWeight=0 PerfScore 0.00
-; Total bytes of code 238, prolog size 8, PerfScore 60.50, instruction count 88, allocated bytes for code 238 (MethodHash=c0db457d) for method System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)
+; Total bytes of code 266, prolog size 8, PerfScore 70.25, instruction count 100, allocated bytes for code 266 (MethodHash=c0db457d) for method System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)
; ============================================================ Unwind Info: @@ -174,7 +196,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 119 (0x00077) Actual length = 238 (0x0000ee)
+ Function Length : 133 (0x00085) Actual length = 266 (0x00010a)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+28 (+22.22%) : 143941.dasm - System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)

@@ -8,22 +8,22 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 6, 5 ) ref -> r4 this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl>
+; V00 this [V00,T02] ( 6, 5 ) ref -> r4 this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T09] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V03 tmp2 [V03,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V04 tmp3 [V04,T00] ( 7, 20 ) ref -> r0 class-hnd "Inline stloc first use temp" <System.Type> -;* V05 tmp4 [V05,T07] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V07 tmp6 [V07,T08] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V08 tmp7 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V09 tmp8 [V09,T03] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V11 tmp10 [V11,T04] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V12 tmp11 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -; V13 tmp12 [V13,T10] ( 2, 0 ) ref -> r1 single-def "argument with side effect" -; V14 cse0 [V14,T05] ( 3, 1.50) ref -> r0 "CSE - moderate" -; V15 cse1 [V15,T02] ( 3, 4 ) ref -> r5 "CSE - aggressive"
+; V02 tmp1 [V02,T11] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V03 tmp2 [V03,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V04 tmp3 [V04,T00] ( 9, 22.50) ref -> r0 class-hnd "Inline stloc first use temp" <System.Type> +;* V05 tmp4 [V05,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V06 tmp5 [V06,T10] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V07 tmp6 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V08 tmp7 [V08,T04] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V09 tmp8 [V09,T06] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +; V11 tmp10 [V11,T12] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V12 cse0 [V12,T07] ( 3, 1.50) ref -> r0 "CSE - moderate" +; V13 cse1 [V13,T03] ( 3, 4 ) ref -> r5 "CSE - aggressive" +; V14 rat0 [V14,T05] ( 3, 2.50) ref -> r3 "replacement local" +; V15 rat1 [V15,T01] ( 3, 10 ) ref -> r3 "replacement local"
; ; Lcl frame size = 0 @@ -40,47 +40,68 @@ G_M32453_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre movw r5, 0xd1ff movt r5, 0xd1ff cmp r0, r5
- bne SHORT G_M32453_IG05
+ beq SHORT G_M32453_IG12
;; size=18 bbWeight=1 PerfScore 6.00
-G_M32453_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - b SHORT G_M32453_IG09
+G_M32453_IG03: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r5] + mov r3, r0 + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M32453_IG08 + ;; size=6 bbWeight=0.50 PerfScore 1.50 +G_M32453_IG04: ; bbWeight=0.25, gcrefRegs=0039 {r0 r3 r4 r5}, byrefRegs=0000 {}, byref, isz + ldr r3, [r3] + ; gcrRegs -[r3] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M32453_IG08 + ;; size=14 bbWeight=0.25 PerfScore 1.25 +G_M32453_IG05: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz + b SHORT G_M32453_IG08
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M32453_IG04: ; bbWeight=2, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r5]
+G_M32453_IG06: ; bbWeight=2, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
cmp r0, r5
- beq SHORT G_M32453_IG07 - ;; size=4 bbWeight=2 PerfScore 4.00 -G_M32453_IG05: ; bbWeight=4, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M32453_IG10 + mov r3, r0 + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M32453_IG08 + ;; size=10 bbWeight=2 PerfScore 10.00 +G_M32453_IG07: ; bbWeight=1, gcrefRegs=0039 {r0 r3 r4 r5}, byrefRegs=0000 {}, byref + ldr r3, [r3] + ; gcrRegs -[r3] + ;; size=2 bbWeight=1 PerfScore 1.00 +G_M32453_IG08: ; bbWeight=4, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
ldr r3, [r0] ldr r3, [r3+0x58] ldr r3, [r3+0x10] blx r3 // <unknown method> cmp r0, 0
- bne SHORT G_M32453_IG04
+ bne SHORT G_M32453_IG06
;; size=12 bbWeight=4 PerfScore 24.00
-G_M32453_IG06: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M32453_IG09: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5]
- b SHORT G_M32453_IG09
+ b SHORT G_M32453_IG12
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M32453_IG07: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M32453_IG10: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r4+0x20] ; gcrRegs +[r0] cmp r0, 0
- beq SHORT G_M32453_IG11
+ beq SHORT G_M32453_IG14
;; size=6 bbWeight=0.50 PerfScore 1.50
-G_M32453_IG08: ; bbWeight=0.50, epilog, nogc, extend
+G_M32453_IG11: ; bbWeight=0.50, epilog, nogc, extend
pop {r4,r5,r11,pc} ;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32453_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
+G_M32453_IG12: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0] mov r0, r4 ; gcrRegs +[r0] ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M32453_IG10: ; bbWeight=0.50, epilog, nogc, extend
+G_M32453_IG13: ; bbWeight=0.50, epilog, nogc, extend
pop {r4,r5,r11,pc} ;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32453_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M32453_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0 r4] movw r0, 0xd1ff movt r0, 0xd1ff @@ -111,7 +132,7 @@ G_M32453_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref bkpt ;; size=62 bbWeight=0 PerfScore 0.00
-; Total bytes of code 126, prolog size 8, PerfScore 41.00, instruction count 46, allocated bytes for code 126 (MethodHash=b7cb813a) for method System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
+; Total bytes of code 154, prolog size 8, PerfScore 50.75, instruction count 58, allocated bytes for code 154 (MethodHash=b7cb813a) for method System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
; ============================================================ Unwind Info: @@ -123,7 +144,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 63 (0x0003f) Actual length = 126 (0x00007e)
+ Function Length : 77 (0x0004d) Actual length = 154 (0x00009a)
---- 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%) : 596078.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 91 ; 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%) : 624167.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 837 ; 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%) : 332151.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

+40 (+17.09%) : 355748.dasm - System.Linq.Enumerable:Concat[System.Nullable1[int]](System.Collections.Generic.IEnumerable1[System.Nullable1[int]],System.Collections.Generic.IEnumerable1System.Nullable1[int]]):System.Collections.Generic.IEnumerable1[System.Nullable`1[int]

@@ -9,19 +9,18 @@ ; 2 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 9, 7 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]]> -; V01 arg1 [V01,T02] ( 8, 6 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]]> -; V02 loc0 [V02,T05] ( 6, 2 ) ref -> r0 class-hnd single-def <System.Linq.Enumerable+ConcatIterator`1[System.Nullable`1[int]]>
+; V00 arg0 [V00,T01] ( 8, 6 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]]> +; V01 arg1 [V01,T05] ( 7, 5 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]]> +; V02 loc0 [V02,T08] ( 6, 2 ) ref -> r0 class-hnd single-def <System.Linq.Enumerable+ConcatIterator`1[System.Nullable`1[int]]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T01] ( 5, 10 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Enumerable+Concat2Iterator`1[System.Nullable`1[int]]> -;* V05 tmp2 [V05,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Nullable`1[int][]> -;* V07 tmp4 [V07,T06] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Nullable`1[int][]> -;* V08 tmp5 [V08,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Nullable`1[int][]> -;* V10 tmp7 [V10,T07] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Nullable`1[int][]> -; V11 cse0 [V11,T04] ( 3, 3 ) int -> r3 "CSE - aggressive" -; V12 rat0 [V12,T03] ( 7, 8 ) ref -> r0 class-hnd "replacement local" <System.Linq.Enumerable+ConcatIterator`1[System.Nullable`1[int]]>
+; V04 tmp1 [V04,T00] ( 5, 10 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Enumerable+Concat2Iterator`1[System.Nullable`1[int]]> +;* V05 tmp2 [V05,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V06 tmp3 [V06,T06] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inline stloc first use temp" <System.Nullable`1[int][]> +;* V07 tmp4 [V07,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V08 tmp5 [V08,T07] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inline stloc first use temp" <System.Nullable`1[int][]> +; V09 rat0 [V09,T03] ( 5, 7.50) ref -> r0 "replacement local" +; V10 rat1 [V10,T04] ( 5, 7.50) ref -> r0 "replacement local" +; V11 rat2 [V11,T02] ( 7, 8 ) ref -> r0 "replacement local"
; ; Lcl frame size = 4 @@ -35,37 +34,75 @@ G_M58683_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=12 bbWeight=1 PerfScore 4.00 G_M58683_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz cmp r4, 0
- beq SHORT G_M58683_IG11
+ beq SHORT G_M58683_IG17
cmp r5, 0
- beq SHORT G_M58683_IG12 - ldr r0, [r4] - movw r3, 0xd1ff - movt r3, 0xd1ff - cmp r0, r3 - bne SHORT G_M58683_IG03 - ldr r0, [r4+0x04] - cmp r0, 0 - beq SHORT G_M58683_IG13 - ;; size=28 bbWeight=1 PerfScore 12.00 -G_M58683_IG03: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ldr r0, [r5] - cmp r0, r3 - bne SHORT G_M58683_IG04 - ldr r0, [r5+0x04] - cmp r0, 0 - beq SHORT G_M58683_IG15 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M58683_IG04: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M58683_IG18
mov r0, r4 ; gcrRegs +[r0] cmp r0, 0
+ bne SHORT G_M58683_IG04 + ;; size=14 bbWeight=1 PerfScore 7.00 +G_M58683_IG03: ; bbWeight=1, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz + cmp r0, 0 + beq SHORT G_M58683_IG06 + ldr r0, [r0+0x04] + ; gcrRegs -[r0] + cmp r0, 0 + bne SHORT G_M58683_IG06 + b SHORT G_M58683_IG19 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M58683_IG04: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + ldr r3, [r0] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M58683_IG03 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M58683_IG05: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0] + movs r0, 0 + b SHORT G_M58683_IG03 + ;; size=4 bbWeight=0.25 PerfScore 0.50 +G_M58683_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r5 + ; gcrRegs +[r0] + cmp r0, 0
bne SHORT G_M58683_IG08 ;; size=6 bbWeight=1 PerfScore 3.00
-G_M58683_IG05: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
+G_M58683_IG07: ; bbWeight=1, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
cmp r0, 0
- bne SHORT G_M58683_IG09
+ beq SHORT G_M58683_IG10 + ldr r0, [r0+0x04] + ; gcrRegs -[r0] + cmp r0, 0 + bne SHORT G_M58683_IG10 + b SHORT G_M58683_IG21 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M58683_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + ldr r3, [r0] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M58683_IG07 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M58683_IG09: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0] + movs r0, 0 + b SHORT G_M58683_IG07 + ;; size=4 bbWeight=0.25 PerfScore 0.50 +G_M58683_IG10: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r4 + ; gcrRegs +[r0] + cmp r0, 0 + bne SHORT G_M58683_IG14 + ;; size=6 bbWeight=1 PerfScore 3.00 +G_M58683_IG11: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz + cmp r0, 0 + bne SHORT G_M58683_IG15
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M58683_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
+G_M58683_IG12: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
; gcrRegs -[r0] movw r0, 0xd1ff movt r0, 0xd1ff @@ -103,22 +140,22 @@ G_M58683_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b mov r0, r6 ; gcrRegs +[r0] ;; size=66 bbWeight=1 PerfScore 21.00
-G_M58683_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M58683_IG13: ; bbWeight=1, epilog, nogc, extend
pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=1 PerfScore 1.00
-G_M58683_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M58683_IG14: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r6] +[r4-r5] ldr r0, [r0] ; gcrRegs -[r0] movw r3, 0xd1ff movt r3, 0xd1ff cmp r0, r3
- bne SHORT G_M58683_IG17
+ bne SHORT G_M58683_IG23
movs r0, 0 cmp r0, 0
- beq SHORT G_M58683_IG06
+ beq SHORT G_M58683_IG12
;; size=20 bbWeight=0.50 PerfScore 4.00
-G_M58683_IG09: ; bbWeight=0, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref
+G_M58683_IG15: ; bbWeight=0, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref
; gcrRegs -[r4] +[r0] mov r1, r5 ; gcrRegs +[r1] @@ -126,13 +163,13 @@ G_M58683_IG09: ; bbWeight=0, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, b ldr r3, [r3+0x34] ldr r3, [r3+0x08] ;; size=8 bbWeight=0 PerfScore 0.00
-G_M58683_IG10: ; bbWeight=0, epilog, nogc, extend
+G_M58683_IG16: ; bbWeight=0, epilog, nogc, extend
add sp, 4 pop {r4,r5,r6,r11,lr} bx r3 // <unknown method> ; gcr arg pop 0 ;; size=8 bbWeight=0 PerfScore 0.00
-G_M58683_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M58683_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0-r1 r5] movs r0, 4 movw r3, 0xd1ff @@ -142,7 +179,7 @@ G_M58683_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M58683_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M58683_IG18: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 14 movw r3, 0xd1ff movt r3, 0xd1ff @@ -151,23 +188,23 @@ G_M58683_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M58683_IG13: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M58683_IG19: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
; gcrRegs +[r5] mov r0, r5 ; gcrRegs +[r0] ;; size=2 bbWeight=0 PerfScore 0.00
-G_M58683_IG14: ; bbWeight=0, epilog, nogc, extend
+G_M58683_IG20: ; bbWeight=0, epilog, nogc, extend
pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-G_M58683_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
+G_M58683_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0 r5] +[r4] mov r0, r4 ; gcrRegs +[r0] ;; size=2 bbWeight=0 PerfScore 0.00
-G_M58683_IG16: ; bbWeight=0, epilog, nogc, extend
+G_M58683_IG22: ; bbWeight=0, epilog, nogc, extend
pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-G_M58683_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M58683_IG23: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] +[r5] mov r1, r4 ; gcrRegs +[r1] @@ -178,10 +215,10 @@ G_M58683_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, blx r3 // CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- b SHORT G_M58683_IG05
+ b SHORT G_M58683_IG11
;; size=22 bbWeight=0 PerfScore 0.00
-; Total bytes of code 234, prolog size 12, PerfScore 52.00, instruction count 87, allocated bytes for code 234 (MethodHash=d8fb1ac4) for method System.Linq.Enumerable:Concat[System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]],System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]]):System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]] (Tier1)
+; Total bytes of code 274, prolog size 12, PerfScore 62.00, instruction count 105, allocated bytes for code 274 (MethodHash=d8fb1ac4) for method System.Linq.Enumerable:Concat[System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]],System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]]):System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]] (Tier1)
; ============================================================ Unwind Info: @@ -193,7 +230,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
+ Function Length : 137 (0x00089) Actual length = 274 (0x000112)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+32 (+20.51%) : 497533.dasm - System.Type:get_IsSerializable():ubyte:this (Tier1)

@@ -5,36 +5,35 @@ ; optimized using Dynamic PGO ; r11 based frame ; partially interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 779
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 779
; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T01] ( 10, 4.96) ref -> r4 this class-hnd single-def <System.Type>
-; V01 loc0 [V01,T00] ( 11, 7.84) ref -> r0 class-hnd <System.Type>
+; V01 loc0 [V01,T00] ( 10, 7.60) ref -> r0 class-hnd <System.Type>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03,T05] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V04 tmp2 [V04,T04] ( 3, 2 ) int -> r0 "guarded devirt return temp" -;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V06 tmp4 [V06,T06] ( 3, 0.96) ref -> r0 "guarded devirt return temp" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V08 tmp6 [V08,T03] ( 3, 2.21) ref -> r0 "guarded devirt return temp" -;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V10 cse0 [V10,T02] ( 5, 3.83) int -> r5 "CSE - aggressive"
+; V03 tmp1 [V03,T04] ( 3, 2 ) int -> r0 "guarded devirt return temp" +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V05 tmp3 [V05,T05] ( 3, 0.96) ref -> r0 "guarded devirt return temp" +;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V07 tmp5 [V07,T03] ( 3, 2.21) ref -> r0 "guarded devirt return temp" +;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V09 rat0 [V09,T02] ( 5, 3.61) ref -> r3 "replacement local"
;
-; Lcl frame size = 0
+; Lcl frame size = 4
G_M39137_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r11,lr}
+ push {r3,r4,r11,lr}
add r11, sp, 8 mov r4, r0 ; gcrRegs +[r4] ;; size=10 bbWeight=1 PerfScore 3.00 G_M39137_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ldr r0, [r4]
- movw r5, 0xd1ff - movt r5, 0xd1ff - cmp r0, r5 - bne SHORT G_M39137_IG15
+ movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M39137_IG18
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -45,17 +44,40 @@ G_M39137_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre G_M39137_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ands r0, r0, 0x2000 cmp r0, 0
- beq SHORT G_M39137_IG11
+ beq SHORT G_M39137_IG15
;; size=8 bbWeight=1 PerfScore 3.00 G_M39137_IG04: ; bbWeight=0.52, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[r4] movs r0, 1 ;; size=2 bbWeight=0.52 PerfScore 0.52 G_M39137_IG05: ; bbWeight=0.52, epilog, nogc, extend
- pop {r4,r5,r11,pc}
+ pop {r3,r4,r11,pc}
;; size=4 bbWeight=0.52 PerfScore 0.52
-G_M39137_IG06: ; bbWeight=1.11, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M39137_IG06: ; bbWeight=0.48, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r0]
+ mov r3, r0 + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M39137_IG09 + ;; size=6 bbWeight=0.48 PerfScore 1.44 +G_M39137_IG07: ; bbWeight=0.24, gcrefRegs=0009 {r0 r3}, byrefRegs=0000 {}, byref, isz + ldr r2, [r3] + movw r1, 0xd1ff + movt r1, 0xd1ff + cmp r2, r1 + beq SHORT G_M39137_IG09 + ;; size=14 bbWeight=0.24 PerfScore 1.20 +G_M39137_IG08: ; bbWeight=0.12, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref + ; gcrRegs -[r3] + movs r3, 0 + ;; size=2 bbWeight=0.12 PerfScore 0.12 +G_M39137_IG09: ; bbWeight=0.48, gcrefRegs=0009 {r0 r3}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r3] + cmp r3, 0 + beq SHORT G_M39137_IG13 + ;; size=4 bbWeight=0.48 PerfScore 0.96 +G_M39137_IG10: ; bbWeight=1.11, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r3]
movw r3, 0xd1ff movt r3, 0xd1ff cmp r0, r3 @@ -65,50 +87,59 @@ G_M39137_IG06: ; bbWeight=1.11, gcVars=00000000 {}, gcrefRegs=0001 {r0}, cmp r0, r3 beq SHORT G_M39137_IG04 ;; size=24 bbWeight=1.11 PerfScore 8.87
-G_M39137_IG07: ; bbWeight=1.10, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+G_M39137_IG11: ; bbWeight=1.10, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
ldr r3, [r0]
- cmp r3, r5 - bne SHORT G_M39137_IG16
+ movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + bne SHORT G_M39137_IG17
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ;; size=18 bbWeight=1.10 PerfScore 7.73 -G_M39137_IG08: ; bbWeight=1.10, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ ;; size=26 bbWeight=1.10 PerfScore 9.94 +G_M39137_IG12: ; bbWeight=1.10, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
cmp r0, 0
- bne SHORT G_M39137_IG06
+ bne SHORT G_M39137_IG10
;; size=4 bbWeight=1.10 PerfScore 2.21
-G_M39137_IG09: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M39137_IG13: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0] movs r0, 0 ;; size=2 bbWeight=0.48 PerfScore 0.48
-G_M39137_IG10: ; bbWeight=0.48, epilog, nogc, extend - pop {r4,r5,r11,pc}
+G_M39137_IG14: ; bbWeight=0.48, epilog, nogc, extend + pop {r3,r4,r11,pc}
;; size=4 bbWeight=0.48 PerfScore 0.48
-G_M39137_IG11: ; bbWeight=0.48, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M39137_IG15: ; bbWeight=0.48, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4] ldr r0, [r4]
- cmp r0, r5 - bne SHORT G_M39137_IG17
+ movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M39137_IG16
mov r0, r4 ; gcrRegs +[r0]
- ;; size=8 bbWeight=0.48 PerfScore 1.93 -G_M39137_IG12: ; bbWeight=0.48, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r4] - cmp r0, 0 - beq SHORT G_M39137_IG09 - ;; size=4 bbWeight=0.48 PerfScore 0.96 -G_M39137_IG13: ; bbWeight=0.24, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz - ldr r3, [r0] - cmp r3, r5 - beq SHORT G_M39137_IG06 - ;; size=6 bbWeight=0.24 PerfScore 0.72 -G_M39137_IG14: ; bbWeight=0.12, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M39137_IG06 + ;; size=18 bbWeight=0.48 PerfScore 3.37 +G_M39137_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
- b SHORT G_M39137_IG09 - ;; size=2 bbWeight=0.12 PerfScore 0.12 -G_M39137_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r4]
+ mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4] + ldr r3, [r3+0x38] + ldr r3, [r3] + blx r3 // <unknown method> + ; gcrRegs -[r4] + b SHORT G_M39137_IG06 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M39137_IG17: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + ldr r3, [r0] + ldr r3, [r3+0x58] + ldr r3, [r3+0x10] + blx r3 // <unknown method> + b SHORT G_M39137_IG12 + ;; size=10 bbWeight=0 PerfScore 0.00 +G_M39137_IG18: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0] +[r4]
mov r0, r4 ; gcrRegs +[r0] ldr r3, [r4] @@ -118,27 +149,8 @@ G_M39137_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ; gcrRegs -[r0] b SHORT G_M39137_IG03 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M39137_IG16: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r4] +[r0] - ldr r3, [r0] - ldr r3, [r3+0x58] - ldr r3, [r3+0x10] - blx r3 // <unknown method> - b SHORT G_M39137_IG08 - ;; size=10 bbWeight=0 PerfScore 0.00 -G_M39137_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] +[r4] - mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r4] - ldr r3, [r3+0x38] - ldr r3, [r3] - blx r3 // <unknown method> - ; gcrRegs -[r4] - b SHORT G_M39137_IG12 - ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 156, prolog size 8, PerfScore 39.53, instruction count 63, allocated bytes for code 156 (MethodHash=114f671e) for method System.Type:get_IsSerializable():ubyte:this (Tier1)
+; Total bytes of code 188, prolog size 8, PerfScore 45.11, instruction count 73, allocated bytes for code 188 (MethodHash=114f671e) for method System.Type:get_IsSerializable():ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -150,7 +162,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 78 (0x0004e) Actual length = 156 (0x00009c)
+ Function Length : 94 (0x0005e) Actual length = 188 (0x0000bc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -162,7 +174,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 30 pop {r4,r5,r11,lr} ; opsize 32
+ A8 18 pop {r3,r4,r11,lr} ; opsize 32
FF end FF end

+44 (+37.93%) : 472906.dasm - System.Type:op_Equality(System.Type,System.Type):ubyte (Tier1)

@@ -9,23 +9,22 @@ ; 1 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 7, 4.37) ref -> r4 class-hnd single-def <System.Type> -; V01 arg1 [V01,T01] ( 8, 4.43) ref -> r1 class-hnd single-def <System.Type>
+; V00 arg0 [V00,T00] ( 9, 4.92) ref -> r4 class-hnd single-def <System.Type> +; V01 arg1 [V01,T01] ( 10, 4.43) ref -> r1 class-hnd single-def <System.Type>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V04 tmp2 [V04,T04] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V05 tmp3 [V05,T06] ( 2, 0.38) int -> r6 "guarded devirt return temp" -;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Reflection.TypeLoading.Ecma.EcmaGenericMethodParameterType> -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.Reflection.TypeLoading.Ecma.EcmaGenericMethodParameterType> -; V08 tmp6 [V08,T05] ( 2, 0.38) ref -> r0 "guarded devirt return temp" -;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V10 cse0 [V10,T02] ( 4, 1.55) int -> r5 "CSE - moderate"
+; V03 tmp1 [V03,T05] ( 2, 0.38) int -> r0 "guarded devirt return temp" +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Reflection.TypeLoading.Ecma.EcmaGenericMethodParameterType> +;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.Reflection.TypeLoading.Ecma.EcmaGenericMethodParameterType> +; V06 tmp4 [V06,T04] ( 3, 0.38) ref -> r1 "guarded devirt return temp" +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V08 rat0 [V08,T02] ( 5, 3.74) ref -> r0 "replacement local" +; V09 rat1 [V09,T03] ( 5, 2.78) ref -> r0 "replacement local"
; ; Lcl frame size = 4
-G_M64659_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG - push {r3,r4,r5,r6,r11,lr} - add r11, sp, 16
+G_M64659_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=1 PerfScore 3.00 @@ -39,34 +38,114 @@ G_M64659_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50 G_M64659_IG04: ; bbWeight=0.50, epilog, nogc, extend
- pop {r3,r4,r5,r6,r11,pc}
+ pop {r3,r4,r11,pc}
;; size=4 bbWeight=0.50 PerfScore 0.50 G_M64659_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[r1 r4] cmp r4, 0
- beq SHORT G_M64659_IG11
+ beq SHORT G_M64659_IG14
cmp r1, 0
- beq SHORT G_M64659_IG11
+ beq SHORT G_M64659_IG14
;; size=8 bbWeight=0.50 PerfScore 2.00 G_M64659_IG06: ; bbWeight=0.50, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
- ldr r5, [r4] - movw r0, 0xd1ff - movt r0, 0xd1ff - cmp r5, r0 - beq SHORT G_M64659_IG11 - ;; size=14 bbWeight=0.50 PerfScore 2.49 -G_M64659_IG07: ; bbWeight=0.37, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
+ mov r0, r4 + ; gcrRegs +[r0] + cmp r0, 0 + beq SHORT G_M64659_IG09 + ;; size=6 bbWeight=0.50 PerfScore 1.49 +G_M64659_IG07: ; bbWeight=0.25, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz + ldr r3, [r0] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M64659_IG09 + ;; size=14 bbWeight=0.25 PerfScore 1.25 +G_M64659_IG08: ; bbWeight=0.12, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0] + movs r0, 0 + ;; size=2 bbWeight=0.12 PerfScore 0.12 +G_M64659_IG09: ; bbWeight=0.50, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + cmp r0, 0 + bne SHORT G_M64659_IG14 + ;; size=4 bbWeight=0.50 PerfScore 1.00 +G_M64659_IG10: ; bbWeight=0.37, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0] + mov r0, r1 + ; gcrRegs +[r0] + cmp r0, 0 + beq SHORT G_M64659_IG13 + ;; size=6 bbWeight=0.37 PerfScore 1.11 +G_M64659_IG11: ; bbWeight=0.19, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz + ldr r3, [r0] + movw r2, 0xd1ff + movt r2, 0xd1ff + cmp r3, r2 + beq SHORT G_M64659_IG13 + ;; size=14 bbWeight=0.19 PerfScore 0.93 +G_M64659_IG12: ; bbWeight=0.09, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0] + movs r0, 0 + ;; size=2 bbWeight=0.09 PerfScore 0.09 +G_M64659_IG13: ; bbWeight=0.37, gcrefRegs=0013 {r0 r1 r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0] + cmp r0, 0 + beq SHORT G_M64659_IG16 + ;; size=4 bbWeight=0.37 PerfScore 0.74 +G_M64659_IG14: ; bbWeight=0.13, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r0-r1 r4] + movs r0, 0 + ;; size=2 bbWeight=0.13 PerfScore 0.13 +G_M64659_IG15: ; bbWeight=0.13, epilog, nogc, extend + pop {r3,r4,r11,pc} + ;; size=4 bbWeight=0.13 PerfScore 0.13 +G_M64659_IG16: ; bbWeight=0.37, gcVars=00000000 {}, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[r1 r4] + ldr r0, [r4] + movw r3, 0xd1ff + movt r3, 0xd1ff + cmp r0, r3 + bne SHORT G_M64659_IG22 + ;; size=14 bbWeight=0.37 PerfScore 1.85 +G_M64659_IG17: ; bbWeight=0.19, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r1] movw r3, 0xd1ff movt r3, 0xd1ff cmp r0, r3
- beq SHORT G_M64659_IG11 - movw r0, 0xd1ff - movt r0, 0xd1ff - cmp r5, r0 - bne SHORT G_M64659_IG15 - ;; size=26 bbWeight=0.37 PerfScore 3.33 -G_M64659_IG08: ; bbWeight=0.19, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
+ bne SHORT G_M64659_IG24 + ;; size=14 bbWeight=0.19 PerfScore 0.94 +G_M64659_IG18: ; bbWeight=0.19, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz + cmp r4, r1 + beq SHORT G_M64659_IG19 + movs r0, 0 + b SHORT G_M64659_IG20 + ;; size=8 bbWeight=0.19 PerfScore 0.76 +G_M64659_IG19: ; bbWeight=0.19, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r1 r4] + movs r0, 1 + ;; size=2 bbWeight=0.19 PerfScore 0.19 +G_M64659_IG20: ; bbWeight=0.19, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + uxtb r0, r0 + ;; size=2 bbWeight=0.19 PerfScore 0.19 +G_M64659_IG21: ; bbWeight=0.19, epilog, nogc, extend + pop {r3,r4,r11,pc} + ;; size=4 bbWeight=0.19 PerfScore 0.19 +G_M64659_IG22: ; bbWeight=0.18, gcVars=00000000 {}, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs +[r1 r4] + mov r0, r4 + ; gcrRegs +[r0] + ldr r3, [r4] + ldr r3, [r3+0x60] + ldr r3, [r3+0x0C] + ;; size=8 bbWeight=0.18 PerfScore 0.73 +G_M64659_IG23: ; bbWeight=0.18, epilog, nogc, extend + add sp, 4 + pop {r4,r11,lr} + bx r3 // System.Type:Equals(System.Type):ubyte:this + ; gcr arg pop 0 + ;; size=8 bbWeight=0.18 PerfScore 0.54 +G_M64659_IG24: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0]
mov r0, r1 ; gcrRegs +[r0] ldr r3, [r1] @@ -75,45 +154,12 @@ G_M64659_IG08: ; bbWeight=0.19, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {} blx r3 // <unknown method> ; gcrRegs -[r1] ; gcr arg pop 0
- cmp r4, r0 - beq SHORT G_M64659_IG09 - movs r6, 0 - b SHORT G_M64659_IG10 - ;; size=18 bbWeight=0.19 PerfScore 1.70 -G_M64659_IG09: ; bbWeight=0.19, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0 r4] - movs r6, 1 - ;; size=2 bbWeight=0.19 PerfScore 0.19 -G_M64659_IG10: ; bbWeight=0.19, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - b SHORT G_M64659_IG13 - ;; size=2 bbWeight=0.19 PerfScore 0.19 -G_M64659_IG11: ; bbWeight=0.37, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - movs r0, 0 - ;; size=2 bbWeight=0.37 PerfScore 0.37 -G_M64659_IG12: ; bbWeight=0.37, epilog, nogc, extend - pop {r3,r4,r5,r6,r11,pc} - ;; size=4 bbWeight=0.37 PerfScore 0.37 -G_M64659_IG13: ; bbWeight=0.19, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - uxtb r0, r6 - ;; size=2 bbWeight=0.19 PerfScore 0.19 -G_M64659_IG14: ; bbWeight=0.19, epilog, nogc, extend - pop {r3,r4,r5,r6,r11,pc} - ;; size=4 bbWeight=0.19 PerfScore 0.19 -G_M64659_IG15: ; bbWeight=0.18, gcVars=00000000 {}, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs +[r1 r4] - mov r0, r4 - ; gcrRegs +[r0] - ldr r3, [r5+0x60] - ldr r3, [r3+0x0C] - ;; size=6 bbWeight=0.18 PerfScore 0.54 -G_M64659_IG16: ; bbWeight=0.18, epilog, nogc, extend - add sp, 4 - pop {r4,r5,r6,r11,lr} - bx r3 // System.Type:Equals(System.Type):ubyte:this - ; gcr arg pop 0 - ;; size=8 bbWeight=0.18 PerfScore 0.54
+ mov r1, r0 + ; gcrRegs +[r1] + b SHORT G_M64659_IG18 + ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 116, prolog size 10, PerfScore 18.11, instruction count 46, allocated bytes for code 116 (MethodHash=e754036c) for method System.Type:op_Equality(System.Type,System.Type):ubyte (Tier1)
+; Total bytes of code 160, prolog size 10, PerfScore 20.38, instruction count 66, allocated bytes for code 160 (MethodHash=e754036c) for method System.Type:op_Equality(System.Type,System.Type):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -125,7 +171,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 58 (0x0003a) Actual length = 116 (0x000074)
+ 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) @@ -145,11 +191,11 @@ Unwind Info: Epilog Start Index : 3 (0x03) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- A8 78 pop {r3,r4,r5,r6,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 70 pop {r4,r5,r6,r11,lr} ; opsize 32
+ A8 10 pop {r4,r11,lr} ; opsize 32
FF end FF end

librariestestsnotieredcompilation.run.linux.arm.Release.mch

-28 (-51.85%) : 87825.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 (-51.85%) : 133585.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 (-50.00%) : 48297.dasm - Microsoft.CodeAnalysis.Options.Option`1[System._Canon]:Microsoft.CodeAnalysis.Options.IOption.getDefaultValue():System.Object:this (FullOpts)

@@ -2,60 +2,42 @@ ; 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.Option`1[System.__Canon]>
+; V00 this [V00,T00] ( 4, 4 ) ref -> r4 this class-hnd single-def <Microsoft.CodeAnalysis.Options.Option`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> -;* V05 tmp4 [V05 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V02 tmp1 [V02 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M2598_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_M2598_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M2598_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_M2598_IG05 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M2598_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_M2598_IG05 - ;; size=14 bbWeight=0.25 PerfScore 1.75 -G_M2598_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_M2598_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_M2598_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=bcbdf5d9) for method Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
+; Total bytes of code 28, prolog size 4, PerfScore 12.00, instruction count 12, allocated bytes for code 28 (MethodHash=bcbdf5d9) for method Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
; ============================================================ Unwind Info: @@ -67,11 +49,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%) : 92381.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

+26 (+43.33%) : 93602.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

+30 (+88.24%) : 95719.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%) : 35944.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%) : 435.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

+6 (+2.36%) : 13998.dasm - FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1FSharp.Compiler.Syntax.SynBinding

@@ -8,24 +8,24 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 3, 3 ) ref -> r2 class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]>
+; V00 arg0 [V00,T01] ( 3, 3 ) ref -> r2 class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V01 arg1 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]>
; V02 loc0 [V02 ] ( 12, 6.50) struct ( 8) [sp+0x08] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.FSharp.Core.CompilerServices.ListCollector`1[FSharp.Compiler.Syntax.SynBinding]> ;# 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 exact "Inlining Arg" <<unknown class>>
-; V05 tmp2 [V05,T05] ( 3, 2 ) ref -> r0 class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V06 tmp3 [V06,T02] ( 3, 5 ) ref -> r2 class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V08 tmp5 [V08,T04] ( 5, 3.25) ref -> r1 class-hnd exact "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V10 tmp7 [V10,T07] ( 3, 1.50) ref -> r0 -;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V12 tmp9 [V12,T08] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V13 tmp10 [V13,T06] ( 2, 2 ) ref -> [sp+0x04] class-hnd exact spill-single-def "impAppendStmt" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V14 tmp11 [V14,T09] ( 2, 1 ) ref -> r0 class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V15 tmp12 [V15 ] ( 8, 4.50) ref -> [sp+0x08] do-not-enreg[X] addr-exposed "field V02.Result (fldOffset=0x0)" P-DEP -; V16 tmp13 [V16 ] ( 6, 3.50) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V02.LastCons (fldOffset=0x4)" P-DEP -; V17 tmp14 [V17,T03] ( 2, 4 ) ref -> r1 single-def "argument with side effect"
+; V05 tmp2 [V05,T06] ( 3, 2 ) ref -> r0 class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V06 tmp3 [V06,T03] ( 3, 5 ) ref -> r2 class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V07 tmp4 [V07,T05] ( 4, 3 ) ref -> r1 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V09 tmp6 [V09,T08] ( 3, 1.50) ref -> r0 +;* V10 tmp7 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V11 tmp8 [V11,T09] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V12 tmp9 [V12,T07] ( 2, 2 ) ref -> [sp+0x04] class-hnd exact spill-single-def "impAppendStmt" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V13 tmp10 [V13,T10] ( 2, 1 ) ref -> r0 class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V14 tmp11 [V14 ] ( 8, 4.50) ref -> [sp+0x08] do-not-enreg[X] addr-exposed "field V02.Result (fldOffset=0x0)" P-DEP +; V15 tmp12 [V15 ] ( 6, 3.50) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V02.LastCons (fldOffset=0x4)" P-DEP +; V16 tmp13 [V16,T04] ( 2, 4 ) ref -> r1 single-def "argument with side effect" +; V17 rat0 [V17,T00] ( 5, 7.50) ref -> r1 "replacement local"
; ; Lcl frame size = 20 @@ -55,7 +55,7 @@ G_M4830_IG02: ; bbWeight=1, gcrefRegs=0014 {r2 r4}, byrefRegs=0000 {}, by ldr r1, [r1] and r1, r1, 1 cmp r1, 1
- bne SHORT G_M4830_IG13
+ bne SHORT G_M4830_IG15
;; size=40 bbWeight=1 PerfScore 13.00 G_M4830_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz movw r1, 0xd1ff @@ -76,26 +76,35 @@ G_M4830_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref mov r1, r2 ; gcrRegs +[r1] cmp r1, 0
- beq SHORT G_M4830_IG09
+ beq SHORT G_M4830_IG06
;; size=40 bbWeight=1 PerfScore 14.00
-G_M4830_IG04: ; bbWeight=0.25, gcrefRegs=0006 {r1 r2}, byrefRegs=0000 {}, byref, isz
+G_M4830_IG04: ; bbWeight=0.50, gcrefRegs=0006 {r1 r2}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0] ldr r0, [r1] movw r3, 0xd1ff movt r3, 0xd1ff cmp r0, r3
- bne SHORT G_M4830_IG09 - ;; size=14 bbWeight=0.25 PerfScore 1.25 -G_M4830_IG05: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M4830_IG06 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M4830_IG05: ; bbWeight=0.25, gcrefRegs=0004 {r2}, byrefRegs=0000 {}, byref + ; gcrRegs -[r1] + movs r1, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M4830_IG06: ; bbWeight=1, gcrefRegs=0006 {r1 r2}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r1] + cmp r1, 0 + beq SHORT G_M4830_IG11 + ;; size=4 bbWeight=1 PerfScore 2.00 +G_M4830_IG07: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r2] ldr r0, [sp+0x08] ; gcrRegs +[r0] cmp r0, 0
- bne SHORT G_M4830_IG06
+ bne SHORT G_M4830_IG08
mov r0, r1
- b SHORT G_M4830_IG07
+ b SHORT G_M4830_IG09
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M4830_IG06: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+G_M4830_IG08: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
; gcrRegs -[r0] ldr r0, [sp+0x0C] ; gcrRegs +[r0] @@ -110,15 +119,15 @@ G_M4830_IG06: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, by ldr r0, [sp+0x08] ; gcrRegs +[r0] ;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M4830_IG07: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref
+G_M4830_IG09: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref
movs r2, 0
- str r2, [sp+0x08] // [V15 tmp12]
+ str r2, [sp+0x08] // [V14 tmp11]
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M4830_IG08: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz - str r2, [sp+0x0C] // [V16 tmp13] - b SHORT G_M4830_IG12
+G_M4830_IG10: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz + str r2, [sp+0x0C] // [V15 tmp12] + b SHORT G_M4830_IG14
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M4830_IG09: ; bbWeight=0.50, gcrefRegs=0004 {r2}, byrefRegs=0000 {}, byref, isz
+G_M4830_IG11: ; bbWeight=0.50, gcrefRegs=0004 {r2}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0] +[r2] add r0, sp, 8 // [V02 loc0] movw r1, 0xd1ff @@ -128,50 +137,50 @@ G_M4830_IG09: ; bbWeight=0.50, gcrefRegs=0004 {r2}, byrefRegs=0000 {}, by ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r2]
- ldr r1, [sp+0x08] // [V15 tmp12]
+ ldr r1, [sp+0x08] // [V14 tmp11]
; gcrRegs +[r1] cmp r1, 0
- bne SHORT G_M4830_IG10
+ bne SHORT G_M4830_IG12
movw r1, 0xd1ff ; gcrRegs -[r1] movt r1, 0xd1ff ldr r0, [r1] ; gcrRegs +[r0]
- b SHORT G_M4830_IG12
+ b SHORT G_M4830_IG14
;; size=40 bbWeight=0.50 PerfScore 7.00
-G_M4830_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M4830_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0]
- ldr r1, [sp+0x0C] // [V16 tmp13]
+ ldr r1, [sp+0x0C] // [V15 tmp12]
; gcrRegs +[r1]
- str r1, [sp+0x04] // [V13 tmp10] - ; GC ptr vars +{V13}
+ str r1, [sp+0x04] // [V12 tmp9] + ; GC ptr vars +{V12}
movw r0, 0xd1ff movt r0, 0xd1ff ldr r1, [r0]
- ldr r0, [sp+0x04] // [V13 tmp10]
+ ldr r0, [sp+0x04] // [V12 tmp9]
; gcrRegs +[r0] adds r0, 8 ; gcrRegs -[r0] ; byrRegs +[r0] movw r12, 0xd1ff movt r12, 0xd1ff
- ; GC ptr vars -{V13}
+ ; GC ptr vars -{V12}
blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1] ; byrRegs -[r0]
- ldr r0, [sp+0x08] // [V15 tmp12]
+ ldr r0, [sp+0x08] // [V14 tmp11]
; gcrRegs +[r0] movs r1, 0
- str r1, [sp+0x08] // [V15 tmp12]
+ str r1, [sp+0x08] // [V14 tmp11]
;; size=34 bbWeight=0.50 PerfScore 6.50
-G_M4830_IG11: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref - str r1, [sp+0x0C] // [V16 tmp13]
+G_M4830_IG13: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref + str r1, [sp+0x0C] // [V15 tmp12]
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M4830_IG12: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M4830_IG14: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
add sp, 20 pop {r4,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M4830_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M4830_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] +[r4] movw r0, 0xd1ff movt r0, 0xd1ff @@ -182,7 +191,7 @@ G_M4830_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byre b SHORT G_M4830_IG03 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 254, prolog size 16, PerfScore 59.75, instruction count 92, allocated bytes for code 254 (MethodHash=e3d9ed21) for method FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
+; Total bytes of code 260, prolog size 16, PerfScore 63.25, instruction count 95, allocated bytes for code 260 (MethodHash=e3d9ed21) for method FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
; ============================================================ Unwind Info: @@ -194,7 +203,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 127 (0x0007f) Actual length = 254 (0x0000fe)
+ Function Length : 130 (0x00082) Actual length = 260 (0x000104)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+10 (+2.60%) : 36091.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] ...

+36 (+2.64%) : 20912.dasm - Microsoft.CodeAnalysis.CSharp.CSharpParseOptions:.ctor(int,ubyte,int,System.Collections.Immutable.ImmutableArray1[System.String],System.Collections.Generic.IReadOnlyDictionary2[System.String,System.String]):this (FullOpts)

@@ -13,122 +13,122 @@ ; V02 arg2 [V02,T16] ( 3, 3 ) ubyte -> r2 single-def ; V03 arg3 [V03,T17] ( 3, 3 ) int -> r3 single-def ; V04 arg4 [V04 ] ( 1, 1 ) struct ( 4) [sp+0x48] single-def <System.Collections.Immutable.ImmutableArray`1[System.String]>
-; V05 arg5 [V05,T32] ( 4, 2.50) ref -> r6 class-hnd single-def <System.Collections.Generic.IReadOnlyDictionary`2[System.String,System.String]>
+; V05 arg5 [V05,T40] ( 3, 2 ) ref -> r6 class-hnd single-def <System.Collections.Generic.IReadOnlyDictionary`2[System.String,System.String]>
; V06 OutArgs [V06 ] ( 1, 1 ) struct ( 8) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V07 tmp1 [V07,T13] ( 3, 6 ) ref -> r2 class-hnd exact single-def "Single-def Box Helper" <System.Collections.Immutable.ImmutableArray`1[System.String]> ;* V08 tmp2 [V08 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-;* V09 tmp3 [V09,T72] ( 0, 0 ) ref -> zero-ref single-def -;* V10 tmp4 [V10,T61] ( 0, 0 ) ref -> zero-ref -; V11 tmp5 [V11,T40] ( 3, 2 ) ref -> r1
+;* V09 tmp3 [V09,T73] ( 0, 0 ) ref -> zero-ref single-def +;* V10 tmp4 [V10,T62] ( 0, 0 ) ref -> zero-ref +; V11 tmp5 [V11,T41] ( 3, 2 ) ref -> r1
;* V12 tmp6 [V12 ] ( 0, 0 ) ref -> zero-ref single-def
-; V13 tmp7 [V13,T22] ( 4, 3.50) ref -> r1
+; V13 tmp7 [V13,T24] ( 4, 3.50) ref -> r1
; V14 tmp8 [V14,T21] ( 2, 4 ) int -> r0 "Inlining Arg" ;* V15 tmp9 [V15 ] ( 0, 0 ) struct ( 4) zero-ref single-def "Inline return value spill temp" <System.Collections.Immutable.ImmutableArray`1[System.String]> ; V16 tmp10 [V16,T20] ( 2, 4 ) ref -> r2 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1[System.String]> ;* V17 tmp11 [V17 ] ( 0, 0 ) struct ( 4) zero-ref "Inline stloc first use temp" <System.Collections.Immutable.ImmutableArray`1[System.String]>
-; V18 tmp12 [V18,T48] ( 3, 1.50) ref -> registers class-hnd "Inline return value spill temp" <<unknown class>> -;* V19 tmp13 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -; V20 tmp14 [V20,T23] ( 6, 3 ) ref -> r6 class-hnd exact "Inline stloc first use temp" <<unknown class>> -; V21 tmp15 [V21,T33] ( 4, 2 ) ref -> r6 class-hnd "Inline return value spill temp" <<unknown class>> -; V22 tmp16 [V22,T25] ( 3, 3 ) ref -> r1 class-hnd "Inlining Arg" <<unknown class>> -; V23 tmp17 [V23,T14] ( 5, 5 ) ref -> r2 class-hnd "Inlining Arg" <<unknown class>> -; V24 tmp18 [V24,T62] ( 2, 1 ) ref -> r8 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V25 tmp19 [V25,T00] ( 12, 12 ) ref -> r9 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V26 tmp20 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <<unknown class>> -;* V27 tmp21 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V28 tmp22 [V28,T07] ( 6, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V18 tmp12 [V18,T49] ( 3, 1.50) ref -> registers class-hnd "Inline return value spill temp" <<unknown class>> +; V19 tmp13 [V19,T23] ( 7, 3.50) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V20 tmp14 [V20,T33] ( 4, 2 ) ref -> r5 class-hnd "Inline return value spill temp" <<unknown class>> +; V21 tmp15 [V21,T26] ( 3, 3 ) ref -> r1 class-hnd "Inlining Arg" <<unknown class>> +; V22 tmp16 [V22,T14] ( 5, 5 ) ref -> r2 class-hnd "Inlining Arg" <<unknown class>> +; V23 tmp17 [V23,T63] ( 2, 1 ) ref -> r7 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V24 tmp18 [V24,T00] ( 12, 12 ) ref -> r9 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V25 tmp19 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <<unknown class>> +;* V26 tmp20 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V27 tmp21 [V27,T07] ( 6, 6 ) ref -> r8 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V28 tmp22 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]>
;* V29 tmp23 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]>
-;* V30 tmp24 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -; V31 tmp25 [V31,T49] ( 3, 1.50) ref -> r8 class-hnd "Inline return value spill temp" <<unknown class>> -; V32 tmp26 [V32,T41] ( 2, 2 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -; V33 tmp27 [V33,T18] ( 4, 4 ) ref -> r9 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]> -; V34 tmp28 [V34,T44] ( 2, 2 ) int -> r6 "Inlining Arg" -;* V35 tmp29 [V35 ] ( 0, 0 ) ref -> zero-ref single-def -; V36 tmp30 [V36,T63] ( 2, 1 ) ref -> r1 -;* V37 tmp31 [V37 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V38 tmp32 [V38 ] ( 0, 0 ) ref -> zero-ref single-def -; V39 tmp33 [V39,T34] ( 4, 2 ) ref -> r1 -;* V40 tmp34 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V41 tmp35 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <<unknown class>> -;* V42 tmp36 [V42 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> -; V43 tmp37 [V43 ] ( 3, 1.50) struct ( 8) [sp+0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationResult[System.String,System.String]> -;* V44 tmp38 [V44 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> -; V45 tmp39 [V45,T08] ( 6, 6 ) ref -> r6 class-hnd exact single-def "impAppendStmt" <<unknown class>> -;* V46 tmp40 [V46 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V47 tmp41 [V47,T29] ( 5, 2.50) ref -> r6 class-hnd "Inline return value spill temp" <<unknown class>> -; V48 tmp42 [V48,T45] ( 2, 2 ) int -> r10 "Inlining Arg" -; V49 tmp43 [V49,T04] ( 6, 6 ) ref -> r8 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V50 tmp44 [V50,T50] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> -; V51 tmp45 [V51,T26] ( 3, 3 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -;* V52 tmp46 [V52,T74] ( 0, 0 ) ref -> zero-ref single-def -; V53 tmp47 [V53,T64] ( 2, 1 ) ref -> r1 single-def -;* V54 tmp48 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -; V55 tmp49 [V55,T51] ( 3, 1.50) ref -> r6 class-hnd "Inline return value spill temp" <<unknown class>> -; V56 tmp50 [V56,T30] ( 5, 2.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> -; V57 tmp51 [V57,T27] ( 3, 3 ) ref -> r1 class-hnd "Inlining Arg" <<unknown class>> -; V58 tmp52 [V58,T15] ( 5, 5 ) ref -> r2 class-hnd "Inlining Arg" <<unknown class>> -; V59 tmp53 [V59,T09] ( 6, 6 ) ref -> r8 class-hnd exact single-def "Inlining Arg" <<unknown class>> -; V60 tmp54 [V60,T65] ( 2, 1 ) ref -> r9 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V61 tmp55 [V61,T01] ( 12, 12 ) ref -> r10 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V62 tmp56 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <<unknown class>> -;* V63 tmp57 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V64 tmp58 [V64,T10] ( 6, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V30 tmp24 [V30,T50] ( 3, 1.50) ref -> r7 class-hnd "Inline return value spill temp" <<unknown class>> +; V31 tmp25 [V31,T42] ( 2, 2 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> +; V32 tmp26 [V32,T18] ( 4, 4 ) ref -> r9 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]> +; V33 tmp27 [V33,T45] ( 2, 2 ) int -> r5 "Inlining Arg" +;* V34 tmp28 [V34 ] ( 0, 0 ) ref -> zero-ref single-def +; V35 tmp29 [V35,T64] ( 2, 1 ) ref -> r1 +;* V36 tmp30 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V37 tmp31 [V37 ] ( 0, 0 ) ref -> zero-ref single-def +; V38 tmp32 [V38,T34] ( 4, 2 ) ref -> r1 +;* V39 tmp33 [V39 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V40 tmp34 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <<unknown class>> +;* V41 tmp35 [V41 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> +; V42 tmp36 [V42 ] ( 3, 1.50) struct ( 8) [sp+0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationResult[System.String,System.String]> +;* V43 tmp37 [V43 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> +; V44 tmp38 [V44,T08] ( 6, 6 ) ref -> r5 class-hnd exact single-def "impAppendStmt" <<unknown class>> +;* V45 tmp39 [V45 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V46 tmp40 [V46,T30] ( 5, 2.50) ref -> r5 class-hnd "Inline return value spill temp" <<unknown class>> +; V47 tmp41 [V47,T46] ( 2, 2 ) int -> r10 "Inlining Arg" +; V48 tmp42 [V48,T04] ( 6, 6 ) ref -> r7 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V49 tmp43 [V49,T51] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> +; V50 tmp44 [V50,T27] ( 3, 3 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> +;* V51 tmp45 [V51,T75] ( 0, 0 ) ref -> zero-ref single-def +; V52 tmp46 [V52,T65] ( 2, 1 ) ref -> r1 single-def +;* V53 tmp47 [V53 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +; V54 tmp48 [V54,T52] ( 3, 1.50) ref -> r5 class-hnd "Inline return value spill temp" <<unknown class>> +; V55 tmp49 [V55,T31] ( 5, 2.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> +; V56 tmp50 [V56,T28] ( 3, 3 ) ref -> r1 class-hnd "Inlining Arg" <<unknown class>> +; V57 tmp51 [V57,T15] ( 5, 5 ) ref -> r2 class-hnd "Inlining Arg" <<unknown class>> +; V58 tmp52 [V58,T09] ( 6, 6 ) ref -> r5 class-hnd exact single-def "Inlining Arg" <<unknown class>> +; V59 tmp53 [V59,T66] ( 2, 1 ) ref -> r8 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V60 tmp54 [V60,T01] ( 12, 12 ) ref -> r10 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V61 tmp55 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <<unknown class>> +;* V62 tmp56 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V63 tmp57 [V63,T10] ( 6, 6 ) ref -> r9 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V64 tmp58 [V64 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]>
;* V65 tmp59 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]>
-;* V66 tmp60 [V66 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -; V67 tmp61 [V67,T52] ( 3, 1.50) ref -> r9 class-hnd "Inline return value spill temp" <<unknown class>> -; V68 tmp62 [V68,T42] ( 2, 2 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -; V69 tmp63 [V69,T19] ( 4, 4 ) ref -> r10 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]> -; V70 tmp64 [V70,T46] ( 2, 2 ) int -> r8 "Inlining Arg" -;* V71 tmp65 [V71 ] ( 0, 0 ) ref -> zero-ref single-def -; V72 tmp66 [V72,T66] ( 2, 1 ) ref -> r1 -;* V73 tmp67 [V73 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V74 tmp68 [V74 ] ( 0, 0 ) ref -> zero-ref single-def -; V75 tmp69 [V75,T35] ( 4, 2 ) ref -> r1 -;* V76 tmp70 [V76 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V77 tmp71 [V77 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <<unknown class>> -;* V78 tmp72 [V78 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> -; V79 tmp73 [V79 ] ( 3, 1.50) struct ( 8) [sp+0x10] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationResult[System.String,System.String]> -;* V80 tmp74 [V80 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> -; V81 tmp75 [V81,T11] ( 6, 6 ) ref -> r8 class-hnd exact single-def "impAppendStmt" <<unknown class>> -;* V82 tmp76 [V82 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V83 tmp77 [V83,T31] ( 5, 2.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> -; V84 tmp78 [V84,T47] ( 2, 2 ) int -> [sp+0x0C] spill-single-def "Inlining Arg" -; V85 tmp79 [V85,T05] ( 6, 6 ) ref -> r9 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V86 tmp80 [V86,T53] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> -; V87 tmp81 [V87,T28] ( 3, 3 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -;* V88 tmp82 [V88,T75] ( 0, 0 ) ref -> zero-ref single-def -; V89 tmp83 [V89,T67] ( 2, 1 ) ref -> r1 single-def -;* V90 tmp84 [V90 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -; V91 tmp85 [V91,T54] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> -; V92 tmp86 [V92,T73] ( 1, 1 ) ref -> [sp+0x48] do-not-enreg[] single-def "field V04.array (fldOffset=0x0)" P-DEP -;* V93 tmp87 [V93 ] ( 0, 0 ) ref -> zero-ref "field V08.array (fldOffset=0x0)" P-INDEP -; V94 tmp88 [V94,T43] ( 2, 2 ) ref -> r1 single-def "field V15.array (fldOffset=0x0)" P-INDEP -;* V95 tmp89 [V95 ] ( 0, 0 ) ref -> zero-ref "field V17.array (fldOffset=0x0)" P-INDEP -;* V96 tmp90 [V96 ] ( 0, 0 ) ref -> zero-ref "field V42._root (fldOffset=0x0)" P-INDEP -;* V97 tmp91 [V97 ] ( 0, 0 ) ref -> zero-ref "field V42._comparers (fldOffset=0x4)" P-INDEP -; V98 tmp92 [V98 ] ( 2, 1 ) ref -> [sp+0x18] do-not-enreg[X] addr-exposed "field V43._root (fldOffset=0x0)" P-DEP -; V99 tmp93 [V99 ] ( 2, 1 ) int -> [sp+0x1C] do-not-enreg[X] addr-exposed "field V43._countAdjustment (fldOffset=0x4)" P-DEP -; V100 tmp94 [V100,T68] ( 2, 1 ) ref -> r3 single-def "field V44._root (fldOffset=0x0)" P-INDEP -; V101 tmp95 [V101,T69] ( 2, 1 ) ref -> r0 single-def "field V44._comparers (fldOffset=0x4)" P-INDEP -;* V102 tmp96 [V102 ] ( 0, 0 ) ref -> zero-ref "field V78._root (fldOffset=0x0)" P-INDEP -;* V103 tmp97 [V103 ] ( 0, 0 ) ref -> zero-ref "field V78._comparers (fldOffset=0x4)" P-INDEP -; V104 tmp98 [V104 ] ( 2, 1 ) ref -> [sp+0x10] do-not-enreg[X] addr-exposed "field V79._root (fldOffset=0x0)" P-DEP -; V105 tmp99 [V105 ] ( 2, 1 ) int -> [sp+0x14] do-not-enreg[X] addr-exposed "field V79._countAdjustment (fldOffset=0x4)" P-DEP -; V106 tmp100 [V106,T70] ( 2, 1 ) ref -> r3 single-def "field V80._root (fldOffset=0x0)" P-INDEP -; V107 tmp101 [V107,T71] ( 2, 1 ) ref -> r0 single-def "field V80._comparers (fldOffset=0x4)" P-INDEP -; V108 cse0 [V108,T55] ( 3, 1.50) ref -> r3 "CSE - conservative" -; V109 cse1 [V109,T56] ( 3, 1.50) ref -> r3 "CSE - conservative" -; V110 cse2 [V110,T24] ( 6, 3 ) ref -> r2 multi-def "CSE - moderate" -; V111 cse3 [V111,T57] ( 3, 1.50) ref -> r1 "CSE - conservative" -; V112 cse4 [V112,T58] ( 3, 1.50) ref -> r1 "CSE - conservative" -; V113 cse5 [V113,T59] ( 3, 1.50) ref -> r1 "CSE - conservative" -; V114 cse6 [V114,T60] ( 3, 1.50) ref -> r1 "CSE - conservative" -; V115 cse7 [V115,T36] ( 4, 2 ) ref -> r0 "CSE - conservative" -; V116 cse8 [V116,T38] ( 4, 2 ) int -> r8 "CSE - conservative" -; V117 cse9 [V117,T37] ( 4, 2 ) ref -> r0 "CSE - conservative" -; V118 cse10 [V118,T39] ( 4, 2 ) int -> r9 "CSE - conservative" -; V119 cse11 [V119,T06] ( 12, 6 ) int -> r7 multi-def "CSE - aggressive" -; V120 cse12 [V120,T03] ( 14, 7 ) int -> r5 "CSE - moderate"
+; V66 tmp60 [V66,T53] ( 3, 1.50) ref -> r8 class-hnd "Inline return value spill temp" <<unknown class>> +; V67 tmp61 [V67,T43] ( 2, 2 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> +; V68 tmp62 [V68,T19] ( 4, 4 ) ref -> r10 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]> +; V69 tmp63 [V69,T47] ( 2, 2 ) int -> r5 "Inlining Arg" +;* V70 tmp64 [V70 ] ( 0, 0 ) ref -> zero-ref single-def +; V71 tmp65 [V71,T67] ( 2, 1 ) ref -> r1 +;* V72 tmp66 [V72 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V73 tmp67 [V73 ] ( 0, 0 ) ref -> zero-ref single-def +; V74 tmp68 [V74,T35] ( 4, 2 ) ref -> r1 +;* V75 tmp69 [V75 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V76 tmp70 [V76 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <<unknown class>> +;* V77 tmp71 [V77 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> +; V78 tmp72 [V78 ] ( 3, 1.50) struct ( 8) [sp+0x10] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationResult[System.String,System.String]> +;* V79 tmp73 [V79 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> +; V80 tmp74 [V80,T11] ( 6, 6 ) ref -> r5 class-hnd exact single-def "impAppendStmt" <<unknown class>> +;* V81 tmp75 [V81 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V82 tmp76 [V82,T32] ( 5, 2.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> +; V83 tmp77 [V83,T48] ( 2, 2 ) int -> [sp+0x0C] spill-single-def "Inlining Arg" +; V84 tmp78 [V84,T05] ( 6, 6 ) ref -> r8 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V85 tmp79 [V85,T54] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> +; V86 tmp80 [V86,T29] ( 3, 3 ) ref -> r1 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> +;* V87 tmp81 [V87,T76] ( 0, 0 ) ref -> zero-ref single-def +; V88 tmp82 [V88,T68] ( 2, 1 ) ref -> r1 single-def +;* V89 tmp83 [V89 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +; V90 tmp84 [V90,T55] ( 3, 1.50) ref -> r0 class-hnd "Inline return value spill temp" <<unknown class>> +; V91 tmp85 [V91,T74] ( 1, 1 ) ref -> [sp+0x48] do-not-enreg[] single-def "field V04.array (fldOffset=0x0)" P-DEP +;* V92 tmp86 [V92 ] ( 0, 0 ) ref -> zero-ref "field V08.array (fldOffset=0x0)" P-INDEP +; V93 tmp87 [V93,T44] ( 2, 2 ) ref -> r1 single-def "field V15.array (fldOffset=0x0)" P-INDEP +;* V94 tmp88 [V94 ] ( 0, 0 ) ref -> zero-ref "field V17.array (fldOffset=0x0)" P-INDEP +;* V95 tmp89 [V95 ] ( 0, 0 ) ref -> zero-ref "field V41._root (fldOffset=0x0)" P-INDEP +;* V96 tmp90 [V96 ] ( 0, 0 ) ref -> zero-ref "field V41._comparers (fldOffset=0x4)" P-INDEP +; V97 tmp91 [V97 ] ( 2, 1 ) ref -> [sp+0x18] do-not-enreg[X] addr-exposed "field V42._root (fldOffset=0x0)" P-DEP +; V98 tmp92 [V98 ] ( 2, 1 ) int -> [sp+0x1C] do-not-enreg[X] addr-exposed "field V42._countAdjustment (fldOffset=0x4)" P-DEP +; V99 tmp93 [V99,T69] ( 2, 1 ) ref -> r3 single-def "field V43._root (fldOffset=0x0)" P-INDEP +; V100 tmp94 [V100,T70] ( 2, 1 ) ref -> r0 single-def "field V43._comparers (fldOffset=0x4)" P-INDEP +;* V101 tmp95 [V101 ] ( 0, 0 ) ref -> zero-ref "field V77._root (fldOffset=0x0)" P-INDEP +;* V102 tmp96 [V102 ] ( 0, 0 ) ref -> zero-ref "field V77._comparers (fldOffset=0x4)" P-INDEP +; V103 tmp97 [V103 ] ( 2, 1 ) ref -> [sp+0x10] do-not-enreg[X] addr-exposed "field V78._root (fldOffset=0x0)" P-DEP +; V104 tmp98 [V104 ] ( 2, 1 ) int -> [sp+0x14] do-not-enreg[X] addr-exposed "field V78._countAdjustment (fldOffset=0x4)" P-DEP +; V105 tmp99 [V105,T71] ( 2, 1 ) ref -> r3 single-def "field V79._root (fldOffset=0x0)" P-INDEP +; V106 tmp100 [V106,T72] ( 2, 1 ) ref -> r0 single-def "field V79._comparers (fldOffset=0x4)" P-INDEP +; V107 cse0 [V107,T56] ( 3, 1.50) ref -> r3 "CSE - conservative" +; V108 cse1 [V108,T57] ( 3, 1.50) ref -> r3 "CSE - conservative" +; V109 cse2 [V109,T25] ( 6, 3 ) ref -> r2 multi-def "CSE - moderate" +; V110 cse3 [V110,T58] ( 3, 1.50) ref -> r1 "CSE - conservative" +; V111 cse4 [V111,T59] ( 3, 1.50) ref -> r1 "CSE - conservative" +; V112 cse5 [V112,T60] ( 3, 1.50) ref -> r1 "CSE - conservative" +; V113 cse6 [V113,T61] ( 3, 1.50) ref -> r1 "CSE - conservative" +; V114 cse7 [V114,T36] ( 4, 2 ) ref -> r0 "CSE - conservative" +; V115 cse8 [V115,T38] ( 4, 2 ) int -> r7 "CSE - conservative" +; V116 cse9 [V116,T37] ( 4, 2 ) ref -> r0 "CSE - conservative" +; V117 cse10 [V117,T39] ( 4, 2 ) int -> r8 "CSE - conservative" +; V118 cse11 [V118,T06] ( 12, 6 ) int -> registers multi-def "CSE - aggressive" +; V119 cse12 [V119,T03] ( 16, 8 ) int -> registers multi-def "CSE - aggressive" +; V120 rat0 [V120,T22] ( 5, 3.75) ref -> r5 "replacement local"
; ; Lcl frame size = 36 @@ -137,10 +137,10 @@ G_M31688_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub sp, 36 add r11, sp, 64 movs r4, 0
- str r4, [sp+0x18] // [V43 tmp37] - str r4, [sp+0x1C] // [V43 tmp37+0x04] - str r4, [sp+0x10] // [V79 tmp73] - str r4, [sp+0x14] // [V79 tmp73+0x04]
+ str r4, [sp+0x18] // [V42 tmp36] + str r4, [sp+0x1C] // [V42 tmp36+0x04] + str r4, [sp+0x10] // [V78 tmp72] + str r4, [sp+0x14] // [V78 tmp72+0x04]
mov r4, r0 ; gcrRegs +[r4] mov r5, r1 @@ -207,37 +207,53 @@ G_M31688_IG02: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b G_M31688_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r6] movs r1, 0
- b SHORT G_M31688_IG29
+ b SHORT G_M31688_IG32
...

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm.checked.mch 127 81 45 1 -1,398 +1,320
benchmarks.run_pgo.linux.arm.checked.mch 2,510 2,111 346 53 -32,866 +7,288
benchmarks.run_tiered.linux.arm.checked.mch 74 58 15 1 -1,014 +422
coreclr_tests.run.linux.arm.checked.mch 648 263 289 96 -4,012 +148,338
libraries.crossgen2.linux.arm.checked.mch 684 678 5 1 -16,206 +12
libraries.pmi.linux.arm.checked.mch 548 482 43 23 -11,166 +1,938
libraries_tests.run.linux.arm.Release.mch 5,401 1,621 3,476 304 -25,542 +71,786
librariestestsnotieredcompilation.run.linux.arm.Release.mch 775 611 147 17 -14,936 +8,974
realworld.run.linux.arm.checked.mch 139 124 10 5 -2,478 +160
10,906 6,029 4,376 501 -109,618 +240,238

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 41,772 5,344 36,428 1,203 (2.55%) 5,395 (11.44%)
benchmarks.run_pgo.linux.arm.checked.mch 141,946 56,729 85,217 3,201 (1.97%) 20,768 (12.76%)
benchmarks.run_tiered.linux.arm.checked.mch 75,781 43,607 32,174 1,086 (1.34%) 5,404 (6.66%)
coreclr_tests.run.linux.arm.checked.mch 462,307 259,195 203,112 7,171 (1.50%) 16,856 (3.52%)
libraries.crossgen2.linux.arm.checked.mch 188,186 14 188,172 0 (0.00%) 5 (0.00%)
libraries.pmi.linux.arm.checked.mch 245,328 6 245,322 7,786 (2.78%) 34,818 (12.43%)
libraries_tests.run.linux.arm.Release.mch 672,736 442,672 230,064 16,195 (2.23%) 53,689 (7.39%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 240,780 21,604 219,176 33,224 (10.79%) 67,077 (21.79%)
realworld.run.linux.arm.checked.mch 31,973 157 31,816 1,408 (3.72%) 5,842 (15.45%)
2,100,809 829,328 1,271,481 71,274 (3.08%) 209,854 (9.08%)

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: 9047232 (overridden on cmd)
Total bytes of diff: 9047154 (overridden on cmd)
Total bytes of delta: -78 (-0.00 % of base)
    diff is a regression.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         202 : 8113.dasm (8.84 % of base)
         110 : 33424.dasm (8.90 % of base)
         110 : 23939.dasm (40.44 % of base)
          56 : 45917.dasm (7.69 % of base)
          54 : 45308.dasm (8.21 % of base)
          46 : 44707.dasm (9.06 % of base)
          46 : 40486.dasm (13.53 % of base)
          44 : 42566.dasm (10.14 % of base)
          44 : 8903.dasm (13.84 % of base)
          42 : 27818.dasm (12.50 % of base)
          42 : 38070.dasm (15.56 % of base)
          42 : 13067.dasm (14.48 % of base)
          42 : 39957.dasm (13.38 % of base)
          30 : 41613.dasm (6.38 % of base)
          18 : 37356.dasm (1.10 % of base)
          18 : 9880.dasm (1.10 % of base)
          18 : 32415.dasm (1.10 % of base)
          18 : 33988.dasm (1.10 % of base)
          18 : 35792.dasm (1.10 % of base)
          18 : 40732.dasm (1.10 % of base)

Top file improvements (bytes):
         -56 : 7579.dasm (-9.86 % of base)
         -46 : 3065.dasm (-8.24 % of base)
         -36 : 3263.dasm (-10.59 % of base)
         -32 : 22021.dasm (-36.36 % of base)
         -32 : 437.dasm (-41.03 % of base)
         -30 : 776.dasm (-20.55 % of base)
         -28 : 15183.dasm (-40.00 % of base)
         -28 : 8646.dasm (-8.81 % of base)
         -28 : 27688.dasm (-13.33 % of base)
         -28 : 24289.dasm (-5.36 % of base)
         -28 : 4416.dasm (-51.85 % of base)
         -28 : 8616.dasm (-4.02 % of base)
         -26 : 15899.dasm (-8.39 % of base)
         -26 : 25509.dasm (-12.26 % of base)
         -26 : 28110.dasm (-13.54 % of base)
         -24 : 26699.dasm (-6.63 % of base)
         -24 : 979.dasm (-31.58 % of base)
         -24 : 10319.dasm (-26.67 % of base)
         -24 : 27973.dasm (-13.64 % of base)
         -22 : 5379.dasm (-47.83 % of base)

61 total files with Code Size differences (35 improved, 26 regressed), 1 unchanged.

Top method regressions (bytes):
         202 (8.84 % of base) : 8113.dasm - System.Collections.Perf_SubstringFrozenDictionary:Setup():this (FullOpts)
         110 (8.90 % of base) : 33424.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSimpleStructWithProperties:Read2_SimpleStructWithProperties(ubyte):MicroBenchmarks.Serializers.SimpleStructWithProperties:this (FullOpts)
         110 (40.44 % of base) : 23939.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[Interop.StructureToPtr+NonBlittableStruct](int):Interop.StructureToPtr+NonBlittableStruct (FullOpts)
          56 (7.69 % of base) : 45917.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (FullOpts)
          54 (8.21 % of base) : 45308.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (FullOpts)
          46 (13.53 % of base) : 40486.dasm - System.Tests.Perf_Array:SetupArrayAssign3D():this (FullOpts)
          46 (9.06 % of base) : 44707.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (FullOpts)
          44 (13.84 % of base) : 8903.dasm - System.Tests.Perf_Array:ArrayCreate3D():System.Array:this (FullOpts)
          44 (10.14 % of base) : 42566.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (FullOpts)
          42 (15.56 % of base) : 38070.dasm - System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)
          42 (13.38 % of base) : 39957.dasm - System.Tests.Perf_Array:ArrayCreate2D():System.Array:this (FullOpts)
          42 (14.48 % of base) : 13067.dasm - System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)
          42 (12.50 % of base) : 27818.dasm - System.Tests.Perf_Array:SetupArrayAssign2D():this (FullOpts)
          30 (6.38 % of base) : 41613.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (FullOpts)
          18 (1.10 % of base) : 37356.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 9880.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 32415.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 33988.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 35792.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 40732.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)

Top method improvements (bytes):
         -56 (-9.86 % of base) : 7579.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) : 3065.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
         -36 (-10.59 % of base) : 3263.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -32 (-36.36 % of base) : 22021.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 437.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -30 (-20.55 % of base) : 776.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -28 (-5.36 % of base) : 24289.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) : 8616.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -28 (-13.33 % of base) : 27688.dasm - System.Collections.Generic.List`1[System.__Canon]:System.Collections.IList.Add(System.Object):int:this (FullOpts)
         -28 (-51.85 % of base) : 4416.dasm - System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -28 (-8.81 % of base) : 8646.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-40.00 % of base) : 15183.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -26 (-13.54 % of base) : 28110.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-12.26 % of base) : 25509.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-8.39 % of base) : 15899.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) : 979.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -24 (-13.64 % of base) : 27973.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -24 (-26.67 % of base) : 10319.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -24 (-6.63 % of base) : 26699.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -22 (-31.43 % of base) : 5485.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)

Top method regressions (percentages):
         110 (40.44 % of base) : 23939.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[Interop.StructureToPtr+NonBlittableStruct](int):Interop.StructureToPtr+NonBlittableStruct (FullOpts)
          42 (15.56 % of base) : 38070.dasm - System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)
          42 (14.48 % of base) : 13067.dasm - System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)
          44 (13.84 % of base) : 8903.dasm - System.Tests.Perf_Array:ArrayCreate3D():System.Array:this (FullOpts)
          46 (13.53 % of base) : 40486.dasm - System.Tests.Perf_Array:SetupArrayAssign3D():this (FullOpts)
          42 (13.38 % of base) : 39957.dasm - System.Tests.Perf_Array:ArrayCreate2D():System.Array:this (FullOpts)
          42 (12.50 % of base) : 27818.dasm - System.Tests.Perf_Array:SetupArrayAssign2D():this (FullOpts)
          10 (10.64 % of base) : 44703.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
          10 (10.64 % of base) : 40912.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          10 (10.42 % of base) : 42593.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (FullOpts)
          10 (10.42 % of base) : 13794.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          10 (10.42 % of base) : 16727.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
          10 (10.42 % of base) : 19148.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
          44 (10.14 % of base) : 42566.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (FullOpts)
          46 (9.06 % of base) : 44707.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (FullOpts)
         110 (8.90 % of base) : 33424.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSimpleStructWithProperties:Read2_SimpleStructWithProperties(ubyte):MicroBenchmarks.Serializers.SimpleStructWithProperties:this (FullOpts)
         202 (8.84 % of base) : 8113.dasm - System.Collections.Perf_SubstringFrozenDictionary:Setup():this (FullOpts)
          54 (8.21 % of base) : 45308.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (FullOpts)
          56 (7.69 % of base) : 45917.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (FullOpts)
          30 (6.38 % of base) : 41613.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (FullOpts)

Top method improvements (percentages):
         -28 (-51.85 % of base) : 4416.dasm - System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -22 (-47.83 % of base) : 5379.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 437.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-40.00 % of base) : 15183.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -32 (-36.36 % of base) : 22021.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -24 (-31.58 % of base) : 979.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -22 (-31.43 % of base) : 5485.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -24 (-26.67 % of base) : 10319.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -18 (-24.32 % of base) : 23505.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -18 (-23.68 % of base) : 2031.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -30 (-20.55 % of base) : 776.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -16 (-18.18 % of base) : 11517.dasm - MicroBenchmarks.Serializers.Json_FromStream`1[System.__Canon]:DataContractJsonSerializer_():System.__Canon:this (FullOpts)
         -16 (-18.18 % of base) : 14486.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:DataContractSerializer_():System.__Canon:this (FullOpts)
         -16 (-18.18 % of base) : 17555.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:XmlSerializer_():System.__Canon:this (FullOpts)
         -20 (-17.24 % of base) : 9711.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -14 (-16.67 % of base) : 24499.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -18 (-16.67 % of base) : 14677.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) : 40116.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (FullOpts)
         -16 (-14.81 % of base) : 26035.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -14 (-14.58 % of base) : 9636.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: 44462940 (overridden on cmd)
Total bytes of diff: 44437362 (overridden on cmd)
Total bytes of delta: -25578 (-0.06 % of base)
    diff is a regression.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         110 : 120356.dasm (9.03 % of base)
          64 : 67496.dasm (6.34 % of base)
          62 : 58952.dasm (6.08 % of base)
          60 : 117889.dasm (5.80 % of base)
          52 : 162002.dasm (5.02 % of base)
          52 : 60239.dasm (4.97 % of base)
          52 : 73843.dasm (5.09 % of base)
          50 : 130046.dasm (4.87 % of base)
          50 : 109174.dasm (3.00 % of base)
          50 : 57362.dasm (4.82 % of base)
          48 : 158518.dasm (7.08 % of base)
          46 : 124333.dasm (4.43 % of base)
          46 : 152334.dasm (4.46 % of base)
          46 : 15874.dasm (4.45 % of base)
          46 : 160607.dasm (6.15 % of base)
          46 : 24124.dasm (4.48 % of base)
          46 : 72641.dasm (4.24 % of base)
          46 : 55410.dasm (4.46 % of base)
          46 : 73228.dasm (4.34 % of base)
          46 : 87810.dasm (4.50 % of base)

Top file improvements (bytes):
        -162 : 100156.dasm (-4.75 % of base)
         -64 : 110895.dasm (-6.84 % of base)
         -46 : 161549.dasm (-6.59 % of base)
         -46 : 44634.dasm (-6.59 % of base)
         -46 : 60852.dasm (-6.59 % of base)
         -46 : 68144.dasm (-6.59 % of base)
         -46 : 86846.dasm (-6.59 % of base)
         -46 : 72617.dasm (-6.59 % of base)
         -46 : 55378.dasm (-6.59 % of base)
         -46 : 59828.dasm (-6.59 % of base)
         -44 : 85076.dasm (-9.09 % of base)
         -44 : 87039.dasm (-9.09 % of base)
         -44 : 100937.dasm (-1.47 % of base)
         -44 : 113171.dasm (-9.09 % of base)
         -42 : 72947.dasm (-3.75 % of base)
         -40 : 4476.dasm (-0.92 % of base)
         -38 : 152817.dasm (-5.51 % of base)
         -38 : 156252.dasm (-5.51 % of base)
         -38 : 159768.dasm (-5.51 % of base)
         -38 : 60200.dasm (-5.51 % of base)

83 total files with Code Size differences (43 improved, 40 regressed), 20 unchanged.

Top method regressions (bytes):
         110 (9.03 % of base) : 120356.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSimpleStructWithProperties:Read2_SimpleStructWithProperties(ubyte):MicroBenchmarks.Serializers.SimpleStructWithProperties:this (Tier0-FullOpts)
          64 (6.34 % of base) : 67496.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          62 (6.08 % of base) : 58952.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          60 (5.80 % of base) : 117889.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          52 (5.02 % of base) : 162002.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          52 (4.97 % of base) : 60239.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          52 (5.09 % of base) : 73843.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          50 (3.00 % of base) : 109174.dasm - Newtonsoft.Json.Linq.JProperty:InsertItem(int,Newtonsoft.Json.Linq.JToken,ubyte,ubyte):ubyte:this (Tier1)
          50 (4.87 % of base) : 130046.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          50 (4.82 % of base) : 57362.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          48 (7.08 % of base) : 158518.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (Tier0-FullOpts)
          46 (4.43 % of base) : 124333.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (4.46 % of base) : 152334.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (4.45 % of base) : 15874.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (4.48 % of base) : 24124.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (4.24 % of base) : 72641.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (4.46 % of base) : 55410.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (4.34 % of base) : 73228.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (4.50 % of base) : 87810.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          46 (6.15 % of base) : 160607.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (Tier0-FullOpts)

Top method improvements (bytes):
        -162 (-4.75 % of base) : 100156.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -64 (-6.84 % of base) : 110895.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -46 (-6.59 % of base) : 161549.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) : 44634.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) : 60852.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) : 68144.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) : 86846.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) : 72617.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) : 55378.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) : 59828.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) : 100937.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) : 85076.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 87039.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 113171.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -42 (-3.75 % of base) : 72947.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         -40 (-0.92 % of base) : 4476.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier0-FullOpts)
         -38 (-5.51 % of base) : 152817.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) : 156252.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) : 159768.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) : 60200.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)

Top method regressions (percentages):
          28 (18.42 % of base) : 80736.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (16.88 % of base) : 21560.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (14.77 % of base) : 87019.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (14.77 % of base) : 85040.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          26 (13.83 % of base) : 119653.dasm - System.Dynamic.Utils.CacheDict`2[System.__Canon,System.__Canon]:TryGetValue(System.__Canon,byref):ubyte:this (Tier1)
          30 (10.87 % of base) : 158731.dasm - Newtonsoft.Json.Serialization.JsonContract:set_CreatedType(System.Type):this (Tier1)
          30 (10.87 % of base) : 53166.dasm - Newtonsoft.Json.Serialization.JsonContract:set_CreatedType(System.Type):this (Tier1)
          10 (10.64 % of base) : 151952.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          10 (10.64 % of base) : 143677.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 149912.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 51821.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 56307.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
          10 (10.42 % of base) : 70246.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
          10 (10.42 % of base) : 81091.dasm - System.Dynamic.Utils.TypeUtils:AreEquivalent(System.Type,System.Type):ubyte (Tier1)
          44 (9.91 % of base) : 145166.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)
          18 (9.68 % of base) : 15127.dasm - System.Dynamic.Utils.CacheDict`2[System.__Canon,System.__Canon]:TryGetValue(System.__Canon,byref):ubyte:this (Tier1)
          28 (9.09 % of base) : 116984.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
          28 (9.09 % of base) : 51744.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
          28 (9.09 % of base) : 69392.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
          28 (9.09 % of base) : 75179.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)

Top method improvements (percentages):
         -22 (-47.83 % of base) : 123690.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 130691.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 134809.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 150433.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 31979.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 83677.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -32 (-41.03 % of base) : 12022.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -32 (-36.36 % of base) : 19847.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -14 (-14.29 % of base) : 18686.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) : 36178.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -26 (-13.54 % of base) : 111043.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -14 (-12.07 % of base) : 111983.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -18 (-11.84 % of base) : 54045.dasm - System.Text.Json.Serialization.Converters.IDictionaryConverter`1[System.__Canon]:Add(System.String,byref,System.Text.Json.JsonSerializerOptions,byref):this (Tier1)
         -14 (-10.61 % of base) : 41992.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -14 (-10.61 % of base) : 66986.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -44 (-9.09 % of base) : 85076.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 87039.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -44 (-9.09 % of base) : 113171.dasm - System.ComponentModel.ReflectTypeDescriptionProvider+ReflectedTypeData:GetConverter(System.Object):System.ComponentModel.TypeConverter:this (Tier1)
         -16 (-8.99 % of base) : 19342.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
         -10 (-8.93 % of base) : 45770.dasm - System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (Tier0-FullOpts)


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: 14457706 (overridden on cmd)
Total bytes of diff: 14457114 (overridden on cmd)
Total bytes of delta: -592 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         110 : 64477.dasm (9.11 % of base)
          56 : 79346.dasm (7.69 % of base)
          54 : 77483.dasm (8.21 % of base)
          46 : 77080.dasm (9.06 % of base)
          44 : 76061.dasm (10.14 % of base)
          30 : 71803.dasm (6.38 % of base)
          10 : 35037.dasm (1.44 % of base)
          10 : 77339.dasm (10.64 % of base)
          10 : 30725.dasm (10.42 % of base)
          10 : 32986.dasm (10.42 % of base)
          10 : 38321.dasm (10.42 % of base)
          10 : 72765.dasm (10.64 % of base)
          10 : 75556.dasm (10.42 % of base)
           6 : 12667.dasm (1.01 % of base)
           6 : 53408.dasm (0.35 % of base)

Top file improvements (bytes):
         -46 : 29279.dasm (-7.85 % of base)
         -32 : 3209.dasm (-41.03 % of base)
         -32 : 8950.dasm (-36.36 % of base)
         -30 : 2642.dasm (-20.55 % of base)
         -28 : 47227.dasm (-5.36 % of base)
         -28 : 17816.dasm (-8.81 % of base)
         -28 : 2198.dasm (-9.27 % of base)
         -28 : 17310.dasm (-4.02 % of base)
         -28 : 13832.dasm (-40.00 % of base)
         -26 : 32939.dasm (-8.39 % of base)
         -26 : 61013.dasm (-13.54 % of base)
         -24 : 3007.dasm (-31.58 % of base)
         -24 : 60772.dasm (-13.64 % of base)
         -24 : 25501.dasm (-26.67 % of base)
         -24 : 52625.dasm (-6.63 % of base)
         -22 : 6512.dasm (-47.83 % of base)
         -22 : 16704.dasm (-31.43 % of base)
         -20 : 28681.dasm (-18.52 % of base)
         -20 : 3293.dasm (-10.00 % of base)
         -18 : 1834.dasm (-6.08 % of base)

55 total files with Code Size differences (40 improved, 15 regressed), 1 unchanged.

Top method regressions (bytes):
         110 (9.11 % of base) : 64477.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSimpleStructWithProperties:Read2_SimpleStructWithProperties(ubyte):MicroBenchmarks.Serializers.SimpleStructWithProperties:this (Tier0-FullOpts)
          56 (7.69 % of base) : 79346.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (Tier0-FullOpts)
          54 (8.21 % of base) : 77483.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (Tier0-FullOpts)
          46 (9.06 % of base) : 77080.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (Tier0-FullOpts)
          44 (10.14 % of base) : 76061.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)
          30 (6.38 % of base) : 71803.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (Tier0-FullOpts)
          10 (10.42 % of base) : 75556.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
          10 (10.64 % of base) : 77339.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          10 (10.42 % of base) : 30725.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 32986.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
          10 (10.42 % of base) : 38321.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
          10 (10.64 % of base) : 72765.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          10 (1.44 % of base) : 35037.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 (0.35 % of base) : 53408.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (Tier0-FullOpts)
           6 (1.01 % of base) : 12667.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) : 29279.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) : 3209.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -32 (-36.36 % of base) : 8950.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -30 (-20.55 % of base) : 2642.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -28 (-5.36 % of base) : 47227.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) : 17310.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (Tier1)
         -28 (-8.81 % of base) : 17816.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -28 (-9.27 % of base) : 2198.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -28 (-40.00 % of base) : 13832.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -26 (-13.54 % of base) : 61013.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -26 (-8.39 % of base) : 32939.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) : 3007.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (Tier1)
         -24 (-13.64 % of base) : 60772.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-26.67 % of base) : 25501.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -24 (-6.63 % of base) : 52625.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -22 (-31.43 % of base) : 16704.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (Tier1)
         -22 (-47.83 % of base) : 6512.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -20 (-10.00 % of base) : 3293.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:GenerateValue[System.__Canon](System.Random):System.__Canon (Tier1)
         -20 (-18.52 % of base) : 28681.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -18 (-6.08 % of base) : 1834.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier0-FullOpts)

Top method regressions (percentages):
          10 (10.64 % of base) : 77339.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          10 (10.64 % of base) : 72765.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 75556.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 30725.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
          10 (10.42 % of base) : 32986.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
          10 (10.42 % of base) : 38321.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
          44 (10.14 % of base) : 76061.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)
         110 (9.11 % of base) : 64477.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSimpleStructWithProperties:Read2_SimpleStructWithProperties(ubyte):MicroBenchmarks.Serializers.SimpleStructWithProperties:this (Tier0-FullOpts)
          46 (9.06 % of base) : 77080.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (Tier0-FullOpts)
          54 (8.21 % of base) : 77483.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (Tier0-FullOpts)
          56 (7.69 % of base) : 79346.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (Tier0-FullOpts)
          30 (6.38 % of base) : 71803.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (Tier0-FullOpts)
          10 (1.44 % of base) : 35037.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) : 12667.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)
           6 (0.35 % of base) : 53408.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (Tier0-FullOpts)

Top method improvements (percentages):
         -22 (-47.83 % of base) : 6512.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -32 (-41.03 % of base) : 3209.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-40.00 % of base) : 13832.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -32 (-36.36 % of base) : 8950.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -24 (-31.58 % of base) : 3007.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (Tier1)
         -22 (-31.43 % of base) : 16704.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (Tier1)
         -24 (-26.67 % of base) : 25501.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -18 (-23.68 % of base) : 62092.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -30 (-20.55 % of base) : 2642.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -20 (-18.52 % of base) : 28681.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -18 (-16.67 % of base) : 30767.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) : 69239.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (Tier1)
         -16 (-14.81 % of base) : 54145.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -14 (-14.58 % of base) : 6641.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (Tier1)
         -18 (-14.29 % of base) : 22262.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -14 (-14.29 % of base) : 17001.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) : 60772.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -26 (-13.54 % of base) : 61013.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -14 (-12.28 % of base) : 53635.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -16 (-11.76 % of base) : 48118.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: 298554316 (overridden on cmd)
Total bytes of diff: 298698642 (overridden on cmd)
Total bytes of delta: 144326 (0.05 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
        6758 : 459098.dasm (37.63 % of base)
        6526 : 460132.dasm (36.68 % of base)
        6422 : 460983.dasm (36.32 % of base)
        6342 : 459033.dasm (35.10 % of base)
        6192 : 460163.dasm (35.87 % of base)
        6146 : 460392.dasm (34.94 % of base)
        6128 : 459730.dasm (33.79 % of base)
        6002 : 458967.dasm (32.59 % of base)
        5982 : 460430.dasm (32.74 % of base)
        5900 : 460951.dasm (32.09 % of base)
        5852 : 459762.dasm (33.89 % of base)
        5814 : 459132.dasm (30.82 % of base)
        5774 : 458858.dasm (32.83 % of base)
        5740 : 459065.dasm (32.67 % of base)
        5700 : 460860.dasm (29.16 % of base)
        5664 : 460238.dasm (31.64 % of base)
        5628 : 460788.dasm (32.15 % of base)
        5484 : 460194.dasm (30.59 % of base)
        5394 : 460043.dasm (25.91 % of base)
        5318 : 459001.dasm (28.34 % of base)

Top file improvements (bytes):
         -64 : 148425.dasm (-6.84 % of base)
         -40 : 411027.dasm (-18.87 % of base)
         -36 : 167932.dasm (-20.00 % of base)
         -36 : 416996.dasm (-29.03 % of base)
         -32 : 474403.dasm (-41.03 % of base)
         -32 : 1062.dasm (-41.03 % of base)
         -30 : 382014.dasm (-4.07 % of base)
         -30 : 475614.dasm (-44.12 % of base)
         -30 : 367067.dasm (-20.83 % of base)
         -28 : 377485.dasm (-5.36 % of base)
         -28 : 138812.dasm (-5.30 % of base)
         -28 : 307724.dasm (-9.27 % of base)
         -28 : 382040.dasm (-8.81 % of base)
         -26 : 369914.dasm (-10.32 % of base)
         -26 : 381014.dasm (-13.54 % of base)
         -26 : 146182.dasm (-7.14 % of base)
         -26 : 155472.dasm (-2.08 % of base)
         -26 : 369901.dasm (-10.32 % of base)
         -26 : 378955.dasm (-12.26 % of base)
         -24 : 464297.dasm (-10.17 % of base)

69 total files with Code Size differences (44 improved, 25 regressed), 20 unchanged.

Top method regressions (bytes):
        6758 (37.63 % of base) : 459098.dasm - Generated907:CalliTest() (FullOpts)
        6526 (36.68 % of base) : 460132.dasm - Generated937:CalliTest() (FullOpts)
        6422 (36.32 % of base) : 460983.dasm - Generated963:CalliTest() (FullOpts)
        6342 (35.10 % of base) : 459033.dasm - Generated905:CalliTest() (FullOpts)
        6192 (35.87 % of base) : 460163.dasm - Generated938:CalliTest() (FullOpts)
        6146 (34.94 % of base) : 460392.dasm - Generated945:CalliTest() (FullOpts)
        6128 (33.79 % of base) : 459730.dasm - Generated925:CalliTest() (FullOpts)
        6002 (32.59 % of base) : 458967.dasm - Generated903:CalliTest() (FullOpts)
        5982 (32.74 % of base) : 460430.dasm - Generated946:CalliTest() (FullOpts)
        5900 (32.09 % of base) : 460951.dasm - Generated962:CalliTest() (FullOpts)
        5852 (33.89 % of base) : 459762.dasm - Generated926:CalliTest() (FullOpts)
        5814 (30.82 % of base) : 459132.dasm - Generated908:CalliTest() (FullOpts)
        5774 (32.83 % of base) : 458858.dasm - Generated900:CalliTest() (FullOpts)
        5740 (32.67 % of base) : 459065.dasm - Generated906:CalliTest() (FullOpts)
        5700 (29.16 % of base) : 460860.dasm - Generated959:CalliTest() (FullOpts)
        5664 (31.64 % of base) : 460238.dasm - Generated940:CalliTest() (FullOpts)
        5628 (32.15 % of base) : 460788.dasm - Generated957:CalliTest() (FullOpts)
        5484 (30.59 % of base) : 460194.dasm - Generated939:CalliTest() (FullOpts)
        5394 (25.91 % of base) : 460043.dasm - Generated934:CalliTest() (FullOpts)
        5318 (28.34 % of base) : 459001.dasm - Generated904:CalliTest() (FullOpts)

Top method improvements (bytes):
         -64 (-6.84 % of base) : 148425.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -40 (-18.87 % of base) : 411027.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -36 (-29.03 % of base) : 416996.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -36 (-20.00 % of base) : 167932.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -32 (-41.03 % of base) : 474403.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 1062.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -30 (-4.07 % of base) : 382014.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -30 (-44.12 % of base) : 475614.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -30 (-20.83 % of base) : 367067.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -28 (-5.36 % of base) : 377485.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) : 138812.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) : 382040.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-9.27 % of base) : 307724.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -26 (-13.54 % of base) : 381014.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-12.26 % of base) : 378955.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-10.32 % of base) : 369914.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -26 (-10.32 % of base) : 369901.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -26 (-7.14 % of base) : 146182.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -26 (-2.08 % of base) : 155472.dasm - System.Linq.Expressions.Compiler.LambdaCompiler:EmitExpression(System.Linq.Expressions.Expression,int):this (Tier1)
         -24 (-10.17 % of base) : 464297.dasm - Gen`1[System.__Canon]:ExceptionTest(System.__Canon):this (FullOpts)

Top method regressions (percentages):
          46 (766.67 % of base) : 374886.dasm - T:TestEntryPoint():int (FullOpts)
         110 (42.64 % of base) : 366453.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ComWrappersTests.Common.VtblPtr](int):ComWrappersTests.Common.VtblPtr (FullOpts)
         204 (41.46 % of base) : 271029.dasm - System.Reflection.Emit.RuntimeTypeBuilder:IsSubclassOf(System.Type):ubyte:this (Tier1)
        6758 (37.63 % of base) : 459098.dasm - Generated907:CalliTest() (FullOpts)
        6526 (36.68 % of base) : 460132.dasm - Generated937:CalliTest() (FullOpts)
        6422 (36.32 % of base) : 460983.dasm - Generated963:CalliTest() (FullOpts)
        6192 (35.87 % of base) : 460163.dasm - Generated938:CalliTest() (FullOpts)
        6342 (35.10 % of base) : 459033.dasm - Generated905:CalliTest() (FullOpts)
        6146 (34.94 % of base) : 460392.dasm - Generated945:CalliTest() (FullOpts)
        5852 (33.89 % of base) : 459762.dasm - Generated926:CalliTest() (FullOpts)
        6128 (33.79 % of base) : 459730.dasm - Generated925:CalliTest() (FullOpts)
        5774 (32.83 % of base) : 458858.dasm - Generated900:CalliTest() (FullOpts)
        5982 (32.74 % of base) : 460430.dasm - Generated946:CalliTest() (FullOpts)
        5740 (32.67 % of base) : 459065.dasm - Generated906:CalliTest() (FullOpts)
        6002 (32.59 % of base) : 458967.dasm - Generated903:CalliTest() (FullOpts)
        5628 (32.15 % of base) : 460788.dasm - Generated957:CalliTest() (FullOpts)
        5900 (32.09 % of base) : 460951.dasm - Generated962:CalliTest() (FullOpts)
        5664 (31.64 % of base) : 460238.dasm - Generated940:CalliTest() (FullOpts)
        5814 (30.82 % of base) : 459132.dasm - Generated908:CalliTest() (FullOpts)
        5484 (30.59 % of base) : 460194.dasm - Generated939:CalliTest() (FullOpts)

Top method improvements (percentages):
         -30 (-44.12 % of base) : 475614.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -32 (-41.03 % of base) : 474403.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -32 (-41.03 % of base) : 1062.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -22 (-31.43 % of base) : 398931.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -14 (-30.43 % of base) : 156217.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -36 (-29.03 % of base) : 416996.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -30 (-20.83 % of base) : 367067.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -16 (-20.00 % of base) : 463327.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (FullOpts)
         -36 (-20.00 % of base) : 167932.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -20 (-18.87 % of base) : 311730.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (Tier1)
         -20 (-18.87 % of base) : 305871.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (Tier1)
         -40 (-18.87 % of base) : 411027.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -18 (-18.00 % of base) : 367851.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -18 (-18.00 % of base) : 116899.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -16 (-17.39 % of base) : 382031.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (FullOpts)
         -14 (-16.67 % of base) : 377696.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -18 (-16.67 % of base) : 367434.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)
         -18 (-16.67 % of base) : 116885.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -10 (-15.62 % of base) : 421351.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -16 (-14.81 % of base) : 379499.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)


libraries.crossgen2.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: 34520558 (overridden on cmd)
Total bytes of diff: 34504364 (overridden on cmd)
Total bytes of delta: -16194 (-0.05 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
           4 : 154907.dasm (1.10 % of base)
           2 : 66643.dasm (0.90 % of base)
           2 : 99916.dasm (0.88 % of base)
           2 : 100101.dasm (0.46 % of base)
           2 : 137204.dasm (0.85 % of base)

Top file improvements (bytes):
        -224 : 173954.dasm (-15.20 % of base)
        -210 : 173953.dasm (-15.11 % of base)
        -196 : 173951.dasm (-15.01 % of base)
        -182 : 173949.dasm (-14.89 % of base)
        -168 : 173947.dasm (-14.76 % of base)
        -164 : 100029.dasm (-9.27 % of base)
        -164 : 159612.dasm (-15.05 % of base)
        -154 : 173945.dasm (-14.61 % of base)
        -148 : 137622.dasm (-6.74 % of base)
        -140 : 173943.dasm (-14.43 % of base)
        -126 : 173941.dasm (-14.22 % of base)
        -112 : 173939.dasm (-13.97 % of base)
        -106 : 183331.dasm (-16.88 % of base)
        -106 : 183327.dasm (-17.55 % of base)
         -98 : 173937.dasm (-13.65 % of base)
         -86 : 137581.dasm (-7.75 % of base)
         -84 : 173718.dasm (-7.14 % of base)
         -84 : 173935.dasm (-13.25 % of base)
         -76 : 67028.dasm (-14.18 % of base)
         -74 : 137413.dasm (-8.53 % of base)

82 total files with Code Size differences (77 improved, 5 regressed), 1 unchanged.

Top method regressions (bytes):
           4 (1.10 % of base) : 154907.dasm - Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List`1[System.__Canon]:this (FullOpts)
           2 (0.90 % of base) : 66643.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.PENamedTypeSymbol+<GetMembers>d__187`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
           2 (0.88 % of base) : 99916.dasm - Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE.PENamedTypeSymbol+VB$StateMachine_156_GetMembers`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
           2 (0.46 % of base) : 100101.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxRewriter:VisitList[System.__Canon](Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:this (FullOpts)
           2 (0.85 % of base) : 137204.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet+Enumerator[System.__Canon,System.__Canon]:.ctor(Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]):this (FullOpts)

Top method improvements (bytes):
        -224 (-15.20 % of base) : 173954.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)
        -210 (-15.11 % of base) : 173953.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)
        -196 (-15.01 % of base) : 173951.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)
        -182 (-14.89 % of base) : 173949.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)
        -168 (-14.76 % of base) : 173947.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)
        -164 (-9.27 % of base) : 100029.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -164 (-15.05 % of base) : 159612.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -154 (-14.61 % of base) : 173945.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)
        -148 (-6.74 % of base) : 137622.dasm - Microsoft.CodeAnalysis.Emit.NoPia.EmbeddedTypesManager`21+CommonEmbeddedType[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,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetAttributes(System.__Canon,System.__Canon,Microsoft.CodeAnalysis.DiagnosticBag):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
        -140 (-14.43 % of base) : 173943.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)
        -126 (-14.22 % of base) : 173941.dasm - CommandLine.ParserResultExtensions:MapResult[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.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -112 (-13.97 % of base) : 173939.dasm - CommandLine.ParserResultExtensions:MapResult[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.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
        -106 (-17.55 % of base) : 183327.dasm - System.Linq.Expressions.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Linq.Expressions.Interpreter.InterpretedFrame):int:this (FullOpts)
        -106 (-16.88 % of base) : 183331.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)
         -98 (-13.65 % of base) : 173937.dasm - CommandLine.ParserResultExtensions:MapResult[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.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
         -86 (-7.75 % of base) : 137581.dasm - Microsoft.CodeAnalysis.Emit.NoPia.EmbeddedTypesManager`21+CommonEmbeddedParameter[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,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetAttributes(System.__Canon,System.__Canon,Microsoft.CodeAnalysis.DiagnosticBag):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
         -84 (-13.25 % of base) : 173935.dasm - CommandLine.ParserResultExtensions:MapResult[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.Collections.Generic.IEnumerable`1[CommandLine.Error],System.__Canon]):System.__Canon (FullOpts)
         -84 (-7.14 % of base) : 173718.dasm - RailwaySharp.ErrorHandling.Trial+<>c__13`2[System.__Canon,System.__Canon]:<Collect>b__13_0(RailwaySharp.ErrorHandling.Result`2[System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon],RailwaySharp.ErrorHandling.Result`2[System.__Canon,System.__Canon]):RailwaySharp.ErrorHandling.Result`2[System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon]:this (FullOpts)
         -76 (-14.18 % of base) : 67028.dasm - Microsoft.CodeAnalysis.CSharp.NullabilityRewriter:GetUpdatedSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.BoundNode,System.__Canon):System.__Canon:this (FullOpts)
         -74 (-8.53 % of base) : 137413.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetSymbolForILToken(System.Reflection.Metadata.EntityHandle):System.__Canon:this (FullOpts)

Top method regressions (percentages):
           4 (1.10 % of base) : 154907.dasm - Microsoft.Internal.Collections.WeakReferenceCollection`1[System.__Canon]:AliveItemsToList():System.Collections.Generic.List`1[System.__Canon]:this (FullOpts)
           2 (0.90 % of base) : 66643.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.PENamedTypeSymbol+<GetMembers>d__187`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
           2 (0.88 % of base) : 99916.dasm - Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE.PENamedTypeSymbol+VB$StateMachine_156_GetMembers`1[System.__Canon]:MoveNext():ubyte:this (FullOpts)
           2 (0.85 % of base) : 137204.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet+Enumerator[System.__Canon,System.__Canon]:.ctor(Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]):this (FullOpts)
           2 (0.46 % of base) : 100101.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.VisualBasicSyntaxRewriter:VisitList[System.__Canon](Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:this (FullOpts)

Top method improvements (percentages):
         -32 (-43.24 % of base) : 144370.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)
         -32 (-43.24 % of base) : 180393.dasm - System.Linq.ParallelQuery`1+<>c__1`1[System.__Canon,System.__Canon]:<Cast>b__1_0(System.__Canon):System.__Canon:this (FullOpts)
         -30 (-40.54 % of base) : 173430.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -32 (-35.56 % of base) : 185021.dasm - Microsoft.Extensions.Primitives.ChangeToken+ChangeTokenRegistration`1+<>c[System.__Canon]:<RegisterChangeTokenCallback>b__7_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 115811.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 171807.dasm - System.Threading.Channels.AsyncOperation`1+<>c[System.__Canon]:<SignalCompletion>b__35_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168227.dasm - System.Threading.Tasks.Dataflow.BatchBlock`1+BatchBlockTargetCore+<>c[System.__Canon]:<ProcessAsyncIfNecessary_Slow>b__30_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168077.dasm - System.Threading.Tasks.Dataflow.BatchedJoinBlock`3+<>c[System.__Canon,System.__Canon,System.__Canon]:<.ctor>b__7_0(System.Threading.Tasks.Dataflow.ISourceBlock`1[System.Tuple`3[System.Collections.Generic.IList`1[System.__Canon],System.Collections.Generic.IList`1[System.__Canon],System.Collections.Generic.IList`1[System.__Canon]]]):this (FullOpts)
         -32 (-35.56 % of base) : 168229.dasm - System.Threading.Tasks.Dataflow.BroadcastBlock`1+<>c[System.__Canon]:<ConsumeAsyncIfNecessary>b__18_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168288.dasm - System.Threading.Tasks.Dataflow.BroadcastBlock`1+BroadcastingSourceCore`1+<>c[System.__Canon,System.__Canon]:<CompleteBlockIfPossible_Slow>b__32_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168254.dasm - System.Threading.Tasks.Dataflow.BroadcastBlock`1+BroadcastingSourceCore`1+<>c[System.__Canon,System.__Canon]:<OfferAsyncIfNecessary>b__29_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168279.dasm - System.Threading.Tasks.Dataflow.BufferBlock`1+<>c[System.__Canon]:<ConsumeAsyncIfNecessary>b__23_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168129.dasm - System.Threading.Tasks.Dataflow.DataflowBlock+SendAsyncSource`1+<>c[System.__Canon]:<OfferToTargetAsync>b__16_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168282.dasm - System.Threading.Tasks.Dataflow.Internal.SourceCore`1+<>c[System.__Canon]:<CompleteBlockIfPossible_Slow>b__49_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168240.dasm - System.Threading.Tasks.Dataflow.Internal.SourceCore`1+<>c[System.__Canon]:<OfferAsyncIfNecessary_Slow>b__44_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168163.dasm - System.Threading.Tasks.Dataflow.Internal.SpscTargetCore`1+<>c[System.__Canon]:<ScheduleConsumerIfNecessary>b__13_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168285.dasm - System.Threading.Tasks.Dataflow.Internal.TargetCore`1+<>c[System.__Canon]:<CompleteBlockIfPossible_Slow>b__42_0(System.Object):this (FullOpts)
         -32 (-35.56 % of base) : 168247.dasm - System.Threading.Tasks.Dataflow.Internal.TargetCore`1+<>c[System.__Canon]:<ProcessAsyncIfNecessary_Slow>b__34_0(System.Object):this (FullOpts)
         -32 (-34.78 % of base) : 167965.dasm - System.Threading.Tasks.Dataflow.DataflowBlock+ReceiveTarget`1+<>c[System.__Canon]:<.cctor>b__26_0(System.Object):this (FullOpts)
         -32 (-34.78 % of base) : 167966.dasm - System.Threading.Tasks.Dataflow.DataflowBlock+ReceiveTarget`1+<>c[System.__Canon]:<.cctor>b__26_1(System.Object):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: 36667164 (overridden on cmd)
Total bytes of diff: 36657936 (overridden on cmd)
Total bytes of delta: -9228 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         112 : 248778.dasm (9.88 % of base)
         110 : 164891.dasm (67.07 % of base)
         110 : 164892.dasm (67.07 % of base)
         110 : 24750.dasm (37.93 % of base)
         110 : 24751.dasm (34.81 % of base)
         110 : 164893.dasm (66.27 % of base)
         110 : 164894.dasm (67.07 % of base)
         110 : 24748.dasm (37.93 % of base)
         110 : 24749.dasm (38.46 % of base)
         110 : 164889.dasm (67.07 % of base)
         110 : 164890.dasm (67.07 % of base)
         110 : 24747.dasm (38.46 % of base)
         110 : 24752.dasm (37.67 % of base)
          72 : 260021.dasm (2.44 % of base)
          46 : 128131.dasm (2.41 % of base)
          44 : 105981.dasm (5.71 % of base)
          36 : 215694.dasm (1.78 % of base)
          30 : 143594.dasm (7.11 % of base)
          30 : 233563.dasm (7.01 % of base)
          28 : 143902.dasm (11.76 % of base)

Top file improvements (bytes):
        -400 : 253566.dasm (-23.92 % of base)
        -240 : 76328.dasm (-10.06 % of base)
        -214 : 217968.dasm (-8.47 % of base)
        -194 : 116766.dasm (-7.90 % of base)
        -164 : 113075.dasm (-12.97 % of base)
        -164 : 249345.dasm (-12.50 % of base)
        -124 : 243708.dasm (-20.46 % of base)
        -108 : 112021.dasm (-36.73 % of base)
        -102 : 111373.dasm (-7.70 % of base)
         -96 : 16385.dasm (-14.95 % of base)
         -96 : 16378.dasm (-15.24 % of base)
         -82 : 166901.dasm (-2.05 % of base)
         -68 : 87120.dasm (-17.09 % of base)
         -64 : 25007.dasm (-8.18 % of base)
         -60 : 16542.dasm (-12.35 % of base)
         -60 : 16551.dasm (-12.30 % of base)
         -58 : 104197.dasm (-15.76 % of base)
         -50 : 111942.dasm (-34.25 % of base)
         -48 : 221438.dasm (-13.48 % of base)
         -46 : 110902.dasm (-7.85 % of base)

79 total files with Code Size differences (56 improved, 23 regressed), 20 unchanged.

Top method regressions (bytes):
         112 (9.88 % of base) : 248778.dasm - System.Security.Cryptography.Pkcs.Asn1.PkiStatusInfo:Encode(System.Formats.Asn1.AsnWriter,System.Formats.Asn1.Asn1Tag):this (FullOpts)
         110 (67.07 % of base) : 164892.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[double](double):System.Collections.Generic.IList`1[double] (FullOpts)
         110 (67.07 % of base) : 164891.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[int](int):System.Collections.Generic.IList`1[int] (FullOpts)
         110 (67.07 % of base) : 164894.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[long](long):System.Collections.Generic.IList`1[long] (FullOpts)
         110 (67.07 % of base) : 164890.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[short](short):System.Collections.Generic.IList`1[short] (FullOpts)
         110 (66.27 % of base) : 164893.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float]):System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]] (FullOpts)
         110 (67.07 % of base) : 164889.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[ubyte](ubyte):System.Collections.Generic.IList`1[ubyte] (FullOpts)
         110 (37.93 % of base) : 24750.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[double](int):double (FullOpts)
         110 (38.46 % of base) : 24749.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[int](int):int (FullOpts)
         110 (37.67 % of base) : 24752.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[long](int):long (FullOpts)
         110 (37.93 % of base) : 24748.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[short](int):short (FullOpts)
         110 (34.81 % of base) : 24751.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](int):System.Numerics.Vector`1[float] (FullOpts)
         110 (38.46 % of base) : 24747.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ubyte](int):ubyte (FullOpts)
          72 (2.44 % of base) : 260021.dasm - System.Linq.Expressions.Expression:ValidateNewArgs(System.Reflection.ConstructorInfo,byref,byref) (FullOpts)
          46 (2.41 % of base) : 128131.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          44 (5.71 % of base) : 105981.dasm - System.Xml.Schema.XmlSchemaValidator:GetExpectedAttributes():System.Xml.Schema.XmlSchemaAttribute[]:this (FullOpts)
          36 (1.78 % of base) : 215694.dasm - Microsoft.CodeAnalysis.CodeGen.CompilationTestData:GetMethodsByName():System.Collections.Immutable.ImmutableDictionary`2[System.String,Microsoft.CodeAnalysis.CodeGen.CompilationTestData+MethodData]:this (FullOpts)
          30 (7.11 % of base) : 143594.dasm - System.Reflection.Emit.EnumBuilderImpl:DefineLiteralCore(System.String,System.Object):System.Reflection.Emit.FieldBuilder:this (FullOpts)
          30 (7.01 % of base) : 233563.dasm - Xunit.Sdk.CollectionException:FormatInnerException(System.Exception):System.String (FullOpts)
          28 (11.76 % of base) : 143902.dasm - System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)

Top method improvements (bytes):
        -400 (-23.92 % of base) : 253566.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -240 (-10.06 % of base) : 76328.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -214 (-8.47 % of base) : 217968.dasm - Microsoft.CodeAnalysis.Diagnostics.CompilationWithAnalyzers+<CreateAndInitializeDriverAsync>d__42:MoveNext():this (FullOpts)
        -194 (-7.90 % of base) : 116766.dasm - Microsoft.CodeAnalysis.VisualBasic.Symbols.ConstraintsHelper:AppendUseSiteInfo(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.VisualBasic.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -164 (-12.97 % of base) : 113075.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -164 (-12.50 % of base) : 249345.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -124 (-20.46 % of base) : 243708.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
        -108 (-36.73 % of base) : 112021.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -102 (-7.70 % of base) : 111373.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
         -96 (-15.24 % of base) : 16378.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -96 (-14.95 % of base) : 16385.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) : 166901.dasm - Newtonsoft.Json.JsonTextReader+<DoReadAsBytesAsync>d__42:MoveNext():this (FullOpts)
         -68 (-17.09 % of base) : 87120.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -64 (-8.18 % of base) : 25007.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
         -60 (-12.30 % of base) : 16551.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericOneDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -60 (-12.35 % of base) : 16542.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericZeroDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -58 (-15.76 % of base) : 104197.dasm - System.Xml.Schema.Compiler:CanonicalizeParticle(System.Xml.Schema.XmlSchemaParticle,ubyte):System.Xml.Schema.XmlSchemaParticle:this (FullOpts)
         -50 (-34.25 % of base) : 111942.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -48 (-13.48 % of base) : 221438.dasm - System.Security.Cryptography.Xml.XmlDsigBase64Transform:LoadInput(System.Object):this (FullOpts)
         -46 (-7.85 % of base) : 110902.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)

Top method regressions (percentages):
         110 (67.07 % of base) : 164892.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[double](double):System.Collections.Generic.IList`1[double] (FullOpts)
         110 (67.07 % of base) : 164891.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[int](int):System.Collections.Generic.IList`1[int] (FullOpts)
         110 (67.07 % of base) : 164894.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[long](long):System.Collections.Generic.IList`1[long] (FullOpts)
         110 (67.07 % of base) : 164890.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[short](short):System.Collections.Generic.IList`1[short] (FullOpts)
         110 (67.07 % of base) : 164889.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[ubyte](ubyte):System.Collections.Generic.IList`1[ubyte] (FullOpts)
         110 (66.27 % of base) : 164893.dasm - Newtonsoft.Json.Utilities.EnumUtils:GetFlagsValues[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float]):System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]] (FullOpts)
         110 (38.46 % of base) : 24749.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[int](int):int (FullOpts)
         110 (38.46 % of base) : 24747.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ubyte](int):ubyte (FullOpts)
         110 (37.93 % of base) : 24750.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[double](int):double (FullOpts)
         110 (37.93 % of base) : 24748.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[short](int):short (FullOpts)
         110 (37.67 % of base) : 24752.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[long](int):long (FullOpts)
         110 (34.81 % of base) : 24751.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](int):System.Numerics.Vector`1[float] (FullOpts)
          28 (22.22 % of base) : 143941.dasm - System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
          28 (11.76 % of base) : 143902.dasm - System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)
         112 (9.88 % of base) : 248778.dasm - System.Security.Cryptography.Pkcs.Asn1.PkiStatusInfo:Encode(System.Formats.Asn1.AsnWriter,System.Formats.Asn1.Asn1Tag):this (FullOpts)
          28 (7.82 % of base) : 143912.dasm - System.Reflection.Emit.TypeBuilderImpl:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (FullOpts)
          30 (7.11 % of base) : 143594.dasm - System.Reflection.Emit.EnumBuilderImpl:DefineLiteralCore(System.String,System.Object):System.Reflection.Emit.FieldBuilder:this (FullOpts)
          30 (7.01 % of base) : 233563.dasm - Xunit.Sdk.CollectionException:FormatInnerException(System.Exception):System.String (FullOpts)
          44 (5.71 % of base) : 105981.dasm - System.Xml.Schema.XmlSchemaValidator:GetExpectedAttributes():System.Xml.Schema.XmlSchemaAttribute[]:this (FullOpts)
           4 (4.55 % of base) : 197562.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

Top method improvements (percentages):
         -28 (-51.85 % of base) : 277457.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) : 252417.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -22 (-47.83 % of base) : 16094.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -22 (-47.83 % of base) : 94296.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -30 (-42.86 % of base) : 188790.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) : 255994.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) : 257685.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) : 256925.dasm - System.Collections.Immutable.ImmutableList`1+Builder[System.__Canon]:System.Collections.IList.Add(System.Object):int:this (FullOpts)
         -26 (-37.14 % of base) : 25334.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) : 112021.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -32 (-36.36 % of base) : 275212.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (FullOpts)
         -32 (-36.36 % of base) : 163545.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -32 (-36.36 % of base) : 166309.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon](Newtonsoft.Json.JsonSerializer):System.__Canon:this (FullOpts)
         -26 (-36.11 % of base) : 270101.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -26 (-36.11 % of base) : 255808.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) : 96424.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) : 96433.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) : 109198.dasm - System.Xml.Xsl.Runtime.XmlQuerySequence`1[System.__Canon]:System.Collections.IList.IndexOf(System.Object):int:this (FullOpts)
         -28 (-35.90 % of base) : 47288.dasm - Microsoft.Diagnostics.Tracing.AutomatedAnalysis.Process:Equals(System.Object):ubyte:this (FullOpts)
         -30 (-35.71 % of base) : 109197.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: 211844980 (overridden on cmd)
Total bytes of diff: 211891224 (overridden on cmd)
Total bytes of delta: 46244 (0.02 % of base)
    diff is a regression.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         498 : 434486.dasm (19.32 % of base)
         448 : 472922.dasm (4.30 % of base)
         436 : 330779.dasm (4.32 % of base)
         350 : 251122.dasm (3.54 % of base)
         336 : 297334.dasm (3.27 % of base)
         336 : 434373.dasm (13.53 % of base)
         326 : 489556.dasm (3.19 % of base)
         292 : 199864.dasm (2.76 % of base)
         272 : 432315.dasm (13.70 % of base)
         268 : 435314.dasm (15.12 % of base)
         266 : 475375.dasm (2.60 % of base)
         264 : 700225.dasm (2.61 % of base)
         256 : 432791.dasm (10.16 % of base)
         248 : 374257.dasm (2.47 % of base)
         244 : 366267.dasm (2.18 % of base)
         224 : 217055.dasm (2.21 % of base)
         214 : 566623.dasm (2.05 % of base)
         212 : 576636.dasm (37.06 % of base)
         194 : 718258.dasm (2.04 % of base)
         180 : 380959.dasm (1.95 % of base)

Top file improvements (bytes):
        -286 : 178033.dasm (-8.99 % of base)
        -258 : 518153.dasm (-6.24 % of base)
        -218 : 434978.dasm (-12.84 % of base)
        -216 : 435006.dasm (-13.20 % of base)
        -198 : 432555.dasm (-10.53 % of base)
        -184 : 434986.dasm (-14.42 % of base)
        -182 : 91871.dasm (-10.86 % of base)
        -180 : 144761.dasm (-10.80 % of base)
        -174 : 61172.dasm (-10.93 % of base)
        -164 : 68353.dasm (-4.80 % of base)
        -162 : 172983.dasm (-4.78 % of base)
        -162 : 182958.dasm (-4.78 % of base)
        -140 : 434974.dasm (-7.99 % of base)
        -126 : 159368.dasm (-9.89 % of base)
        -126 : 18883.dasm (-10.02 % of base)
        -104 : 395962.dasm (-5.90 % of base)
         -96 : 316948.dasm (-0.85 % of base)
         -94 : 504197.dasm (-7.83 % of base)
         -94 : 434146.dasm (-7.63 % of base)
         -92 : 435000.dasm (-10.11 % of base)

90 total files with Code Size differences (52 improved, 38 regressed), 20 unchanged.

Top method regressions (bytes):
         498 (19.32 % of base) : 434486.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfInt():System.Object:this (Tier0-FullOpts)
         448 (4.30 % of base) : 472922.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         436 (4.32 % of base) : 330779.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         350 (3.54 % of base) : 251122.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         336 (13.53 % of base) : 434373.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeWithArrayPropertyHavingChoice:Read3_Item(ubyte,ubyte):SerializationTypes.TypeWithArrayPropertyHavingChoice:this (Tier0-FullOpts)
         336 (3.27 % of base) : 297334.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         326 (3.19 % of base) : 489556.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         292 (2.76 % of base) : 199864.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         272 (13.70 % of base) : 432315.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderOrchestra:Read5_Orchestra(ubyte,ubyte):Orchestra:this (Tier0-FullOpts)
         268 (15.12 % of base) : 435314.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1:Read2_Item(ubyte,ubyte):XmlMembersMappingTypeHavingIntArray:this (Tier0-FullOpts)
         266 (2.60 % of base) : 475375.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         264 (2.61 % of base) : 700225.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         256 (10.16 % of base) : 432791.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderPurchaseOrder:Read4_PurchaseOrder(ubyte,ubyte):PurchaseOrder:this (Tier0-FullOpts)
         248 (2.47 % of base) : 374257.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         244 (2.18 % of base) : 366267.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         224 (2.21 % of base) : 217055.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         214 (2.05 % of base) : 566623.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         212 (37.06 % of base) : 576636.dasm - System.Reflection.Emit.RuntimeTypeBuilder:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (Tier1)
         194 (2.04 % of base) : 718258.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         180 (1.95 % of base) : 380959.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)

Top method improvements (bytes):
        -286 (-8.99 % of base) : 178033.dasm - Microsoft.CodeAnalysis.CSharp.RefSafetyAnalysis:GetValEscape(Microsoft.CodeAnalysis.CSharp.BoundExpression,uint):uint:this (Tier1)
        -258 (-6.24 % of base) : 518153.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (Tier1)
        -218 (-12.84 % of base) : 434978.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) : 435006.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) : 432555.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (Tier0-FullOpts)
        -184 (-14.42 % of base) : 434986.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (Tier0-FullOpts)
        -182 (-10.86 % of base) : 91871.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)
        -180 (-10.80 % of base) : 144761.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (Tier0-FullOpts)
        -174 (-10.93 % of base) : 61172.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)
        -164 (-4.80 % of base) : 68353.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) : 172983.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) : 182958.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) : 434974.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (Tier0-FullOpts)
        -126 (-9.89 % of base) : 159368.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (Tier0-FullOpts)
        -126 (-10.02 % of base) : 18883.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (Tier0-FullOpts)
        -104 (-5.90 % of base) : 395962.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
         -96 (-0.85 % of base) : 316948.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         -94 (-7.63 % of base) : 434146.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (Tier0-FullOpts)
         -94 (-7.83 % of base) : 504197.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) : 435000.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (Tier0-FullOpts)

Top method regressions (percentages):
         110 (107.84 % of base) : 229143.dasm - System.Collections.Tests.List_Generic_Tests`1+<>c[System.__Canon]:<Find_VerifyVanilla>b__59_1(System.__Canon):ubyte:this (Tier1)
          44 (37.93 % of base) : 472906.dasm - System.Type:op_Equality(System.Type,System.Type):ubyte (Tier1)
         212 (37.06 % of base) : 576636.dasm - System.Reflection.Emit.RuntimeTypeBuilder:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (Tier1)
         156 (34.36 % of base) : 576637.dasm - System.Reflection.Emit.RuntimeTypeBuilder:IsSubclassOf(System.Type):ubyte:this (Tier1)
         112 (24.45 % of base) : 553688.dasm - System.Formats.Asn1.AsnWriter:WriteNamedBitList[int](int,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (Tier1)
         114 (21.51 % of base) : 553687.dasm - System.Security.Cryptography.X509Certificates.ManagedX509ExtensionProcessor:EncodeX509KeyUsageExtension(int):ubyte[]:this (Tier1)
          32 (20.51 % of base) : 497533.dasm - System.Type:get_IsSerializable():ubyte:this (Tier1)
          78 (20.10 % of base) : 191123.dasm - Microsoft.VisualBasic.CompilerServices.ConversionResolution:ClassifyConversion(System.Type,System.Type,byref):byte (Tier1)
         106 (20.08 % of base) : 431442.dasm - System.Reflection.Emit.RuntimeTypeBuilder:IsSubclassOf(System.Type):ubyte:this (Tier1)
         104 (19.70 % of base) : 519571.dasm - System.Reflection.Emit.RuntimeTypeBuilder:IsSubclassOf(System.Type):ubyte:this (Tier1)
         498 (19.32 % of base) : 434486.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfInt():System.Object:this (Tier0-FullOpts)
          80 (18.60 % of base) : 431499.dasm - System.Reflection.RuntimeModule:ConvertToTypeHandleArray(System.Type[]):System.RuntimeTypeHandle[] (Tier1)
          56 (18.30 % of base) : 630344.dasm - System.Linq.Expressions.ConditionalExpression:Make(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Type):System.Linq.Expressions.ConditionalExpression (Tier1)
          40 (17.09 % of base) : 355748.dasm - System.Linq.Enumerable:Concat[System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]],System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]]):System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]] (Tier1)
          24 (16.90 % of base) : 605037.dasm - System.Text.Json.JsonSerializer:ValidateInputType(System.Object,System.Type) (Tier1)
          24 (16.90 % of base) : 626144.dasm - System.Text.Json.JsonSerializer:ValidateInputType(System.Object,System.Type) (Tier1)
          18 (16.67 % of base) : 508287.dasm - System.ComponentModel.AttributeCollection:Contains(System.Attribute):ubyte:this (Tier1)
         110 (16.22 % of base) : 553689.dasm - System.Formats.Asn1.AsnWriter:WriteNamedBitList(System.Nullable`1[System.Formats.Asn1.Asn1Tag],System.Type,System.Enum):this (Tier1)
          66 (16.18 % of base) : 282062.dasm - System.Dynamic.Utils.TypeUtils:HasReferenceEquality(System.Type,System.Type):ubyte (Tier1)
          40 (16.00 % of base) : 660410.dasm - Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder:GetSmallestSourceLocationOrNull(Microsoft.CodeAnalysis.CSharp.Symbol):Microsoft.CodeAnalysis.Location:this (Tier0-FullOpts)

Top method improvements (percentages):
         -22 (-47.83 % of base) : 596078.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-47.83 % of base) : 624167.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-41.18 % of base) : 332151.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (Tier1)
         -32 (-41.03 % of base) : 1313.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -20 (-40.00 % of base) : 59981.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -28 (-40.00 % of base) : 130734.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -40 (-39.22 % of base) : 435555.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) : 123715.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -32 (-36.36 % of base) : 621113.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -32 (-36.36 % of base) : 100542.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.ParameterInfo,ubyte):System.__Canon (Tier1)
         -30 (-34.88 % of base) : 617701.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) : 627099.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) : 576402.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -24 (-30.77 % of base) : 62698.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -24 (-30.77 % of base) : 122791.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -22 (-29.73 % of base) : 149280.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) : 109084.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) : 122746.dasm - Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests:CreateInstance[System.__Canon](Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests+CreateInstanceFunc,System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -20 (-26.32 % of base) : 617211.dasm - System.Text.Json.Serialization.Converters.ConcurrentStackOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -20 (-26.32 % of base) : 605738.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (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: 76532706 (overridden on cmd)
Total bytes of diff: 76526744 (overridden on cmd)
Total bytes of delta: -5962 (-0.01 % of base)
    diff is a regression.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         494 : 167039.dasm (19.36 % of base)
         336 : 166987.dasm (13.69 % of base)
         272 : 166105.dasm (13.70 % of base)
         272 : 167498.dasm (15.58 % of base)
         256 : 166304.dasm (10.48 % of base)
         218 : 180156.dasm (22.43 % of base)
         152 : 209557.dasm (35.51 % of base)
         152 : 209798.dasm (35.51 % of base)
         148 : 207559.dasm (32.03 % of base)
         128 : 139332.dasm (10.03 % of base)
         128 : 167061.dasm (3.38 % of base)
         126 : 166047.dasm (4.12 % of base)
         126 : 166735.dasm (4.12 % of base)
         116 : 166734.dasm (2.79 % of base)
         116 : 115461.dasm (11.44 % of base)
         116 : 166046.dasm (2.79 % of base)
         116 : 115428.dasm (10.88 % of base)
         116 : 166911.dasm (4.35 % of base)
         114 : 115423.dasm (20.36 % of base)
         114 : 115443.dasm (18.75 % of base)

Top file improvements (bytes):
        -400 : 62266.dasm (-23.92 % of base)
        -266 : 305645.dasm (-5.03 % of base)
        -234 : 207883.dasm (-5.18 % of base)
        -220 : 167306.dasm (-13.41 % of base)
        -218 : 167300.dasm (-12.84 % of base)
        -202 : 16103.dasm (-12.63 % of base)
        -202 : 16159.dasm (-12.78 % of base)
        -202 : 166189.dasm (-10.73 % of base)
        -200 : 8216.dasm (-8.35 % of base)
        -186 : 2977.dasm (-7.23 % of base)
        -182 : 22964.dasm (-7.76 % of base)
        -178 : 14526.dasm (-16.79 % of base)
        -158 : 167302.dasm (-12.64 % of base)
        -148 : 23285.dasm (-8.49 % of base)
        -140 : 51168.dasm (-6.98 % of base)
        -138 : 45318.dasm (-6.91 % of base)
        -138 : 204195.dasm (-11.46 % of base)
        -134 : 6473.dasm (-6.75 % of base)
        -122 : 204182.dasm (-9.47 % of base)
        -120 : 167298.dasm (-6.96 % of base)

91 total files with Code Size differences (55 improved, 36 regressed), 17 unchanged.

Top method regressions (bytes):
         494 (19.36 % of base) : 167039.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfInt():System.Object:this (FullOpts)
         336 (13.69 % of base) : 166987.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeWithArrayPropertyHavingChoice:Read3_Item(ubyte,ubyte):SerializationTypes.TypeWithArrayPropertyHavingChoice:this (FullOpts)
         272 (15.58 % of base) : 167498.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1:Read2_Item(ubyte,ubyte):XmlMembersMappingTypeHavingIntArray:this (FullOpts)
         272 (13.70 % of base) : 166105.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderOrchestra:Read5_Orchestra(ubyte,ubyte):Orchestra:this (FullOpts)
         256 (10.48 % of base) : 166304.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderPurchaseOrder:Read4_PurchaseOrder(ubyte,ubyte):PurchaseOrder:this (FullOpts)
         218 (22.43 % of base) : 180156.dasm - System.Reflection.Emit.Tests.TypeBuilderDefineEvent:DefineEvent_CalledMultipleTimes_Works():this (FullOpts)
         152 (35.51 % of base) : 209798.dasm - System.Tests.Int32Tests_GenericMath:CreateCheckedFromIntPtrTest() (FullOpts)
         152 (35.51 % of base) : 209557.dasm - System.Tests.UInt32Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
         148 (32.03 % of base) : 207559.dasm - System.Tests.Int64Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
         128 (3.38 % of base) : 167061.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfArrayOfInt():System.Object:this (FullOpts)
         128 (10.03 % of base) : 139332.dasm - System.Linq.Tests.ToLookupTests+<DebuggerAttributesValid_Data>d__25:MoveNext():ubyte:this (FullOpts)
         126 (4.12 % of base) : 166047.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read2_Object(ubyte,ubyte):System.Object:this (FullOpts)
         126 (4.12 % of base) : 166735.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read2_Object(ubyte,ubyte):System.Object:this (FullOpts)
         116 (4.35 % of base) : 166911.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeWith2DArrayProperty2:Read3_TypeWith2DArrayProperty2(ubyte,ubyte):SerializationTypes.TypeWith2DArrayProperty2:this (FullOpts)
         116 (2.79 % of base) : 166734.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read3_XmlSerializerAttributes(ubyte,ubyte):SerializationTypes.XmlSerializerAttributes:this (FullOpts)
         116 (2.79 % of base) : 166046.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read3_XmlSerializerAttributes(ubyte,ubyte):SerializationTypes.XmlSerializerAttributes:this (FullOpts)
         116 (11.44 % of base) : 115461.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList:VerifyWriteNamedBitList_Generic(int) (FullOpts)
         116 (10.88 % of base) : 115428.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList:VerifyWriteNamedBitList_Generic_WithTag(int) (FullOpts)
         114 (20.36 % of base) : 115423.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList:VerifyWriteNamedBitList(int,System.String,System.Enum) (FullOpts)
         114 (18.75 % of base) : 115443.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList:VerifyWriteNamedBitList_WithTag(int,System.String,System.Enum) (FullOpts)

Top method improvements (bytes):
        -400 (-23.92 % of base) : 62266.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -266 (-5.03 % of base) : 305645.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) : 207883.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) : 167306.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) : 167300.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
        -202 (-12.63 % of base) : 16103.dasm - Microsoft.CodeAnalysis.ProjectDependencyGraph:GetProjectsThatThisProjectTransitivelyDependsOn_NoLock(Microsoft.CodeAnalysis.ProjectId):System.Collections.Immutable.ImmutableHashSet`1[Microsoft.CodeAnalysis.ProjectId]:this (FullOpts)
        -202 (-12.78 % of base) : 16159.dasm - Microsoft.CodeAnalysis.ProjectDependencyGraph:GetProjectsThatTransitivelyDependOnThisProject_NoLock(Microsoft.CodeAnalysis.ProjectId):System.Collections.Immutable.ImmutableHashSet`1[Microsoft.CodeAnalysis.ProjectId]:this (FullOpts)
        -202 (-10.73 % of base) : 166189.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -200 (-8.35 % of base) : 8216.dasm - Microsoft.CodeAnalysis.Diagnostics.CompilationWithAnalyzers+<CreateAndInitializeDriverAsync>d__41:MoveNext():this (FullOpts)
        -186 (-7.23 % of base) : 2977.dasm - Microsoft.VisualStudio.Composition.CompositionConfiguration:ComputeSharingBoundaryMetadata(System.Collections.Generic.IEnumerable`1[Microsoft.VisualStudio.Composition.CompositionConfiguration+PartBuilder]):System.Collections.Immutable.ImmutableDictionary`2[System.String,Microsoft.VisualStudio.Composition.CompositionConfiguration+SharingBoundaryMetadata] (FullOpts)
        -182 (-7.76 % of base) : 22964.dasm - Microsoft.CodeAnalysis.FindSymbols.DependentTypeFinder+<GetProjectsThatCouldReferenceTypeAsync>d__10:MoveNext():this (FullOpts)
        -178 (-16.79 % of base) : 14526.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) : 167302.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
        -148 (-8.49 % of base) : 23285.dasm - Microsoft.CodeAnalysis.FindSymbols.FindReferencesSearchEngine:GetProjectsToSearchAsync(System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.ISymbol],System.Threading.CancellationToken):System.Threading.Tasks.Task`1[System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Project]]:this (FullOpts)
        -140 (-6.98 % of base) : 51168.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -138 (-6.91 % of base) : 45318.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -138 (-11.46 % of base) : 204195.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -134 (-6.75 % of base) : 6473.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -122 (-9.47 % of base) : 204182.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) : 167298.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)

Top method regressions (percentages):
          30 (88.24 % of base) : 95719.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          26 (43.33 % of base) : 92381.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          26 (43.33 % of base) : 93602.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
         110 (37.41 % of base) : 189305.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Runtime.InteropServices.Tests.PtrToStructureTests+SomeTestStruct](int):System.Runtime.InteropServices.Tests.PtrToStructureTests+SomeTestStruct (FullOpts)
         152 (35.51 % of base) : 209798.dasm - System.Tests.Int32Tests_GenericMath:CreateCheckedFromIntPtrTest() (FullOpts)
         152 (35.51 % of base) : 209557.dasm - System.Tests.UInt32Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
         148 (32.03 % of base) : 207559.dasm - System.Tests.Int64Tests_GenericMath:CreateCheckedFromUIntPtrTest() (FullOpts)
         112 (24.67 % of base) : 115421.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass5_0:<VerifyWriteNamedBitList_FlagsEnumRequired>b__2():this (FullOpts)
         112 (24.45 % of base) : 115417.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass5_0:<VerifyWriteNamedBitList_FlagsEnumRequired>b__0():this (FullOpts)
         218 (22.43 % of base) : 180156.dasm - System.Reflection.Emit.Tests.TypeBuilderDefineEvent:DefineEvent_CalledMultipleTimes_Works():this (FullOpts)
          28 (22.22 % of base) : 180069.dasm - System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
         112 (21.37 % of base) : 115959.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[byte](byte,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
         112 (21.37 % of base) : 115944.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[int](int,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
         112 (21.37 % of base) : 115953.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[short](short,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
         112 (21.37 % of base) : 115948.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[ubyte](ubyte,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
         112 (21.37 % of base) : 115941.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[uint](uint,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
         112 (21.37 % of base) : 115951.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[ushort](ushort,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
         112 (21.37 % of base) : 115398.dasm - System.Security.Cryptography.X509Certificates.ManagedX509ExtensionProcessor:EncodeX509KeyUsageExtension(int):ubyte[]:this (FullOpts)
         110 (20.52 % of base) : 115956.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[long](long,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
         110 (20.52 % of base) : 115967.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[ulong](ulong,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)

Top method improvements (percentages):
         -28 (-51.85 % of base) : 87825.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) : 133585.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) : 42664.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -28 (-50.00 % of base) : 48297.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -28 (-50.00 % of base) : 42660.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 48290.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 42656.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -28 (-50.00 % of base) : 48292.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -22 (-47.83 % of base) : 35741.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -22 (-47.83 % of base) : 142114.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -20 (-43.48 % of base) : 30420.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) : 194934.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) : 194936.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) : 70422.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -30 (-41.67 % of base) : 70896.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -28 (-41.18 % of base) : 98544.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
         -40 (-39.22 % of base) : 165342.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) : 186860.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) : 39590.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -26 (-36.11 % of base) : 67306.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: 10176194 (overridden on cmd)
Total bytes of diff: 10173876 (overridden on cmd)
Total bytes of delta: -2318 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          36 : 20912.dasm (2.64 % of base)
          28 : 17574.dasm (0.72 % of base)
          18 : 2647.dasm (1.10 % of base)
          18 : 115.dasm (1.10 % of base)
          18 : 16241.dasm (1.10 % of base)
          18 : 16085.dasm (1.10 % of base)
          10 : 36091.dasm (2.60 % of base)
           6 : 33756.dasm (0.35 % of base)
           6 : 13998.dasm (2.36 % of base)
           2 : 30109.dasm (0.24 % of base)

Top file improvements (bytes):
        -138 : 24643.dasm (-6.91 % of base)
         -62 : 37661.dasm (-22.79 % of base)
         -52 : 37297.dasm (-3.02 % of base)
         -44 : 37763.dasm (-20.37 % of base)
         -42 : 8591.dasm (-1.10 % of base)
         -40 : 36131.dasm (-8.58 % of base)
         -38 : 37320.dasm (-23.46 % of base)
         -36 : 14910.dasm (-18.18 % of base)
         -36 : 10813.dasm (-6.36 % of base)
         -36 : 32573.dasm (-5.41 % of base)
         -36 : 9430.dasm (-27.69 % of base)
         -32 : 435.dasm (-41.03 % of base)
         -30 : 37690.dasm (-28.30 % of base)
         -30 : 7667.dasm (-2.07 % of base)
         -30 : 5907.dasm (-19.23 % of base)
         -30 : 773.dasm (-20.55 % of base)
         -28 : 10764.dasm (-24.56 % of base)
         -28 : 35854.dasm (-15.56 % of base)
         -28 : 35944.dasm (-51.85 % of base)
         -28 : 5579.dasm (-27.45 % of base)

57 total files with Code Size differences (47 improved, 10 regressed), 5 unchanged.

Top method regressions (bytes):
          36 (2.64 % of base) : 20912.dasm - Microsoft.CodeAnalysis.CSharp.CSharpParseOptions:.ctor(int,ubyte,int,System.Collections.Immutable.ImmutableArray`1[System.String],System.Collections.Generic.IReadOnlyDictionary`2[System.String,System.String]):this (FullOpts)
          28 (0.72 % of base) : 17574.dasm - Microsoft.ML.Data.TextLoader+Bindings:.ctor(Microsoft.ML.Data.TextLoader,Microsoft.ML.Data.TextLoader+Column[],Microsoft.ML.Data.IMultiStreamSource,Microsoft.ML.Data.IMultiStreamSource):this (FullOpts)
          18 (1.10 % of base) : 2647.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 115.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 16241.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 16085.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          10 (2.60 % of base) : 36091.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           6 (2.36 % of base) : 13998.dasm - FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
           6 (0.35 % of base) : 33756.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (FullOpts)
           2 (0.24 % of base) : 30109.dasm - Microsoft.CodeAnalysis.CSharp.NullableWalker:VisitAwaitableInfo(Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo):Microsoft.CodeAnalysis.CSharp.BoundNode:this (FullOpts)

Top method improvements (bytes):
        -138 (-6.91 % of base) : 24643.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
         -62 (-22.79 % of base) : 37661.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) : 37297.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) : 37763.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) : 8591.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) : 36131.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) : 37320.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) : 10813.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) : 14910.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -36 (-27.69 % of base) : 9430.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -36 (-5.41 % of base) : 32573.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) : 435.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) : 7667.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) : 37690.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -30 (-19.23 % of base) : 5907.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -28 (-27.45 % of base) : 5579.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) : 10764.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -28 (-23.73 % of base) : 10394.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)
         -28 (-15.56 % of base) : 35854.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)

Top method regressions (percentages):
          36 (2.64 % of base) : 20912.dasm - Microsoft.CodeAnalysis.CSharp.CSharpParseOptions:.ctor(int,ubyte,int,System.Collections.Immutable.ImmutableArray`1[System.String],System.Collections.Generic.IReadOnlyDictionary`2[System.String,System.String]):this (FullOpts)
          10 (2.60 % of base) : 36091.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           6 (2.36 % of base) : 13998.dasm - FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
          18 (1.10 % of base) : 2647.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 115.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 16241.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          18 (1.10 % of base) : 16085.dasm - BenchmarkDotNet.Autogenerated.UniqueProgramName:AfterAssemblyLoadingAttached(System.String[]):int (FullOpts)
          28 (0.72 % of base) : 17574.dasm - Microsoft.ML.Data.TextLoader+Bindings:.ctor(Microsoft.ML.Data.TextLoader,Microsoft.ML.Data.TextLoader+Column[],Microsoft.ML.Data.IMultiStreamSource,Microsoft.ML.Data.IMultiStreamSource):this (FullOpts)
           6 (0.35 % of base) : 33756.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (FullOpts)
           2 (0.24 % of base) : 30109.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) : 35944.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) : 435.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) : 35157.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -30 (-28.30 % of base) : 37690.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -36 (-27.69 % of base) : 9430.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -28 (-27.45 % of base) : 5579.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) : 10764.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -28 (-23.73 % of base) : 10394.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)
         -18 (-23.68 % of base) : 23503.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -38 (-23.46 % of base) : 37320.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) : 37661.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) : 21777.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) : 37763.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) : 5907.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -36 (-18.18 % of base) : 14910.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -22 (-17.46 % of base) : 37325.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) : 21481.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -26 (-16.25 % of base) : 37293.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)



windows x86

Diffs are based on 2,168,453 contexts (839,658 MinOpts, 1,328,795 FullOpts).

MISSED contexts: base: 45 (0.00%), diff: 125,043 (5.45%)

Overall (+32,962 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 5,993,081 -607
benchmarks.run_pgo.windows.x86.checked.mch 28,623,124 -12,075
benchmarks.run_tiered.windows.x86.checked.mch 8,552,866 -505
coreclr_tests.run.windows.x86.checked.mch 291,617,193 +67,598
libraries.crossgen2.windows.x86.checked.mch 31,700,815 -29,760
libraries.pmi.windows.x86.checked.mch 36,478,439 -8,621
libraries_tests.run.windows.x86.Release.mch 160,677,288 +27,801
librariestestsnotieredcompilation.run.windows.x86.Release.mch 89,509,872 -8,447
realworld.run.windows.x86.checked.mch 7,942,301 -2,422

FullOpts (+32,962 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 5,992,800 -607
benchmarks.run_pgo.windows.x86.checked.mch 22,034,493 -12,075
benchmarks.run_tiered.windows.x86.checked.mch 4,283,045 -505
coreclr_tests.run.windows.x86.checked.mch 89,829,059 +67,598
libraries.crossgen2.windows.x86.checked.mch 31,699,755 -29,760
libraries.pmi.windows.x86.checked.mch 36,383,206 -8,621
libraries_tests.run.windows.x86.Release.mch 62,403,588 +27,801
librariestestsnotieredcompilation.run.windows.x86.Release.mch 80,829,808 -8,447
realworld.run.windows.x86.checked.mch 7,646,587 -2,422

Example diffs

benchmarks.run.windows.x86.checked.mch

-14 (-41.18%) : 7181.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%) : 1855.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%) : 11244.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)
; ============================================================

+40 (+14.60%) : 23420.dasm - System.Tests.Perf_Array:ArrayCreate2D():System.Array:this (FullOpts)

@@ -10,41 +10,40 @@ ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def ptr <System.Tests.Perf_Array> ;* V01 tmp0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array>
-; V02 tmp1 [V02,T00] ( 4, 6 ) int -> edi "Inlining Arg" -; V03 tmp2 [V03,T04] ( 2, 4 ) int -> eax "Inlining Arg" -;* V04 tmp3 [V04 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T13] ( 0, 0 ) ref -> zero-ref class-hnd exact ptr "Inline stloc first use temp" <System.RuntimeType> -; V07 tmp6 [V07 ] ( 3, 3 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" -; V08 tmp7 [V08,T09] ( 2, 2 ) int -> eax "Inline stloc first use temp" -; V09 tmp8 [V09,T14] ( 1, 1 ) int -> [ebp-0x1C] do-not-enreg[V] "GSCookie dummy for inlinee" -; V10 tmp9 [V10,T07] ( 2, 2 ) ref -> eax class-hnd single-def "Inline return value spill temp" <System.Array> -; V11 tmp10 [V11 ] ( 4, 4 ) ref -> [ebp-0x20] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V12 tmp11 [V12 ] ( 3, 6 ) ref -> [ebp-0x24] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> -; V13 tmp12 [V13 ] ( 5, 10 ) struct ( 8) [ebp-0x2C] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V14 tmp13 [V14 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V15 tmp14 [V15 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V16 tmp15 [V16,T02] ( 3, 5 ) ref -> edx class-hnd exact single-def "dup spill" <System.RuntimeType> -; V17 tmp16 [V17,T08] ( 2, 2 ) byref -> ecx single-def -;* V18 tmp17 [V18 ] ( 0, 0 ) ref -> zero-ref single-def ptr -;* V19 tmp18 [V19 ] ( 0, 0 ) byref -> zero-ref single-def ptr -; V20 tmp19 [V20,T06] ( 3, 2 ) int -> edi -;* V21 tmp20 [V21 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V22 tmp21 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V23 tmp22 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V24 tmp23 [V24,T03] ( 2, 4 ) ref -> eax single-def "Single return block return value" -; V25 FramesRoot [V25,T01] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" -; V26 PInvokeFrame [V26 ] ( 8, 8 ) struct (32) [ebp-0x4C] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V27 tmp26 [V27 ] ( 4, 6 ) int -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V13._ptr (fldOffset=0x0)" P-DEP -; V28 tmp27 [V28 ] ( 3, 5 ) int -> [ebp-0x28] do-not-enreg[X] addr-exposed "field V13._handle (fldOffset=0x4)" P-DEP -; V29 tmp28 [V29,T10] ( 2, 2 ) int -> edx "field V14._ptr (fldOffset=0x0)" P-INDEP -; V30 tmp29 [V30,T11] ( 2, 2 ) int -> ecx "field V14._handle (fldOffset=0x4)" P-INDEP -;* V31 tmp30 [V31 ] ( 0, 0 ) int -> zero-ref "field V15._ptr (fldOffset=0x0)" P-INDEP -; V32 tmp31 [V32,T12] ( 2, 2 ) int -> edi "field V21._ptr (fldOffset=0x0)" P-INDEP -; V33 tmp32 [V33,T15] ( 2, 0 ) ref -> edx single-def "argument with side effect" -;* V34 tmp33 [V34 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -; V35 GsCookie [V35 ] ( 1, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "GSSecurityCookie" -; V36 cse0 [V36,T05] ( 3, 3 ) int -> eax "CSE - moderate"
+; V02 tmp1 [V02,T01] ( 4, 6 ) int -> edi "Inlining Arg" +; V03 tmp2 [V03,T05] ( 2, 4 ) int -> eax "Inlining Arg" +; V04 tmp3 [V04,T06] ( 3, 3 ) ref -> edx class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V05 tmp4 [V05 ] ( 3, 3 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" +; V06 tmp5 [V06,T11] ( 2, 2 ) int -> eax "Inline stloc first use temp" +; V07 tmp6 [V07,T15] ( 1, 1 ) int -> [ebp-0x1C] do-not-enreg[V] "GSCookie dummy for inlinee" +; V08 tmp7 [V08,T09] ( 2, 2 ) ref -> eax class-hnd single-def "Inline return value spill temp" <System.Array> +; V09 tmp8 [V09 ] ( 4, 4 ) ref -> [ebp-0x20] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V10 tmp9 [V10 ] ( 3, 6 ) ref -> [ebp-0x24] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> +; V11 tmp10 [V11 ] ( 5, 10 ) struct ( 8) [ebp-0x2C] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V12 tmp11 [V12 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V13 tmp12 [V13 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V14 tmp13 [V14,T03] ( 3, 5 ) ref -> edx class-hnd exact single-def "dup spill" <System.RuntimeType> +; V15 tmp14 [V15,T10] ( 2, 2 ) byref -> ecx single-def +;* V16 tmp15 [V16 ] ( 0, 0 ) ref -> zero-ref single-def ptr +;* V17 tmp16 [V17 ] ( 0, 0 ) byref -> zero-ref single-def ptr +; V18 tmp17 [V18,T08] ( 3, 2 ) int -> edi +;* V19 tmp18 [V19 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V21 tmp20 [V21 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V22 tmp21 [V22,T04] ( 2, 4 ) ref -> eax single-def "Single return block return value" +; V23 FramesRoot [V23,T02] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" +; V24 PInvokeFrame [V24 ] ( 8, 8 ) struct (32) [ebp-0x4C] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V25 tmp24 [V25 ] ( 4, 6 ) int -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V11._ptr (fldOffset=0x0)" P-DEP +; V26 tmp25 [V26 ] ( 3, 5 ) int -> [ebp-0x28] do-not-enreg[X] addr-exposed "field V11._handle (fldOffset=0x4)" P-DEP +; V27 tmp26 [V27,T12] ( 2, 2 ) int -> edx "field V12._ptr (fldOffset=0x0)" P-INDEP +; V28 tmp27 [V28,T13] ( 2, 2 ) int -> ecx "field V12._handle (fldOffset=0x4)" P-INDEP +;* V29 tmp28 [V29 ] ( 0, 0 ) int -> zero-ref "field V13._ptr (fldOffset=0x0)" P-INDEP +; V30 tmp29 [V30,T14] ( 2, 2 ) int -> edi "field V19._ptr (fldOffset=0x0)" P-INDEP +; V31 tmp30 [V31,T16] ( 2, 0 ) ref -> edx single-def "argument with side effect" +;* V32 tmp31 [V32 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V33 GsCookie [V33 ] ( 1, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "GSSecurityCookie" +; V34 cse0 [V34,T07] ( 3, 3 ) int -> eax "CSE - moderate" +; V35 rat0 [V35,T00] ( 5, 7.50) ref -> edx "replacement local"
; ; Lcl frame size = 64 @@ -66,22 +65,38 @@ G_M41785_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov eax, ebp mov dword ptr [ebp-0x34], eax test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M41785_IG13
+ je G_M41785_IG16
;; size=26 bbWeight=1 PerfScore 6.75
-G_M41785_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41785_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [D1FFAB1EH] ; static handle mov edi, eax test edi, edi
- jl G_M41785_IG14
+ jl G_M41785_IG17 + mov edx, 0xD1FFAB1E + ; gcrRegs +[edx] + test edx, edx + je SHORT G_M41785_IG06 + ;; size=24 bbWeight=1 PerfScore 5.00 +G_M41785_IG04: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [edx], 0xD1FFAB1E + je SHORT G_M41785_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M41785_IG05: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[edx] + xor edx, edx + ; gcrRegs +[edx] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M41785_IG06: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref + test edx, edx + je G_M41785_IG18
mov dword ptr [ebp-0x18], edi mov dword ptr [ebp-0x14], eax lea eax, [ebp-0x18]
- mov gword ptr [ebp-0x24], 0xD1FFAB1E
+ mov gword ptr [ebp-0x24], edx
xor edx, edx
- ; gcrRegs +[edx]
mov gword ptr [ebp-0x20], edx
- ;; size=36 bbWeight=1 PerfScore 8.25 -G_M41785_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=25 bbWeight=1 PerfScore 6.00 +G_M41785_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[edx] mov dword ptr [ebp-0x2C], edx mov dword ptr [ebp-0x28], edx @@ -92,18 +107,18 @@ G_M41785_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea ecx, bword ptr [ebp-0x2C] ; byrRegs +[ecx] test edx, edx
- jne SHORT G_M41785_IG06
+ jne SHORT G_M41785_IG09
;; size=22 bbWeight=1 PerfScore 6.25
-G_M41785_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref, isz
+G_M41785_IG08: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref, isz
; gcrRegs -[edx] xor edi, edi
- jmp SHORT G_M41785_IG07
+ jmp SHORT G_M41785_IG10
;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M41785_IG06: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000002 {ecx}, byref
+G_M41785_IG09: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000002 {ecx}, byref
; gcrRegs +[edx] mov edi, dword ptr [edx+0x0C] ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M41785_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
+G_M41785_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
; gcrRegs -[edx] mov dword ptr [ecx+0x04], edi mov edx, dword ptr [ebp-0x2C] @@ -120,23 +135,23 @@ G_M41785_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {e mov dword ptr [ebp-0x40], 0xD1FFAB1E mov eax, esp mov dword ptr [ebp-0x3C], eax
- lea eax, G_M41785_IG10
+ lea eax, G_M41785_IG13
mov dword ptr [ebp-0x38], eax mov byte ptr [esi+0x08], 0 ;; size=47 bbWeight=1 PerfScore 15.75
-G_M41785_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41785_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, 0xD1FFAB1E ; function address ;; size=5 bbWeight=1 PerfScore 0.25
-G_M41785_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41785_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call eax ; <unknown method> ;; size=2 bbWeight=1 PerfScore 3.00
-G_M41785_IG10: ; bbWeight=1, isz, extend
+G_M41785_IG13: ; bbWeight=1, isz, extend
mov byte ptr [esi+0x08], 1 cmp dword ptr [D1FFAB1EH], 0
- je SHORT G_M41785_IG11
+ je SHORT G_M41785_IG14
call CORINFO_HELP_STOP_FOR_GC ;; size=18 bbWeight=1 PerfScore 6.00
-G_M41785_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M41785_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
xor eax, eax mov dword ptr [ebp-0x38], eax mov eax, gword ptr [ebp-0x20] @@ -149,12 +164,12 @@ G_M41785_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; byrRegs +[ecx] mov dword ptr [esi+0x0C], ecx cmp dword ptr [ebp-0x10], 0xD1FFAB1E
- je SHORT G_M41785_IG12
+ je SHORT G_M41785_IG15
call CORINFO_HELP_FAIL_FAST ; gcrRegs -[eax] ; byrRegs -[ecx] ;; size=33 bbWeight=1 PerfScore 9.50
-G_M41785_IG12: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M41785_IG15: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
; gcrRegs +[eax] lea esp, [ebp-0x0C] pop ebx @@ -163,14 +178,14 @@ G_M41785_IG12: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M41785_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M41785_IG16: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] mov ecx, 0xD1FFAB1E mov edx, 417 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M41785_IG03 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M41785_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41785_IG17: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 0x784 mov edx, 0xD1FFAB1E call CORINFO_HELP_STRCNS @@ -182,7 +197,13 @@ G_M41785_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs -[eax edx] int3 ;; size=26 bbWeight=0 PerfScore 0.00
+G_M41785_IG18: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov ecx, 57 + mov edx, 80 + call [System.ThrowHelper:ThrowArgumentException(int,int)] + int3 + ;; size=17 bbWeight=0 PerfScore 0.00
-; Total bytes of code 274, prolog size 24, PerfScore 69.12, instruction count 87, allocated bytes for code 274 (MethodHash=69095cc6) for method System.Tests.Perf_Array:ArrayCreate2D():System.Array:this (FullOpts)
+; Total bytes of code 314, prolog size 24, PerfScore 73.94, instruction count 99, allocated bytes for code 314 (MethodHash=69095cc6) for method System.Tests.Perf_Array:ArrayCreate2D():System.Array:this (FullOpts)
; ============================================================

+40 (+15.21%) : 23759.dasm - System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)

@@ -8,36 +8,35 @@ ; 0 inlinees with PGO data; 7 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 3, 3 ) ref -> [ebp-0x24] this class-hnd single-def <System.Tests.Perf_Array>
+; V00 this [V00,T02] ( 3, 3 ) ref -> [ebp-0x24] this class-hnd single-def <System.Tests.Perf_Array>
;* V01 tmp0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array> ; V02 tmp1 [V02 ] ( 3, 6 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
-;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* 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,T03] ( 3, 4 ) int -> edi "Inlining Arg" -; V07 tmp6 [V07,T05] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> -; V08 tmp7 [V08 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V09 tmp8 [V09 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> -; V10 tmp9 [V10 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V12 tmp11 [V12 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V13 tmp12 [V13,T02] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> -; V14 tmp13 [V14,T06] ( 2, 2 ) byref -> edx single-def -;* V15 tmp14 [V15 ] ( 0, 0 ) ref -> zero-ref single-def -;* V16 tmp15 [V16 ] ( 0, 0 ) byref -> zero-ref single-def -; V17 tmp16 [V17,T04] ( 3, 2 ) int -> ecx -;* V18 tmp17 [V18 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V19 tmp18 [V19 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V21 FramesRoot [V21,T00] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" -; V22 PInvokeFrame [V22 ] ( 8, 8 ) struct (32) [ebp-0x44] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V23 tmp22 [V23 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V10._ptr (fldOffset=0x0)" P-DEP -; V24 tmp23 [V24 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V10._handle (fldOffset=0x4)" P-DEP -; V25 tmp24 [V25,T07] ( 2, 2 ) int -> eax "field V11._ptr (fldOffset=0x0)" P-INDEP -; V26 tmp25 [V26,T08] ( 2, 2 ) int -> edx "field V11._handle (fldOffset=0x4)" P-INDEP -;* V27 tmp26 [V27 ] ( 0, 0 ) int -> zero-ref "field V12._ptr (fldOffset=0x0)" P-INDEP -; V28 tmp27 [V28,T09] ( 2, 2 ) int -> ecx "field V18._ptr (fldOffset=0x0)" P-INDEP -; V29 tmp28 [V29,T11] ( 2, 0 ) ref -> edx single-def "argument with side effect"
+; V03 tmp2 [V03,T05] ( 3, 3 ) ref -> eax class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V04 tmp3 [V04,T04] ( 3, 4 ) int -> edi "Inlining Arg" +; V05 tmp4 [V05,T07] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> +; V06 tmp5 [V06 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V07 tmp6 [V07 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> +; V08 tmp7 [V08 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V11 tmp10 [V11,T03] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> +; V12 tmp11 [V12,T08] ( 2, 2 ) byref -> edx single-def +;* V13 tmp12 [V13 ] ( 0, 0 ) ref -> zero-ref single-def +;* V14 tmp13 [V14 ] ( 0, 0 ) byref -> zero-ref single-def +; V15 tmp14 [V15,T06] ( 3, 2 ) int -> ecx +;* V16 tmp15 [V16 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V17 tmp16 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V18 tmp17 [V18 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V19 FramesRoot [V19,T01] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" +; V20 PInvokeFrame [V20 ] ( 8, 8 ) struct (32) [ebp-0x44] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V21 tmp20 [V21 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V08._ptr (fldOffset=0x0)" P-DEP +; V22 tmp21 [V22 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V08._handle (fldOffset=0x4)" P-DEP +; V23 tmp22 [V23,T09] ( 2, 2 ) int -> eax "field V09._ptr (fldOffset=0x0)" P-INDEP +; V24 tmp23 [V24,T10] ( 2, 2 ) int -> edx "field V09._handle (fldOffset=0x4)" P-INDEP +;* V25 tmp24 [V25 ] ( 0, 0 ) int -> zero-ref "field V10._ptr (fldOffset=0x0)" P-INDEP +; V26 tmp25 [V26,T11] ( 2, 2 ) int -> ecx "field V16._ptr (fldOffset=0x0)" P-INDEP +; V27 tmp26 [V27,T12] ( 2, 0 ) ref -> edx single-def "argument with side effect" +; V28 rat0 [V28,T00] ( 5, 7.50) ref -> eax "replacement local"
; ; Lcl frame size = 56 @@ -54,26 +53,42 @@ G_M58256_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov gword ptr [ebp-0x24], ecx ; GC ptr vars +{V00} ;; size=20 bbWeight=1 PerfScore 7.75
-G_M58256_IG02: ; bbWeight=1, gcVars=00000002 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M58256_IG02: ; bbWeight=1, gcVars=00000004 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
lea edi, [ebp-0x40] call CORINFO_HELP_INIT_PINVOKE_FRAME mov eax, ebp mov dword ptr [ebp-0x2C], eax test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M58256_IG14
+ je G_M58256_IG17
;; size=26 bbWeight=1 PerfScore 6.75
-G_M58256_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58256_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [D1FFAB1EH] ; static handle mov dword ptr [ebp-0x10], eax mov edi, dword ptr [ebp-0x10] test edi, edi
- jl G_M58256_IG15 - mov gword ptr [ebp-0x18], 0xD1FFAB1E
+ jl G_M58256_IG18 + mov eax, 0xD1FFAB1E + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M58256_IG06 + ;; size=28 bbWeight=1 PerfScore 6.75 +G_M58256_IG04: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [eax], 0xD1FFAB1E + je SHORT G_M58256_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M58256_IG05: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax]
xor eax, eax ; gcrRegs +[eax]
+ ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M58256_IG06: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + test eax, eax + je G_M58256_IG19 + mov gword ptr [ebp-0x18], eax + xor eax, eax
mov gword ptr [ebp-0x14], eax
- ;; size=31 bbWeight=1 PerfScore 7.50 -G_M58256_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M58256_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] mov dword ptr [ebp-0x20], eax mov dword ptr [ebp-0x1C], eax @@ -84,18 +99,18 @@ G_M58256_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea edx, bword ptr [ebp-0x20] ; byrRegs +[edx] test eax, eax
- jne SHORT G_M58256_IG06
+ jne SHORT G_M58256_IG09
;; size=22 bbWeight=1 PerfScore 6.25
-G_M58256_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref, isz
+G_M58256_IG08: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref, isz
; gcrRegs -[eax] xor ecx, ecx
- jmp SHORT G_M58256_IG07
+ jmp SHORT G_M58256_IG10
;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M58256_IG06: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
+G_M58256_IG09: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
; gcrRegs +[eax] mov ecx, dword ptr [eax+0x0C] ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M58256_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
+G_M58256_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
; gcrRegs -[eax] mov dword ptr [edx+0x04], ecx mov eax, dword ptr [ebp-0x20] @@ -113,29 +128,29 @@ G_M58256_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {e mov dword ptr [ebp-0x38], 0xD1FFAB1E mov eax, esp mov dword ptr [ebp-0x34], eax
- lea eax, G_M58256_IG10
+ lea eax, G_M58256_IG13
mov dword ptr [ebp-0x30], eax mov byte ptr [esi+0x08], 0 ;; size=50 bbWeight=1 PerfScore 16.25
-G_M58256_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58256_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, 0xD1FFAB1E ; function address ;; size=5 bbWeight=1 PerfScore 0.25
-G_M58256_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58256_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call eax ; <unknown method> ;; size=2 bbWeight=1 PerfScore 3.00
-G_M58256_IG10: ; bbWeight=1, isz, extend
+G_M58256_IG13: ; bbWeight=1, isz, extend
mov byte ptr [esi+0x08], 1 cmp dword ptr [D1FFAB1EH], 0
- je SHORT G_M58256_IG11
+ je SHORT G_M58256_IG14
call CORINFO_HELP_STOP_FOR_GC ;; size=18 bbWeight=1 PerfScore 6.00
-G_M58256_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58256_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor edx, edx mov dword ptr [ebp-0x30], edx mov ecx, gword ptr [ebp-0x14] ; gcrRegs +[ecx] ;; size=8 bbWeight=1 PerfScore 2.25
-G_M58256_IG12: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
+G_M58256_IG15: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
mov gword ptr [ebp-0x14], edx mov ebx, gword ptr [ebp-0x24] ; gcrRegs +[ebx] @@ -149,7 +164,7 @@ G_M58256_IG12: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 ; byrRegs +[ecx] mov dword ptr [esi+0x0C], ecx ;; size=20 bbWeight=1 PerfScore 5.50
-G_M58256_IG13: ; bbWeight=1, epilog, nogc, extend
+G_M58256_IG16: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -157,7 +172,7 @@ G_M58256_IG13: ; bbWeight=1, epilog, nogc, extend pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M58256_IG14: ; bbWeight=0, gcVars=00000002 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M58256_IG17: ; bbWeight=0, gcVars=00000004 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[ecx] ; GC ptr vars +{V00} mov ecx, 0xD1FFAB1E @@ -165,7 +180,7 @@ G_M58256_IG14: ; bbWeight=0, gcVars=00000002 {V00}, gcrefRegs=00000000 {} call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M58256_IG03 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M58256_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M58256_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V00} mov ecx, 381 mov edx, 0xD1FFAB1E @@ -178,7 +193,13 @@ G_M58256_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b ; gcrRegs -[eax edx] int3 ;; size=26 bbWeight=0 PerfScore 0.00
+G_M58256_IG19: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov ecx, 57 + mov edx, 80 + call [System.ThrowHelper:ThrowArgumentException(int,int)] + int3 + ;; size=17 bbWeight=0 PerfScore 0.00
-; Total bytes of code 263, prolog size 17, PerfScore 67.12, instruction count 85, allocated bytes for code 263 (MethodHash=8f341c6f) for method System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)
+; Total bytes of code 303, prolog size 17, PerfScore 71.94, instruction count 97, allocated bytes for code 303 (MethodHash=8f341c6f) for method System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)
; ============================================================

+40 (+15.94%) : 23171.dasm - System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)

@@ -11,34 +11,33 @@ ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Tests.Perf_Array> ;* V01 tmp0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array> ; V02 tmp1 [V02 ] ( 3, 6 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
-;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* 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,T02] ( 3, 4 ) int -> edi "Inlining Arg" -; V07 tmp6 [V07,T05] ( 2, 2 ) ref -> eax class-hnd single-def "Inline return value spill temp" <System.Array> -; V08 tmp7 [V08 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V09 tmp8 [V09 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> -; V10 tmp9 [V10 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V12 tmp11 [V12 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V13 tmp12 [V13,T01] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> -; V14 tmp13 [V14,T06] ( 2, 2 ) byref -> edx single-def -;* V15 tmp14 [V15 ] ( 0, 0 ) ref -> zero-ref single-def -;* V16 tmp15 [V16 ] ( 0, 0 ) byref -> zero-ref single-def -; V17 tmp16 [V17,T04] ( 3, 2 ) int -> ecx -;* V18 tmp17 [V18 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V19 tmp18 [V19 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V21 tmp20 [V21,T03] ( 2, 4 ) ref -> eax single-def "Single return block return value" -; V22 FramesRoot [V22,T00] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" -; V23 PInvokeFrame [V23 ] ( 8, 8 ) struct (32) [ebp-0x40] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V24 tmp23 [V24 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V10._ptr (fldOffset=0x0)" P-DEP -; V25 tmp24 [V25 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V10._handle (fldOffset=0x4)" P-DEP -; V26 tmp25 [V26,T07] ( 2, 2 ) int -> eax "field V11._ptr (fldOffset=0x0)" P-INDEP -; V27 tmp26 [V27,T08] ( 2, 2 ) int -> edx "field V11._handle (fldOffset=0x4)" P-INDEP -;* V28 tmp27 [V28 ] ( 0, 0 ) int -> zero-ref "field V12._ptr (fldOffset=0x0)" P-INDEP -; V29 tmp28 [V29,T09] ( 2, 2 ) int -> ecx "field V18._ptr (fldOffset=0x0)" P-INDEP -; V30 tmp29 [V30,T11] ( 2, 0 ) ref -> edx single-def "argument with side effect"
+; V03 tmp2 [V03,T05] ( 3, 3 ) ref -> eax class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V04 tmp3 [V04,T03] ( 3, 4 ) int -> edi "Inlining Arg" +; V05 tmp4 [V05,T07] ( 2, 2 ) ref -> eax class-hnd single-def "Inline return value spill temp" <System.Array> +; V06 tmp5 [V06 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V07 tmp6 [V07 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> +; V08 tmp7 [V08 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V11 tmp10 [V11,T02] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> +; V12 tmp11 [V12,T08] ( 2, 2 ) byref -> edx single-def +;* V13 tmp12 [V13 ] ( 0, 0 ) ref -> zero-ref single-def +;* V14 tmp13 [V14 ] ( 0, 0 ) byref -> zero-ref single-def +; V15 tmp14 [V15,T06] ( 3, 2 ) int -> ecx +;* V16 tmp15 [V16 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V17 tmp16 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V18 tmp17 [V18 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V19 tmp18 [V19,T04] ( 2, 4 ) ref -> eax single-def "Single return block return value" +; V20 FramesRoot [V20,T01] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" +; V21 PInvokeFrame [V21 ] ( 8, 8 ) struct (32) [ebp-0x40] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V22 tmp21 [V22 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V08._ptr (fldOffset=0x0)" P-DEP +; V23 tmp22 [V23 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V08._handle (fldOffset=0x4)" P-DEP +; V24 tmp23 [V24,T09] ( 2, 2 ) int -> eax "field V09._ptr (fldOffset=0x0)" P-INDEP +; V25 tmp24 [V25,T10] ( 2, 2 ) int -> edx "field V09._handle (fldOffset=0x4)" P-INDEP +;* V26 tmp25 [V26 ] ( 0, 0 ) int -> zero-ref "field V10._ptr (fldOffset=0x0)" P-INDEP +; V27 tmp26 [V27,T11] ( 2, 2 ) int -> ecx "field V16._ptr (fldOffset=0x0)" P-INDEP +; V28 tmp27 [V28,T12] ( 2, 0 ) ref -> edx single-def "argument with side effect" +; V29 rat0 [V29,T00] ( 5, 7.50) ref -> eax "replacement local"
; ; Lcl frame size = 52 @@ -59,20 +58,36 @@ G_M36762_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov eax, ebp mov dword ptr [ebp-0x28], eax test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M36762_IG13
+ je G_M36762_IG16
;; size=26 bbWeight=1 PerfScore 6.75
-G_M36762_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36762_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [D1FFAB1EH] ; static handle mov dword ptr [ebp-0x10], eax mov edi, dword ptr [ebp-0x10] test edi, edi
- jl G_M36762_IG14 - mov gword ptr [ebp-0x18], 0xD1FFAB1E
+ jl G_M36762_IG17 + mov eax, 0xD1FFAB1E + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M36762_IG06 + ;; size=28 bbWeight=1 PerfScore 6.75 +G_M36762_IG04: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [eax], 0xD1FFAB1E + je SHORT G_M36762_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M36762_IG05: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax]
xor eax, eax ; gcrRegs +[eax]
+ ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M36762_IG06: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + test eax, eax + je G_M36762_IG18 + mov gword ptr [ebp-0x18], eax + xor eax, eax
mov gword ptr [ebp-0x14], eax
- ;; size=31 bbWeight=1 PerfScore 7.50 -G_M36762_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M36762_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] mov dword ptr [ebp-0x20], eax mov dword ptr [ebp-0x1C], eax @@ -83,18 +98,18 @@ G_M36762_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea edx, bword ptr [ebp-0x20] ; byrRegs +[edx] test eax, eax
- jne SHORT G_M36762_IG06
+ jne SHORT G_M36762_IG09
;; size=22 bbWeight=1 PerfScore 6.25
-G_M36762_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref, isz
+G_M36762_IG08: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref, isz
; gcrRegs -[eax] xor ecx, ecx
- jmp SHORT G_M36762_IG07
+ jmp SHORT G_M36762_IG10
;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M36762_IG06: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
+G_M36762_IG09: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
; gcrRegs +[eax] mov ecx, dword ptr [eax+0x0C] ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M36762_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
+G_M36762_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
; gcrRegs -[eax] mov dword ptr [edx+0x04], ecx mov eax, dword ptr [ebp-0x20] @@ -112,23 +127,23 @@ G_M36762_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {e mov dword ptr [ebp-0x34], 0xD1FFAB1E mov eax, esp mov dword ptr [ebp-0x30], eax
- lea eax, G_M36762_IG10
+ lea eax, G_M36762_IG13
mov dword ptr [ebp-0x2C], eax mov byte ptr [esi+0x08], 0 ;; size=50 bbWeight=1 PerfScore 16.25
-G_M36762_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36762_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, 0xD1FFAB1E ; function address ;; size=5 bbWeight=1 PerfScore 0.25
-G_M36762_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36762_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call eax ; <unknown method> ;; size=2 bbWeight=1 PerfScore 3.00
-G_M36762_IG10: ; bbWeight=1, isz, extend
+G_M36762_IG13: ; bbWeight=1, isz, extend
mov byte ptr [esi+0x08], 1 cmp dword ptr [D1FFAB1EH], 0
- je SHORT G_M36762_IG11
+ je SHORT G_M36762_IG14
call CORINFO_HELP_STOP_FOR_GC ;; size=18 bbWeight=1 PerfScore 6.00
-G_M36762_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36762_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor eax, eax mov dword ptr [ebp-0x2C], eax mov eax, gword ptr [ebp-0x14] @@ -141,7 +156,7 @@ G_M36762_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; byrRegs +[ecx] mov dword ptr [esi+0x0C], ecx ;; size=19 bbWeight=1 PerfScore 5.50
-G_M36762_IG12: ; bbWeight=1, epilog, nogc, extend
+G_M36762_IG15: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -149,7 +164,7 @@ G_M36762_IG12: ; bbWeight=1, epilog, nogc, extend pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M36762_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M36762_IG16: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] ; byrRegs -[ecx] mov ecx, 0xD1FFAB1E @@ -157,7 +172,7 @@ G_M36762_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M36762_IG03 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M36762_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36762_IG17: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 381 mov edx, 0xD1FFAB1E call CORINFO_HELP_STRCNS @@ -169,7 +184,13 @@ G_M36762_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs -[eax edx] int3 ;; size=26 bbWeight=0 PerfScore 0.00
+G_M36762_IG18: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov ecx, 57 + mov edx, 80 + call [System.ThrowHelper:ThrowArgumentException(int,int)] + int3 + ;; size=17 bbWeight=0 PerfScore 0.00
-; Total bytes of code 251, prolog size 17, PerfScore 63.88, instruction count 82, allocated bytes for code 251 (MethodHash=b60d7065) for method System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)
+; Total bytes of code 291, prolog size 17, PerfScore 68.69, instruction count 94, allocated bytes for code 291 (MethodHash=b60d7065) for method System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)
; ============================================================

benchmarks.run_pgo.windows.x86.checked.mch

-19 (-32.76%) : 16351.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%) : 50343.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)
; ============================================================

-46 (-17.23%) : 1812.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttributeSystem.__Canon:System.__Canon (Tier1)

@@ -8,25 +8,19 @@ ; 4 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T01] ( 7, 5 ) ref -> esi class-hnd single-def <System.Reflection.Assembly> -; V01 TypeCtx [V01,T03] ( 4, 4 ) int -> edx single-def -;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V03 tmp1 [V03,T10] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T02] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon> -; V05 tmp3 [V05,T09] ( 4, 1.62) ref -> edx class-hnd "Inline return value spill temp" <System.Attribute> -;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Attribute[]> -; V07 tmp5 [V07,T12] ( 3, 1 ) ref -> edx class-hnd single-def "Inline stloc first use temp" <System.Attribute> -;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V09 tmp7 [V09,T11] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable" -; V10 tmp8 [V10,T00] ( 8, 7.75) ref -> edx class-hnd "spilling QMark2" <System.Attribute[]> -; V11 tmp9 [V11,T13] ( 3, 0 ) ref -> esi class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V12 tmp10 [V12,T08] ( 5, 2.12) ref -> eax "guarded devirt return temp" -; V13 tmp11 [V13,T04] ( 3, 4 ) ref -> eax single-def "guarded devirt arg temp" -;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeAssembly> -; V15 tmp13 [V15,T05] ( 2, 4 ) ref -> ecx single-def "argument with side effect" -; V16 tmp14 [V16,T14] ( 2, 0 ) ref -> edx single-def "argument with side effect" -; V17 cse0 [V17,T06] ( 5, 3.25) int -> edi "CSE - moderate" -; V18 cse1 [V18,T07] ( 3, 2.50) int -> ecx "CSE - moderate"
+; V00 arg0 [V00,T00] ( 7, 4.50) ref -> esi class-hnd single-def <System.Reflection.Assembly> +; V01 TypeCtx [V01,T01] ( 4, 4 ) int -> edx single-def +; V02 loc0 [V02,T06] ( 3, 1.50) ref -> edx class-hnd "Inline return value spill temp" <System.Attribute> +; V03 tmp1 [V03,T04] ( 4, 3 ) ref -> eax class-hnd single-def "Inline stloc first use temp" <System.Attribute[]> +; V04 tmp2 [V04,T09] ( 3, 1 ) ref -> edx class-hnd single-def "Inline stloc first use temp" <System.Attribute> +; V05 tmp3 [V05,T10] ( 3, 0 ) ref -> esi class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V06 tmp4 [V06,T07] ( 3, 1.50) ref -> eax "guarded devirt return temp" +; V07 tmp5 [V07,T05] ( 3, 3 ) ref -> eax single-def "guarded devirt arg temp" +;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeAssembly> +; V09 tmp7 [V09,T03] ( 2, 4 ) ref -> ecx single-def "argument with side effect" +; V10 tmp8 [V10,T11] ( 2, 0 ) ref -> edx single-def "argument with side effect" +; V11 cse0 [V11,T02] ( 5, 4 ) int -> edi "CSE - aggressive" +; V12 cse1 [V12,T08] ( 3, 1.50) int -> ecx "CSE - moderate"
; ; Lcl frame size = 4 @@ -40,9 +34,9 @@ G_M12223_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov esi, ecx ; gcrRegs +[esi] ;; size=11 bbWeight=1 PerfScore 5.50
-G_M12223_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M12223_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je G_M12223_IG12
+ je SHORT G_M12223_IG09
mov edi, dword ptr [edx+0x20] mov ecx, dword ptr [edi] call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE @@ -54,14 +48,16 @@ G_M12223_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 call [System.RuntimeType:IsSubclassOf(System.Type):ubyte:this] ; gcrRegs -[eax ecx edx] test eax, eax
- je G_M12223_IG13 - ;; size=39 bbWeight=1 PerfScore 11.00
+ je SHORT G_M12223_IG10 + ;; size=31 bbWeight=1 PerfScore 11.00
G_M12223_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref mov ecx, dword ptr [edi] call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[eax] cmp dword ptr [esi], 0xD1FFAB1E
- jne G_M12223_IG14
+ jne G_M12223_IG11 + ;; size=19 bbWeight=1 PerfScore 7.00 +G_M12223_IG04: ; bbWeight=0.50, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref
push 1 mov ecx, esi ; gcrRegs +[ecx] @@ -69,63 +65,40 @@ G_M12223_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs +[edx] call [System.Reflection.RuntimeAssembly:GetCustomAttributes(System.Type,ubyte):System.Object[]:this] ; gcrRegs -[ecx edx esi]
+ ;; size=12 bbWeight=0.50 PerfScore 2.25 +G_M12223_IG05: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
mov edx, eax ; gcrRegs +[edx]
- test edx, edx - je G_M12223_IG15 - ;; size=41 bbWeight=1 PerfScore 13.00 -G_M12223_IG04: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Attribute[]
- cmp dword ptr [edx], ecx - je SHORT G_M12223_IG06 - ;; size=9 bbWeight=0.25 PerfScore 1.06 -G_M12223_IG05: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx] - mov edx, eax - ; gcrRegs +[edx]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[edx]
+ test eax, eax + je SHORT G_M12223_IG12 + ;; size=16 bbWeight=1 PerfScore 2.75 +G_M12223_IG06: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + mov ecx, dword ptr [eax+0x04] + test ecx, ecx + je SHORT G_M12223_IG12 + mov eax, gword ptr [eax+0x08]
mov edx, eax ; gcrRegs +[edx]
- ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M12223_IG06: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov ecx, dword ptr [edx+0x04] - test ecx, ecx - je G_M12223_IG15 - ;; size=11 bbWeight=1 PerfScore 3.25 -G_M12223_IG07: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz - mov eax, gword ptr [edx+0x08] - ; gcrRegs +[eax] - mov edx, eax
cmp ecx, 1
- jne SHORT G_M12223_IG16 - ;; size=10 bbWeight=0.50 PerfScore 1.75 -G_M12223_IG08: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M12223_IG13 + ;; size=17 bbWeight=0.50 PerfScore 3.38 +G_M12223_IG07: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax]
- mov eax, edx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M12223_IG11 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M12223_IG09: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [edi]
- cmp dword ptr [eax], ecx - je SHORT G_M12223_IG11 - ;; size=6 bbWeight=0.25 PerfScore 1.50 -G_M12223_IG10: ; bbWeight=0.12, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[edx] +[eax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M12223_IG11: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=7 bbWeight=1 PerfScore 3.00 +G_M12223_IG08: ; bbWeight=1, epilog, nogc, extend
pop ecx pop esi pop edi pop ebp ret ;; size=5 bbWeight=1 PerfScore 3.00
-G_M12223_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M12223_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] mov ecx, 0x898 mov edx, 0xD1FFAB1E @@ -137,10 +110,10 @@ G_M12223_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b ; gcrRegs -[eax ecx] int3 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M12223_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M12223_IG10: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[esi] cmp dword ptr [edi], 0xD1FFAB1E
- je G_M12223_IG03
+ je SHORT G_M12223_IG03
mov ecx, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_NEWSFAST ; gcrRegs -[esi] +[eax] @@ -157,8 +130,8 @@ G_M12223_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs +[ecx] call CORINFO_HELP_THROW ; gcrRegs -[ecx esi]
- ;; size=47 bbWeight=0 PerfScore 0.00 -G_M12223_IG14: ; bbWeight=0, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref
+ ;; size=43 bbWeight=0 PerfScore 0.00 +G_M12223_IG11: ; bbWeight=0, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[eax esi] push 1 mov ecx, esi @@ -170,18 +143,15 @@ G_M12223_IG14: ; bbWeight=0, gcrefRegs=00000041 {eax esi}, byrefRegs=0000 mov eax, dword ptr [eax+0x38] call [eax+0x18]<unknown method> ; gcrRegs -[ecx edx esi] +[eax]
- mov edx, eax - ; gcrRegs +[edx] - test edx, edx - jne G_M12223_IG04 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M12223_IG15: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax edx]
+ jmp SHORT G_M12223_IG05 + ;; size=16 bbWeight=0 PerfScore 0.00 +G_M12223_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax]
xor edx, edx ; gcrRegs +[edx]
- jmp SHORT G_M12223_IG08
+ jmp SHORT G_M12223_IG07
;; size=4 bbWeight=0 PerfScore 0.00
-G_M12223_IG16: ; bbWeight=0, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref
+G_M12223_IG13: ; bbWeight=0, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref
mov ecx, edx ; gcrRegs +[ecx] call [<unknown method>] @@ -193,6 +163,6 @@ G_M12223_IG16: ; bbWeight=0, gcrefRegs=00000004 {edx}, byrefRegs=00000000 int3 ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 267, prolog size 9, PerfScore 41.88, instruction count 86, allocated bytes for code 267 (MethodHash=40b9d040) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
+; Total bytes of code 221, prolog size 9, PerfScore 37.88, instruction count 75, allocated bytes for code 221 (MethodHash=40b9d040) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
; ============================================================

+40 (+9.85%) : 116806.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (Tier0-FullOpts)

@@ -14,40 +14,39 @@ ; V03 tmp1 [V03,T00] ( 5, 40 ) ref -> [ebp-0x2C] class-hnd spill-single-def "impImportAndPushBox" <System.Array> ;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array> ; V05 tmp3 [V05 ] ( 3, 6 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
-;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V08 tmp6 [V08,T16] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -; V09 tmp7 [V09,T09] ( 3, 4 ) int -> edi "Inlining Arg" -; V10 tmp8 [V10,T10] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> -; V11 tmp9 [V11 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V12 tmp10 [V12 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> -; V13 tmp11 [V13 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V14 tmp12 [V14 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V15 tmp13 [V15 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V16 tmp14 [V16,T08] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> -; V17 tmp15 [V17,T11] ( 2, 2 ) byref -> edx single-def -;* V18 tmp16 [V18 ] ( 0, 0 ) ref -> zero-ref single-def -;* V19 tmp17 [V19 ] ( 0, 0 ) byref -> zero-ref single-def -; V20 tmp18 [V20,T15] ( 3, 1.50) int -> eax -;* V21 tmp19 [V21 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V22 tmp20 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V24 tmp22 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Int32> -; V25 tmp23 [V25,T06] ( 2, 4 ) int -> ecx "Inline return value spill temp" -;* V26 tmp24 [V26 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V27 tmp25 [V27,T04] ( 3, 10 ) int -> ecx "Inline stloc first use temp" -; V28 tmp26 [V28,T02] ( 3, 24 ) byref -> [ebp-0x30] spill-single-def "Inlining Arg" -;* V29 tmp27 [V29 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V30 FramesRoot [V30,T07] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" -; V31 PInvokeFrame [V31 ] ( 8, 8 ) struct (32) [ebp-0x50] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V32 tmp30 [V32 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V13._ptr (fldOffset=0x0)" P-DEP -; V33 tmp31 [V33 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V13._handle (fldOffset=0x4)" P-DEP -; V34 tmp32 [V34,T12] ( 2, 2 ) int -> eax single-def "field V14._ptr (fldOffset=0x0)" P-INDEP -; V35 tmp33 [V35,T13] ( 2, 2 ) int -> edx single-def "field V14._handle (fldOffset=0x4)" P-INDEP -;* V36 tmp34 [V36 ] ( 0, 0 ) int -> zero-ref "field V15._ptr (fldOffset=0x0)" P-INDEP -; V37 tmp35 [V37,T14] ( 2, 2 ) int -> ecx single-def "field V21._ptr (fldOffset=0x0)" P-INDEP -; V38 tmp36 [V38,T18] ( 2, 0 ) ref -> edx single-def "argument with side effect" -;* V39 cse0 [V39,T17] ( 0, 0 ) int -> zero-ref "CSE - moderate"
+; V06 tmp4 [V06,T11] ( 3, 3 ) ref -> eax class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V07 tmp5 [V07,T10] ( 3, 4 ) int -> edi "Inlining Arg" +; V08 tmp6 [V08,T12] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> +; V09 tmp7 [V09 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V10 tmp8 [V10 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> +; V11 tmp9 [V11 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V12 tmp10 [V12 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V13 tmp11 [V13 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V14 tmp12 [V14,T09] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> +; V15 tmp13 [V15,T13] ( 2, 2 ) byref -> edx single-def +;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref single-def +;* V17 tmp15 [V17 ] ( 0, 0 ) byref -> zero-ref single-def +; V18 tmp16 [V18,T17] ( 3, 1.50) int -> eax +;* V19 tmp17 [V19 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V20 tmp18 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V22 tmp20 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Int32> +; V23 tmp21 [V23,T07] ( 2, 4 ) int -> ecx "Inline return value spill temp" +;* V24 tmp22 [V24 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V25 tmp23 [V25,T04] ( 3, 10 ) int -> ecx "Inline stloc first use temp" +; V26 tmp24 [V26,T02] ( 3, 24 ) byref -> [ebp-0x30] spill-single-def "Inlining Arg" +;* V27 tmp25 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V28 FramesRoot [V28,T08] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" +; V29 PInvokeFrame [V29 ] ( 8, 8 ) struct (32) [ebp-0x50] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V30 tmp28 [V30 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V11._ptr (fldOffset=0x0)" P-DEP +; V31 tmp29 [V31 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V11._handle (fldOffset=0x4)" P-DEP +; V32 tmp30 [V32,T14] ( 2, 2 ) int -> eax single-def "field V12._ptr (fldOffset=0x0)" P-INDEP +; V33 tmp31 [V33,T15] ( 2, 2 ) int -> edx single-def "field V12._handle (fldOffset=0x4)" P-INDEP +;* V34 tmp32 [V34 ] ( 0, 0 ) int -> zero-ref "field V13._ptr (fldOffset=0x0)" P-INDEP +; V35 tmp33 [V35,T16] ( 2, 2 ) int -> ecx single-def "field V19._ptr (fldOffset=0x0)" P-INDEP +; V36 tmp34 [V36,T19] ( 2, 0 ) ref -> edx single-def "argument with side effect" +;* V37 cse0 [V37,T18] ( 0, 0 ) int -> zero-ref "CSE - moderate" +; V38 rat0 [V38,T06] ( 5, 7.50) ref -> eax "replacement local"
; ; Lcl frame size = 68 @@ -70,20 +69,36 @@ G_M36671_IG02: ; bbWeight=1, gcVars=00000020 {V00}, gcrefRegs=00000000 {} mov eax, ebp mov dword ptr [ebp-0x38], eax test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M36671_IG19
+ je G_M36671_IG22
;; size=26 bbWeight=1 PerfScore 6.75
-G_M36671_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [D1FFAB1EH] ; static handle mov dword ptr [ebp-0x10], eax mov edi, dword ptr [ebp-0x10] test edi, edi
- jl G_M36671_IG20 - mov gword ptr [ebp-0x18], 0xD1FFAB1E
+ jl G_M36671_IG23 + mov eax, 0xD1FFAB1E + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M36671_IG06 + ;; size=28 bbWeight=1 PerfScore 6.75 +G_M36671_IG04: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [eax], 0xD1FFAB1E + je SHORT G_M36671_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M36671_IG05: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax]
xor eax, eax ; gcrRegs +[eax]
+ ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M36671_IG06: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + test eax, eax + je G_M36671_IG24 + mov gword ptr [ebp-0x18], eax + xor eax, eax
mov gword ptr [ebp-0x14], eax
- ;; size=31 bbWeight=1 PerfScore 7.50 -G_M36671_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M36671_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax] mov dword ptr [ebp-0x20], eax mov dword ptr [ebp-0x1C], eax @@ -94,13 +109,13 @@ G_M36671_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea edx, bword ptr [ebp-0x20] ; byrRegs +[edx] test eax, eax
- je G_M36671_IG21
+ je G_M36671_IG25
;; size=26 bbWeight=1 PerfScore 6.25
-G_M36671_IG05: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
+G_M36671_IG08: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
mov eax, dword ptr [eax+0x0C] ; gcrRegs -[eax] ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M36671_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
+G_M36671_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
mov dword ptr [edx+0x04], eax mov eax, dword ptr [ebp-0x20] mov edx, dword ptr [ebp-0x1C] @@ -117,29 +132,29 @@ G_M36671_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {e mov dword ptr [ebp-0x44], 0xD1FFAB1E mov eax, esp mov dword ptr [ebp-0x40], eax
- lea eax, G_M36671_IG09
+ lea eax, G_M36671_IG12
mov dword ptr [ebp-0x3C], eax mov byte ptr [esi+0x08], 0 ;; size=50 bbWeight=1 PerfScore 16.25
-G_M36671_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, 0xD1FFAB1E ; function address ;; size=5 bbWeight=1 PerfScore 0.25
-G_M36671_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call eax ; <unknown method> ;; size=2 bbWeight=1 PerfScore 3.00
-G_M36671_IG09: ; bbWeight=1, isz, extend
+G_M36671_IG12: ; bbWeight=1, isz, extend
mov byte ptr [esi+0x08], 1 cmp dword ptr [D1FFAB1EH], 0
- je SHORT G_M36671_IG10
+ je SHORT G_M36671_IG13
call CORINFO_HELP_STOP_FOR_GC ;; size=18 bbWeight=1 PerfScore 6.00
-G_M36671_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG13: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor edx, edx mov dword ptr [ebp-0x3C], edx mov ecx, gword ptr [ebp-0x14] ; gcrRegs +[ecx] ;; size=8 bbWeight=1 PerfScore 2.25
-G_M36671_IG11: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+G_M36671_IG14: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
mov gword ptr [ebp-0x14], edx mov ebx, gword ptr [ebp-0x24] ; gcrRegs +[ebx] @@ -151,9 +166,9 @@ G_M36671_IG11: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 ; byrRegs -[edx] xor edi, edi cmp dword ptr [D1FFAB1EH], 0
- jle SHORT G_M36671_IG16
+ jle SHORT G_M36671_IG19
;; size=25 bbWeight=1 PerfScore 7.75
-G_M36671_IG12: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
+G_M36671_IG15: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
mov ecx, 0xD1FFAB1E ; System.Int32 call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax] @@ -166,25 +181,25 @@ G_M36671_IG12: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 mov dword ptr [eax+0x04], edi mov ecx, dword ptr [edx] mov bword ptr [ebp-0x30], ecx
- ; GC ptr vars +{V28}
+ ; GC ptr vars +{V26}
test dword ptr [ecx], 0xD1FFAB1E
- je G_M36671_IG22
+ je G_M36671_IG26
;; size=39 bbWeight=4 PerfScore 53.00
-G_M36671_IG13: ; bbWeight=4, gcVars=00000007 {V02 V03 V28}, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000002 {ecx}, gcvars, byref, isz
+G_M36671_IG16: ; bbWeight=4, gcVars=00000007 {V02 V03 V26}, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000002 {ecx}, gcvars, byref, isz
; gcrRegs -[eax] ; byrRegs +[ecx] mov ecx, dword ptr [ecx+0x04] ; byrRegs -[ecx] add ecx, -12 shr ecx, 3
- je SHORT G_M36671_IG15
+ je SHORT G_M36671_IG18
;; size=11 bbWeight=4 PerfScore 15.00
-G_M36671_IG14: ; bbWeight=2, gcVars=00000003 {V02 V03}, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars -{V02 V28}
+G_M36671_IG17: ; bbWeight=2, gcVars=00000003 {V02 V03}, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, gcvars, byref, isz + ; GC ptr vars -{V02 V26}
cmp ecx, 1
- jne SHORT G_M36671_IG18
+ jne SHORT G_M36671_IG21
;; size=5 bbWeight=2 PerfScore 2.50
-G_M36671_IG15: ; bbWeight=4, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, byref, isz
+G_M36671_IG18: ; bbWeight=4, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, byref, isz
mov ecx, edx ; gcrRegs +[ecx] mov edx, edi @@ -201,15 +216,15 @@ G_M36671_IG15: ; bbWeight=4, gcrefRegs=0000000C {edx ebx}, byrefRegs=0000 ; gcrRegs -[ecx edx] inc edi cmp edi, dword ptr [D1FFAB1EH] ; static handle
- jl SHORT G_M36671_IG12
+ jl SHORT G_M36671_IG15
;; size=31 bbWeight=4 PerfScore 47.00
-G_M36671_IG16: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG19: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[ebx] mov ecx, bword ptr [ebp-0x48] ; byrRegs +[ecx] mov dword ptr [esi+0x0C], ecx ;; size=6 bbWeight=1 PerfScore 2.00
-G_M36671_IG17: ; bbWeight=1, epilog, nogc, extend
+G_M36671_IG20: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -217,20 +232,20 @@ G_M36671_IG17: ; bbWeight=1, epilog, nogc, extend pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M36671_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M36671_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[ecx] mov ecx, 58 call [System.ThrowHelper:ThrowArgumentException(int)] int3 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M36671_IG19: ; bbWeight=0, gcVars=00000020 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M36671_IG22: ; bbWeight=0, gcVars=00000020 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars +{V00} ...

+40 (+10.23%) : 40205.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)

@@ -14,41 +14,40 @@ ; V03 tmp0 [V03,T00] ( 3, 96 ) ref -> eax class-hnd exact "Single-def Box Helper" <System.Int32> ; V04 tmp1 [V04,T02] ( 2, 64 ) ref -> ecx class-hnd "impImportAndPushBox" <System.Array> ;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array>
-; V06 tmp3 [V06,T05] ( 4, 6 ) int -> edi "Inlining Arg" -; V07 tmp4 [V07,T08] ( 2, 4 ) int -> eax "Inlining Arg" -;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V10 tmp7 [V10,T17] ( 0, 0 ) ref -> zero-ref class-hnd exact ptr "Inline stloc first use temp" <System.RuntimeType> -; V11 tmp8 [V11 ] ( 3, 3 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" -; V12 tmp9 [V12,T12] ( 2, 2 ) int -> eax single-def "Inline stloc first use temp" -; V13 tmp10 [V13,T18] ( 1, 1 ) int -> [ebp-0x20] do-not-enreg[V] "GSCookie dummy for inlinee" -; V14 tmp11 [V14,T10] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> -; V15 tmp12 [V15 ] ( 4, 4 ) ref -> [ebp-0x24] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V16 tmp13 [V16 ] ( 3, 6 ) ref -> [ebp-0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> -; V17 tmp14 [V17 ] ( 5, 10 ) struct ( 8) [ebp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V18 tmp15 [V18 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V19 tmp16 [V19 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V20 tmp17 [V20,T07] ( 3, 5 ) ref -> edx class-hnd exact single-def "dup spill" <System.RuntimeType> -; V21 tmp18 [V21,T11] ( 2, 2 ) byref -> ecx single-def -;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref single-def ptr -;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def ptr -; V24 tmp21 [V24,T16] ( 3, 1.50) int -> edx -;* V25 tmp22 [V25 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V28 FramesRoot [V28,T06] ( 5, 5 ) int -> [ebp-0x34] spill-single-def "Pinvoke FrameListRoot" -; V29 PInvokeFrame [V29 ] ( 8, 8 ) struct (32) [ebp-0x58] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V30 tmp27 [V30 ] ( 4, 6 ) int -> [ebp-0x30] do-not-enreg[X] addr-exposed "field V17._ptr (fldOffset=0x0)" P-DEP -; V31 tmp28 [V31 ] ( 3, 5 ) int -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V17._handle (fldOffset=0x4)" P-DEP -; V32 tmp29 [V32,T13] ( 2, 2 ) int -> edx single-def "field V18._ptr (fldOffset=0x0)" P-INDEP -; V33 tmp30 [V33,T14] ( 2, 2 ) int -> ecx single-def "field V18._handle (fldOffset=0x4)" P-INDEP -;* V34 tmp31 [V34 ] ( 0, 0 ) int -> zero-ref "field V19._ptr (fldOffset=0x0)" P-INDEP -; V35 tmp32 [V35,T15] ( 2, 2 ) int -> edi single-def "field V25._ptr (fldOffset=0x0)" P-INDEP -; V36 tmp33 [V36,T20] ( 2, 0 ) ref -> edx single-def "argument with side effect" -;* V37 tmp34 [V37 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -; V38 GsCookie [V38 ] ( 1, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "GSSecurityCookie" -; V39 cse0 [V39,T09] ( 3, 3 ) int -> eax "CSE - moderate" -;* V40 cse1 [V40,T19] ( 0, 0 ) int -> zero-ref "CSE - moderate"
+; V06 tmp3 [V06,T06] ( 4, 6 ) int -> edi "Inlining Arg" +; V07 tmp4 [V07,T09] ( 2, 4 ) int -> eax "Inlining Arg" +; V08 tmp5 [V08,T10] ( 3, 3 ) ref -> edx class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V09 tmp6 [V09 ] ( 3, 3 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" +; V10 tmp7 [V10,T14] ( 2, 2 ) int -> eax single-def "Inline stloc first use temp" +; V11 tmp8 [V11,T19] ( 1, 1 ) int -> [ebp-0x20] do-not-enreg[V] "GSCookie dummy for inlinee" +; V12 tmp9 [V12,T12] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> +; V13 tmp10 [V13 ] ( 4, 4 ) ref -> [ebp-0x24] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V14 tmp11 [V14 ] ( 3, 6 ) ref -> [ebp-0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> +; V15 tmp12 [V15 ] ( 5, 10 ) struct ( 8) [ebp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V16 tmp13 [V16 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V17 tmp14 [V17 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V18 tmp15 [V18,T08] ( 3, 5 ) ref -> edx class-hnd exact single-def "dup spill" <System.RuntimeType> +; V19 tmp16 [V19,T13] ( 2, 2 ) byref -> ecx single-def +;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref single-def ptr +;* V21 tmp18 [V21 ] ( 0, 0 ) byref -> zero-ref single-def ptr +; V22 tmp19 [V22,T18] ( 3, 1.50) int -> edx +;* V23 tmp20 [V23 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V26 FramesRoot [V26,T07] ( 5, 5 ) int -> [ebp-0x34] spill-single-def "Pinvoke FrameListRoot" +; V27 PInvokeFrame [V27 ] ( 8, 8 ) struct (32) [ebp-0x58] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V28 tmp25 [V28 ] ( 4, 6 ) int -> [ebp-0x30] do-not-enreg[X] addr-exposed "field V15._ptr (fldOffset=0x0)" P-DEP +; V29 tmp26 [V29 ] ( 3, 5 ) int -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V15._handle (fldOffset=0x4)" P-DEP +; V30 tmp27 [V30,T15] ( 2, 2 ) int -> edx single-def "field V16._ptr (fldOffset=0x0)" P-INDEP +; V31 tmp28 [V31,T16] ( 2, 2 ) int -> ecx single-def "field V16._handle (fldOffset=0x4)" P-INDEP +;* V32 tmp29 [V32 ] ( 0, 0 ) int -> zero-ref "field V17._ptr (fldOffset=0x0)" P-INDEP +; V33 tmp30 [V33,T17] ( 2, 2 ) int -> edi single-def "field V23._ptr (fldOffset=0x0)" P-INDEP +; V34 tmp31 [V34,T21] ( 2, 0 ) ref -> edx single-def "argument with side effect" +;* V35 tmp32 [V35 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V36 GsCookie [V36 ] ( 1, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "GSSecurityCookie" +; V37 cse0 [V37,T11] ( 3, 3 ) int -> eax "CSE - moderate" +;* V38 cse1 [V38,T20] ( 0, 0 ) int -> zero-ref "CSE - moderate" +; V39 rat0 [V39,T05] ( 5, 7.50) ref -> edx "replacement local"
; ; Lcl frame size = 76 @@ -75,22 +74,38 @@ G_M59132_IG02: ; bbWeight=1, gcVars=00000010 {V00}, gcrefRegs=00000000 {} mov eax, ebp mov dword ptr [ebp-0x40], eax test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M59132_IG17
+ je G_M59132_IG20
;; size=29 bbWeight=1 PerfScore 7.75
-G_M59132_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [D1FFAB1EH] ; static handle mov edi, eax test edi, edi
- jl G_M59132_IG18
+ jl G_M59132_IG21 + mov edx, 0xD1FFAB1E + ; gcrRegs +[edx] + test edx, edx + je SHORT G_M59132_IG06 + ;; size=24 bbWeight=1 PerfScore 5.00 +G_M59132_IG04: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [edx], 0xD1FFAB1E + je SHORT G_M59132_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M59132_IG05: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[edx] + xor edx, edx + ; gcrRegs +[edx] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M59132_IG06: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref + test edx, edx + je G_M59132_IG22
mov dword ptr [ebp-0x18], edi mov dword ptr [ebp-0x14], eax lea eax, [ebp-0x18]
- mov gword ptr [ebp-0x28], 0xD1FFAB1E
+ mov gword ptr [ebp-0x28], edx
xor edx, edx
- ; gcrRegs +[edx]
mov gword ptr [ebp-0x24], edx
- ;; size=36 bbWeight=1 PerfScore 8.25 -G_M59132_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=25 bbWeight=1 PerfScore 6.00 +G_M59132_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[edx] mov dword ptr [ebp-0x30], edx mov dword ptr [ebp-0x2C], edx @@ -101,13 +116,13 @@ G_M59132_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea ecx, bword ptr [ebp-0x30] ; byrRegs +[ecx] test edx, edx
- je G_M59132_IG19
+ je G_M59132_IG23
;; size=26 bbWeight=1 PerfScore 6.25
-G_M59132_IG05: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000002 {ecx}, byref
+G_M59132_IG08: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000002 {ecx}, byref
mov edx, dword ptr [edx+0x0C] ; gcrRegs -[edx] ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M59132_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
+G_M59132_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
mov dword ptr [ecx+0x04], edx mov edx, dword ptr [ebp-0x30] mov ecx, dword ptr [ebp-0x2C] @@ -123,29 +138,29 @@ G_M59132_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {e mov dword ptr [ebp-0x4C], 0xD1FFAB1E mov eax, esp mov dword ptr [ebp-0x48], eax
- lea eax, G_M59132_IG09
+ lea eax, G_M59132_IG12
mov dword ptr [ebp-0x44], eax mov byte ptr [esi+0x08], 0 ;; size=47 bbWeight=1 PerfScore 15.75
-G_M59132_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, 0xD1FFAB1E ; function address ;; size=5 bbWeight=1 PerfScore 0.25
-G_M59132_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call eax ; <unknown method> ;; size=2 bbWeight=1 PerfScore 3.00
-G_M59132_IG09: ; bbWeight=1, isz, extend
+G_M59132_IG12: ; bbWeight=1, isz, extend
mov byte ptr [esi+0x08], 1 cmp dword ptr [D1FFAB1EH], 0
- je SHORT G_M59132_IG10
+ je SHORT G_M59132_IG13
call CORINFO_HELP_STOP_FOR_GC ;; size=18 bbWeight=1 PerfScore 6.00
-G_M59132_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG13: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor edx, edx mov dword ptr [ebp-0x44], edx mov ecx, gword ptr [ebp-0x24] ; gcrRegs +[ecx] ;; size=8 bbWeight=1 PerfScore 2.25
-G_M59132_IG11: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG14: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
mov gword ptr [ebp-0x24], edx mov ebx, gword ptr [ebp-0x38] ; gcrRegs +[ebx] @@ -157,15 +172,15 @@ G_M59132_IG11: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 ; byrRegs -[edx] xor edi, edi cmp dword ptr [D1FFAB1EH], 0
- jle SHORT G_M59132_IG15
+ jle SHORT G_M59132_IG18
;; size=25 bbWeight=1 PerfScore 7.75
-G_M59132_IG12: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG15: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
xor eax, eax mov dword ptr [ebp-0x1C], eax cmp dword ptr [D1FFAB1EH], 0
- jle SHORT G_M59132_IG14
+ jle SHORT G_M59132_IG17
;; size=14 bbWeight=4 PerfScore 21.00
-G_M59132_IG13: ; bbWeight=16, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG16: ; bbWeight=16, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Int32 call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax] @@ -186,25 +201,25 @@ G_M59132_IG13: ; bbWeight=16, gcrefRegs=00000008 {ebx}, byrefRegs=0000000 inc esi cmp esi, dword ptr [D1FFAB1EH] ; static handle mov dword ptr [ebp-0x1C], esi
- jl SHORT G_M59132_IG13
+ jl SHORT G_M59132_IG16
;; size=52 bbWeight=16 PerfScore 340.00
-G_M59132_IG14: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG17: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
inc edi cmp edi, dword ptr [D1FFAB1EH] ; static handle
- jl SHORT G_M59132_IG12
+ jl SHORT G_M59132_IG15
;; size=9 bbWeight=4 PerfScore 17.00
-G_M59132_IG15: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG18: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ebx] mov ecx, bword ptr [ebp-0x50] ; byrRegs +[ecx] mov esi, dword ptr [ebp-0x34] mov dword ptr [esi+0x0C], ecx cmp dword ptr [ebp-0x10], 0xD1FFAB1E
- je SHORT G_M59132_IG16
+ je SHORT G_M59132_IG19
call CORINFO_HELP_FAIL_FAST ; byrRegs -[ecx] ;; size=23 bbWeight=1 PerfScore 7.00
-G_M59132_IG16: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M59132_IG19: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
lea esp, [ebp-0x0C] pop ebx pop esi @@ -212,14 +227,14 @@ G_M59132_IG16: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M59132_IG17: ; bbWeight=0, gcVars=00000010 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M59132_IG20: ; bbWeight=0, gcVars=00000010 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars +{V00 V04} mov ecx, 0xD1FFAB1E mov edx, 417 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M59132_IG03 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M59132_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M59132_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V00 V04} mov ecx, 0x784 mov edx, 0xD1FFAB1E @@ -232,13 +247,19 @@ G_M59132_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b ; gcrRegs -[eax edx] int3 ;; size=26 bbWeight=0 PerfScore 0.00
-G_M59132_IG19: ; bbWeight=0, gcVars=00000010 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, gcvars, byref
...

+14 (+10.61%) : 25342.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 "replacement local"
; ; Lcl frame size = 0 @@ -40,61 +38,81 @@ 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_IG10 - 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_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_IG11 + ;; 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_IG13 + mov eax, dword ptr [edi+0x0C]
test al, 2
- jne SHORT G_M8853_IG09
+ jne SHORT G_M8853_IG12
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_IG15
cmp esi, 0xD1FFAB1E
- jne SHORT G_M8853_IG07 - ;; size=8 bbWeight=1 PerfScore 1.25 -G_M8853_IG05: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M8853_IG09 + ;; size=12 bbWeight=1 PerfScore 2.50 +G_M8853_IG07: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi] xor eax, eax ; gcrRegs +[eax] ;; size=2 bbWeight=0.80 PerfScore 0.20
-G_M8853_IG06: ; bbWeight=0.80, epilog, nogc, extend
+G_M8853_IG08: ; bbWeight=0.80, epilog, nogc, extend
pop ebx pop esi pop edi pop ebp ret ;; size=5 bbWeight=0.80 PerfScore 2.39
-G_M8853_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M8853_IG09: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[esi]
- cmp edi, 0xD1FFAB1E - jne SHORT G_M8853_IG13
+ cmp dword ptr [esi], 0xD1FFAB1E + jne SHORT G_M8853_IG14
mov ecx, esi ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx esi] +[eax]
- ;; size=16 bbWeight=1 PerfScore 4.50 -G_M8853_IG08: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 7.25 +G_M8853_IG10: ; 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_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M8853_IG11: ; 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_IG12: ; 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_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edi]
mov ecx, esi ; gcrRegs +[ecx] mov eax, dword ptr [esi] @@ -104,32 +122,30 @@ 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] - mov eax, 0xD1FFAB1E - ; gcrRegs +[eax] - ;; size=5 bbWeight=0 PerfScore 0.00 -G_M8853_IG12: ; bbWeight=0, epilog, nogc, extend - pop ebx - pop esi - pop edi - pop ebp - ret - ;; size=5 bbWeight=0 PerfScore 0.00 -G_M8853_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[eax] +[esi]
+ jmp SHORT G_M8853_IG06 + ;; size=19 bbWeight=0 PerfScore 0.00 +G_M8853_IG14: ; 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_IG08
+ jmp SHORT G_M8853_IG10
;; size=12 bbWeight=0 PerfScore 0.00
+G_M8853_IG15: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + 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 132, prolog size 6, PerfScore 27.59, 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.65, 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%) : 12058.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%) : 20818.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%) : 2689.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)
; ============================================================

+40 (+10.20%) : 47637.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (Tier0-FullOpts)

@@ -14,40 +14,39 @@ ; V03 tmp1 [V03,T00] ( 5, 40 ) ref -> [ebp-0x2C] class-hnd spill-single-def "impImportAndPushBox" <System.Array> ;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array> ; V05 tmp3 [V05 ] ( 3, 6 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
-;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V08 tmp6 [V08,T16] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -; V09 tmp7 [V09,T09] ( 3, 4 ) int -> edi "Inlining Arg" -; V10 tmp8 [V10,T11] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> -; V11 tmp9 [V11 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V12 tmp10 [V12 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> -; V13 tmp11 [V13 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V14 tmp12 [V14 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V15 tmp13 [V15 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V16 tmp14 [V16,T08] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> -; V17 tmp15 [V17,T12] ( 2, 2 ) byref -> edx single-def -;* V18 tmp16 [V18 ] ( 0, 0 ) ref -> zero-ref single-def -;* V19 tmp17 [V19 ] ( 0, 0 ) byref -> zero-ref single-def -; V20 tmp18 [V20,T10] ( 3, 2 ) int -> ecx -;* V21 tmp19 [V21 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V22 tmp20 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V24 tmp22 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Int32> -; V25 tmp23 [V25,T06] ( 2, 4 ) int -> ecx "Inline return value spill temp" -;* V26 tmp24 [V26 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V27 tmp25 [V27,T04] ( 3, 10 ) int -> ecx "Inline stloc first use temp" -; V28 tmp26 [V28,T02] ( 3, 24 ) byref -> [ebp-0x30] spill-single-def "Inlining Arg" -;* V29 tmp27 [V29 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V30 FramesRoot [V30,T07] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" -; V31 PInvokeFrame [V31 ] ( 8, 8 ) struct (32) [ebp-0x50] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V32 tmp30 [V32 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V13._ptr (fldOffset=0x0)" P-DEP -; V33 tmp31 [V33 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V13._handle (fldOffset=0x4)" P-DEP -; V34 tmp32 [V34,T13] ( 2, 2 ) int -> eax single-def "field V14._ptr (fldOffset=0x0)" P-INDEP -; V35 tmp33 [V35,T14] ( 2, 2 ) int -> edx single-def "field V14._handle (fldOffset=0x4)" P-INDEP -;* V36 tmp34 [V36 ] ( 0, 0 ) int -> zero-ref "field V15._ptr (fldOffset=0x0)" P-INDEP -; V37 tmp35 [V37,T15] ( 2, 2 ) int -> ecx single-def "field V21._ptr (fldOffset=0x0)" P-INDEP -; V38 tmp36 [V38,T18] ( 2, 0 ) ref -> edx single-def "argument with side effect" -;* V39 cse0 [V39,T17] ( 0, 0 ) int -> zero-ref "CSE - moderate"
+; V06 tmp4 [V06,T11] ( 3, 3 ) ref -> eax class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V07 tmp5 [V07,T10] ( 3, 4 ) int -> edi "Inlining Arg" +; V08 tmp6 [V08,T13] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> +; V09 tmp7 [V09 ] ( 4, 4 ) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V10 tmp8 [V10 ] ( 3, 6 ) ref -> [ebp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inlining Arg" <System.RuntimeType> +; V11 tmp9 [V11 ] ( 5, 10 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V12 tmp10 [V12 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V13 tmp11 [V13 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V14 tmp12 [V14,T09] ( 3, 5 ) ref -> eax class-hnd exact single-def "dup spill" <System.RuntimeType> +; V15 tmp13 [V15,T14] ( 2, 2 ) byref -> edx single-def +;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref single-def +;* V17 tmp15 [V17 ] ( 0, 0 ) byref -> zero-ref single-def +; V18 tmp16 [V18,T12] ( 3, 2 ) int -> ecx +;* V19 tmp17 [V19 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V20 tmp18 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V22 tmp20 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Int32> +; V23 tmp21 [V23,T07] ( 2, 4 ) int -> ecx "Inline return value spill temp" +;* V24 tmp22 [V24 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V25 tmp23 [V25,T04] ( 3, 10 ) int -> ecx "Inline stloc first use temp" +; V26 tmp24 [V26,T02] ( 3, 24 ) byref -> [ebp-0x30] spill-single-def "Inlining Arg" +;* V27 tmp25 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V28 FramesRoot [V28,T08] ( 5, 5 ) int -> esi "Pinvoke FrameListRoot" +; V29 PInvokeFrame [V29 ] ( 8, 8 ) struct (32) [ebp-0x50] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V30 tmp28 [V30 ] ( 4, 6 ) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V11._ptr (fldOffset=0x0)" P-DEP +; V31 tmp29 [V31 ] ( 3, 5 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V11._handle (fldOffset=0x4)" P-DEP +; V32 tmp30 [V32,T15] ( 2, 2 ) int -> eax single-def "field V12._ptr (fldOffset=0x0)" P-INDEP +; V33 tmp31 [V33,T16] ( 2, 2 ) int -> edx single-def "field V12._handle (fldOffset=0x4)" P-INDEP +;* V34 tmp32 [V34 ] ( 0, 0 ) int -> zero-ref "field V13._ptr (fldOffset=0x0)" P-INDEP +; V35 tmp33 [V35,T17] ( 2, 2 ) int -> ecx single-def "field V19._ptr (fldOffset=0x0)" P-INDEP +; V36 tmp34 [V36,T19] ( 2, 0 ) ref -> edx single-def "argument with side effect" +;* V37 cse0 [V37,T18] ( 0, 0 ) int -> zero-ref "CSE - moderate" +; V38 rat0 [V38,T06] ( 5, 7.50) ref -> eax "replacement local"
; ; Lcl frame size = 68 @@ -70,20 +69,36 @@ G_M36671_IG02: ; bbWeight=1, gcVars=00000020 {V00}, gcrefRegs=00000000 {} mov eax, ebp mov dword ptr [ebp-0x38], eax test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M36671_IG21
+ je G_M36671_IG24
;; size=26 bbWeight=1 PerfScore 6.75
-G_M36671_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [D1FFAB1EH] ; static handle mov dword ptr [ebp-0x10], eax mov edi, dword ptr [ebp-0x10] test edi, edi
- jl G_M36671_IG22 - mov gword ptr [ebp-0x18], 0xD1FFAB1E
+ jl G_M36671_IG25 + mov eax, 0xD1FFAB1E + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M36671_IG06 + ;; size=28 bbWeight=1 PerfScore 6.75 +G_M36671_IG04: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [eax], 0xD1FFAB1E + je SHORT G_M36671_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M36671_IG05: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax]
xor eax, eax ; gcrRegs +[eax]
+ ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M36671_IG06: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + test eax, eax + je G_M36671_IG26 + mov gword ptr [ebp-0x18], eax + xor eax, eax
mov gword ptr [ebp-0x14], eax
- ;; size=31 bbWeight=1 PerfScore 7.50 -G_M36671_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M36671_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] mov dword ptr [ebp-0x20], eax mov dword ptr [ebp-0x1C], eax @@ -94,18 +109,18 @@ G_M36671_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea edx, bword ptr [ebp-0x20] ; byrRegs +[edx] test eax, eax
- jne SHORT G_M36671_IG06
+ jne SHORT G_M36671_IG09
;; size=22 bbWeight=1 PerfScore 6.25
-G_M36671_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref, isz
+G_M36671_IG08: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref, isz
; gcrRegs -[eax] xor ecx, ecx
- jmp SHORT G_M36671_IG07
+ jmp SHORT G_M36671_IG10
;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M36671_IG06: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
+G_M36671_IG09: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000004 {edx}, byref
; gcrRegs +[eax] mov ecx, dword ptr [eax+0x0C] ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M36671_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
+G_M36671_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
; gcrRegs -[eax] mov dword ptr [edx+0x04], ecx mov eax, dword ptr [ebp-0x20] @@ -123,29 +138,29 @@ G_M36671_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000004 {e mov dword ptr [ebp-0x44], 0xD1FFAB1E mov eax, esp mov dword ptr [ebp-0x40], eax
- lea eax, G_M36671_IG10
+ lea eax, G_M36671_IG13
mov dword ptr [ebp-0x3C], eax mov byte ptr [esi+0x08], 0 ;; size=50 bbWeight=1 PerfScore 16.25
-G_M36671_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, 0xD1FFAB1E ; function address ;; size=5 bbWeight=1 PerfScore 0.25
-G_M36671_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call eax ; <unknown method> ;; size=2 bbWeight=1 PerfScore 3.00
-G_M36671_IG10: ; bbWeight=1, isz, extend
+G_M36671_IG13: ; bbWeight=1, isz, extend
mov byte ptr [esi+0x08], 1 cmp dword ptr [D1FFAB1EH], 0
- je SHORT G_M36671_IG11
+ je SHORT G_M36671_IG14
call CORINFO_HELP_STOP_FOR_GC ;; size=18 bbWeight=1 PerfScore 6.00
-G_M36671_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor edx, edx mov dword ptr [ebp-0x3C], edx mov ecx, gword ptr [ebp-0x14] ; gcrRegs +[ecx] ;; size=8 bbWeight=1 PerfScore 2.25
-G_M36671_IG12: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+G_M36671_IG15: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
mov gword ptr [ebp-0x14], edx mov ebx, gword ptr [ebp-0x24] ; gcrRegs +[ebx] @@ -157,9 +172,9 @@ G_M36671_IG12: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 ; byrRegs -[edx] xor edi, edi cmp dword ptr [D1FFAB1EH], 0
- jle SHORT G_M36671_IG18
+ jle SHORT G_M36671_IG21
;; size=25 bbWeight=1 PerfScore 7.75
-G_M36671_IG13: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M36671_IG16: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Int32 call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax] @@ -172,11 +187,11 @@ G_M36671_IG13: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 mov dword ptr [eax+0x04], edi mov ecx, dword ptr [edx] mov bword ptr [ebp-0x30], ecx
- ; GC ptr vars +{V28}
+ ; GC ptr vars +{V26}
test dword ptr [ecx], 0xD1FFAB1E
- jne SHORT G_M36671_IG15
+ jne SHORT G_M36671_IG18
;; size=35 bbWeight=4 PerfScore 53.00
-G_M36671_IG14: ; bbWeight=2, gcVars=00000007 {V02 V03 V28}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M36671_IG17: ; bbWeight=2, gcVars=00000007 {V02 V03 V26}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax edx] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] @@ -185,7 +200,7 @@ G_M36671_IG14: ; bbWeight=2, gcVars=00000007 {V02 V03 V28}, gcrefRegs=000 call [<unknown method>] ; gcrRegs -[ecx edx] ;; size=16 bbWeight=2 PerfScore 7.00
-G_M36671_IG15: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M36671_IG18: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
mov ecx, bword ptr [ebp-0x30] ; byrRegs +[ecx] mov ecx, dword ptr [ecx+0x04] @@ -195,14 +210,14 @@ G_M36671_IG15: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 mov edx, gword ptr [ebp-0x2C] ; gcrRegs +[edx] test ecx, ecx
- je SHORT G_M36671_IG17
+ je SHORT G_M36671_IG20
;; size=19 bbWeight=4 PerfScore 24.00
-G_M36671_IG16: ; bbWeight=2, gcVars=00000003 {V02 V03}, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars -{V02 V28}
+G_M36671_IG19: ; bbWeight=2, gcVars=00000003 {V02 V03}, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, gcvars, byref, isz + ; GC ptr vars -{V02 V26}
cmp ecx, 1
- jne SHORT G_M36671_IG20
+ jne SHORT G_M36671_IG23
;; size=5 bbWeight=2 PerfScore 2.50
-G_M36671_IG17: ; bbWeight=4, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, byref, isz
+G_M36671_IG20: ; bbWeight=4, gcrefRegs=0000000C {edx ebx}, byrefRegs=00000000 {}, byref, isz
mov ecx, edx ; gcrRegs +[ecx] mov edx, edi @@ -219,15 +234,15 @@ G_M36671_IG17: ; bbWeight=4, gcrefRegs=0000000C {edx ebx}, byrefRegs=0000 ; gcrRegs -[ecx edx] inc edi cmp edi, dword ptr [D1FFAB1EH] ; static handle
- jl SHORT G_M36671_IG13
+ jl SHORT G_M36671_IG16
;; size=31 bbWeight=4 PerfScore 47.00
-G_M36671_IG18: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M36671_IG21: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[ebx] mov ecx, bword ptr [ebp-0x48] ; byrRegs +[ecx] mov dword ptr [esi+0x0C], ecx ;; size=6 bbWeight=1 PerfScore 2.00
-G_M36671_IG19: ; bbWeight=1, epilog, nogc, extend
+G_M36671_IG22: ; bbWeight=1, epilog, nogc, extend
...

+40 (+10.42%) : 22322.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)

@@ -14,41 +14,40 @@ ; V03 tmp0 [V03,T00] ( 3, 96 ) ref -> eax class-hnd exact "Single-def Box Helper" <System.Int32> ; V04 tmp1 [V04,T02] ( 2, 64 ) ref -> ecx class-hnd "impImportAndPushBox" <System.Array> ;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Array>
-; V06 tmp3 [V06,T05] ( 4, 6 ) int -> edi "Inlining Arg" -; V07 tmp4 [V07,T08] ( 2, 4 ) int -> eax "Inlining Arg" -;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V10 tmp7 [V10,T17] ( 0, 0 ) ref -> zero-ref class-hnd exact ptr "Inline stloc first use temp" <System.RuntimeType> -; V11 tmp8 [V11 ] ( 3, 3 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" -; V12 tmp9 [V12,T13] ( 2, 2 ) int -> eax single-def "Inline stloc first use temp" -; V13 tmp10 [V13,T18] ( 1, 1 ) int -> [ebp-0x20] do-not-enreg[V] "GSCookie dummy for inlinee" -; V14 tmp11 [V14,T11] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> -; V15 tmp12 [V15 ] ( 4, 4 ) ref -> [ebp-0x24] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> -; V16 tmp13 [V16 ] ( 3, 6 ) ref -> [ebp-0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> -; V17 tmp14 [V17 ] ( 5, 10 ) struct ( 8) [ebp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V18 tmp15 [V18 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> -;* V19 tmp16 [V19 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V20 tmp17 [V20,T07] ( 3, 5 ) ref -> edx class-hnd exact single-def "dup spill" <System.RuntimeType> -; V21 tmp18 [V21,T12] ( 2, 2 ) byref -> ecx single-def -;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref single-def ptr -;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def ptr -; V24 tmp21 [V24,T10] ( 3, 2 ) int -> edi -;* V25 tmp22 [V25 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V28 FramesRoot [V28,T06] ( 5, 5 ) int -> [ebp-0x34] spill-single-def "Pinvoke FrameListRoot" -; V29 PInvokeFrame [V29 ] ( 8, 8 ) struct (32) [ebp-0x58] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V30 tmp27 [V30 ] ( 4, 6 ) int -> [ebp-0x30] do-not-enreg[X] addr-exposed "field V17._ptr (fldOffset=0x0)" P-DEP -; V31 tmp28 [V31 ] ( 3, 5 ) int -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V17._handle (fldOffset=0x4)" P-DEP -; V32 tmp29 [V32,T14] ( 2, 2 ) int -> edx single-def "field V18._ptr (fldOffset=0x0)" P-INDEP -; V33 tmp30 [V33,T15] ( 2, 2 ) int -> ecx single-def "field V18._handle (fldOffset=0x4)" P-INDEP -;* V34 tmp31 [V34 ] ( 0, 0 ) int -> zero-ref "field V19._ptr (fldOffset=0x0)" P-INDEP -; V35 tmp32 [V35,T16] ( 2, 2 ) int -> edi single-def "field V25._ptr (fldOffset=0x0)" P-INDEP -; V36 tmp33 [V36,T20] ( 2, 0 ) ref -> edx single-def "argument with side effect" -;* V37 tmp34 [V37 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -; V38 GsCookie [V38 ] ( 1, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "GSSecurityCookie" -; V39 cse0 [V39,T09] ( 3, 3 ) int -> eax "CSE - moderate" -;* V40 cse1 [V40,T19] ( 0, 0 ) int -> zero-ref "CSE - moderate"
+; V06 tmp3 [V06,T06] ( 4, 6 ) int -> edi "Inlining Arg" +; V07 tmp4 [V07,T09] ( 2, 4 ) int -> eax "Inlining Arg" +; V08 tmp5 [V08,T10] ( 3, 3 ) ref -> edx class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V09 tmp6 [V09 ] ( 3, 3 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op unsafe-buffer "stackallocLocal" +; V10 tmp7 [V10,T15] ( 2, 2 ) int -> eax single-def "Inline stloc first use temp" +; V11 tmp8 [V11,T19] ( 1, 1 ) int -> [ebp-0x20] do-not-enreg[V] "GSCookie dummy for inlinee" +; V12 tmp9 [V12,T13] ( 2, 2 ) ref -> ecx class-hnd single-def "Inline return value spill temp" <System.Array> +; V13 tmp10 [V13 ] ( 4, 4 ) ref -> [ebp-0x24] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.Array> +; V14 tmp11 [V14 ] ( 3, 6 ) ref -> [ebp-0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd ptr "Inlining Arg" <System.RuntimeType> +; V15 tmp12 [V15 ] ( 5, 10 ) struct ( 8) [ebp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V16 tmp13 [V16 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Runtime.CompilerServices.QCallTypeHandle> +;* V17 tmp14 [V17 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V18 tmp15 [V18,T08] ( 3, 5 ) ref -> edx class-hnd exact single-def "dup spill" <System.RuntimeType> +; V19 tmp16 [V19,T14] ( 2, 2 ) byref -> ecx single-def +;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref single-def ptr +;* V21 tmp18 [V21 ] ( 0, 0 ) byref -> zero-ref single-def ptr +; V22 tmp19 [V22,T12] ( 3, 2 ) int -> edi +;* V23 tmp20 [V23 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V26 FramesRoot [V26,T07] ( 5, 5 ) int -> [ebp-0x34] spill-single-def "Pinvoke FrameListRoot" +; V27 PInvokeFrame [V27 ] ( 8, 8 ) struct (32) [ebp-0x58] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V28 tmp25 [V28 ] ( 4, 6 ) int -> [ebp-0x30] do-not-enreg[X] addr-exposed "field V15._ptr (fldOffset=0x0)" P-DEP +; V29 tmp26 [V29 ] ( 3, 5 ) int -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V15._handle (fldOffset=0x4)" P-DEP +; V30 tmp27 [V30,T16] ( 2, 2 ) int -> edx single-def "field V16._ptr (fldOffset=0x0)" P-INDEP +; V31 tmp28 [V31,T17] ( 2, 2 ) int -> ecx single-def "field V16._handle (fldOffset=0x4)" P-INDEP +;* V32 tmp29 [V32 ] ( 0, 0 ) int -> zero-ref "field V17._ptr (fldOffset=0x0)" P-INDEP +; V33 tmp30 [V33,T18] ( 2, 2 ) int -> edi single-def "field V23._ptr (fldOffset=0x0)" P-INDEP +; V34 tmp31 [V34,T21] ( 2, 0 ) ref -> edx single-def "argument with side effect" +;* V35 tmp32 [V35 ] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V36 GsCookie [V36 ] ( 1, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "GSSecurityCookie" +; V37 cse0 [V37,T11] ( 3, 3 ) int -> eax "CSE - moderate" +;* V38 cse1 [V38,T20] ( 0, 0 ) int -> zero-ref "CSE - moderate" +; V39 rat0 [V39,T05] ( 5, 7.50) ref -> edx "replacement local"
; ; Lcl frame size = 76 @@ -75,22 +74,38 @@ G_M59132_IG02: ; bbWeight=1, gcVars=00000010 {V00}, gcrefRegs=00000000 {} mov eax, ebp mov dword ptr [ebp-0x40], eax test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M59132_IG18
+ je G_M59132_IG21
;; size=29 bbWeight=1 PerfScore 7.75
-G_M59132_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [D1FFAB1EH] ; static handle mov edi, eax test edi, edi
- jl G_M59132_IG19
+ jl G_M59132_IG22 + mov edx, 0xD1FFAB1E + ; gcrRegs +[edx] + test edx, edx + je SHORT G_M59132_IG06 + ;; size=24 bbWeight=1 PerfScore 5.00 +G_M59132_IG04: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [edx], 0xD1FFAB1E + je SHORT G_M59132_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M59132_IG05: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[edx] + xor edx, edx + ; gcrRegs +[edx] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M59132_IG06: ; bbWeight=1, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref + test edx, edx + je G_M59132_IG23
mov dword ptr [ebp-0x18], edi mov dword ptr [ebp-0x14], eax lea eax, [ebp-0x18]
- mov gword ptr [ebp-0x28], 0xD1FFAB1E
+ mov gword ptr [ebp-0x28], edx
xor edx, edx
- ; gcrRegs +[edx]
mov gword ptr [ebp-0x24], edx
- ;; size=36 bbWeight=1 PerfScore 8.25 -G_M59132_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=25 bbWeight=1 PerfScore 6.00 +G_M59132_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[edx] mov dword ptr [ebp-0x30], edx mov dword ptr [ebp-0x2C], edx @@ -101,18 +116,18 @@ G_M59132_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea ecx, bword ptr [ebp-0x30] ; byrRegs +[ecx] test edx, edx
- jne SHORT G_M59132_IG06
+ jne SHORT G_M59132_IG09
;; size=22 bbWeight=1 PerfScore 6.25
-G_M59132_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref, isz
+G_M59132_IG08: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref, isz
; gcrRegs -[edx] xor edi, edi
- jmp SHORT G_M59132_IG07
+ jmp SHORT G_M59132_IG10
;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M59132_IG06: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000002 {ecx}, byref
+G_M59132_IG09: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000002 {ecx}, byref
; gcrRegs +[edx] mov edi, dword ptr [edx+0x0C] ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M59132_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
+G_M59132_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
; gcrRegs -[edx] mov dword ptr [ecx+0x04], edi mov edx, dword ptr [ebp-0x30] @@ -129,29 +144,29 @@ G_M59132_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {e mov dword ptr [ebp-0x4C], 0xD1FFAB1E mov eax, esp mov dword ptr [ebp-0x48], eax
- lea eax, G_M59132_IG10
+ lea eax, G_M59132_IG13
mov dword ptr [ebp-0x44], eax mov byte ptr [esi+0x08], 0 ;; size=47 bbWeight=1 PerfScore 15.75
-G_M59132_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, 0xD1FFAB1E ; function address ;; size=5 bbWeight=1 PerfScore 0.25
-G_M59132_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call eax ; <unknown method> ;; size=2 bbWeight=1 PerfScore 3.00
-G_M59132_IG10: ; bbWeight=1, isz, extend
+G_M59132_IG13: ; bbWeight=1, isz, extend
mov byte ptr [esi+0x08], 1 cmp dword ptr [D1FFAB1EH], 0
- je SHORT G_M59132_IG11
+ je SHORT G_M59132_IG14
call CORINFO_HELP_STOP_FOR_GC ;; size=18 bbWeight=1 PerfScore 6.00
-G_M59132_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M59132_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor edx, edx mov dword ptr [ebp-0x44], edx mov ecx, gword ptr [ebp-0x24] ; gcrRegs +[ecx] ;; size=8 bbWeight=1 PerfScore 2.25
-G_M59132_IG12: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG15: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
mov gword ptr [ebp-0x24], edx mov ebx, gword ptr [ebp-0x38] ; gcrRegs +[ebx] @@ -163,15 +178,15 @@ G_M59132_IG12: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 ; byrRegs -[edx] xor edi, edi cmp dword ptr [D1FFAB1EH], 0
- jle SHORT G_M59132_IG16
+ jle SHORT G_M59132_IG19
;; size=25 bbWeight=1 PerfScore 7.75
-G_M59132_IG13: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG16: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
xor eax, eax mov dword ptr [ebp-0x1C], eax cmp dword ptr [D1FFAB1EH], 0
- jle SHORT G_M59132_IG15
+ jle SHORT G_M59132_IG18
;; size=14 bbWeight=4 PerfScore 21.00
-G_M59132_IG14: ; bbWeight=16, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG17: ; bbWeight=16, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Int32 call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax] @@ -192,25 +207,25 @@ G_M59132_IG14: ; bbWeight=16, gcrefRegs=00000008 {ebx}, byrefRegs=0000000 inc esi cmp esi, dword ptr [D1FFAB1EH] ; static handle mov dword ptr [ebp-0x1C], esi
- jl SHORT G_M59132_IG14
+ jl SHORT G_M59132_IG17
;; size=52 bbWeight=16 PerfScore 340.00
-G_M59132_IG15: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG18: ; bbWeight=4, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
inc edi cmp edi, dword ptr [D1FFAB1EH] ; static handle
- jl SHORT G_M59132_IG13
+ jl SHORT G_M59132_IG16
;; size=9 bbWeight=4 PerfScore 17.00
-G_M59132_IG16: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M59132_IG19: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ebx] mov ecx, bword ptr [ebp-0x50] ; byrRegs +[ecx] mov esi, dword ptr [ebp-0x34] mov dword ptr [esi+0x0C], ecx cmp dword ptr [ebp-0x10], 0xD1FFAB1E
- je SHORT G_M59132_IG17
+ je SHORT G_M59132_IG20
call CORINFO_HELP_FAIL_FAST ; byrRegs -[ecx] ;; size=23 bbWeight=1 PerfScore 7.00
-G_M59132_IG17: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M59132_IG20: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
lea esp, [ebp-0x0C] pop ebx pop esi @@ -218,14 +233,14 @@ G_M59132_IG17: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M59132_IG18: ; bbWeight=0, gcVars=00000010 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M59132_IG21: ; bbWeight=0, gcVars=00000010 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars +{V00 V04} mov ecx, 0xD1FFAB1E mov edx, 417 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE jmp G_M59132_IG03 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M59132_IG19: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M59132_IG22: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V00 V04} ...

+7 (+11.11%) : 47493.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=31 bbWeight=1 PerfScore 9.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=6 bbWeight=0.50 PerfScore 1.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=28 bbWeight=4 PerfScore 25.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 63, prolog size 5, PerfScore 40.00, instruction count 25, allocated bytes for code 63 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
+; Total bytes of code 70, prolog size 6, PerfScore 41.25, instruction count 26, allocated bytes for code 70 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
; ============================================================

coreclr_tests.run.windows.x86.checked.mch

-19 (-32.76%) : 305809.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%) : 166165.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%) : 165437.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)
; ============================================================

+39 (+16.25%) : 443631.dasm - System.Reflection.CerHashtable`2[System.Canon,System.Canon]:getItem(System.Canon):System._Canon:this (Tier1)

@@ -9,39 +9,39 @@ ; 3 inlinees with PGO data; 9 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> ecx this single-def -; V01 arg1 [V01,T00] ( 14, 6.41) ref -> esi class-hnd single-def <System.__Canon>
+; V00 this [V00,T03] ( 3, 3 ) byref -> ecx this single-def +; V01 arg1 [V01,T00] ( 11, 5.02) ref -> esi class-hnd single-def <System.__Canon>
;* V02 TypeCtx [V02 ] ( 0, 0 ) int -> zero-ref single-def
-; V03 loc0 [V03,T07] ( 4, 3.02) ref -> edi class-hnd exact single-def <<unknown class>> -; V04 loc1 [V04,T03] ( 5, 4.57) int -> edx -; V05 loc2 [V05,T06] ( 4, 3.83) ref -> ebx class-hnd single-def <<unknown class>> -; V06 loc3 [V06,T01] ( 10, 5.74) int -> [ebp-0x10]
+; V03 loc0 [V03,T08] ( 4, 3.02) ref -> edi class-hnd exact single-def <<unknown class>> +; V04 loc1 [V04,T04] ( 5, 4.57) int -> edx +; V05 loc2 [V05,T07] ( 4, 3.83) ref -> ebx class-hnd single-def <<unknown class>> +; V06 loc3 [V06,T02] ( 10, 5.74) int -> [ebp-0x10]
;* V07 loc4 [V07 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V08 loc5 [V08,T04] ( 6, 4.43) ref -> ecx class-hnd <System.__Canon> -; V09 loc6 [V09,T11] ( 3, 1.30) int -> eax "guarded devirt return temp" -; V10 tmp1 [V10,T12] ( 4, 1.72) ref -> ecx class-hnd exact "guarded devirt this exact temp" <System.String> -; V11 tmp2 [V11,T08] ( 4, 2.74) int -> eax "Inline return value spill temp" -;* V12 tmp3 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V13 tmp4 [V13,T09] ( 3, 2.28) ref -> edx class-hnd exact "Inline stloc first use temp" <System.String> -; V14 tmp5 [V14,T15] ( 3, 0.71) int -> eax "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> -;* V16 tmp7 [V16 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -;* V17 tmp8 [V17 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inline stloc first use temp" -;* V18 tmp9 [V18 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V19 tmp10 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> -;* V20 tmp11 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V21 tmp12 [V21,T14] ( 2, 0.78) ref -> eax class-hnd exact "Inline stloc first use temp" <System.String> -; V22 tmp13 [V22,T10] ( 2, 1.77) byref -> ecx "impAppendStmt"
+; V08 loc5 [V08,T05] ( 6, 4.43) ref -> ecx class-hnd <System.__Canon> +; V09 loc6 [V09,T15] ( 3, 1.30) int -> eax "guarded devirt return temp" +; V10 tmp1 [V10,T13] ( 4, 1.72) ref -> [ebp-0x14] class-hnd exact spill-single-def "guarded devirt this exact temp" <System.String> +; V11 tmp2 [V11,T10] ( 4, 2.74) int -> eax "Inline return value spill temp" +; V12 tmp3 [V12,T11] ( 3, 2.38) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V13 tmp4 [V13,T17] ( 3, 0.71) int -> eax "guarded devirt return temp" +;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> +;* V15 tmp6 [V15 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +;* V16 tmp7 [V16 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inline stloc first use temp" +;* V17 tmp8 [V17 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V18 tmp9 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +; V19 tmp10 [V19,T14] ( 4, 1.62) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inline stloc first use temp" <System.String> +; V20 tmp11 [V20,T12] ( 2, 1.77) byref -> ecx "impAppendStmt" +;* V21 tmp12 [V21 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V22 tmp13 [V22 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V23 tmp14 [V23 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V24 tmp15 [V24 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V25 tmp16 [V25 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V26 tmp17 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V27 tmp18 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V28 tmp19 [V28,T16] ( 3, 0.65) ref -> eax single-def "arr expr" -; V29 cse0 [V29,T05] ( 6, 4.40) int -> ecx multi-def "CSE - aggressive" -; V30 cse1 [V30,T13] ( 3, 1.23) int -> eax "CSE - moderate"
+; V26 tmp17 [V26,T18] ( 3, 0.65) ref -> eax single-def "arr expr" +; V27 cse0 [V27,T06] ( 6, 4.40) int -> ecx multi-def "CSE - aggressive" +; V28 cse1 [V28,T16] ( 3, 1.23) int -> eax "CSE - moderate" +; V29 rat0 [V29,T01] ( 5, 6.85) ref -> ecx "replacement local" +; V30 rat1 [V30,T09] ( 5, 2.93) ref -> eax "replacement local"
;
-; Lcl frame size = 4
+; Lcl frame size = 12
G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -49,32 +49,41 @@ G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- push eax
+ sub esp, 12
mov esi, edx ; gcrRegs +[esi]
- ;; size=9 bbWeight=1 PerfScore 5.50
+ ;; size=11 bbWeight=1 PerfScore 4.75
G_M33817_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000002 {ecx}, byref, isz ; byrRegs +[ecx] mov edi, gword ptr [ecx] ; gcrRegs +[edi] test edi, edi
- je SHORT G_M33817_IG07
+ je SHORT G_M33817_IG09
;; size=6 bbWeight=1 PerfScore 3.25 G_M33817_IG03: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz ; byrRegs -[ecx]
- mov edx, esi - ; gcrRegs +[edx] - test edx, edx - je SHORT G_M33817_IG05
+ mov ecx, esi + ; gcrRegs +[ecx] + test ecx, ecx + je SHORT G_M33817_IG06
;; size=6 bbWeight=0.91 PerfScore 1.37
-G_M33817_IG04: ; bbWeight=0.46, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz - cmp dword ptr [edx], 0xD1FFAB1E - je SHORT G_M33817_IG09
+G_M33817_IG04: ; bbWeight=0.46, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [ecx], 0xD1FFAB1E + je SHORT G_M33817_IG06
;; size=8 bbWeight=0.46 PerfScore 1.83
-G_M33817_IG05: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx]
+G_M33817_IG05: ; bbWeight=0.23, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ecx] + xor ecx, ecx + ; gcrRegs +[ecx] + ;; size=2 bbWeight=0.23 PerfScore 0.06 +G_M33817_IG06: ; bbWeight=0.91, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz + test ecx, ecx + jne SHORT G_M33817_IG11 + ;; size=4 bbWeight=0.91 PerfScore 1.14 +G_M33817_IG07: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ecx]
cmp dword ptr [esi], 0xD1FFAB1E
- jne G_M33817_IG25
+ jne G_M33817_IG30
mov edx, gword ptr [esi+0x1C] ; gcrRegs +[edx] mov edx, dword ptr [edx+0x0C] @@ -82,30 +91,28 @@ G_M33817_IG05: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 mov ecx, dword ptr [esi+0x28] call [<unknown method>] ;; size=27 bbWeight=0.36 PerfScore 4.62
-G_M33817_IG06: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M33817_IG10
+G_M33817_IG08: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + jmp SHORT G_M33817_IG12
;; size=2 bbWeight=0.36 PerfScore 0.71
-G_M33817_IG07: ; bbWeight=0.09, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M33817_IG09: ; bbWeight=0.09, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi edi] xor eax, eax ; gcrRegs +[eax] ;; size=2 bbWeight=0.09 PerfScore 0.02
-G_M33817_IG08: ; bbWeight=0.09, epilog, nogc, extend - pop ecx
+G_M33817_IG10: ; bbWeight=0.09, epilog, nogc, extend + lea esp, [ebp-0x0C]
pop ebx pop esi pop edi pop ebp ret 4
- ;; size=8 bbWeight=0.09 PerfScore 0.39 -G_M33817_IG09: ; bbWeight=0.56, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[eax] +[esi edi] - mov ecx, esi - ; gcrRegs +[ecx]
+ ;; size=10 bbWeight=0.09 PerfScore 0.39 +G_M33817_IG11: ; bbWeight=0.56, gcVars=00000000 {}, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs -[eax] +[ecx esi edi]
call [<unknown method>] ; gcrRegs -[ecx]
- ;; size=8 bbWeight=0.56 PerfScore 1.81 -G_M33817_IG10: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ ;; size=6 bbWeight=0.56 PerfScore 1.67 +G_M33817_IG12: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov edx, eax not eax test edx, edx @@ -117,70 +124,95 @@ G_M33817_IG10: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 cdq idiv edx:eax, ecx ;; size=20 bbWeight=0.91 PerfScore 28.08
-G_M33817_IG11: ; bbWeight=1.46, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M33817_IG13: ; bbWeight=1.46, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
cmp edx, ecx
- jae SHORT G_M33817_IG24
+ jae G_M33817_IG29
mov ecx, gword ptr [ebx+4*edx+0x08] ; gcrRegs +[ecx] test ecx, ecx
- je SHORT G_M33817_IG07 - ;; size=12 bbWeight=1.46 PerfScore 6.55 -G_M33817_IG12: ; bbWeight=0.65, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M33817_IG09 + ;; size=16 bbWeight=1.46 PerfScore 6.55 +G_M33817_IG14: ; bbWeight=0.65, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [ecx], 0xD1FFAB1E
- jne SHORT G_M33817_IG21
+ jne SHORT G_M33817_IG26
;; size=8 bbWeight=0.65 PerfScore 2.61
-G_M33817_IG13: ; bbWeight=0.44, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M33817_IG15: ; bbWeight=0.44, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz + mov gword ptr [ebp-0x14], ecx + ; GC ptr vars +{V10}
cmp ecx, esi
- je SHORT G_M33817_IG22 - ;; size=4 bbWeight=0.44 PerfScore 0.55 -G_M33817_IG14: ; bbWeight=0.39, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M33817_IG27 + ;; size=7 bbWeight=0.44 PerfScore 1.00 +G_M33817_IG16: ; bbWeight=0.39, gcVars=00002000 {V10}, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
mov eax, esi ; gcrRegs +[eax]
+ test eax, eax + je SHORT G_M33817_IG19 + ;; size=6 bbWeight=0.39 PerfScore 0.59 +G_M33817_IG17: ; bbWeight=0.20, gcrefRegs=000000CB {eax ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [eax], 0xD1FFAB1E
- jne SHORT G_M33817_IG20
+ je SHORT G_M33817_IG19 + ;; size=8 bbWeight=0.20 PerfScore 0.78 +G_M33817_IG18: ; bbWeight=0.10, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + xor eax, eax + ; gcrRegs +[eax] + ;; size=2 bbWeight=0.10 PerfScore 0.02 +G_M33817_IG19: ; bbWeight=0.39, gcrefRegs=000000CB {eax ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz + mov gword ptr [ebp-0x18], eax + ; GC ptr vars +{V19} + test eax, eax + je SHORT G_M33817_IG25
mov eax, dword ptr [ecx+0x04] ; gcrRegs -[eax]
- cmp eax, dword ptr [esi+0x04]
+ mov ecx, gword ptr [ebp-0x18] + cmp eax, dword ptr [ecx+0x04]
mov dword ptr [ebp-0x10], edx
- jne SHORT G_M33817_IG17 - ;; size=21 bbWeight=0.39 PerfScore 4.40 -G_M33817_IG15: ; bbWeight=0.44, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M33817_IG22 + ;; size=21 bbWeight=0.39 PerfScore 4.01 +G_M33817_IG20: ; bbWeight=0.44, gcVars=00006000 {V10 V19}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs -[ecx] + mov ecx, gword ptr [ebp-0x14] + ; gcrRegs +[ecx]
add ecx, 8 ; gcrRegs -[ecx] ; byrRegs +[ecx] add eax, eax push eax
- lea edx, bword ptr [esi+0x08]
+ mov eax, gword ptr [ebp-0x18] + ; gcrRegs +[eax] + lea edx, bword ptr [eax+0x08]
; byrRegs +[edx]
+ ; GC ptr vars -{V10 V19}
call [<unknown method>]
+ ; gcrRegs -[eax]
; byrRegs -[ecx edx]
- ;; size=15 bbWeight=0.44 PerfScore 2.22 -G_M33817_IG16: ; bbWeight=0.65, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=21 bbWeight=0.44 PerfScore 3.10 +G_M33817_IG21: ; bbWeight=0.65, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
test eax, eax ...

+39 (+16.25%) : 482839.dasm - System.Reflection.CerHashtable`2[System.Canon,System.Canon]:getItem(System.Canon):System._Canon:this (Tier1)

@@ -9,39 +9,39 @@ ; 3 inlinees with PGO data; 9 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> ecx this single-def -; V01 arg1 [V01,T00] ( 14, 6.54) ref -> esi class-hnd single-def <System.__Canon>
+; V00 this [V00,T03] ( 3, 3 ) byref -> ecx this single-def +; V01 arg1 [V01,T00] ( 11, 5.09) ref -> esi class-hnd single-def <System.__Canon>
;* V02 TypeCtx [V02 ] ( 0, 0 ) int -> zero-ref single-def
-; V03 loc0 [V03,T07] ( 4, 3.02) ref -> edi class-hnd exact single-def <<unknown class>> -; V04 loc1 [V04,T04] ( 5, 4.57) int -> edx -; V05 loc2 [V05,T06] ( 4, 3.91) ref -> ebx class-hnd single-def <<unknown class>> -; V06 loc3 [V06,T01] ( 10, 5.93) int -> [ebp-0x10]
+; V03 loc0 [V03,T09] ( 4, 3.02) ref -> edi class-hnd exact single-def <<unknown class>> +; V04 loc1 [V04,T05] ( 5, 4.57) int -> edx +; V05 loc2 [V05,T07] ( 4, 3.91) ref -> ebx class-hnd single-def <<unknown class>> +; V06 loc3 [V06,T02] ( 10, 5.93) int -> [ebp-0x10]
;* V07 loc4 [V07 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V08 loc5 [V08,T03] ( 6, 4.61) ref -> ecx class-hnd <System.__Canon> -; V09 loc6 [V09,T11] ( 3, 1.39) int -> eax "guarded devirt return temp" -; V10 tmp1 [V10,T12] ( 4, 1.84) ref -> ecx class-hnd exact "guarded devirt this exact temp" <System.String> -; V11 tmp2 [V11,T08] ( 4, 2.74) int -> eax "Inline return value spill temp" -;* V12 tmp3 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V13 tmp4 [V13,T09] ( 3, 2.28) ref -> edx class-hnd exact "Inline stloc first use temp" <System.String> -; V14 tmp5 [V14,T15] ( 3, 0.71) int -> eax "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> -;* V16 tmp7 [V16 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -;* V17 tmp8 [V17 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inline stloc first use temp" -;* V18 tmp9 [V18 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V19 tmp10 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> -;* V20 tmp11 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V21 tmp12 [V21,T14] ( 2, 0.83) ref -> eax class-hnd exact "Inline stloc first use temp" <System.String> -; V22 tmp13 [V22,T10] ( 2, 1.89) byref -> ecx "impAppendStmt"
+; V08 loc5 [V08,T04] ( 6, 4.61) ref -> ecx class-hnd <System.__Canon> +; V09 loc6 [V09,T15] ( 3, 1.39) int -> eax "guarded devirt return temp" +; V10 tmp1 [V10,T13] ( 4, 1.84) ref -> [ebp-0x14] class-hnd exact spill-single-def "guarded devirt this exact temp" <System.String> +; V11 tmp2 [V11,T10] ( 4, 2.74) int -> eax "Inline return value spill temp" +; V12 tmp3 [V12,T11] ( 3, 2.38) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V13 tmp4 [V13,T17] ( 3, 0.71) int -> eax "guarded devirt return temp" +;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> +;* V15 tmp6 [V15 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +;* V16 tmp7 [V16 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inline stloc first use temp" +;* V17 tmp8 [V17 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V18 tmp9 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +; V19 tmp10 [V19,T14] ( 4, 1.72) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inline stloc first use temp" <System.String> +; V20 tmp11 [V20,T12] ( 2, 1.89) byref -> ecx "impAppendStmt" +;* V21 tmp12 [V21 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V22 tmp13 [V22 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V23 tmp14 [V23 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V24 tmp15 [V24 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V25 tmp16 [V25 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V26 tmp17 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V27 tmp18 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V28 tmp19 [V28,T16] ( 3, 0.65) ref -> eax single-def "arr expr" -; V29 cse0 [V29,T05] ( 6, 4.52) int -> ecx multi-def "CSE - aggressive" -; V30 cse1 [V30,T13] ( 3, 1.31) int -> eax "CSE - moderate"
+; V26 tmp17 [V26,T18] ( 3, 0.65) ref -> eax single-def "arr expr" +; V27 cse0 [V27,T06] ( 6, 4.52) int -> ecx multi-def "CSE - aggressive" +; V28 cse1 [V28,T16] ( 3, 1.31) int -> eax "CSE - moderate" +; V29 rat0 [V29,T01] ( 5, 6.85) ref -> ecx "replacement local" +; V30 rat1 [V30,T08] ( 5, 3.13) ref -> eax "replacement local"
;
-; Lcl frame size = 4
+; Lcl frame size = 12
G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -49,32 +49,41 @@ G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- push eax
+ sub esp, 12
mov esi, edx ; gcrRegs +[esi]
- ;; size=9 bbWeight=1 PerfScore 5.50
+ ;; size=11 bbWeight=1 PerfScore 4.75
G_M33817_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000002 {ecx}, byref, isz ; byrRegs +[ecx] mov edi, gword ptr [ecx] ; gcrRegs +[edi] test edi, edi
- je SHORT G_M33817_IG07
+ je SHORT G_M33817_IG09
;; size=6 bbWeight=1 PerfScore 3.25 G_M33817_IG03: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz ; byrRegs -[ecx]
- mov edx, esi - ; gcrRegs +[edx] - test edx, edx - je SHORT G_M33817_IG05
+ mov ecx, esi + ; gcrRegs +[ecx] + test ecx, ecx + je SHORT G_M33817_IG06
;; size=6 bbWeight=0.91 PerfScore 1.37
-G_M33817_IG04: ; bbWeight=0.46, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz - cmp dword ptr [edx], 0xD1FFAB1E - je SHORT G_M33817_IG09
+G_M33817_IG04: ; bbWeight=0.46, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [ecx], 0xD1FFAB1E + je SHORT G_M33817_IG06
;; size=8 bbWeight=0.46 PerfScore 1.83
-G_M33817_IG05: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[edx]
+G_M33817_IG05: ; bbWeight=0.23, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ecx] + xor ecx, ecx + ; gcrRegs +[ecx] + ;; size=2 bbWeight=0.23 PerfScore 0.06 +G_M33817_IG06: ; bbWeight=0.91, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz + test ecx, ecx + jne SHORT G_M33817_IG11 + ;; size=4 bbWeight=0.91 PerfScore 1.14 +G_M33817_IG07: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ecx]
cmp dword ptr [esi], 0xD1FFAB1E
- jne G_M33817_IG25
+ jne G_M33817_IG30
mov edx, gword ptr [esi+0x1C] ; gcrRegs +[edx] mov edx, dword ptr [edx+0x0C] @@ -82,30 +91,28 @@ G_M33817_IG05: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 mov ecx, dword ptr [esi+0x28] call [<unknown method>] ;; size=27 bbWeight=0.36 PerfScore 4.62
-G_M33817_IG06: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M33817_IG10
+G_M33817_IG08: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + jmp SHORT G_M33817_IG12
;; size=2 bbWeight=0.36 PerfScore 0.71
-G_M33817_IG07: ; bbWeight=0.09, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M33817_IG09: ; bbWeight=0.09, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi edi] xor eax, eax ; gcrRegs +[eax] ;; size=2 bbWeight=0.09 PerfScore 0.02
-G_M33817_IG08: ; bbWeight=0.09, epilog, nogc, extend - pop ecx
+G_M33817_IG10: ; bbWeight=0.09, epilog, nogc, extend + lea esp, [ebp-0x0C]
pop ebx pop esi pop edi pop ebp ret 4
- ;; size=8 bbWeight=0.09 PerfScore 0.39 -G_M33817_IG09: ; bbWeight=0.56, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[eax] +[esi edi] - mov ecx, esi - ; gcrRegs +[ecx]
+ ;; size=10 bbWeight=0.09 PerfScore 0.39 +G_M33817_IG11: ; bbWeight=0.56, gcVars=00000000 {}, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs -[eax] +[ecx esi edi]
call [<unknown method>] ; gcrRegs -[ecx]
- ;; size=8 bbWeight=0.56 PerfScore 1.81 -G_M33817_IG10: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ ;; size=6 bbWeight=0.56 PerfScore 1.67 +G_M33817_IG12: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov edx, eax not eax test edx, edx @@ -117,70 +124,95 @@ G_M33817_IG10: ; bbWeight=0.91, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 cdq idiv edx:eax, ecx ;; size=20 bbWeight=0.91 PerfScore 28.08
-G_M33817_IG11: ; bbWeight=1.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M33817_IG13: ; bbWeight=1.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
cmp edx, ecx
- jae SHORT G_M33817_IG24
+ jae G_M33817_IG29
mov ecx, gword ptr [ebx+4*edx+0x08] ; gcrRegs +[ecx] test ecx, ecx
- je SHORT G_M33817_IG07 - ;; size=12 bbWeight=1.50 PerfScore 6.75 -G_M33817_IG12: ; bbWeight=0.70, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M33817_IG09 + ;; size=16 bbWeight=1.50 PerfScore 6.75 +G_M33817_IG14: ; bbWeight=0.70, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [ecx], 0xD1FFAB1E
- jne SHORT G_M33817_IG21
+ jne SHORT G_M33817_IG26
;; size=8 bbWeight=0.70 PerfScore 2.78
-G_M33817_IG13: ; bbWeight=0.47, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M33817_IG15: ; bbWeight=0.47, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz + mov gword ptr [ebp-0x14], ecx + ; GC ptr vars +{V10}
cmp ecx, esi
- je SHORT G_M33817_IG22 - ;; size=4 bbWeight=0.47 PerfScore 0.59 -G_M33817_IG14: ; bbWeight=0.42, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M33817_IG27 + ;; size=7 bbWeight=0.47 PerfScore 1.06 +G_M33817_IG16: ; bbWeight=0.42, gcVars=00002000 {V10}, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
mov eax, esi ; gcrRegs +[eax]
+ test eax, eax + je SHORT G_M33817_IG19 + ;; size=6 bbWeight=0.42 PerfScore 0.63 +G_M33817_IG17: ; bbWeight=0.21, gcrefRegs=000000CB {eax ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [eax], 0xD1FFAB1E
- jne SHORT G_M33817_IG20
+ je SHORT G_M33817_IG19 + ;; size=8 bbWeight=0.21 PerfScore 0.83 +G_M33817_IG18: ; bbWeight=0.10, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + xor eax, eax + ; gcrRegs +[eax] + ;; size=2 bbWeight=0.10 PerfScore 0.03 +G_M33817_IG19: ; bbWeight=0.42, gcrefRegs=000000CB {eax ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz + mov gword ptr [ebp-0x18], eax + ; GC ptr vars +{V19} + test eax, eax + je SHORT G_M33817_IG25
mov eax, dword ptr [ecx+0x04] ; gcrRegs -[eax]
- cmp eax, dword ptr [esi+0x04]
+ mov ecx, gword ptr [ebp-0x18] + cmp eax, dword ptr [ecx+0x04]
mov dword ptr [ebp-0x10], edx
- jne SHORT G_M33817_IG17 - ;; size=21 bbWeight=0.42 PerfScore 4.69 -G_M33817_IG15: ; bbWeight=0.47, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M33817_IG22 + ;; size=21 bbWeight=0.42 PerfScore 4.28 +G_M33817_IG20: ; bbWeight=0.47, gcVars=00006000 {V10 V19}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs -[ecx] + mov ecx, gword ptr [ebp-0x14] + ; gcrRegs +[ecx]
add ecx, 8 ; gcrRegs -[ecx] ; byrRegs +[ecx] add eax, eax push eax
- lea edx, bword ptr [esi+0x08]
+ mov eax, gword ptr [ebp-0x18] + ; gcrRegs +[eax] + lea edx, bword ptr [eax+0x08]
; byrRegs +[edx]
+ ; GC ptr vars -{V10 V19}
call [<unknown method>]
+ ; gcrRegs -[eax]
; byrRegs -[ecx edx]
- ;; size=15 bbWeight=0.47 PerfScore 2.37 -G_M33817_IG16: ; bbWeight=0.70, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=21 bbWeight=0.47 PerfScore 3.31 +G_M33817_IG21: ; bbWeight=0.70, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
test eax, eax ...

+34 (+566.67%) : 182683.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 "replacement local"
; ; 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%) : 198869.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%) : 206830.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%) : 235566.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%) : 180413.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%) : 233538.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%) : 58843.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%) : 299505.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%) : 28962.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)
; ============================================================

-16 (-39.02%) : 283130.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)
; ============================================================

+26 (+14.05%) : 273459.dasm - System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)

@@ -8,21 +8,21 @@ ; 1 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 15, 9 ) ref -> esi this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl>
+; V00 this [V00,T02] ( 15, 9 ) ref -> esi this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl>
;* V01 tmp0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <<unknown class>>
-;* V02 tmp1 [V02,T05] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V03 tmp2 [V03,T00] ( 7, 19 ) ref -> ecx class-hnd "Inline stloc first use temp" <System.Type> -;* V04 tmp3 [V04,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V06 tmp5 [V06,T07] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V07 tmp6 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V08 tmp7 [V08,T02] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V09 tmp8 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V10 tmp9 [V10,T03] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V11 tmp10 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -; V12 tmp11 [V12,T08] ( 3, 0 ) ref -> esi class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V13 tmp12 [V13,T09] ( 2, 0 ) ref -> edx single-def "argument with side effect" -; V14 cse0 [V14,T04] ( 3, 1.50) int -> ecx "CSE - moderate"
+;* V02 tmp1 [V02,T07] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V03 tmp2 [V03,T00] ( 9, 21.50) ref -> ecx class-hnd "Inline stloc first use temp" <System.Type> +;* V04 tmp3 [V04,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V05 tmp4 [V05,T09] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V07 tmp6 [V07,T03] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V08 tmp7 [V08,T05] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V09 tmp8 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +; V10 tmp9 [V10,T10] ( 3, 0 ) ref -> esi class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V11 tmp10 [V11,T11] ( 2, 0 ) ref -> edx single-def "argument with side effect" +; V12 cse0 [V12,T06] ( 3, 1.50) int -> ecx "CSE - moderate" +; V13 rat0 [V13,T04] ( 3, 2.50) ref -> eax "replacement local" +; V14 rat1 [V14,T01] ( 3, 10 ) ref -> edx "replacement local"
; ; Lcl frame size = 0 @@ -64,19 +64,38 @@ G_M47746_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000040 {e mov ecx, gword ptr [esi+0x2C] ; gcrRegs +[ecx] cmp dword ptr [ecx+0x08], 0
- jne SHORT G_M47746_IG11
+ jne SHORT G_M47746_IG14
test byte ptr [esi+0x44], 32
- jne SHORT G_M47746_IG11
+ jne SHORT G_M47746_IG14
mov ecx, esi cmp ecx, 0xD1FFAB1E
- jne SHORT G_M47746_IG09 - jmp SHORT G_M47746_IG10 - ;; size=27 bbWeight=0.50 PerfScore 6.75 -G_M47746_IG08: ; bbWeight=2, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M47746_IG13 + mov eax, ecx + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M47746_IG12 + ;; size=31 bbWeight=0.50 PerfScore 6.50 +G_M47746_IG08: ; bbWeight=0.25, gcrefRegs=00000043 {eax ecx esi}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [eax], 0xD1FFAB1E + je SHORT G_M47746_IG12 + ;; size=8 bbWeight=0.25 PerfScore 1.00 +G_M47746_IG09: ; bbWeight=0.50, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + jmp SHORT G_M47746_IG12 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M47746_IG10: ; bbWeight=2, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
cmp ecx, 0xD1FFAB1E
- je SHORT G_M47746_IG11 - ;; size=8 bbWeight=2 PerfScore 2.50 -G_M47746_IG09: ; bbWeight=4, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M47746_IG14 + mov edx, ecx + ; gcrRegs +[edx] + test edx, edx + je SHORT G_M47746_IG12 + ;; size=14 bbWeight=2 PerfScore 5.50 +G_M47746_IG11: ; bbWeight=1, gcrefRegs=00000046 {ecx edx esi}, byrefRegs=00000000 {}, byref + mov edx, dword ptr [edx] + ; gcrRegs -[edx] + ;; size=2 bbWeight=1 PerfScore 2.00 +G_M47746_IG12: ; bbWeight=4, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx] mov eax, dword ptr [eax+0x58] call [eax+0x10]<unknown method> @@ -84,24 +103,24 @@ G_M47746_IG09: ; bbWeight=4, gcrefRegs=00000042 {ecx esi}, byrefRegs=0000 mov ecx, eax ; gcrRegs +[ecx] test ecx, ecx
- jne SHORT G_M47746_IG08
+ jne SHORT G_M47746_IG10
;; size=14 bbWeight=4 PerfScore 34.00
-G_M47746_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M47746_IG13: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax ecx] mov ecx, dword ptr [esi+0x44] mov edx, ecx and edx, 384 cmp edx, 384
- je SHORT G_M47746_IG11
+ je SHORT G_M47746_IG14
test cl, 32
- jne SHORT G_M47746_IG12
+ jne SHORT G_M47746_IG15
mov ecx, esi ; gcrRegs +[ecx] mov edx, 6 call [<unknown method>] ; gcrRegs -[ecx] +[eax] ;; size=37 bbWeight=0.50 PerfScore 4.25
-G_M47746_IG11: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M47746_IG14: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax] mov ecx, esi ; gcrRegs +[ecx] @@ -109,14 +128,14 @@ G_M47746_IG11: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; gcrRegs -[ecx] mov byte ptr [esi+0x60], 1 test byte ptr [esi+0x44], 128
- jne SHORT G_M47746_IG03
+ jne G_M47746_IG03
mov ecx, esi ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] jmp G_M47746_IG03
- ;; size=31 bbWeight=0.50 PerfScore 6.75 -G_M47746_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=35 bbWeight=0.50 PerfScore 6.75 +G_M47746_IG15: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi] mov ecx, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_NEWSFAST @@ -137,6 +156,6 @@ G_M47746_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} int3 ;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 185, prolog size 4, PerfScore 65.50, instruction count 62, allocated bytes for code 185 (MethodHash=c0db457d) for method System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)
+; Total bytes of code 211, prolog size 4, PerfScore 72.25, instruction count 71, allocated bytes for code 211 (MethodHash=c0db457d) for method System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)
; ============================================================

+26 (+15.29%) : 197836.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] ...

+22 (+22.00%) : 273494.dasm - System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)

@@ -8,20 +8,20 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 6, 5 ) ref -> esi this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl> -; V01 tmp0 [V01,T08] ( 3, 0 ) ref -> esi class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V02 tmp1 [V02,T05] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V03 tmp2 [V03,T00] ( 7, 20 ) ref -> ecx class-hnd "Inline stloc first use temp" <System.Type> -;* V04 tmp3 [V04,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V06 tmp5 [V06,T07] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V07 tmp6 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V08 tmp7 [V08,T02] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V09 tmp8 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Reflection.Emit.TypeBuilderImpl> -;* V10 tmp9 [V10,T03] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -;* V11 tmp10 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> -; V12 tmp11 [V12,T09] ( 2, 0 ) ref -> edx single-def "argument with side effect" -; V13 cse0 [V13,T04] ( 3, 1.50) ref -> eax "CSE - moderate"
+; V00 this [V00,T02] ( 6, 5 ) ref -> esi this class-hnd single-def <System.Reflection.Emit.TypeBuilderImpl> +; V01 tmp0 [V01,T10] ( 3, 0 ) ref -> esi class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V02 tmp1 [V02,T07] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V03 tmp2 [V03,T00] ( 9, 22.50) ref -> ecx class-hnd "Inline stloc first use temp" <System.Type> +;* V04 tmp3 [V04,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V05 tmp4 [V05,T09] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V07 tmp6 [V07,T03] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V08 tmp7 [V08,T05] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +;* V09 tmp8 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.Emit.TypeBuilderImpl> +; V10 tmp9 [V10,T11] ( 2, 0 ) ref -> edx single-def "argument with side effect" +; V11 cse0 [V11,T06] ( 3, 1.50) ref -> eax "CSE - moderate" +; V12 rat0 [V12,T04] ( 3, 2.50) ref -> eax "replacement local" +; V13 rat1 [V13,T01] ( 3, 10 ) ref -> eax "replacement local"
; ; Lcl frame size = 0 @@ -40,18 +40,36 @@ G_M32453_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 mov ecx, esi ; gcrRegs +[ecx] cmp ecx, 0xD1FFAB1E
- jne SHORT G_M32453_IG05
+ je SHORT G_M32453_IG12
;; size=14 bbWeight=1 PerfScore 4.75
-G_M32453_IG03: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ecx ebx] - jmp SHORT G_M32453_IG09
+G_M32453_IG03: ; bbWeight=0.50, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[ebx] + mov eax, ecx + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M32453_IG08 + ;; size=6 bbWeight=0.50 PerfScore 0.75 +G_M32453_IG04: ; bbWeight=0.25, gcrefRegs=00000043 {eax ecx esi}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [eax], 0xD1FFAB1E + je SHORT G_M32453_IG08 + ;; size=8 bbWeight=0.25 PerfScore 1.00 +G_M32453_IG05: ; bbWeight=0.50, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax] + jmp SHORT G_M32453_IG08
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M32453_IG04: ; bbWeight=2, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[ecx]
+G_M32453_IG06: ; bbWeight=2, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
cmp ecx, 0xD1FFAB1E
- je SHORT G_M32453_IG07 - ;; size=8 bbWeight=2 PerfScore 2.50 -G_M32453_IG05: ; bbWeight=4, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M32453_IG10 + mov eax, ecx + ; gcrRegs +[eax] + test eax, eax + je SHORT G_M32453_IG08 + ;; size=14 bbWeight=2 PerfScore 5.50 +G_M32453_IG07: ; bbWeight=1, gcrefRegs=00000043 {eax ecx esi}, byrefRegs=00000000 {}, byref + mov eax, dword ptr [eax] + ; gcrRegs -[eax] + ;; size=2 bbWeight=1 PerfScore 2.00 +G_M32453_IG08: ; bbWeight=4, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx] mov eax, dword ptr [eax+0x58] call [eax+0x10]<unknown method> @@ -59,36 +77,36 @@ G_M32453_IG05: ; bbWeight=4, gcrefRegs=00000042 {ecx esi}, byrefRegs=0000 mov ecx, eax ; gcrRegs +[ecx] test ecx, ecx
- jne SHORT G_M32453_IG04
+ jne SHORT G_M32453_IG06
;; size=14 bbWeight=4 PerfScore 34.00
-G_M32453_IG06: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M32453_IG09: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax ecx]
- jmp SHORT G_M32453_IG09
+ jmp SHORT G_M32453_IG12
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M32453_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M32453_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov eax, gword ptr [esi+0x20] ; gcrRegs +[eax] test eax, eax
- je SHORT G_M32453_IG11
+ je SHORT G_M32453_IG14
;; size=7 bbWeight=0.50 PerfScore 1.62
-G_M32453_IG08: ; bbWeight=0.50, epilog, nogc, extend
+G_M32453_IG11: ; bbWeight=0.50, epilog, nogc, extend
pop ebx pop esi pop ebp ret ;; size=4 bbWeight=0.50 PerfScore 1.25
-G_M32453_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M32453_IG12: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] mov eax, esi ; gcrRegs +[eax] ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M32453_IG10: ; bbWeight=0.50, epilog, nogc, extend
+G_M32453_IG13: ; bbWeight=0.50, epilog, nogc, extend
pop ebx pop esi pop ebp ret ;; size=4 bbWeight=0.50 PerfScore 1.25
-G_M32453_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M32453_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax esi] mov ecx, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_NEWSFAST @@ -109,6 +127,6 @@ G_M32453_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b int3 ;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 100, prolog size 5, PerfScore 51.00, instruction count 42, allocated bytes for code 100 (MethodHash=b7cb813a) for method System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
+; Total bytes of code 122, prolog size 5, PerfScore 57.75, instruction count 51, allocated bytes for code 122 (MethodHash=b7cb813a) for method System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
; ============================================================

libraries_tests.run.windows.x86.Release.mch

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

@@ -2,103 +2,64 @@ ; Emitting BLENDED_CODE for X86 with AVX512 - Windows ; Tier1 code ; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible ; 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 (Tier1)
+; 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 (Tier1)
; ============================================================

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

@@ -8,11 +8,9 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 19848 ; 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%) : 114695.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)
; ============================================================

+43 (+14.88%) : 621744.dasm - System.Reflection.CerHashtable`2[System.Canon,System.Canon]:getItem(System.Canon):System._Canon:this (Tier1)

@@ -9,28 +9,30 @@ ; 3 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T05] ( 3, 3 ) byref -> ecx this single-def -; V01 arg1 [V01,T00] ( 12, 12.17) ref -> esi class-hnd single-def <System.__Canon>
+; V00 this [V00,T08] ( 3, 3 ) byref -> ecx this single-def +; V01 arg1 [V01,T00] ( 8, 7.46) ref -> esi class-hnd single-def <System.__Canon>
;* V02 TypeCtx [V02 ] ( 0, 0 ) int -> zero-ref single-def
-; V03 loc0 [V03,T08] ( 4, 4 ) ref -> edi class-hnd exact single-def <<unknown class>> -; V04 loc1 [V04,T04] ( 5, 5 ) int -> edx -; V05 loc2 [V05,T12] ( 4, 4.46) ref -> ebx class-hnd single-def <<unknown class>> -; V06 loc3 [V06,T02] ( 10, 9.14) int -> [ebp-0x10]
+; V03 loc0 [V03,T11] ( 4, 4 ) ref -> edi class-hnd exact single-def <<unknown class>> +; V04 loc1 [V04,T07] ( 5, 5 ) int -> edx +; V05 loc2 [V05,T14] ( 4, 3.50) ref -> [ebp-0x14] class-hnd spill-single-def <<unknown class>> +; V06 loc3 [V06,T04] ( 10, 6.25) int -> [ebp-0x10]
;* V07 loc4 [V07 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V08 loc5 [V08,T01] ( 8, 7.46) ref -> [ebp-0x18] class-hnd spill-single-def <System.__Canon> -; V09 loc6 [V09,T11] ( 3, 2.50) int -> eax "guarded devirt return temp"
+; V08 loc5 [V08,T03] ( 8, 7.46) ref -> [ebp-0x18] class-hnd spill-single-def <System.__Canon> +; V09 loc6 [V09,T16] ( 3, 2.50) int -> eax "guarded devirt return temp"
;* V10 tmp1 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.String>
-; V11 tmp2 [V11,T09] ( 4, 4 ) int -> eax "Inline return value spill temp" -;* V12 tmp3 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V13 tmp4 [V13,T13] ( 3, 2.50) ref -> ecx class-hnd exact "Inline stloc first use temp" <System.String> -;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V15 tmp6 [V15,T14] ( 2, 2.42) ref -> eax class-hnd exact "Inline stloc first use temp" <System.String> -; V16 tmp7 [V16,T06] ( 2, 5 ) byref -> ecx "impAppendStmt" -; V17 tmp8 [V17,T03] ( 3, 6 ) ref -> eax single-def "arr expr" -; V18 cse0 [V18,T07] ( 4, 4.92) int -> [ebp-0x14] spill-single-def "CSE - moderate" -; V19 cse1 [V19,T10] ( 6, 5.67) int -> ecx multi-def "CSE - moderate"
+; V11 tmp2 [V11,T12] ( 4, 4 ) int -> eax "Inline return value spill temp" +; V12 tmp3 [V12,T15] ( 3, 3 ) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V13 tmp4 [V13,T05] ( 5, 6.14) ref -> [ebp-0x1C] class-hnd exact spill-single-def "Inline stloc first use temp" <System.String> +; V14 tmp5 [V14,T09] ( 2, 5 ) byref -> ecx "impAppendStmt" +; V15 tmp6 [V15,T06] ( 3, 6 ) ref -> edx single-def "arr expr" +; V16 cse0 [V16,T10] ( 4, 4.92) int -> ebx "CSE - moderate" +; V17 cse1 [V17,T13] ( 6, 3.75) int -> ecx multi-def "CSE - moderate" +; V18 rat0 [V18,T02] ( 5, 7.50) ref -> ecx "replacement local" +; V19 rat1 [V19,T01] ( 5, 9.09) ref -> edx "replacement local" +; TEMP_02 ref -> [ebp-0x20] +; TEMP_01 int -> [ebp-0x24]
;
-; Lcl frame size = 12
+; Lcl frame size = 24
G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -38,16 +40,18 @@ G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 12
+ sub esp, 24 + xor eax, eax + mov dword ptr [ebp-0x20], eax
mov esi, edx ; gcrRegs +[esi]
- ;; size=11 bbWeight=1 PerfScore 4.75
+ ;; size=16 bbWeight=1 PerfScore 6.00
G_M33817_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000002 {ecx}, byref, isz ; byrRegs +[ecx] mov edi, gword ptr [ecx] ; gcrRegs +[edi] test edi, edi
- je G_M33817_IG18
+ je G_M33817_IG19
mov ecx, esi ; gcrRegs +[ecx] ; byrRegs -[ecx] @@ -56,120 +60,123 @@ G_M33817_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000002 ;; size=16 bbWeight=1 PerfScore 4.75 G_M33817_IG03: ; bbWeight=0.50, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz cmp dword ptr [ecx], 0xD1FFAB1E
- je SHORT G_M33817_IG05
+ jne SHORT G_M33817_IG05
;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M33817_IG04: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ecx]
+G_M33817_IG04: ; bbWeight=1, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz + test ecx, ecx + jne SHORT G_M33817_IG06
mov ecx, esi
- ; gcrRegs +[ecx]
mov eax, dword ptr [esi] mov eax, dword ptr [eax+0x2C] call [eax+0x0C]<unknown method> ; gcrRegs -[ecx]
- jmp SHORT G_M33817_IG06 - ;; size=12 bbWeight=1 PerfScore 9.25 -G_M33817_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, esi
+ jmp SHORT G_M33817_IG07 + ;; size=16 bbWeight=1 PerfScore 10.50 +G_M33817_IG05: ; bbWeight=0.25, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + xor ecx, ecx
; gcrRegs +[ecx]
+ jmp SHORT G_M33817_IG04 + ;; size=4 bbWeight=0.25 PerfScore 0.56 +G_M33817_IG06: ; bbWeight=1, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
call [<unknown method>] ; gcrRegs -[ecx]
- ;; size=8 bbWeight=1 PerfScore 3.25 -G_M33817_IG06: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M33817_IG07: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov edx, eax not eax test edx, edx cmovl edx, eax mov ebx, gword ptr [edi+0x04] ; gcrRegs +[ebx]
+ mov gword ptr [ebp-0x14], ebx + ; GC ptr vars +{V05}
mov ecx, dword ptr [ebx+0x04] mov eax, edx cdq idiv edx:eax, ecx
- ;; size=20 bbWeight=1 PerfScore 30.75 -G_M33817_IG07: ; bbWeight=1.25, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - cmp edx, ecx - jae G_M33817_IG17 - mov ecx, gword ptr [ebx+4*edx+0x08]
+ mov eax, edx + ;; size=25 bbWeight=1 PerfScore 32.00 +G_M33817_IG08: ; bbWeight=1.25, gcVars=00004000 {V05}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz + cmp eax, ecx + jae G_M33817_IG18 + mov dword ptr [ebp-0x10], eax + mov edx, gword ptr [ebx+4*eax+0x08] + ; gcrRegs +[edx] + mov ecx, edx
; gcrRegs +[ecx] mov gword ptr [ebp-0x18], ecx ; GC ptr vars +{V08} test ecx, ecx
- je G_M33817_IG18
+ je G_M33817_IG19
cmp dword ptr [ecx], 0xD1FFAB1E
- jne G_M33817_IG20
+ jne G_M33817_IG21
cmp ecx, esi
- je SHORT G_M33817_IG15 - ;; size=39 bbWeight=1.25 PerfScore 13.44 -G_M33817_IG08: ; bbWeight=1.21, gcVars=00000002 {V08}, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz - mov eax, esi - ; gcrRegs +[eax] - cmp dword ptr [eax], 0xD1FFAB1E - jne SHORT G_M33817_IG14 - mov eax, dword ptr [ecx+0x04] - ; gcrRegs -[eax] - mov dword ptr [ebp-0x14], eax - cmp eax, dword ptr [esi+0x04] - mov dword ptr [ebp-0x10], edx - jne SHORT G_M33817_IG11 - ;; size=24 bbWeight=1.21 PerfScore 14.84 -G_M33817_IG09: ; bbWeight=1.25, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ecx]
+ je SHORT G_M33817_IG14 + ;; size=44 bbWeight=1.25 PerfScore 15.00 +G_M33817_IG09: ; bbWeight=1.21, gcVars=00004008 {V05 V08}, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[edx ebx] + mov edx, esi + ; gcrRegs +[edx] + test edx, edx + je SHORT G_M33817_IG11 + ;; size=6 bbWeight=1.21 PerfScore 1.82 +G_M33817_IG10: ; bbWeight=0.61, gcrefRegs=000000C6 {ecx edx esi edi}, byrefRegs=00000000 {}, byref, isz + cmp dword ptr [edx], 0xD1FFAB1E + jne SHORT G_M33817_IG16 + ;; size=8 bbWeight=0.61 PerfScore 2.42 +G_M33817_IG11: ; bbWeight=1.21, gcrefRegs=000000C6 {ecx edx esi edi}, byrefRegs=00000000 {}, byref, isz + mov gword ptr [ebp-0x1C], edx + ; GC ptr vars +{V13} + test edx, edx + je SHORT G_M33817_IG17 + mov ebx, dword ptr [ecx+0x04] + cmp ebx, dword ptr [edx+0x04] + jne SHORT G_M33817_IG17 + ;; size=15 bbWeight=1.21 PerfScore 10.00 +G_M33817_IG12: ; bbWeight=1.25, gcVars=00004028 {V05 V08 V13}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs -[ecx edx]
mov ecx, 1 call [<unknown method>] mov ecx, 1 call [<unknown method>]
- mov eax, dword ptr [ebp-0x14]
+ mov edx, gword ptr [ebp-0x1C] + ; gcrRegs +[edx]
xor ecx, ecx
- cmp dword ptr [esi+0x04], eax
+ cmp dword ptr [edx+0x04], ebx
sete cl call [<unknown method>]
+ ; gcrRegs -[edx]
mov ecx, gword ptr [ebp-0x18] ; gcrRegs +[ecx] add ecx, 8 ; gcrRegs -[ecx] ; byrRegs +[ecx]
- mov edx, dword ptr [ebp-0x14] - add edx, edx - push edx - lea edx, bword ptr [esi+0x08]
+ add ebx, ebx + push ebx + mov ebx, gword ptr [ebp-0x1C] + ; gcrRegs +[ebx] + lea edx, bword ptr [ebx+0x08]
; byrRegs +[edx]
- ; GC ptr vars -{V08}
+ ; GC ptr vars -{V05 V08 V13}
call [<unknown method>]
+ ; gcrRegs -[ebx]
; byrRegs -[ecx edx] ;; size=60 bbWeight=1.25 PerfScore 27.19
-G_M33817_IG10: ; bbWeight=1.25, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M33817_IG13: ; bbWeight=1.25, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
test eax, eax
- jne SHORT G_M33817_IG13
+ je SHORT G_M33817_IG17
;; size=4 bbWeight=1.25 PerfScore 1.56
-G_M33817_IG11: ; bbWeight=1.21, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [ebp-0x10] - inc edx - mov ecx, dword ptr [ebx+0x04] - cmp ecx, edx - jle SHORT G_M33817_IG21 - ;; size=11 bbWeight=1.21 PerfScore 5.45 -G_M33817_IG12: ; bbWeight=0.25, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref - jmp G_M33817_IG07 - ;; size=5 bbWeight=0.25 PerfScore 0.50 -G_M33817_IG13: ; bbWeight=0.62, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ebx esi] - mov edx, dword ptr [ebp-0x10] - jmp SHORT G_M33817_IG15 - ;; size=5 bbWeight=0.62 PerfScore 1.88 -G_M33817_IG14: ; bbWeight=0.61, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[ebx esi] - mov dword ptr [ebp-0x10], edx - jmp SHORT G_M33817_IG11 - ;; size=5 bbWeight=0.61 PerfScore 1.82 -G_M33817_IG15: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ebx esi] - mov eax, gword ptr [edi+0x08]
+G_M33817_IG14: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[esi] + mov edx, gword ptr [edi+0x08] + ; gcrRegs +[edx]
...

+46 (+15.08%) : 274210.dasm - System.Reflection.CerHashtable`2[System.Canon,System.Canon]:getItem(System.Canon):System._Canon:this (Tier1)

@@ -9,29 +9,31 @@ ; 3 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 3, 3 ) byref -> ecx this single-def -; V01 arg1 [V01,T00] ( 11, 5.60) ref -> esi class-hnd single-def <System.__Canon>
+; V00 this [V00,T02] ( 3, 3 ) byref -> ecx this single-def +; V01 arg1 [V01,T00] ( 8, 3.80) ref -> esi class-hnd single-def <System.__Canon>
;* V02 TypeCtx [V02 ] ( 0, 0 ) int -> zero-ref single-def
-; V03 loc0 [V03,T07] ( 4, 2.86) ref -> edi class-hnd exact single-def <<unknown class>> -; V04 loc1 [V04,T04] ( 5, 3.57) int -> edx -; V05 loc2 [V05,T06] ( 4, 3.00) ref -> ebx class-hnd single-def <<unknown class>> -; V06 loc3 [V06,T02] ( 10, 4.57) int -> [ebp-0x10]
+; V03 loc0 [V03,T09] ( 4, 2.86) ref -> edi class-hnd exact single-def <<unknown class>> +; V04 loc1 [V04,T06] ( 5, 3.57) int -> edx +; V05 loc2 [V05,T08] ( 4, 3.00) ref -> [ebp-0x1C] class-hnd single-def <<unknown class>> +; V06 loc3 [V06,T03] ( 10, 4.57) int -> [ebp-0x10]
;* V07 loc4 [V07 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V08 loc5 [V08,T03] ( 8, 4.51) ref -> [ebp-0x1C] class-hnd <System.__Canon> -; V09 loc6 [V09,T12] ( 3, 1.14) int -> eax "guarded devirt return temp"
+; V08 loc5 [V08,T04] ( 8, 4.51) ref -> [ebp-0x20] class-hnd <System.__Canon> +; V09 loc6 [V09,T16] ( 3, 1.14) int -> eax "guarded devirt return temp"
;* V10 tmp1 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.String>
-; V11 tmp2 [V11,T10] ( 4, 2.14) int -> eax "Inline return value spill temp" -;* V12 tmp3 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V13 tmp4 [V13,T11] ( 3, 1.79) ref -> ecx class-hnd exact "Inline stloc first use temp" <System.String> -;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V15 tmp6 [V15,T14] ( 2, 1.03) ref -> eax class-hnd exact "Inline stloc first use temp" <System.String> -; V16 tmp7 [V16,T08] ( 2, 2.29) byref -> ecx "impAppendStmt" -; V17 tmp8 [V17,T15] ( 3, 0.86) ref -> eax single-def "arr expr" -; V18 cse0 [V18,T13] ( 3, 1.60) int -> [ebp-0x14] spill-single-def "CSE - moderate" -; V19 cse1 [V19,T09] ( 4, 2.17) int -> [ebp-0x18] spill-single-def "CSE - moderate" -; V20 cse2 [V20,T05] ( 6, 3.43) int -> ecx multi-def "CSE - moderate"
+; V11 tmp2 [V11,T12] ( 4, 2.14) int -> eax "Inline return value spill temp" +; V12 tmp3 [V12,T13] ( 3, 2.14) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V13 tmp4 [V13,T14] ( 4, 2.11) ref -> [ebp-0x24] class-hnd exact spill-single-def "Inline stloc first use temp" <System.String> +; V14 tmp5 [V14,T10] ( 2, 2.29) byref -> ecx "impAppendStmt" +; V15 tmp6 [V15,T17] ( 3, 0.86) ref -> ecx single-def "arr expr" +; V16 cse0 [V16,T15] ( 3, 1.60) int -> [ebp-0x14] "CSE - moderate" +; V17 cse1 [V17,T11] ( 4, 2.17) int -> [ebp-0x18] "CSE - moderate" +; V18 cse2 [V18,T07] ( 6, 3.43) int -> ecx multi-def "CSE - moderate" +; V19 rat0 [V19,T01] ( 5, 5.36) ref -> ecx "replacement local" +; V20 rat1 [V20,T05] ( 5, 3.86) ref -> edx "replacement local" +; TEMP_02 ref -> [ebp-0x28] +; TEMP_01 int -> [ebp-0x2C]
;
-; Lcl frame size = 16
+; Lcl frame size = 32
G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -39,51 +41,42 @@ G_M33817_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 16
+ sub esp, 32 + xor eax, eax + mov dword ptr [ebp-0x28], eax
mov esi, edx ; gcrRegs +[esi]
- ;; size=11 bbWeight=1 PerfScore 4.75
+ ;; size=16 bbWeight=1 PerfScore 6.00
G_M33817_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000002 {ecx}, byref, isz ; byrRegs +[ecx] mov edi, gword ptr [ecx] ; gcrRegs +[edi] test edi, edi
- je SHORT G_M33817_IG06
+ je SHORT G_M33817_IG13
;; size=6 bbWeight=1 PerfScore 3.25
-G_M33817_IG03: ; bbWeight=0.71, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+G_M33817_IG03: ; bbWeight=0.71, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
; byrRegs -[ecx] mov ecx, esi ; gcrRegs +[ecx] test ecx, ecx
- je G_M33817_IG20 - ;; size=10 bbWeight=0.71 PerfScore 1.07 -G_M33817_IG04: ; bbWeight=0.36, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M33817_IG06 + ;; size=6 bbWeight=0.71 PerfScore 1.07 +G_M33817_IG04: ; bbWeight=0.36, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [ecx], 0xD1FFAB1E
- jne G_M33817_IG20 - ;; size=12 bbWeight=0.36 PerfScore 1.43 -G_M33817_IG05: ; bbWeight=0.71, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M33817_IG06 + ;; size=8 bbWeight=0.36 PerfScore 1.43 +G_M33817_IG05: ; bbWeight=0.18, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[ecx]
- mov ecx, esi
+ xor ecx, ecx
; gcrRegs +[ecx]
+ ;; size=2 bbWeight=0.18 PerfScore 0.04 +G_M33817_IG06: ; bbWeight=0.71, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref + test ecx, ecx + je G_M33817_IG24
call [<unknown method>] ; gcrRegs -[ecx]
- jmp SHORT G_M33817_IG08 - ;; size=10 bbWeight=0.71 PerfScore 3.75 -G_M33817_IG06: ; bbWeight=0.29, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; gcrRegs -[esi edi] - xor eax, eax - ; gcrRegs +[eax] - ;; size=2 bbWeight=0.29 PerfScore 0.07 -G_M33817_IG07: ; bbWeight=0.29, epilog, nogc, extend - lea esp, [ebp-0x0C] - pop ebx - pop esi - pop edi - pop ebp - ret 4 - ;; size=10 bbWeight=0.29 PerfScore 1.29 -G_M33817_IG08: ; bbWeight=0.71, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[eax] +[esi edi]
+ ;; size=14 bbWeight=0.71 PerfScore 3.04 +G_M33817_IG07: ; bbWeight=0.71, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov edx, eax not eax test edx, edx @@ -94,39 +87,71 @@ G_M33817_IG08: ; bbWeight=0.71, gcVars=00000000 {}, gcrefRegs=000000C0 {e mov eax, edx cdq idiv edx:eax, ecx
- ;; size=20 bbWeight=0.71 PerfScore 21.96 -G_M33817_IG09: ; bbWeight=1.14, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - cmp edx, ecx - jae G_M33817_IG19 - mov ecx, gword ptr [ebx+4*edx+0x08]
+ mov eax, edx + ;; size=22 bbWeight=0.71 PerfScore 22.14 +G_M33817_IG08: ; bbWeight=1.14, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz + cmp eax, ecx + jae G_M33817_IG23 + mov edx, gword ptr [ebx+4*eax+0x08] + ; gcrRegs +[edx] + mov ecx, edx
; gcrRegs +[ecx] test ecx, ecx
- je SHORT G_M33817_IG06 - ;; size=16 bbWeight=1.14 PerfScore 5.14 -G_M33817_IG10: ; bbWeight=0.57, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M33817_IG13 + ;; size=18 bbWeight=1.14 PerfScore 5.43 +G_M33817_IG09: ; bbWeight=0.57, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[edx]
cmp dword ptr [ecx], 0xD1FFAB1E
- jne G_M33817_IG22
+ jne G_M33817_IG25
cmp ecx, esi
- je G_M33817_IG17
+ je G_M33817_IG21
;; size=20 bbWeight=0.57 PerfScore 3.00
-G_M33817_IG11: ; bbWeight=0.51, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov eax, esi
+G_M33817_IG10: ; bbWeight=0.51, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref + mov edx, esi + ; gcrRegs +[edx] + test edx, edx + je G_M33817_IG20 + ;; size=10 bbWeight=0.51 PerfScore 0.77 +G_M33817_IG11: ; bbWeight=0.26, gcrefRegs=000000CE {ecx edx ebx esi edi}, byrefRegs=00000000 {}, byref + cmp dword ptr [edx], 0xD1FFAB1E + je G_M33817_IG20 + ;; size=12 bbWeight=0.26 PerfScore 1.03 +G_M33817_IG12: ; bbWeight=0.13, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edx] + jmp SHORT G_M33817_IG19 + ;; size=2 bbWeight=0.13 PerfScore 0.26 +G_M33817_IG13: ; bbWeight=0.29, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ecx ebx esi edi] + xor eax, eax
; gcrRegs +[eax]
- cmp dword ptr [eax], 0xD1FFAB1E - jne SHORT G_M33817_IG16 - mov gword ptr [ebp-0x1C], ecx
+ ;; size=2 bbWeight=0.29 PerfScore 0.07 +G_M33817_IG14: ; bbWeight=0.29, epilog, nogc, extend + lea esp, [ebp-0x0C] + pop ebx + pop esi + pop edi + pop ebp + ret 4 + ;; size=10 bbWeight=0.29 PerfScore 1.29 +G_M33817_IG15: ; bbWeight=0.51, gcVars=00004000 {V13}, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax] +[ecx ebx esi edi] + ; GC ptr vars +{V13 V14} + mov gword ptr [ebp-0x20], ecx
; GC ptr vars +{V08}
- mov eax, dword ptr [ecx+0x04] - ; gcrRegs -[eax] - mov dword ptr [ebp-0x18], eax - mov eax, dword ptr [esi+0x04] - mov dword ptr [ebp-0x14], eax - cmp dword ptr [ebp-0x18], eax - mov dword ptr [ebp-0x10], edx - jne SHORT G_M33817_IG14 - ;; size=33 bbWeight=0.51 PerfScore 7.84 -G_M33817_IG12: ; bbWeight=0.57, gcVars=00000008 {V08}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
+ mov edx, dword ptr [ecx+0x04] + mov dword ptr [ebp-0x18], edx + mov edx, gword ptr [ebp-0x24] + ; gcrRegs +[edx] + mov edx, dword ptr [edx+0x04] + ; gcrRegs -[edx] + cmp dword ptr [ebp-0x18], edx + mov dword ptr [ebp-0x14], edx + jne SHORT G_M33817_IG18 + ;; size=23 bbWeight=0.51 PerfScore 5.66 +G_M33817_IG16: ; bbWeight=0.57, gcVars=00004010 {V08 V13}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ecx]
+ ; GC ptr vars -{V14} + mov dword ptr [ebp-0x10], eax
mov ecx, 1 call [<unknown method>] mov ecx, 1 @@ -136,7 +161,7 @@ G_M33817_IG12: ; bbWeight=0.57, gcVars=00000008 {V08}, gcrefRegs=000000C8 sete cl movzx ecx, cl call [<unknown method>]
- mov ecx, gword ptr [ebp-0x1C]
+ mov ecx, gword ptr [ebp-0x20]
; gcrRegs +[ecx] add ecx, 8 ; gcrRegs -[ecx] @@ -144,43 +169,50 @@ G_M33817_IG12: ; bbWeight=0.57, gcVars=00000008 {V08}, gcrefRegs=000000C8 mov edx, dword ptr [ebp-0x18] add edx, edx push edx
- lea edx, bword ptr [esi+0x08]
+ mov edx, gword ptr [ebp-0x24] + ; gcrRegs +[edx] + add edx, 8 + ; gcrRegs -[edx]
; byrRegs +[edx]
- ; GC ptr vars -{V08}
+ ; GC ptr vars -{V08 V13}
call [<unknown method>] ; byrRegs -[ecx edx]
- ;; size=61 bbWeight=0.57 PerfScore 11.86 -G_M33817_IG13: ; bbWeight=0.57, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=67 bbWeight=0.57 PerfScore 12.86 +G_M33817_IG17: ; bbWeight=0.57, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
test eax, eax
- jne SHORT G_M33817_IG15 - ;; size=4 bbWeight=0.57 PerfScore 0.71 -G_M33817_IG14: ; bbWeight=0.43, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
...

+18 (+17.31%) : 552032.dasm - System.Text.Json.JsonSerializer:ValidateInputType(System.Object,System.Type) (Tier1)

@@ -9,14 +9,13 @@ ; 1 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T01] ( 5, 3.82) ref -> edi class-hnd single-def <System.Object>
+; V00 arg0 [V00,T02] ( 5, 3.82) ref -> edi class-hnd single-def <System.Object>
; V01 arg1 [V01,T00] ( 9, 5.45) ref -> esi class-hnd single-def <System.Type>
-; V02 loc0 [V02,T02] ( 4, 2.45) ref -> edx class-hnd exact single-def <System.RuntimeType> -; V03 tmp0 [V03,T03] ( 4, 1.64) int -> eax "guarded devirt return temp"
+; V02 loc0 [V02,T03] ( 4, 2.45) ref -> edx class-hnd exact single-def <System.RuntimeType> +; V03 tmp0 [V03,T05] ( 4, 1.64) int -> eax "guarded devirt return temp"
;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V07 tmp4 [V07,T04] ( 2, 1.64) ref -> ecx class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+; V05 tmp2 [V05,T04] ( 3, 2.45) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V06 rat0 [V06,T01] ( 5, 6.13) ref -> ecx "replacement local"
; ; Lcl frame size = 0 @@ -32,9 +31,9 @@ G_M11386_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ;; size=9 bbWeight=1 PerfScore 3.75 G_M11386_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz test esi, esi
- je SHORT G_M11386_IG05
+ je SHORT G_M11386_IG08
test edi, edi
- je SHORT G_M11386_IG04
+ je SHORT G_M11386_IG07
;; size=8 bbWeight=1 PerfScore 2.50 G_M11386_IG03: ; bbWeight=0.82, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz mov ecx, edi @@ -44,25 +43,42 @@ G_M11386_IG03: ; bbWeight=0.82, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 mov edx, eax ; gcrRegs +[edx] cmp dword ptr [esi], 0xD1FFAB1E
- jne SHORT G_M11386_IG06
+ jne SHORT G_M11386_IG09
cmp edx, esi
- je SHORT G_M11386_IG04
+ je SHORT G_M11386_IG07
mov ecx, edx ; gcrRegs +[ecx]
+ test ecx, ecx + je SHORT G_M11386_IG06 + ;; size=27 bbWeight=0.82 PerfScore 6.75 +G_M11386_IG04: ; bbWeight=0.41, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax edx] + cmp dword ptr [ecx], 0xD1FFAB1E + je SHORT G_M11386_IG06 + ;; size=8 bbWeight=0.41 PerfScore 1.64 +G_M11386_IG05: ; bbWeight=0.20, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ecx] + xor ecx, ecx + ; gcrRegs +[ecx] + ;; size=2 bbWeight=0.20 PerfScore 0.05 +G_M11386_IG06: ; bbWeight=0.82, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz + test ecx, ecx + je SHORT G_M11386_IG10
mov edx, esi
+ ; gcrRegs +[edx]
call <unknown method>
- ; gcrRegs -[eax ecx edx]
+ ; gcrRegs -[ecx edx]
test eax, eax
- je SHORT G_M11386_IG07 - ;; size=34 bbWeight=0.82 PerfScore 7.77 -G_M11386_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ je SHORT G_M11386_IG10 + ;; size=15 bbWeight=0.82 PerfScore 3.07 +G_M11386_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
; gcrRegs -[esi edi] pop esi pop edi pop ebp ret ;; size=4 bbWeight=1 PerfScore 2.50
-G_M11386_IG05: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M11386_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov ecx, 0x34AA mov edx, 0xD1FFAB1E call CORINFO_HELP_STRCNS @@ -73,7 +89,7 @@ G_M11386_IG05: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b ; gcrRegs -[eax ecx] int3 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M11386_IG06: ; bbWeight=0, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M11386_IG09: ; bbWeight=0, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[edx esi edi] mov ecx, esi ; gcrRegs +[ecx] @@ -82,9 +98,9 @@ G_M11386_IG06: ; bbWeight=0, gcrefRegs=000000C4 {edx esi edi}, byrefRegs= call [eax+0x10]<unknown method> ; gcrRegs -[ecx edx] test eax, eax
- jne SHORT G_M11386_IG04
+ jne SHORT G_M11386_IG07
;; size=14 bbWeight=0 PerfScore 0.00
-G_M11386_IG07: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+G_M11386_IG10: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov ecx, esi ; gcrRegs +[ecx] mov edx, edi @@ -94,6 +110,6 @@ G_M11386_IG07: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 int3 ;; size=11 bbWeight=0 PerfScore 0.00
-; Total bytes of code 104, prolog size 5, PerfScore 16.52, instruction count 42, allocated bytes for code 104 (MethodHash=dd09d385) for method System.Text.Json.JsonSerializer:ValidateInputType(System.Object,System.Type) (Tier1)
+; Total bytes of code 122, prolog size 5, PerfScore 20.25, instruction count 49, allocated bytes for code 122 (MethodHash=dd09d385) for method System.Text.Json.JsonSerializer:ValidateInputType(System.Object,System.Type) (Tier1)
; ============================================================

librariestestsnotieredcompilation.run.windows.x86.Release.mch

-14 (-42.42%) : 90827.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%) : 62860.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%) : 139286.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%) : 98615.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%) : 98200.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%) : 98994.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%) : 34198.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%) : 34277.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)
; ============================================================

+11 (+2.60%) : 8032.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%) : 34118.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)
; ============================================================

+6 (+3.05%) : 12254.dasm - FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1FSharp.Compiler.Syntax.SynBinding

@@ -8,23 +8,23 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 3, 3 ) ref -> eax class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V01 arg1 [V01,T01] ( 3, 3 ) ref -> esi class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]>
+; V00 arg0 [V00,T01] ( 3, 3 ) ref -> eax class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V01 arg1 [V01,T02] ( 3, 3 ) ref -> esi class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]>
; V02 loc0 [V02 ] ( 12, 6.50) struct ( 8) [ebp-0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.FSharp.Core.CompilerServices.ListCollector`1[FSharp.Compiler.Syntax.SynBinding]> ;* V03 tmp0 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <<unknown class>>
-; V04 tmp1 [V04,T05] ( 3, 2 ) ref -> eax class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V05 tmp2 [V05,T02] ( 3, 5 ) ref -> eax class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V07 tmp4 [V07,T04] ( 5, 3.25) ref -> ecx class-hnd exact "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V09 tmp6 [V09,T07] ( 3, 1.50) ref -> eax -;* V10 tmp7 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V11 tmp8 [V11,T08] ( 3, 1.50) ref -> eax class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V12 tmp9 [V12,T06] ( 2, 2 ) ref -> edx class-hnd exact single-def "impAppendStmt" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V13 tmp10 [V13,T09] ( 2, 1 ) ref -> eax class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> -; V14 tmp11 [V14 ] ( 8, 4.50) ref -> [ebp-0x0C] do-not-enreg[X] addr-exposed "field V02.Result (fldOffset=0x0)" P-DEP -; V15 tmp12 [V15 ] ( 6, 3.50) ref -> [ebp-0x08] do-not-enreg[X] addr-exposed "field V02.LastCons (fldOffset=0x4)" P-DEP -; V16 tmp13 [V16,T03] ( 2, 4 ) ref -> ecx single-def "argument with side effect"
+; V04 tmp1 [V04,T06] ( 3, 2 ) ref -> eax class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V05 tmp2 [V05,T03] ( 3, 5 ) ref -> eax class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V06 tmp3 [V06,T05] ( 4, 3 ) ref -> ecx class-hnd exact single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V08 tmp5 [V08,T08] ( 3, 1.50) ref -> eax +;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V10 tmp7 [V10,T09] ( 3, 1.50) ref -> eax class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V11 tmp8 [V11,T07] ( 2, 2 ) ref -> edx class-hnd exact single-def "impAppendStmt" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V12 tmp9 [V12,T10] ( 2, 1 ) ref -> eax class-hnd single-def "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]> +; V13 tmp10 [V13 ] ( 8, 4.50) ref -> [ebp-0x0C] do-not-enreg[X] addr-exposed "field V02.Result (fldOffset=0x0)" P-DEP +; V14 tmp11 [V14 ] ( 6, 3.50) ref -> [ebp-0x08] do-not-enreg[X] addr-exposed "field V02.LastCons (fldOffset=0x4)" P-DEP +; V15 tmp12 [V15,T04] ( 2, 4 ) ref -> ecx single-def "argument with side effect" +; V16 rat0 [V16,T00] ( 5, 7.50) ref -> ecx "replacement local"
; ; Lcl frame size = 8 @@ -49,7 +49,7 @@ G_M4830_IG02: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000 call [<unknown method>] ; gcrRegs -[eax edx] test byte ptr [D1FFAB1EH], 1 ; global ptr
- je G_M4830_IG13
+ je G_M4830_IG15
;; size=29 bbWeight=1 PerfScore 8.75 G_M4830_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz mov ecx, gword ptr [D1FFAB1EH] ; static handle @@ -62,21 +62,30 @@ G_M4830_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 mov ecx, eax ; gcrRegs +[ecx] test ecx, ecx
- je SHORT G_M4830_IG09
+ je SHORT G_M4830_IG06
;; size=25 bbWeight=1 PerfScore 7.75
-G_M4830_IG04: ; bbWeight=0.25, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz
+G_M4830_IG04: ; bbWeight=0.50, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [ecx], 0xD1FFAB1E
- jne SHORT G_M4830_IG09 - ;; size=8 bbWeight=0.25 PerfScore 1.00 -G_M4830_IG05: ; bbWeight=0.50, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M4830_IG06 + ;; size=8 bbWeight=0.50 PerfScore 2.00 +G_M4830_IG05: ; bbWeight=0.25, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ecx] + xor ecx, ecx + ; gcrRegs +[ecx] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M4830_IG06: ; bbWeight=1, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz + test ecx, ecx + je SHORT G_M4830_IG11 + ;; size=4 bbWeight=1 PerfScore 1.25 +G_M4830_IG07: ; bbWeight=0.50, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] cmp gword ptr [ebp-0x0C], 0
- jne SHORT G_M4830_IG06
+ jne SHORT G_M4830_IG08
mov eax, ecx ; gcrRegs +[eax]
- jmp SHORT G_M4830_IG07
+ jmp SHORT G_M4830_IG09
;; size=10 bbWeight=0.50 PerfScore 2.62
-G_M4830_IG06: ; bbWeight=0.50, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
+G_M4830_IG08: ; bbWeight=0.50, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax] mov edx, gword ptr [ebp-0x08] ; gcrRegs +[edx] @@ -89,17 +98,17 @@ G_M4830_IG06: ; bbWeight=0.50, gcrefRegs=00000002 {ecx}, byrefRegs=000000 mov eax, gword ptr [ebp-0x0C] ; gcrRegs +[eax] ;; size=14 bbWeight=0.50 PerfScore 1.75
-G_M4830_IG07: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
+G_M4830_IG09: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
xor ecx, ecx ; gcrRegs +[ecx] mov gword ptr [ebp-0x0C], ecx ;; size=5 bbWeight=0.50 PerfScore 0.62
-G_M4830_IG08: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
+G_M4830_IG10: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ecx] mov gword ptr [ebp-0x08], ecx
- jmp SHORT G_M4830_IG12
+ jmp SHORT G_M4830_IG14
;; size=5 bbWeight=0.50 PerfScore 1.50
-G_M4830_IG09: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
+G_M4830_IG11: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
push 0xD1FFAB1E lea ecx, [ebp-0x0C] mov edx, eax @@ -107,12 +116,12 @@ G_M4830_IG09: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=000000 call [<unknown method>] ; gcrRegs -[eax edx] cmp gword ptr [ebp-0x0C], 0
- jne SHORT G_M4830_IG10
+ jne SHORT G_M4830_IG12
mov eax, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[eax]
- jmp SHORT G_M4830_IG12
+ jmp SHORT G_M4830_IG14
;; size=29 bbWeight=0.50 PerfScore 5.88
-G_M4830_IG10: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M4830_IG12: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax] mov edx, gword ptr [ebp-0x08] ; gcrRegs +[edx] @@ -130,17 +139,17 @@ G_M4830_IG10: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 ; gcrRegs +[ecx] mov gword ptr [ebp-0x0C], ecx ;; size=24 bbWeight=0.50 PerfScore 3.38
-G_M4830_IG11: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
+G_M4830_IG13: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
; gcrRegs -[ecx] mov gword ptr [ebp-0x08], ecx ;; size=3 bbWeight=0.50 PerfScore 0.50
-G_M4830_IG12: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M4830_IG14: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
lea esp, [ebp-0x04] pop esi pop ebp ret ;; size=6 bbWeight=1 PerfScore 2.50
-G_M4830_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M4830_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] +[esi] mov ecx, 0xD1FFAB1E mov edx, 0x33EB @@ -148,6 +157,6 @@ G_M4830_IG13: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, jmp G_M4830_IG03 ;; size=20 bbWeight=0 PerfScore 0.00
-; Total bytes of code 197, prolog size 15, PerfScore 41.50, instruction count 60, allocated bytes for code 197 (MethodHash=e3d9ed21) for method FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
+; Total bytes of code 203, prolog size 15, PerfScore 43.81, instruction count 63, allocated bytes for code 203 (MethodHash=e3d9ed21) for method FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
; ============================================================

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.x86.checked.mch 110 80 28 2 -1,257 +650
benchmarks.run_pgo.windows.x86.checked.mch 2,701 2,246 451 4 -18,582 +6,507
benchmarks.run_tiered.windows.x86.checked.mch 61 46 13 2 -774 +269
coreclr_tests.run.windows.x86.checked.mch 592 242 333 17 -3,279 +70,877
libraries.crossgen2.windows.x86.checked.mch 1,035 1,032 1 2 -29,763 +3
libraries.pmi.windows.x86.checked.mch 597 523 53 21 -10,024 +1,403
libraries_tests.run.windows.x86.Release.mch 2,860 1,324 1,506 30 -17,664 +45,465
librariestestsnotieredcompilation.run.windows.x86.Release.mch 906 752 134 20 -16,047 +7,600
realworld.run.windows.x86.checked.mch 156 142 6 8 -2,543 +121
9,018 6,387 2,525 106 -99,933 +132,895

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x86.checked.mch 22,804 4 22,800 1 (0.00%) 1,689 (6.90%)
benchmarks.run_pgo.windows.x86.checked.mch 100,593 41,904 58,689 2 (0.00%) 17,214 (14.61%)
benchmarks.run_tiered.windows.x86.checked.mch 46,719 28,747 17,972 1 (0.00%) 1,164 (2.43%)
coreclr_tests.run.windows.x86.checked.mch 564,650 319,847 244,803 21 (0.00%) 10,018 (1.74%)
libraries.crossgen2.windows.x86.checked.mch 242,557 15 242,542 4 (0.00%) 62 (0.03%)
libraries.pmi.windows.x86.checked.mch 276,980 6 276,974 7 (0.00%) 28,793 (9.42%)
libraries_tests.run.windows.x86.Release.mch 594,467 427,222 167,245 5 (0.00%) 33,366 (5.31%)
librariestestsnotieredcompilation.run.windows.x86.Release.mch 288,422 21,910 266,512 3 (0.00%) 28,013 (8.85%)
realworld.run.windows.x86.checked.mch 31,261 3 31,258 1 (0.00%) 4,724 (13.13%)
2,168,453 839,658 1,328,795 45 (0.00%) 125,043 (5.45%)

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: 5993081 (overridden on cmd)
Total bytes of diff: 5992474 (overridden on cmd)
Total bytes of delta: -607 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          71 : 20926.dasm (37.17 % of base)
          49 : 14180.dasm (8.61 % of base)
          42 : 14663.dasm (6.34 % of base)
          40 : 13499.dasm (8.77 % of base)
          40 : 23171.dasm (15.94 % of base)
          40 : 23759.dasm (15.21 % of base)
          40 : 24285.dasm (13.75 % of base)
          40 : 24382.dasm (10.20 % of base)
          40 : 23420.dasm (14.60 % of base)
          40 : 23727.dasm (14.34 % of base)
          40 : 24052.dasm (13.99 % of base)
          40 : 9854.dasm (10.42 % of base)
          12 : 4996.dasm (0.68 % of base)
          12 : 7094.dasm (0.69 % of base)
          12 : 7514.dasm (2.08 % of base)
          12 : 5340.dasm (0.70 % of base)
          12 : 5698.dasm (3.97 % of base)
          12 : 7377.dasm (0.72 % of base)
          11 : 9975.dasm (1.80 % of base)
           6 : 14494.dasm (9.68 % of base)

Top file improvements (bytes):
         -86 : 5921.dasm (-2.47 % of base)
         -47 : 9468.dasm (-1.72 % of base)
         -35 : 19889.dasm (-9.67 % of base)
         -33 : 5800.dasm (-12.55 % of base)
         -31 : 9019.dasm (-6.42 % of base)
         -30 : 9048.dasm (-11.81 % of base)
         -28 : 17436.dasm (-6.10 % of base)
         -26 : 6557.dasm (-18.44 % of base)
         -24 : 10787.dasm (-11.01 % of base)
         -24 : 5212.dasm (-19.35 % of base)
         -22 : 18686.dasm (-11.64 % of base)
         -22 : 9289.dasm (-13.50 % of base)
         -22 : 17646.dasm (-27.16 % of base)
         -21 : 10632.dasm (-4.61 % of base)
         -20 : 14531.dasm (-9.35 % of base)
         -19 : 678.dasm (-32.76 % of base)
         -19 : 15644.dasm (-20.65 % of base)
         -19 : 16493.dasm (-20.65 % of base)
         -19 : 2466.dasm (-28.79 % of base)
         -18 : 11244.dasm (-38.30 % of base)

62 total files with Code Size differences (37 improved, 25 regressed), 2 unchanged.

Top method regressions (bytes):
          71 (37.17 % of base) : 20926.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[Interop.StructureToPtr+NonBlittableStruct](int):Interop.StructureToPtr+NonBlittableStruct (FullOpts)
          49 (8.61 % of base) : 14180.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (FullOpts)
          42 (6.34 % of base) : 14663.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (FullOpts)
          40 (15.94 % of base) : 23171.dasm - System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)
          40 (14.60 % of base) : 23420.dasm - System.Tests.Perf_Array:ArrayCreate2D():System.Array:this (FullOpts)
          40 (14.34 % of base) : 23727.dasm - System.Tests.Perf_Array:ArrayCreate3D():System.Array:this (FullOpts)
          40 (15.21 % of base) : 23759.dasm - System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)
          40 (13.99 % of base) : 24052.dasm - System.Tests.Perf_Array:SetupArrayAssign2D():this (FullOpts)
          40 (13.75 % of base) : 24285.dasm - System.Tests.Perf_Array:SetupArrayAssign3D():this (FullOpts)
          40 (10.20 % of base) : 24382.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (FullOpts)
          40 (10.42 % of base) : 9854.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (FullOpts)
          40 (8.77 % of base) : 13499.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (FullOpts)
          12 (0.72 % of base) : 7377.dasm - System.Collections.Perf_DefaultFrozenDictionary:Setup():this (FullOpts)
          12 (2.08 % of base) : 7514.dasm - System.Collections.Perf_FrozenDictionary_String:ToImmutableDictionary():System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]:this (FullOpts)
          12 (0.69 % of base) : 7094.dasm - System.Collections.Perf_LengthBucketsFrozenDictionary:Setup():this (FullOpts)
          12 (0.70 % of base) : 5340.dasm - System.Collections.Perf_SingleCharFrozenDictionary:Setup():this (FullOpts)
          12 (0.68 % of base) : 4996.dasm - System.Collections.Perf_SubstringFrozenDictionary:Setup():this (FullOpts)
          12 (3.97 % of base) : 5698.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
          11 (1.80 % of base) : 9975.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 (FullOpts)
           6 (9.68 % of base) : 10379.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)

Top method improvements (bytes):
         -86 (-2.47 % of base) : 5921.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) : 9468.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)
         -35 (-9.67 % of base) : 19889.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -33 (-12.55 % of base) : 5800.dasm - System.Net.Http.Headers.HttpHeaders:AddValueToStoreValue[System.__Canon](System.__Canon,byref) (FullOpts)
         -31 (-6.42 % of base) : 9019.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -30 (-11.81 % of base) : 9048.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-6.10 % of base) : 17436.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -26 (-18.44 % of base) : 6557.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (FullOpts)
         -24 (-19.35 % of base) : 5212.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) : 10787.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -22 (-11.64 % of base) : 18686.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -22 (-27.16 % of base) : 17646.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -22 (-13.50 % of base) : 9289.dasm - System.Collections.Generic.List`1[System.__Canon]:System.Collections.IList.Add(System.Object):int:this (FullOpts)
         -21 (-4.61 % of base) : 10632.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) : 14531.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) : 16493.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetRequiredService[System.__Canon](System.IServiceProvider):System.__Canon (FullOpts)
         -19 (-20.65 % of base) : 15644.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) : 2466.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -18 (-8.14 % of base) : 10341.dasm - System.Collections.Perf_Frozen`1[System.__Canon]:GetUniqueValues(int):System.__Canon[]:this (FullOpts)

Top method regressions (percentages):
          71 (37.17 % of base) : 20926.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[Interop.StructureToPtr+NonBlittableStruct](int):Interop.StructureToPtr+NonBlittableStruct (FullOpts)
          40 (15.94 % of base) : 23171.dasm - System.Tests.Perf_Array:ArrayCreate1D():System.Array:this (FullOpts)
          40 (15.21 % of base) : 23759.dasm - System.Tests.Perf_Array:SetupArrayAssign1D():this (FullOpts)
          40 (14.60 % of base) : 23420.dasm - System.Tests.Perf_Array:ArrayCreate2D():System.Array:this (FullOpts)
          40 (14.34 % of base) : 23727.dasm - System.Tests.Perf_Array:ArrayCreate3D():System.Array:this (FullOpts)
          40 (13.99 % of base) : 24052.dasm - System.Tests.Perf_Array:SetupArrayAssign2D():this (FullOpts)
          40 (13.75 % of base) : 24285.dasm - System.Tests.Perf_Array:SetupArrayAssign3D():this (FullOpts)
          40 (10.42 % of base) : 9854.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (FullOpts)
          40 (10.20 % of base) : 24382.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (FullOpts)
           6 (9.68 % of base) : 10379.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
           6 (9.68 % of base) : 24167.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
           6 (9.68 % of base) : 14303.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
           6 (9.68 % of base) : 14494.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
           6 (9.68 % of base) : 15777.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
           6 (9.68 % of base) : 23906.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          40 (8.77 % of base) : 13499.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (FullOpts)
          49 (8.61 % of base) : 14180.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (FullOpts)
          42 (6.34 % of base) : 14663.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (FullOpts)
          12 (3.97 % of base) : 5698.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
          12 (2.08 % of base) : 7514.dasm - System.Collections.Perf_FrozenDictionary_String:ToImmutableDictionary():System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]:this (FullOpts)

Top method improvements (percentages):
         -14 (-41.18 % of base) : 7181.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) : 1855.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -18 (-38.30 % of base) : 11244.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) : 3683.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -19 (-28.79 % of base) : 2466.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -22 (-27.16 % of base) : 17646.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -17 (-22.67 % of base) : 16877.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -17 (-21.79 % of base) : 3250.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -12 (-21.43 % of base) : 20655.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -19 (-20.65 % of base) : 16493.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetRequiredService[System.__Canon](System.IServiceProvider):System.__Canon (FullOpts)
         -19 (-20.65 % of base) : 15644.dasm - Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions:GetService[System.__Canon](System.IServiceProvider):System.__Canon (FullOpts)
         -24 (-19.35 % of base) : 5212.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)
         -26 (-18.44 % of base) : 6557.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (FullOpts)
         -12 (-15.38 % of base) : 13539.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) : 8991.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -15 (-14.85 % of base) : 2943.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (FullOpts)
         -10 (-14.71 % of base) : 15210.dasm - MicroBenchmarks.Serializers.Json_FromStream`1[System.__Canon]:DataContractJsonSerializer_():System.__Canon:this (FullOpts)
         -10 (-14.71 % of base) : 6745.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:DataContractSerializer_():System.__Canon:this (FullOpts)
         -10 (-14.71 % of base) : 13392.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:XmlSerializer_():System.__Canon: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: 28623124 (overridden on cmd)
Total bytes of diff: 28611049 (overridden on cmd)
Total bytes of delta: -12075 (-0.04 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         117 : 67523.dasm (10.65 % of base)
         112 : 100907.dasm (10.23 % of base)
         112 : 31246.dasm (10.21 % of base)
         109 : 52069.dasm (9.92 % of base)
         108 : 71102.dasm (9.72 % of base)
         107 : 107449.dasm (9.78 % of base)
         107 : 42133.dasm (9.70 % of base)
         107 : 37735.dasm (9.54 % of base)
         107 : 114052.dasm (9.70 % of base)
         104 : 102165.dasm (9.44 % of base)
         103 : 110159.dasm (9.27 % of base)
         102 : 104266.dasm (8.98 % of base)
         101 : 42184.dasm (9.23 % of base)
          99 : 89345.dasm (8.98 % of base)
          99 : 90384.dasm (9.18 % of base)
          99 : 117728.dasm (8.82 % of base)
          99 : 51579.dasm (9.11 % of base)
          99 : 60208.dasm (9.11 % of base)
          99 : 61715.dasm (8.85 % of base)
          97 : 108235.dasm (8.72 % of base)

Top file improvements (bytes):
        -128 : 81870.dasm (-4.46 % of base)
         -89 : 9747.dasm (-2.47 % of base)
         -48 : 83076.dasm (-5.21 % of base)
         -47 : 34529.dasm (-1.69 % of base)
         -46 : 1812.dasm (-17.23 % of base)
         -35 : 77950.dasm (-9.41 % of base)
         -28 : 71641.dasm (-6.05 % of base)
         -23 : 106906.dasm (-4.36 % of base)
         -19 : 56778.dasm (-3.09 % of base)
         -19 : 104503.dasm (-6.05 % of base)
         -19 : 16351.dasm (-32.76 % of base)
         -19 : 87026.dasm (-3.18 % of base)
         -18 : 83895.dasm (-3.15 % of base)
         -18 : 43889.dasm (-3.27 % of base)
         -18 : 56989.dasm (-3.27 % of base)
         -18 : 61955.dasm (-3.01 % of base)
         -18 : 51080.dasm (-3.27 % of base)
         -18 : 54717.dasm (-3.27 % of base)
         -18 : 83252.dasm (-11.46 % of base)
         -18 : 85161.dasm (-3.27 % of base)

65 total files with Code Size differences (36 improved, 29 regressed), 4 unchanged.

Top method regressions (bytes):
         117 (10.65 % of base) : 67523.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         112 (10.23 % of base) : 100907.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         112 (10.21 % of base) : 31246.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         109 (9.92 % of base) : 52069.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         108 (9.72 % of base) : 71102.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         107 (9.78 % of base) : 107449.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         107 (9.70 % of base) : 42133.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         107 (9.54 % of base) : 37735.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         107 (9.70 % of base) : 114052.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         104 (9.44 % of base) : 102165.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         103 (9.27 % of base) : 110159.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         102 (8.98 % of base) : 104266.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         101 (9.23 % of base) : 42184.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          99 (8.98 % of base) : 89345.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          99 (9.18 % of base) : 90384.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          99 (8.82 % of base) : 117728.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          99 (9.11 % of base) : 51579.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          99 (9.11 % of base) : 60208.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          99 (8.85 % of base) : 61715.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          97 (8.72 % of base) : 108235.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)

Top method improvements (bytes):
        -128 (-4.46 % of base) : 81870.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) : 9747.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.21 % of base) : 83076.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -47 (-1.69 % of base) : 34529.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 (-17.23 % of base) : 1812.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -35 (-9.41 % of base) : 77950.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -28 (-6.05 % of base) : 71641.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier0-FullOpts)
         -23 (-4.36 % of base) : 106906.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (Tier1)
         -19 (-6.05 % of base) : 104503.dasm - Jil.Common.ExtensionMethods+<>c__DisplayClass51_0:<IsContainerType>b__0(System.Type):ubyte:this (Tier1)
         -19 (-32.76 % of base) : 16351.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -19 (-3.09 % of base) : 56778.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -19 (-3.18 % of base) : 87026.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-3.15 % of base) : 83895.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -18 (-11.46 % of base) : 83252.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -18 (-3.27 % of base) : 43889.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-3.27 % of base) : 56989.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-3.01 % of base) : 61955.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-3.27 % of base) : 51080.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-3.27 % of base) : 54717.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-3.27 % of base) : 85161.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
         117 (10.65 % of base) : 67523.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          14 (10.61 % of base) : 25342.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          40 (10.23 % of base) : 40205.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)
         112 (10.23 % of base) : 100907.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         112 (10.21 % of base) : 31246.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         109 (9.92 % of base) : 52069.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
          40 (9.85 % of base) : 116806.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (Tier0-FullOpts)
         107 (9.78 % of base) : 107449.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         108 (9.72 % of base) : 71102.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         107 (9.70 % of base) : 42133.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         107 (9.70 % of base) : 114052.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
           6 (9.68 % of base) : 38218.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
           6 (9.68 % of base) : 113596.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
           6 (9.68 % of base) : 46497.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
           6 (9.68 % of base) : 48616.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
           6 (9.68 % of base) : 58466.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
           6 (9.68 % of base) : 109314.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
         107 (9.54 % of base) : 37735.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         104 (9.44 % of base) : 102165.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)
         103 (9.27 % of base) : 110159.dasm - System.Reflection.Emit.RuntimeILGenerator:Emit(System.Reflection.Emit.OpCode,System.Reflection.Emit.LocalBuilder):this (Tier1)

Top method improvements (percentages):
         -19 (-32.76 % of base) : 16351.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -17 (-21.79 % of base) : 50343.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -46 (-17.23 % of base) : 1812.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -15 (-15.15 % of base) : 55466.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -12 (-12.77 % of base) : 45859.dasm - System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (Tier0-FullOpts)
         -18 (-11.46 % of base) : 83252.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -10 (-10.64 % of base) : 84161.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -35 (-9.41 % of base) : 77950.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -12 (-8.70 % of base) : 84402.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -14 (-7.07 % of base) : 21343.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -11 (-6.51 % of base) : 4384.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (Tier0-FullOpts)
          -8 (-6.11 % of base) : 82941.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier0-FullOpts)
         -19 (-6.05 % of base) : 104503.dasm - Jil.Common.ExtensionMethods+<>c__DisplayClass51_0:<IsContainerType>b__0(System.Type):ubyte:this (Tier1)
         -28 (-6.05 % of base) : 71641.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) : 24733.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier0-FullOpts)
         -48 (-5.21 % of base) : 83076.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -12 (-4.67 % of base) : 1649.dasm - System.Linq.EnumerableSorter`2[System.__Canon,int]:ComputeKeys(System.__Canon[],int):this (Tier0-FullOpts)
        -128 (-4.46 % of base) : 81870.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -23 (-4.36 % of base) : 106906.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (Tier1)
         -14 (-4.17 % of base) : 47382.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)


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: 8552866 (overridden on cmd)
Total bytes of diff: 8552361 (overridden on cmd)
Total bytes of delta: -505 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          49 : 28065.dasm (8.61 % of base)
          42 : 28938.dasm (6.34 % of base)
          40 : 22322.dasm (10.42 % of base)
          40 : 26645.dasm (8.77 % of base)
          40 : 47637.dasm (10.20 % of base)
          15 : 22594.dasm (2.40 % of base)
           7 : 47493.dasm (11.11 % of base)
           6 : 22832.dasm (9.68 % of base)
           6 : 29192.dasm (9.68 % of base)
           6 : 40252.dasm (0.63 % of base)
           6 : 27385.dasm (9.68 % of base)
           6 : 31627.dasm (9.68 % of base)
           6 : 46932.dasm (9.68 % of base)

Top file improvements (bytes):
         -86 : 6511.dasm (-2.47 % of base)
         -47 : 23530.dasm (-1.72 % of base)
         -35 : 39645.dasm (-9.67 % of base)
         -31 : 19915.dasm (-6.42 % of base)
         -30 : 45231.dasm (-11.81 % of base)
         -28 : 34159.dasm (-6.10 % of base)
         -26 : 3167.dasm (-18.44 % of base)
         -21 : 21326.dasm (-4.34 % of base)
         -19 : 24480.dasm (-28.79 % of base)
         -19 : 2689.dasm (-32.76 % of base)
         -18 : 1151.dasm (-8.45 % of base)
         -18 : 20818.dasm (-38.30 % of base)
         -18 : 42099.dasm (-11.46 % of base)
         -17 : 11049.dasm (-21.79 % of base)
         -17 : 4415.dasm (-3.33 % of base)
         -16 : 19543.dasm (-13.33 % of base)
         -16 : 12058.dasm (-39.02 % of base)
         -15 : 8596.dasm (-14.85 % of base)
         -14 : 11783.dasm (-7.07 % of base)
         -14 : 23536.dasm (-12.50 % of base)

49 total files with Code Size differences (36 improved, 13 regressed), 2 unchanged.

Top method regressions (bytes):
          49 (8.61 % of base) : 28065.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (Tier0-FullOpts)
          42 (6.34 % of base) : 28938.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (Tier0-FullOpts)
          40 (10.20 % of base) : 47637.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (Tier0-FullOpts)
          40 (10.42 % of base) : 22322.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)
          40 (8.77 % of base) : 26645.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (Tier0-FullOpts)
          15 (2.40 % of base) : 22594.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)
           7 (11.11 % of base) : 47493.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
           6 (0.63 % of base) : 40252.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (Tier0-FullOpts)
           6 (9.68 % of base) : 22832.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
           6 (9.68 % of base) : 27385.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
           6 (9.68 % of base) : 29192.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
           6 (9.68 % of base) : 31627.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
           6 (9.68 % of base) : 46932.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)

Top method improvements (bytes):
         -86 (-2.47 % of base) : 6511.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) : 23530.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)
         -35 (-9.67 % of base) : 39645.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -31 (-6.42 % of base) : 19915.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (Tier1)
         -30 (-11.81 % of base) : 45231.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -28 (-6.10 % of base) : 34159.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) : 3167.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) : 21326.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) : 2689.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -19 (-28.79 % of base) : 24480.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -18 (-11.46 % of base) : 42099.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) : 20818.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -17 (-3.33 % of base) : 4415.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) : 11049.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -16 (-39.02 % of base) : 12058.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -16 (-13.33 % of base) : 19543.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -15 (-14.85 % of base) : 8596.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -14 (-4.22 % of base) : 8945.dasm - Jil.Common.ExtensionMethods:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (Tier1)
         -14 (-7.07 % of base) : 11783.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)

Top method regressions (percentages):
           7 (11.11 % of base) : 47493.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier0-FullOpts)
          40 (10.42 % of base) : 22322.dasm - System.Tests.Perf_Array:SetupArrayRetrieve2D():this (Tier0-FullOpts)
          40 (10.20 % of base) : 47637.dasm - System.Tests.Perf_Array:SetupArrayRetrieve1D():this (Tier0-FullOpts)
           6 (9.68 % of base) : 22832.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier0-FullOpts)
           6 (9.68 % of base) : 27385.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier0-FullOpts)
           6 (9.68 % of base) : 29192.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier0-FullOpts)
           6 (9.68 % of base) : 31627.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier0-FullOpts)
           6 (9.68 % of base) : 46932.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier0-FullOpts)
          40 (8.77 % of base) : 26645.dasm - System.Tests.Perf_Array:SetupArrayRetrieve3D():this (Tier0-FullOpts)
          49 (8.61 % of base) : 28065.dasm - System.Tests.Perf_Array:SetupArrayCopy2D():this (Tier0-FullOpts)
          42 (6.34 % of base) : 28938.dasm - System.Tests.Perf_Array:SetupArrayCopy3D():this (Tier0-FullOpts)
          15 (2.40 % of base) : 22594.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 (0.63 % of base) : 40252.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (Tier0-FullOpts)

Top method improvements (percentages):
         -16 (-39.02 % of base) : 12058.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -18 (-38.30 % of base) : 20818.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -19 (-32.76 % of base) : 2689.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -14 (-29.79 % of base) : 18310.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (Tier1)
         -19 (-28.79 % of base) : 24480.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -17 (-21.79 % of base) : 11049.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -26 (-18.44 % of base) : 3167.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) : 8596.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -16 (-13.33 % of base) : 19543.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -12 (-13.33 % of base) : 47048.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)
         -12 (-12.77 % of base) : 27426.dasm - System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (Tier0-FullOpts)
         -14 (-12.50 % of base) : 23536.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) : 45231.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -18 (-11.46 % of base) : 42099.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -10 (-10.87 % of base) : 40908.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -12 (-10.00 % of base) : 15191.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -35 (-9.67 % of base) : 39645.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -10 (-9.43 % of base) : 18339.dasm - System.Linq.Expressions.ExpressionVisitor:VisitAndConvert[System.__Canon](System.__Canon,System.String):System.__Canon:this (Tier1)
         -10 (-8.62 % of base) : 38436.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: 291617193 (overridden on cmd)
Total bytes of diff: 291684791 (overridden on cmd)
Total bytes of delta: 67598 (0.02 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
        2968 : 278830.dasm (24.47 % of base)
        2908 : 277525.dasm (23.55 % of base)
        2888 : 277732.dasm (23.40 % of base)
        2888 : 278429.dasm (23.47 % of base)
        2814 : 278799.dasm (22.37 % of base)
        2812 : 278905.dasm (22.34 % of base)
        2784 : 279059.dasm (22.34 % of base)
        2756 : 279455.dasm (22.03 % of base)
        2734 : 278861.dasm (21.46 % of base)
        2732 : 277765.dasm (21.43 % of base)
        2684 : 279650.dasm (21.11 % of base)
        2680 : 278397.dasm (20.94 % of base)
        2670 : 277700.dasm (20.87 % of base)
        2572 : 277634.dasm (19.69 % of base)
        2468 : 279618.dasm (18.71 % of base)
        2468 : 279097.dasm (18.71 % of base)
        2464 : 277668.dasm (18.53 % of base)
        2452 : 278142.dasm (18.44 % of base)
        2396 : 277799.dasm (17.80 % of base)
        2356 : 277601.dasm (17.40 % of base)

Top file improvements (bytes):
        -128 : 483704.dasm (-4.46 % of base)
        -122 : 455391.dasm (-9.87 % of base)
         -62 : 370349.dasm (-2.79 % of base)
         -54 : 304653.dasm (-6.78 % of base)
         -54 : 312.dasm (-6.85 % of base)
         -48 : 449728.dasm (-5.21 % of base)
         -46 : 483655.dasm (-3.13 % of base)
         -44 : 172385.dasm (-18.80 % of base)
         -44 : 172408.dasm (-18.80 % of base)
         -43 : 165437.dasm (-29.25 % of base)
         -42 : 424083.dasm (-2.77 % of base)
         -42 : 454574.dasm (-3.64 % of base)
         -38 : 167496.dasm (-2.81 % of base)
         -35 : 448199.dasm (-9.41 % of base)
         -35 : 187943.dasm (-9.67 % of base)
         -33 : 304643.dasm (-4.66 % of base)
         -33 : 233391.dasm (-1.55 % of base)
         -33 : 311.dasm (-4.73 % of base)
         -33 : 304917.dasm (-4.60 % of base)
         -33 : 67.dasm (-4.67 % of base)

78 total files with Code Size differences (50 improved, 28 regressed), 17 unchanged.

Top method regressions (bytes):
        2968 (24.47 % of base) : 278830.dasm - Generated938:CalliTest() (FullOpts)
        2908 (23.55 % of base) : 277525.dasm - Generated900:CalliTest() (FullOpts)
        2888 (23.40 % of base) : 277732.dasm - Generated906:CalliTest() (FullOpts)
        2888 (23.47 % of base) : 278429.dasm - Generated926:CalliTest() (FullOpts)
        2814 (22.37 % of base) : 278799.dasm - Generated937:CalliTest() (FullOpts)
        2812 (22.34 % of base) : 278905.dasm - Generated940:CalliTest() (FullOpts)
        2784 (22.34 % of base) : 279059.dasm - Generated945:CalliTest() (FullOpts)
        2756 (22.03 % of base) : 279455.dasm - Generated957:CalliTest() (FullOpts)
        2734 (21.46 % of base) : 278861.dasm - Generated939:CalliTest() (FullOpts)
        2732 (21.43 % of base) : 277765.dasm - Generated907:CalliTest() (FullOpts)
        2684 (21.11 % of base) : 279650.dasm - Generated963:CalliTest() (FullOpts)
        2680 (20.94 % of base) : 278397.dasm - Generated925:CalliTest() (FullOpts)
        2670 (20.87 % of base) : 277700.dasm - Generated905:CalliTest() (FullOpts)
        2572 (19.69 % of base) : 277634.dasm - Generated903:CalliTest() (FullOpts)
        2468 (18.71 % of base) : 279097.dasm - Generated946:CalliTest() (FullOpts)
        2468 (18.71 % of base) : 279618.dasm - Generated962:CalliTest() (FullOpts)
        2464 (18.53 % of base) : 277668.dasm - Generated904:CalliTest() (FullOpts)
        2452 (18.44 % of base) : 278142.dasm - Generated918:CalliTest() (FullOpts)
        2396 (17.80 % of base) : 277799.dasm - Generated908:CalliTest() (FullOpts)
        2356 (17.40 % of base) : 277601.dasm - Generated902:CalliTest() (FullOpts)

Top method improvements (bytes):
        -128 (-4.46 % of base) : 483704.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
        -122 (-9.87 % of base) : 455391.dasm - System.Linq.Expressions.Compiler.ILGen:EmitConvertToType(System.Reflection.Emit.ILGenerator,System.Type,System.Type,ubyte,System.Linq.Expressions.Compiler.ILocalCache) (Tier1)
         -62 (-2.79 % of base) : 370349.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
         -54 (-6.85 % of base) : 312.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (FullOpts)
         -54 (-6.78 % of base) : 304653.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (Tier0-FullOpts)
         -48 (-5.21 % of base) : 449728.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:VisitLocalDeclarationStatement(Microsoft.CodeAnalysis.CSharp.Syntax.LocalDeclarationStatementSyntax):this (Tier0-FullOpts)
         -46 (-3.13 % of base) : 483655.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) : 165437.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -42 (-2.77 % of base) : 424083.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 (Tier0-FullOpts)
         -42 (-3.64 % of base) : 454574.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) : 167496.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)
         -35 (-9.67 % of base) : 187943.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -35 (-9.41 % of base) : 448199.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier0-FullOpts)
         -33 (-4.73 % of base) : 311.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -33 (-4.66 % of base) : 304643.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (Tier0-FullOpts)
         -33 (-4.67 % of base) : 67.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -33 (-4.60 % of base) : 304917.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (Tier0-FullOpts)
         -33 (-1.55 % of base) : 233391.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)

Top method regressions (percentages):
          34 (566.67 % of base) : 182683.dasm - T:TestEntryPoint():int (FullOpts)
         280 (61.81 % of base) : 546214.dasm - System.Reflection.Emit.RuntimeTypeBuilder:IsSubclassOf(System.Type):ubyte:this (Tier1)
          71 (41.52 % of base) : 165323.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ComWrappersTests.VtblPtr](int):ComWrappersTests.VtblPtr (FullOpts)
          80 (33.33 % of base) : 454409.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this (Tier1)
        2968 (24.47 % of base) : 278830.dasm - Generated938:CalliTest() (FullOpts)
        2908 (23.55 % of base) : 277525.dasm - Generated900:CalliTest() (FullOpts)
        2888 (23.47 % of base) : 278429.dasm - Generated926:CalliTest() (FullOpts)
        2888 (23.40 % of base) : 277732.dasm - Generated906:CalliTest() (FullOpts)
        2814 (22.37 % of base) : 278799.dasm - Generated937:CalliTest() (FullOpts)
        2784 (22.34 % of base) : 279059.dasm - Generated945:CalliTest() (FullOpts)
        2812 (22.34 % of base) : 278905.dasm - Generated940:CalliTest() (FullOpts)
        2756 (22.03 % of base) : 279455.dasm - Generated957:CalliTest() (FullOpts)
        2734 (21.46 % of base) : 278861.dasm - Generated939:CalliTest() (FullOpts)
        2732 (21.43 % of base) : 277765.dasm - Generated907:CalliTest() (FullOpts)
          65 (21.17 % of base) : 172741.dasm - Test_static_assignment_class01:TestEntryPoint():int (FullOpts)
          65 (21.17 % of base) : 172746.dasm - Test_static_assignment_struct01:TestEntryPoint():int (FullOpts)
        2684 (21.11 % of base) : 279650.dasm - Generated963:CalliTest() (FullOpts)
        2680 (20.94 % of base) : 278397.dasm - Generated925:CalliTest() (FullOpts)
        2670 (20.87 % of base) : 277700.dasm - Generated905:CalliTest() (FullOpts)
        2572 (19.69 % of base) : 277634.dasm - Generated903:CalliTest() (FullOpts)

Top method improvements (percentages):
         -19 (-32.76 % of base) : 305809.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -14 (-29.79 % of base) : 166165.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -43 (-29.25 % of base) : 165437.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -22 (-27.16 % of base) : 185493.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -26 (-26.26 % of base) : 234659.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -10 (-25.64 % of base) : 204317.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -14 (-25.45 % of base) : 300515.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -15 (-25.00 % of base) : 208998.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) : 236538.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -19 (-25.00 % of base) : 426546.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -19 (-23.46 % of base) : 164766.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)
         -19 (-23.46 % of base) : 204310.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -32 (-21.33 % of base) : 228208.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -10 (-21.28 % of base) : 240837.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -18 (-19.15 % of base) : 280798.dasm - System.CommandLine.Binding.ArgumentConverter:GetValueOrDefault[System.__Canon](System.CommandLine.Binding.ArgumentConversionResult):System.__Canon (FullOpts)
         -18 (-19.15 % of base) : 562065.dasm - System.CommandLine.Binding.ArgumentConverter:GetValueOrDefault[System.__Canon](System.CommandLine.Binding.ArgumentConversionResult):System.__Canon (Tier1)
         -18 (-19.15 % of base) : 543649.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)


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: 31700815 (overridden on cmd)
Total bytes of diff: 31671055 (overridden on cmd)
Total bytes of delta: -29760 (-0.09 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



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

Top file improvements (bytes):
        -219 : 203814.dasm (-5.02 % of base)
        -208 : 193560.dasm (-34.61 % of base)
        -204 : 193564.dasm (-33.06 % of base)
        -192 : 199393.dasm (-17.20 % of base)
        -180 : 199392.dasm (-17.11 % of base)
        -178 : 65225.dasm (-26.22 % of base)
        -169 : 65797.dasm (-24.14 % of base)
        -169 : 65798.dasm (-23.54 % of base)
        -168 : 199390.dasm (-17.00 % of base)
        -156 : 199388.dasm (-16.88 % of base)
        -144 : 199386.dasm (-16.74 % of base)
        -143 : 193562.dasm (-31.29 % of base)
        -140 : 193555.dasm (-31.96 % of base)
        -132 : 199384.dasm (-16.58 % of base)
        -123 : 66692.dasm (-18.66 % of base)
        -123 : 65948.dasm (-18.66 % of base)
        -120 : 199382.dasm (-16.39 % of base)
        -117 : 203873.dasm (-6.81 % of base)
        -109 : 197352.dasm (-14.83 % of base)
        -109 : 164828.dasm (-10.05 % of base)

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

Top method regressions (bytes):
           3 (0.70 % of base) : 58843.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) : 203814.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) : 193560.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) : 193564.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) : 199393.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) : 199392.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) : 65225.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) : 65797.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -169 (-23.54 % of base) : 65798.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) : 199390.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) : 199388.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) : 199386.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) : 193562.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) : 193555.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) : 199384.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) : 66692.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) : 65948.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) : 199382.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) : 203873.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 (-14.83 % of base) : 197352.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -109 (-10.05 % of base) : 164828.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)

Top method regressions (percentages):
           3 (0.70 % of base) : 58843.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) : 198869.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -74 (-54.41 % of base) : 205987.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) : 205992.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) : 206132.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) : 206137.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) : 203886.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) : 203856.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) : 206830.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) : 235566.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) : 122816.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) : 136422.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) : 173380.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -40 (-50.00 % of base) : 74295.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) : 230857.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) : 203892.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) : 204458.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) : 204460.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) : 182674.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) : 173455.dasm - Microsoft.Extensions.Hosting.HostApplicationBuilder+<>c__DisplayClass30_0`1[System.__Canon]:<ConfigureContainer>b__1(System.Object):this (FullOpts)
         -30 (-46.15 % of base) : 241013.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: 36478439 (overridden on cmd)
Total bytes of diff: 36469818 (overridden on cmd)
Total bytes of delta: -8621 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         230 : 246125.dasm (7.70 % of base)
          85 : 242516.dasm (16.63 % of base)
          79 : 242530.dasm (20.79 % of base)
          75 : 277151.dasm (6.93 % of base)
          71 : 9875.dasm (37.37 % of base)
          71 : 9876.dasm (37.97 % of base)
          71 : 9879.dasm (34.98 % of base)
          71 : 9877.dasm (32.27 % of base)
          71 : 9878.dasm (33.18 % of base)
          71 : 9874.dasm (37.37 % of base)
          52 : 99762.dasm (3.33 % of base)
          40 : 171808.dasm (5.67 % of base)
          30 : 92923.dasm (2.16 % of base)
          27 : 208063.dasm (1.04 % of base)
          26 : 197836.dasm (15.29 % of base)
          26 : 273459.dasm (14.05 % of base)
          24 : 273173.dasm (7.34 % of base)
          22 : 273469.dasm (8.49 % of base)
          22 : 246003.dasm (2.72 % of base)
          22 : 273494.dasm (22.00 % of base)

Top file improvements (bytes):
        -253 : 219352.dasm (-20.91 % of base)
        -219 : 115378.dasm (-8.18 % of base)
        -217 : 123264.dasm (-10.36 % of base)
        -217 : 161283.dasm (-10.36 % of base)
        -216 : 153503.dasm (-6.72 % of base)
        -209 : 58189.dasm (-9.14 % of base)
        -202 : 81352.dasm (-8.08 % of base)
        -109 : 77668.dasm (-12.88 % of base)
        -107 : 194450.dasm (-10.07 % of base)
         -89 : 285723.dasm (-2.47 % of base)
         -82 : 177176.dasm (-6.22 % of base)
         -78 : 177821.dasm (-36.11 % of base)
         -64 : 29238.dasm (-13.50 % of base)
         -64 : 29245.dasm (-13.01 % of base)
         -63 : 71369.dasm (-14.82 % of base)
         -60 : 177823.dasm (-4.77 % of base)
         -56 : 170153.dasm (-19.58 % of base)
         -48 : 259980.dasm (-13.75 % of base)
         -46 : 226695.dasm (-3.21 % of base)
         -46 : 68900.dasm (-15.97 % of base)

74 total files with Code Size differences (47 improved, 27 regressed), 20 unchanged.

Top method regressions (bytes):
         230 (7.70 % of base) : 246125.dasm - System.Linq.Expressions.Expression:ValidateNewArgs(System.Reflection.ConstructorInfo,byref,byref) (FullOpts)
          85 (16.63 % of base) : 242516.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue(System.Enum,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.79 % of base) : 242530.dasm - System.Formats.Asn1.AsnWriter:WriteNamedBitList(System.Enum,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          75 (6.93 % of base) : 277151.dasm - System.Security.Cryptography.Pkcs.Asn1.PkiStatusInfo:Encode(System.Formats.Asn1.AsnWriter,System.Formats.Asn1.Asn1Tag):this (FullOpts)
          71 (32.27 % of base) : 9877.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[double](int):double (FullOpts)
          71 (37.97 % of base) : 9876.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[int](int):int (FullOpts)
          71 (34.98 % of base) : 9879.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[long](int):long (FullOpts)
          71 (37.37 % of base) : 9875.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[short](int):short (FullOpts)
          71 (33.18 % of base) : 9878.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](int):System.Numerics.Vector`1[float] (FullOpts)
          71 (37.37 % of base) : 9874.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ubyte](int):ubyte (FullOpts)
          52 (3.33 % of base) : 99762.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          40 (5.67 % of base) : 171808.dasm - System.Xml.Schema.XmlSchemaValidator:GetExpectedAttributes():System.Xml.Schema.XmlSchemaAttribute[]:this (FullOpts)
          30 (2.16 % of base) : 92923.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          27 (1.04 % of base) : 208063.dasm - Microsoft.Build.Graph.ProjectInterpretation:GetGlobalPropertiesForItem(Microsoft.Build.Execution.ProjectItemInstance,Microsoft.Build.Collections.PropertyDictionary`1[Microsoft.Build.Execution.ProjectPropertyInstance],System.Collections.Generic.IEnumerable`1[Microsoft.Build.Graph.ProjectInterpretation+GlobalPropertiesModifier]):Microsoft.Build.Collections.PropertyDictionary`1[Microsoft.Build.Execution.ProjectPropertyInstance] (FullOpts)
          26 (15.29 % of base) : 197836.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
          26 (14.05 % of base) : 273459.dasm - System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)
          24 (7.34 % of base) : 273173.dasm - System.Reflection.Emit.EnumBuilderImpl:DefineLiteralCore(System.String,System.Object):System.Reflection.Emit.FieldBuilder:this (FullOpts)
          22 (2.72 % of base) : 246003.dasm - System.Linq.Expressions.Expression:ValidateAccessorArgumentTypes(System.Reflection.MethodInfo,System.Reflection.ParameterInfo[],byref,System.String) (FullOpts)
          22 (8.49 % of base) : 273469.dasm - System.Reflection.Emit.TypeBuilderImpl:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (FullOpts)
          22 (22.00 % of base) : 273494.dasm - System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)

Top method improvements (bytes):
        -253 (-20.91 % of base) : 219352.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -219 (-8.18 % of base) : 115378.dasm - Microsoft.CodeAnalysis.Diagnostics.AnalyzerDriver:GetAllDescriptors(System.Threading.CancellationToken):System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.DiagnosticDescriptor,ubyte]]:this (FullOpts)
        -217 (-10.36 % of base) : 161283.dasm - Microsoft.CodeAnalysis.Diagnostics.CompilationWithAnalyzers+<CreateAndInitializeDriverAsync>d__41:MoveNext():this (FullOpts)
        -217 (-10.36 % of base) : 123264.dasm - Microsoft.CodeAnalysis.Diagnostics.CompilationWithAnalyzers+<CreateAndInitializeDriverAsync>d__42:MoveNext():this (FullOpts)
        -216 (-6.72 % of base) : 153503.dasm - Microsoft.CodeAnalysis.Diagnostics.AnalyzerDriver:GetAllDiagnosticDescriptorsWithInfo(System.Threading.CancellationToken,byref):System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.DiagnosticDescriptor,Microsoft.CodeAnalysis.DiagnosticDescriptorErrorLoggerInfo]]:this (FullOpts)
        -209 (-9.14 % of base) : 58189.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -202 (-8.08 % of base) : 81352.dasm - Microsoft.CodeAnalysis.VisualBasic.Symbols.ConstraintsHelper:AppendUseSiteInfo(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.VisualBasic.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -109 (-12.88 % of base) : 77668.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -107 (-10.07 % of base) : 194450.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
         -89 (-2.47 % of base) : 285723.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) : 177176.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
         -78 (-36.11 % of base) : 177821.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -64 (-13.50 % of base) : 29238.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -64 (-13.01 % of base) : 29245.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) : 71369.dasm - System.Data.UniqueConstraint:IsConstraintViolated():ubyte:this (FullOpts)
         -60 (-4.77 % of base) : 177823.dasm - System.Xml.Serialization.XmlSchemas:GetSchemaItem(System.Xml.Schema.XmlSchemaObject,System.String,System.String):System.String (FullOpts)
         -56 (-19.58 % of base) : 170153.dasm - System.Xml.Schema.Compiler:CanonicalizeParticle(System.Xml.Schema.XmlSchemaParticle,ubyte):System.Xml.Schema.XmlSchemaParticle:this (FullOpts)
         -48 (-13.75 % of base) : 259980.dasm - System.Net.Http.Headers.ObjectCollection`1[System.__Canon]:CopyTo(System.__Canon[],int):this (FullOpts)
         -46 (-3.21 % of base) : 226695.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:UnionWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
         -46 (-15.97 % of base) : 68900.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)

Top method regressions (percentages):
          71 (37.97 % of base) : 9876.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[int](int):int (FullOpts)
          71 (37.37 % of base) : 9875.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[short](int):short (FullOpts)
          71 (37.37 % of base) : 9874.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[ubyte](int):ubyte (FullOpts)
          71 (34.98 % of base) : 9879.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[long](int):long (FullOpts)
          71 (33.18 % of base) : 9878.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Numerics.Vector`1[float]](int):System.Numerics.Vector`1[float] (FullOpts)
          71 (32.27 % of base) : 9877.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[double](int):double (FullOpts)
          22 (22.00 % of base) : 273494.dasm - System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
          79 (20.79 % of base) : 242530.dasm - System.Formats.Asn1.AsnWriter:WriteNamedBitList(System.Enum,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          85 (16.63 % of base) : 242516.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue(System.Enum,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          26 (15.29 % of base) : 197836.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
          26 (14.05 % of base) : 273459.dasm - System.Reflection.Emit.TypeBuilderImpl:CreateTypeInfoCore():System.Reflection.TypeInfo:this (FullOpts)
          22 (8.49 % of base) : 273469.dasm - System.Reflection.Emit.TypeBuilderImpl:DefineFieldCore(System.String,System.Type,System.Type[],System.Type[],int):System.Reflection.Emit.FieldBuilder:this (FullOpts)
          20 (7.91 % of base) : 68977.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
         230 (7.70 % of base) : 246125.dasm - System.Linq.Expressions.Expression:ValidateNewArgs(System.Reflection.ConstructorInfo,byref,byref) (FullOpts)
          24 (7.34 % of base) : 273173.dasm - System.Reflection.Emit.EnumBuilderImpl:DefineLiteralCore(System.String,System.Object):System.Reflection.Emit.FieldBuilder:this (FullOpts)
           5 (6.94 % of base) : 212061.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
           5 (6.94 % of base) : 212063.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
          75 (6.93 % of base) : 277151.dasm - System.Security.Cryptography.Pkcs.Asn1.PkiStatusInfo:Encode(System.Formats.Asn1.AsnWriter,System.Formats.Asn1.Asn1Tag):this (FullOpts)
          14 (6.60 % of base) : 197833.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.get_Item(System.Object):System.Object:this (FullOpts)
          40 (5.67 % of base) : 171808.dasm - System.Xml.Schema.XmlSchemaValidator:GetExpectedAttributes():System.Xml.Schema.XmlSchemaAttribute[]:this (FullOpts)

Top method improvements (percentages):
         -14 (-42.42 % of base) : 299505.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) : 28962.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -16 (-39.02 % of base) : 283130.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -14 (-38.89 % of base) : 188521.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -16 (-36.36 % of base) : 108094.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -16 (-36.36 % of base) : 146282.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -78 (-36.11 % of base) : 177821.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -14 (-35.90 % of base) : 73876.dasm - System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
         -14 (-34.15 % of base) : 268431.dasm - System.Runtime.Serialization.DataNode`1[System.__Canon]:set_Value(System.Object):this (FullOpts)
         -14 (-32.56 % of base) : 222288.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) : 222467.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) : 224141.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) : 175015.dasm - System.Xml.Xsl.Runtime.XmlQuerySequence`1[System.__Canon]:System.Collections.IList.IndexOf(System.Object):int:this (FullOpts)
         -33 (-29.73 % of base) : 177742.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -19 (-29.69 % of base) : 188241.dasm - CommandLine.Infrastructure.ReflectionHelper:CreateDefaultImmutableInstance[System.__Canon](System.Type[]):System.__Canon (FullOpts)
         -19 (-29.69 % of base) : 199410.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
         -43 (-29.25 % of base) : 291594.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -43 (-29.25 % of base) : 293329.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -14 (-29.17 % of base) : 285178.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) : 284846.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: 160677288 (overridden on cmd)
Total bytes of diff: 160705089 (overridden on cmd)
Total bytes of delta: 27801 (0.02 % of base)
    diff is a regression.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         659 : 373430.dasm (23.83 % of base)
         569 : 373352.dasm (22.19 % of base)
         434 : 293339.dasm (3.84 % of base)
         413 : 373501.dasm (9.64 % of base)
         378 : 174509.dasm (18.87 % of base)
         313 : 370100.dasm (2.76 % of base)
         301 : 174625.dasm (11.19 % of base)
         301 : 426385.dasm (2.92 % of base)
         294 : 236532.dasm (2.63 % of base)
         294 : 620146.dasm (2.65 % of base)
         294 : 621742.dasm (2.66 % of base)
         251 : 433684.dasm (2.18 % of base)
         225 : 207297.dasm (1.93 % of base)
         221 : 371906.dasm (51.88 % of base)
         213 : 340178.dasm (1.87 % of base)
         200 : 431803.dasm (1.70 % of base)
         193 : 241258.dasm (1.62 % of base)
         193 : 338742.dasm (1.62 % of base)
         193 : 612742.dasm (1.62 % of base)
         193 : 369987.dasm (1.62 % of base)

Top file improvements (bytes):
        -198 : 140385.dasm (-9.68 % of base)
        -197 : 78564.dasm (-11.37 % of base)
        -196 : 12443.dasm (-9.46 % of base)
        -194 : 126357.dasm (-9.38 % of base)
        -183 : 373975.dasm (-13.74 % of base)
        -164 : 371735.dasm (-11.29 % of base)
        -158 : 580069.dasm (-4.74 % of base)
        -142 : 183728.dasm (-1.19 % of base)
        -141 : 120687.dasm (-1.20 % of base)
        -141 : 133890.dasm (-1.20 % of base)
        -141 : 438339.dasm (-1.20 % of base)
        -141 : 411611.dasm (-1.20 % of base)
        -131 : 373969.dasm (-10.15 % of base)
        -128 : 152951.dasm (-4.32 % of base)
        -107 : 386929.dasm (-12.74 % of base)
        -104 : 81121.dasm (-2.28 % of base)
         -95 : 373971.dasm (-9.66 % of base)
         -89 : 317356.dasm (-2.38 % of base)
         -86 : 79009.dasm (-3.82 % of base)
         -82 : 56966.dasm (-2.09 % of base)

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

Top method regressions (bytes):
         659 (23.83 % of base) : 373430.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfInt():System.Object:this (Tier0-FullOpts)
         569 (22.19 % of base) : 373352.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeWithArrayPropertyHavingChoice:Read3_Item(ubyte,ubyte):SerializationTypes.TypeWithArrayPropertyHavingChoice:this (Tier0-FullOpts)
         434 (3.84 % of base) : 293339.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         413 (9.64 % of base) : 373501.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfArrayOfInt():System.Object:this (Tier0-FullOpts)
         378 (18.87 % of base) : 174509.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderOrchestra:Read5_Orchestra(ubyte,ubyte):Orchestra:this (Tier0-FullOpts)
         313 (2.76 % of base) : 370100.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         301 (11.19 % of base) : 174625.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderPurchaseOrder:Read4_PurchaseOrder(ubyte,ubyte):PurchaseOrder:this (Tier0-FullOpts)
         301 (2.92 % of base) : 426385.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         294 (2.63 % of base) : 236532.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         294 (2.65 % of base) : 620146.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         294 (2.66 % of base) : 621742.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         251 (2.18 % of base) : 433684.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
         225 (1.93 % of base) : 207297.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
         221 (51.88 % of base) : 371906.dasm - System.Reflection.Emit.RuntimeTypeBuilder:IsSubclassOf(System.Type):ubyte:this (Tier1)
         213 (1.87 % of base) : 340178.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Tier1)
         200 (1.70 % of base) : 431803.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
         193 (1.62 % of base) : 241258.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
         193 (1.62 % of base) : 338742.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
         193 (1.62 % of base) : 612742.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
         193 (1.62 % of base) : 369987.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)

Top method improvements (bytes):
        -198 (-9.68 % of base) : 140385.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (Tier0-FullOpts)
        -197 (-11.37 % of base) : 78564.dasm - Microsoft.CodeAnalysis.FindSymbols.FindReferencesSearchEngine+SymbolSet+<DetermineInitialUpSymbolsAsync>d__10:MoveNext():this (Tier0-FullOpts)
        -196 (-9.46 % of base) : 12443.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (Tier0-FullOpts)
        -194 (-9.38 % of base) : 126357.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (Tier0-FullOpts)
        -183 (-13.74 % of base) : 373975.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) : 371735.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (Tier0-FullOpts)
        -158 (-4.74 % of base) : 580069.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbolBase:AddSynthesizedAttributes(Microsoft.CodeAnalysis.CSharp.Emit.PEModuleBuilder,byref):this (Tier1)
        -142 (-1.19 % of base) : 183728.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
        -141 (-1.20 % of base) : 120687.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
        -141 (-1.20 % of base) : 133890.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
        -141 (-1.20 % of base) : 438339.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
        -141 (-1.20 % of base) : 411611.dasm - System.DefaultBinder:BindToMethod(int,System.Reflection.MethodBase[],byref,System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],byref):System.Reflection.MethodBase:this (Instrumented Tier1)
        -131 (-10.15 % of base) : 373969.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) : 152951.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
        -107 (-12.74 % of base) : 386929.dasm - System.Xml.XslCompiledTransformApiTests.CSameInstanceXsltArgumentListTransform:SharedArgList(System.Object):int:this (Tier0-FullOpts)
        -104 (-2.28 % of base) : 81121.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.PropertySymbol:CalculateUseSiteDiagnostic(byref):ubyte:this (Tier1)
         -95 (-9.66 % of base) : 373971.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) : 317356.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) : 79009.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)
         -82 (-2.09 % of base) : 56966.dasm - Microsoft.CodeAnalysis.CSharp.Binder:BindElementAccessCore(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)

Top method regressions (percentages):
         221 (51.88 % of base) : 371906.dasm - System.Reflection.Emit.RuntimeTypeBuilder:IsSubclassOf(System.Type):ubyte:this (Tier1)
          97 (29.75 % of base) : 456215.dasm - System.Reflection.RuntimeModule:ConvertToTypeHandleArray(System.Type[]):System.RuntimeTypeHandle[] (Tier1)
          96 (29.36 % of base) : 371840.dasm - System.Reflection.RuntimeModule:ConvertToTypeHandleArray(System.Type[]):System.RuntimeTypeHandle[] (Tier1)
          67 (28.63 % of base) : 623691.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this (Tier1)
         659 (23.83 % of base) : 373430.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfInt():System.Object:this (Tier0-FullOpts)
         569 (22.19 % of base) : 373352.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeWithArrayPropertyHavingChoice:Read3_Item(ubyte,ubyte):SerializationTypes.TypeWithArrayPropertyHavingChoice:this (Tier0-FullOpts)
          59 (21.85 % of base) : 327924.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
         378 (18.87 % of base) : 174509.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderOrchestra:Read5_Orchestra(ubyte,ubyte):Orchestra:this (Tier0-FullOpts)
          75 (18.07 % of base) : 336105.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[Interop+WinHttp+WINHTTP_ASYNC_RESULT](int):Interop+WinHttp+WINHTTP_ASYNC_RESULT (Tier1)
          18 (17.31 % of base) : 552032.dasm - System.Text.Json.JsonSerializer:ValidateInputType(System.Object,System.Type) (Tier1)
          80 (16.46 % of base) : 373353.dasm - System.DefaultBinder:FindMostSpecificType(System.Type,System.Type,System.Type):int (Tier1)
          51 (15.64 % of base) : 462556.dasm - System.RuntimeType:GetEnumValues():System.Array:this (Tier1)
          46 (15.08 % of base) : 274210.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this (Tier1)
          58 (15.03 % of base) : 465698.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this (Tier1)
          43 (14.88 % of base) : 621744.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this (Tier1)
          59 (14.53 % of base) : 270621.dasm - System.Reflection.CerHashtable`2+Table[System.__Canon,System.__Canon]:Insert(System.__Canon,System.__Canon):this (Tier1)
          51 (14.45 % of base) : 483512.dasm - System.RuntimeType:GetEnumValues():System.Array:this (Tier1)
          51 (14.25 % of base) : 312336.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this (Tier1)
          43 (14.10 % of base) : 620747.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this (Tier1)
          46 (13.94 % of base) : 429241.dasm - System.Reflection.CerHashtable`2[System.__Canon,System.__Canon]:get_Item(System.__Canon):System.__Canon:this (Tier1)

Top method improvements (percentages):
         -41 (-42.27 % of base) : 375396.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (Tier1)
         -16 (-39.02 % of base) : 551021.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -18 (-38.30 % of base) : 114695.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -16 (-36.36 % of base) : 55046.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -22 (-33.33 % of base) : 496438.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -19 (-32.76 % of base) : 1656.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -43 (-29.25 % of base) : 108325.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (Tier1)
         -14 (-25.93 % of base) : 131796.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) : 95922.dasm - System.Composition.Hosting.Providers.Lazy.LazyWithMetadataExportDescriptorProvider+<>c__DisplayClass2_3`2[System.__Canon,System.__Canon]:<GetLazyDefinitions>b__4():System.__Canon:this (Tier1)
         -15 (-25.00 % of base) : 551626.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -15 (-25.00 % of base) : 555737.dasm - System.Text.Json.Serialization.Converters.StackOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -36 (-25.00 % of base) : 551817.dasm - System.Text.Json.Serialization.Converters.StackOrQueueConverter`1[System.__Canon]:Add(byref,byref):this (Tier1)
         -15 (-25.00 % of base) : 115074.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -15 (-25.00 % of base) : 108292.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -19 (-25.00 % of base) : 108506.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -19 (-25.00 % of base) : 183399.dasm - Xunit.Assert:ThrowsAny[System.__Canon](System.Action):System.__Canon (Tier1)
         -16 (-23.88 % of base) : 82018.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -19 (-23.46 % of base) : 108088.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -19 (-23.46 % of base) : 282227.dasm - Xunit.Assert:ThrowsAny[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -23 (-23.23 % of base) : 82153.dasm - Microsoft.CodeAnalysis.DefaultTextDocumentServiceProvider:GetService[System.__Canon]():System.__Canon:this (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: 89509872 (overridden on cmd)
Total bytes of diff: 89501425 (overridden on cmd)
Total bytes of delta: -8447 (-0.01 % of base)
    diff is a regression.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         659 : 172806.dasm (24.11 % of base)
         413 : 172828.dasm (9.72 % of base)
         378 : 64210.dasm (18.87 % of base)
         365 : 172760.dasm (14.42 % of base)
         298 : 64320.dasm (11.60 % of base)
         186 : 177369.dasm (9.90 % of base)
         128 : 172070.dasm (4.07 % of base)
         128 : 172525.dasm (4.07 % of base)
         122 : 172069.dasm (2.65 % of base)
         122 : 172524.dasm (2.65 % of base)
         111 : 172697.dasm (3.81 % of base)
         100 : 145705.dasm (9.97 % of base)
          88 : 119297.dasm (11.52 % of base)
          88 : 119308.dasm (11.99 % of base)
          85 : 172822.dasm (5.13 % of base)
          85 : 172428.dasm (5.01 % of base)
          85 : 172792.dasm (4.78 % of base)
          85 : 173231.dasm (4.36 % of base)
          85 : 64199.dasm (4.71 % of base)
          85 : 172851.dasm (4.71 % of base)

Top file improvements (bytes):
        -470 : 209542.dasm (-10.50 % of base)
        -364 : 314154.dasm (-7.29 % of base)
        -253 : 64882.dasm (-20.91 % of base)
        -215 : 10710.dasm (-10.34 % of base)
        -205 : 2992.dasm (-10.19 % of base)
        -198 : 20703.dasm (-10.01 % of base)
        -196 : 51451.dasm (-9.46 % of base)
        -196 : 6755.dasm (-9.46 % of base)
        -196 : 45622.dasm (-9.46 % of base)
        -189 : 199276.dasm (-17.68 % of base)
        -189 : 210846.dasm (-17.68 % of base)
        -189 : 20679.dasm (-11.26 % of base)
        -187 : 16460.dasm (-10.84 % of base)
        -187 : 16405.dasm (-10.75 % of base)
        -184 : 173046.dasm (-14.05 % of base)
        -175 : 21536.dasm (-9.71 % of base)
        -172 : 14404.dasm (-18.90 % of base)
        -164 : 172163.dasm (-11.29 % of base)
        -145 : 199641.dasm (-13.39 % of base)
        -145 : 210826.dasm (-13.39 % of base)

93 total files with Code Size differences (53 improved, 40 regressed), 20 unchanged.

Top method regressions (bytes):
         659 (24.11 % of base) : 172806.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfInt():System.Object:this (FullOpts)
         413 (9.72 % of base) : 172828.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfArrayOfInt():System.Object:this (FullOpts)
         378 (18.87 % of base) : 64210.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderOrchestra:Read5_Orchestra(ubyte,ubyte):Orchestra:this (FullOpts)
         365 (14.42 % of base) : 172760.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeWithArrayPropertyHavingChoice:Read3_Item(ubyte,ubyte):SerializationTypes.TypeWithArrayPropertyHavingChoice:this (FullOpts)
         298 (11.60 % of base) : 64320.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderPurchaseOrder:Read4_PurchaseOrder(ubyte,ubyte):PurchaseOrder:this (FullOpts)
         186 (9.90 % of base) : 177369.dasm - (dynamicClass):<xsl:template match="/">(System.Xml.Xsl.Runtime.XmlQueryRuntime) (FullOpts)
         128 (4.07 % of base) : 172070.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read2_Object(ubyte,ubyte):System.Object:this (FullOpts)
         128 (4.07 % of base) : 172525.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read2_Object(ubyte,ubyte):System.Object:this (FullOpts)
         122 (2.65 % of base) : 172069.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read3_XmlSerializerAttributes(ubyte,ubyte):SerializationTypes.XmlSerializerAttributes:this (FullOpts)
         122 (2.65 % of base) : 172524.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderXmlSerializerAttributes:Read3_XmlSerializerAttributes(ubyte,ubyte):SerializationTypes.XmlSerializerAttributes:this (FullOpts)
         111 (3.81 % of base) : 172697.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeWith2DArrayProperty2:Read3_TypeWith2DArrayProperty2(ubyte,ubyte):SerializationTypes.TypeWith2DArrayProperty2:this (FullOpts)
         100 (9.97 % of base) : 145705.dasm - System.Linq.Tests.ToLookupTests+<DebuggerAttributesValid_Data>d__25:MoveNext():ubyte:this (FullOpts)
          88 (11.99 % of base) : 119308.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList:VerifyWriteNamedBitList_Generic(int) (FullOpts)
          88 (11.52 % of base) : 119297.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList:VerifyWriteNamedBitList_Generic_WithTag(int) (FullOpts)
          85 (4.36 % of base) : 173231.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1:Read2_Item(ubyte,ubyte):XmlMembersMappingTypeHavingIntArray:this (FullOpts)
          85 (5.01 % of base) : 172428.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderObject:Read1_Object(ubyte,ubyte):System.Object:this (FullOpts)
          85 (4.78 % of base) : 172792.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderObject:Read2_Object(ubyte,ubyte):System.Object:this (FullOpts)
          85 (5.13 % of base) : 172822.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderObjectArray:Read1_Object(ubyte,ubyte):System.Object:this (FullOpts)
          85 (4.71 % of base) : 64199.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderOrchestra:Read3_Orchestra(ubyte,ubyte):Orchestra:this (FullOpts)
          85 (4.71 % of base) : 172851.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderTypeHasArrayOfASerializedAsB:Read3_TypeHasArrayOfASerializedAsB(ubyte,ubyte):SerializationTypes.TypeHasArrayOfASerializedAsB:this (FullOpts)

Top method improvements (bytes):
        -470 (-10.50 % of base) : 209542.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) : 314154.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) : 64882.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -215 (-10.34 % of base) : 10710.dasm - Microsoft.CodeAnalysis.Diagnostics.CompilationWithAnalyzers+<CreateAndInitializeDriverAsync>d__41:MoveNext():this (FullOpts)
        -205 (-10.19 % of base) : 2992.dasm - Microsoft.VisualStudio.Composition.CompositionConfiguration:ComputeSharingBoundaryMetadata(System.Collections.Generic.IEnumerable`1[Microsoft.VisualStudio.Composition.CompositionConfiguration+PartBuilder]):System.Collections.Immutable.ImmutableDictionary`2[System.String,Microsoft.VisualStudio.Composition.CompositionConfiguration+SharingBoundaryMetadata] (FullOpts)
        -198 (-10.01 % of base) : 20703.dasm - Microsoft.CodeAnalysis.FindSymbols.DependentTypeFinder+<GetProjectsThatCouldReferenceTypeAsync>d__10:MoveNext():this (FullOpts)
        -196 (-9.46 % of base) : 51451.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -196 (-9.46 % of base) : 6755.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -196 (-9.46 % of base) : 45622.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -189 (-11.26 % of base) : 20679.dasm - Microsoft.CodeAnalysis.FindSymbols.FindReferencesSearchEngine+SymbolSet+<DetermineInitialUpSymbolsAsync>d__10:MoveNext():this (FullOpts)
        -189 (-17.68 % of base) : 199276.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) : 210846.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -187 (-10.75 % of base) : 16405.dasm - Microsoft.CodeAnalysis.ProjectDependencyGraph:GetProjectsThatThisProjectTransitivelyDependsOn_NoLock(Microsoft.CodeAnalysis.ProjectId):System.Collections.Immutable.ImmutableHashSet`1[Microsoft.CodeAnalysis.ProjectId]:this (FullOpts)
        -187 (-10.84 % of base) : 16460.dasm - Microsoft.CodeAnalysis.ProjectDependencyGraph:GetProjectsThatTransitivelyDependOnThisProject_NoLock(Microsoft.CodeAnalysis.ProjectId):System.Collections.Immutable.ImmutableHashSet`1[Microsoft.CodeAnalysis.ProjectId]:this (FullOpts)
        -184 (-14.05 % of base) : 173046.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -175 (-9.71 % of base) : 21536.dasm - Microsoft.CodeAnalysis.FindSymbols.FindReferencesSearchEngine:GetProjectsToSearchAsync(System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.ISymbol],System.Threading.CancellationToken):System.Threading.Tasks.Task`1[System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Project]]:this (FullOpts)
        -172 (-18.90 % of base) : 14404.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) : 172163.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) : 199641.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) : 210826.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)

Top method regressions (percentages):
          18 (90.00 % of base) : 98994.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          17 (43.59 % of base) : 98200.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          17 (43.59 % of base) : 98615.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          71 (37.37 % of base) : 100944.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[Microsoft.Win32.UnsafeNativeMethods+EvtVariant](int):Microsoft.Win32.UnsafeNativeMethods+EvtVariant (FullOpts)
         659 (24.11 % of base) : 172806.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInt32Array:Read1_ArrayOfArrayOfInt():System.Object:this (FullOpts)
          71 (22.12 % of base) : 119291.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass5_0:<VerifyWriteNamedBitList_FlagsEnumRequired>b__0():this (FullOpts)
          22 (22.00 % of base) : 185849.dasm - System.Reflection.Emit.TypeBuilderImpl:get_UnderlyingSystemType():System.Type:this (FullOpts)
          71 (21.78 % of base) : 119293.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass5_0:<VerifyWriteNamedBitList_FlagsEnumRequired>b__2():this (FullOpts)
          71 (20.76 % of base) : 119306.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass6_0:<VerifyWriteNamedBitList_Null>b__0():this (FullOpts)
          71 (20.58 % of base) : 119292.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass5_0:<VerifyWriteNamedBitList_FlagsEnumRequired>b__1():this (FullOpts)
          79 (20.52 % of base) : 119809.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[long](long,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.52 % of base) : 119825.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[ulong](ulong,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.41 % of base) : 119811.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[byte](byte,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.41 % of base) : 119799.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[int](int,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.41 % of base) : 119803.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[ubyte](ubyte,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.41 % of base) : 119793.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[uint](uint,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.36 % of base) : 119807.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[short](short,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          79 (20.36 % of base) : 119805.dasm - System.Formats.Asn1.AsnWriter:WriteEnumeratedValue[ushort](ushort,System.Nullable`1[System.Formats.Asn1.Asn1Tag]):this (FullOpts)
          71 (20.34 % of base) : 119307.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass6_0:<VerifyWriteNamedBitList_Null>b__1():this (FullOpts)
          71 (20.29 % of base) : 119294.dasm - System.Formats.Asn1.Tests.Writer.WriteNamedBitList+<>c__DisplayClass5_0:<VerifyWriteNamedBitList_FlagsEnumRequired>b__3():this (FullOpts)

Top method improvements (percentages):
         -14 (-42.42 % of base) : 90827.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) : 62860.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) : 139286.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) : 36875.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -16 (-39.02 % of base) : 148098.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -14 (-38.89 % of base) : 42951.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) : 42947.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-38.89 % of base) : 48578.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-38.89 % of base) : 42949.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-38.89 % of base) : 48580.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -14 (-32.56 % of base) : 70522.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -14 (-32.56 % of base) : 72769.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -14 (-32.56 % of base) : 73130.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Remove(System.Object):this (FullOpts)
         -18 (-30.51 % of base) : 173075.dasm - System.Xml.Schema.XmlSchemaSimpleType:get_DerivedFrom():System.Xml.XmlQualifiedName:this (FullOpts)
         -14 (-30.43 % of base) : 100176.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) : 172477.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -19 (-29.69 % of base) : 22445.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
         -43 (-29.25 % of base) : 1757.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: 7942301 (overridden on cmd)
Total bytes of diff: 7939879 (overridden on cmd)
Total bytes of delta: -2422 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          71 : 35475.dasm (37.37 % of base)
          22 : 15134.dasm (0.63 % of base)
          11 : 8032.dasm (2.60 % of base)
           6 : 31098.dasm (0.65 % of base)
           6 : 12254.dasm (3.05 % of base)
           5 : 34118.dasm (2.79 % of base)

Top file improvements (bytes):
        -196 : 21951.dasm (-9.47 % of base)
        -172 : 34119.dasm (-36.36 % of base)
        -118 : 34865.dasm (-36.20 % of base)
         -67 : 35573.dasm (-22.26 % of base)
         -56 : 34115.dasm (-21.46 % of base)
         -46 : 35366.dasm (-21.30 % of base)
         -38 : 34103.dasm (-22.09 % of base)
         -35 : 30486.dasm (-9.67 % of base)
         -33 : 16923.dasm (-12.55 % of base)
         -33 : 24868.dasm (-1.55 % of base)
         -32 : 26643.dasm (-15.17 % of base)
         -29 : 35827.dasm (-15.43 % of base)
         -28 : 18335.dasm (-6.10 % of base)
         -26 : 34077.dasm (-1.90 % of base)
         -25 : 32093.dasm (-2.72 % of base)
         -25 : 8430.dasm (-27.17 % of base)
         -24 : 9657.dasm (-6.20 % of base)
         -24 : 13096.dasm (-15.89 % of base)
         -24 : 34072.dasm (-20.17 % of base)
         -23 : 23120.dasm (-2.35 % of base)

58 total files with Code Size differences (52 improved, 6 regressed), 8 unchanged.

Top method regressions (bytes):
          71 (37.37 % of base) : 35475.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Runtime.InteropServices.ComTypes.ELEMDESC](int):System.Runtime.InteropServices.ComTypes.ELEMDESC (FullOpts)
          22 (0.63 % of base) : 15134.dasm - Microsoft.ML.Data.TextLoader+Bindings:.ctor(Microsoft.ML.Data.TextLoader,Microsoft.ML.Data.TextLoader+Column[],Microsoft.ML.Data.IMultiStreamSource,Microsoft.ML.Data.IMultiStreamSource):this (FullOpts)
          11 (2.60 % of base) : 8032.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)
           6 (3.05 % of base) : 12254.dasm - FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
           6 (0.65 % of base) : 31098.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (FullOpts)
           5 (2.79 % of base) : 34118.dasm - System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)

Top method improvements (bytes):
        -196 (-9.47 % of base) : 21951.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ConstraintsHelper:AppendUseSiteDiagnostics(Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[Microsoft.CodeAnalysis.CSharp.Symbols.AssemblySymbol],Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol,byref):ubyte (FullOpts)
        -172 (-36.36 % of base) : 34119.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) : 34865.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) : 35573.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) : 34115.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) : 35366.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) : 34103.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -35 (-9.67 % of base) : 30486.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -33 (-1.55 % of base) : 24868.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 (-12.55 % of base) : 16923.dasm - System.Net.Http.Headers.HttpHeaders:AddValueToStoreValue[System.__Canon](System.__Canon,byref) (FullOpts)
         -32 (-15.17 % of base) : 26643.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) : 35827.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) : 34077.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) : 8430.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -25 (-2.72 % of base) : 32093.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)
         -24 (-6.20 % of base) : 9657.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) : 13096.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -24 (-20.17 % of base) : 34072.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -23 (-2.35 % of base) : 23120.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)

Top method regressions (percentages):
          71 (37.37 % of base) : 35475.dasm - System.Runtime.InteropServices.Marshal:PtrToStructure[System.Runtime.InteropServices.ComTypes.ELEMDESC](int):System.Runtime.InteropServices.ComTypes.ELEMDESC (FullOpts)
           6 (3.05 % of base) : 12254.dasm - FSharp.Compiler.SyntaxTreeOps:unionBindingAndMembers(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] (FullOpts)
           5 (2.79 % of base) : 34118.dasm - System.Management.Automation.Interpreter.NewArrayInitInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
          11 (2.60 % of base) : 8032.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)
           6 (0.65 % of base) : 31098.dasm - Microsoft.Cci.MetadataWriter:PopulateDeclSecurityTableRowsFor(System.Reflection.Metadata.EntityHandle,System.Collections.Generic.IEnumerable`1[Microsoft.Cci.SecurityAttribute]):this (FullOpts)
          22 (0.63 % of base) : 15134.dasm - Microsoft.ML.Data.TextLoader+Bindings:.ctor(Microsoft.ML.Data.TextLoader,Microsoft.ML.Data.TextLoader+Column[],Microsoft.ML.Data.IMultiStreamSource,Microsoft.ML.Data.IMultiStreamSource):this (FullOpts)

Top method improvements (percentages):
         -14 (-42.42 % of base) : 34198.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) : 34119.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) : 34865.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) : 34277.dasm - System.Management.Automation.Language.GetSafeValueVisitor:VisitArrayExpression(System.Management.Automation.Language.ArrayExpressionAst):System.Object:this (FullOpts)
         -14 (-29.79 % of base) : 32224.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -19 (-28.79 % of base) : 20808.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -25 (-27.17 % of base) : 8430.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -22 (-27.16 % of base) : 18797.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -14 (-26.42 % of base) : 19103.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -67 (-22.26 % of base) : 35573.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) : 34103.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) : 34115.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) : 35366.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) : 34072.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -12 (-19.67 % of base) : 4540.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) : 9605.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -14 (-17.72 % of base) : 24534.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (FullOpts)
         -14 (-17.50 % of base) : 34874.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -12 (-16.44 % of base) : 9312.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)