Assembly Diffs

linux arm

Diffs are based on 1,449,330 contexts (345,734 MinOpts, 1,103,596 FullOpts).

MISSED contexts: 55,656 (3.70%)

Overall (+0 bytes)

Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm.checked.mch 321,240,776 +0

FullOpts (+0 bytes)

Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.linux.arm.checked.mch 108,805,826 +0

Example diffs

coreclr_tests.run.linux.arm.checked.mch

+0 (0.00%) : 201994.dasm - JIT.HardwareIntrinsics.General.Vector128.VectorBooleanBinaryOpTestLessThanOrEqualAnySingle:RunBasicScenarioUnsafeRead():this (FullOpts)

@@ -10,75 +10,75 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 13 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T08] ( 5, 12.47) ref -> r4 this class-hnd single-def <JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle>
+; V00 this [V00,T01] ( 5, 5 ) ref -> r4 this class-hnd single-def <JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle>
;* V01 loc0 [V01 ] ( 0, 0 ) ubyte -> zero-ref ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] double-align "non-inline candidate call" <System.Runtime.Intrinsics.Vector128`1[float]>
-; V04 tmp2 [V04,T25] ( 3, 2 ) ubyte -> r1 "Inline return value spill temp"
+; V04 tmp2 [V04,T09] ( 3, 2 ) ubyte -> r1 "Inline return value spill temp"
;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector128`1[float]>
-;* V06 tmp4 [V06,T22] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V07 tmp5 [V07,T21] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V08 tmp6 [V08 ] ( 3, 28.42) struct ( 8) [sp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V09 tmp7 [V09 ] ( 3, 28.42) struct ( 8) [sp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V10 tmp8 [V10,T00] ( 4, 37.89) float -> f8 "impAppendStmt" -;* V11 tmp9 [V11,T09] ( 0, 0 ) int -> zero-ref
+;* V06 tmp4 [V06,T20] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V07 tmp5 [V07,T24] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V08 tmp6 [V08 ] ( 3, 6 ) struct ( 8) [sp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V09 tmp7 [V09 ] ( 3, 6 ) struct ( 8) [sp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V10 tmp8 [V10,T00] ( 4, 8 ) float -> f8 "impAppendStmt" +;* V11 tmp9 [V11,T10] ( 0, 0 ) int -> zero-ref
;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V13 tmp11 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp12 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V15 tmp13 [V15 ] ( 0, 0 ) float -> zero-ref "Inline return value spill temp"
-;* V16 tmp14 [V16,T10] ( 0, 0 ) int -> zero-ref
+;* V16 tmp14 [V16,T11] ( 0, 0 ) int -> zero-ref
;* V17 tmp15 [V17 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V18 tmp16 [V18 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V19 tmp17 [V19 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V20 tmp18 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V21 tmp19 [V21,T24] ( 3, 2.27) ubyte -> r1 "Inline return value spill temp" -;* V22 tmp20 [V22,T23] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V23 tmp21 [V23 ] ( 3, 16.51) struct ( 8) [sp+0x08] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V24 tmp22 [V24 ] ( 3, 16.51) struct ( 8) [sp+0x00] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V25 tmp23 [V25,T07] ( 4, 21.43) float -> f8 "impAppendStmt" -;* V26 tmp24 [V26,T19] ( 0, 0 ) int -> zero-ref
+; V21 tmp19 [V21,T23] ( 3, 1.17) ubyte -> r1 "Inline return value spill temp" +;* V22 tmp20 [V22,T25] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V23 tmp21 [V23 ] ( 3, 5 ) struct ( 8) [sp+0x08] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V24 tmp22 [V24 ] ( 3, 5 ) struct ( 8) [sp+0x00] do-not-enreg[XS] addr-exposed ld-addr-op double-align "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V25 tmp23 [V25,T02] ( 4, 6 ) float -> f8 "impAppendStmt" +;* V26 tmp24 [V26,T21] ( 0, 0 ) int -> zero-ref
;* V27 tmp25 [V27 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V28 tmp26 [V28 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V29 tmp27 [V29 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V30 tmp28 [V30 ] ( 0, 0 ) float -> zero-ref "Inline return value spill temp"
-;* V31 tmp29 [V31,T20] ( 0, 0 ) int -> zero-ref
+;* V31 tmp29 [V31,T22] ( 0, 0 ) int -> zero-ref
;* V32 tmp30 [V32 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V33 tmp31 [V33 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V34 tmp32 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V35 tmp33 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V36 tmp34 [V36 ] ( 3, 23.68) long -> [sp+0x18] do-not-enreg[X] addr-exposed "field V08._00 (fldOffset=0x0)" P-DEP -; V37 tmp35 [V37 ] ( 3, 23.68) long -> [sp+0x10] do-not-enreg[X] addr-exposed "field V09._00 (fldOffset=0x0)" P-DEP -; V38 tmp36 [V38 ] ( 3, 13.61) long -> [sp+0x08] do-not-enreg[X] addr-exposed "field V23._00 (fldOffset=0x0)" P-DEP -; V39 tmp37 [V39 ] ( 3, 13.61) long -> [sp+0x00] do-not-enreg[X] addr-exposed "field V24._00 (fldOffset=0x0)" P-DEP
+; V36 tmp34 [V36 ] ( 3, 5 ) long -> [sp+0x18] do-not-enreg[X] addr-exposed "field V08._00 (fldOffset=0x0)" P-DEP +; V37 tmp35 [V37 ] ( 3, 5 ) long -> [sp+0x10] do-not-enreg[X] addr-exposed "field V09._00 (fldOffset=0x0)" P-DEP +; V38 tmp36 [V38 ] ( 3, 4 ) long -> [sp+0x08] do-not-enreg[X] addr-exposed "field V23._00 (fldOffset=0x0)" P-DEP +; V39 tmp37 [V39 ] ( 3, 4 ) long -> [sp+0x00] do-not-enreg[X] addr-exposed "field V24._00 (fldOffset=0x0)" P-DEP
;* V40 tmp38 [V40 ] ( 0, 0 ) long -> zero-ref single-def "V03.[000..008)" ;* V41 tmp39 [V41 ] ( 0, 0 ) long -> zero-ref single-def "V03.[008..016)" ;* V42 tmp40 [V42 ] ( 0, 0 ) long -> zero-ref single-def "V05.[000..008)" ;* V43 tmp41 [V43 ] ( 0, 0 ) long -> zero-ref single-def "V05.[008..016)"
-; V44 tmp42 [V44,T01] ( 3, 28.42) int -> r0 "Spilling address for field-by-field copy" -; V45 tmp43 [V45,T02] ( 3, 28.42) int -> r0 "Spilling address for field-by-field copy" -; V46 rat0 [V46,T11] ( 2, 9.47) int -> r5 "field V40.lo (fldOffset=0x0)" P-INDEP -; V47 rat1 [V47,T12] ( 2, 9.47) int -> r6 "field V40.hi (fldOffset=0x4)" P-INDEP -; V48 rat2 [V48,T15] ( 2, 7.63) int -> r7 "field V41.lo (fldOffset=0x0)" P-INDEP -; V49 rat3 [V49,T16] ( 2, 7.63) int -> r8 "field V41.hi (fldOffset=0x4)" P-INDEP -; V50 rat4 [V50,T13] ( 2, 9.47) int -> r3 "field V42.lo (fldOffset=0x0)" P-INDEP -; V51 rat5 [V51,T14] ( 2, 9.47) int -> r1 "field V42.hi (fldOffset=0x4)" P-INDEP -; V52 rat6 [V52,T17] ( 2, 7.63) int -> r2 "field V43.lo (fldOffset=0x0)" P-INDEP -; V53 rat7 [V53,T18] ( 2, 7.63) int -> r0 "field V43.hi (fldOffset=0x4)" P-INDEP -; V54 rat8 [V54,T03] ( 3, 28.42) int -> r3 "ReplaceWithLclVar is creating a new local variable" -; V55 rat9 [V55,T04] ( 3, 28.42) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V56 rat10 [V56,T05] ( 3, 28.42) int -> r1 "ReplaceWithLclVar is creating a new local variable" -; V57 rat11 [V57,T06] ( 3, 28.42) int -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V44 tmp42 [V44,T03] ( 3, 6 ) int -> r0 "Spilling address for field-by-field copy" +; V45 tmp43 [V45,T04] ( 3, 6 ) int -> r0 "Spilling address for field-by-field copy" +; V46 rat0 [V46,T12] ( 2, 2 ) int -> r5 "field V40.lo (fldOffset=0x0)" P-INDEP +; V47 rat1 [V47,T13] ( 2, 2 ) int -> r6 "field V40.hi (fldOffset=0x4)" P-INDEP +; V48 rat2 [V48,T14] ( 2, 2 ) int -> r7 "field V41.lo (fldOffset=0x0)" P-INDEP +; V49 rat3 [V49,T15] ( 2, 2 ) int -> r8 "field V41.hi (fldOffset=0x4)" P-INDEP +; V50 rat4 [V50,T16] ( 2, 2 ) int -> r3 "field V42.lo (fldOffset=0x0)" P-INDEP +; V51 rat5 [V51,T17] ( 2, 2 ) int -> r1 "field V42.hi (fldOffset=0x4)" P-INDEP +; V52 rat6 [V52,T18] ( 2, 2 ) int -> r2 "field V43.lo (fldOffset=0x0)" P-INDEP +; V53 rat7 [V53,T19] ( 2, 2 ) int -> r0 "field V43.hi (fldOffset=0x4)" P-INDEP +; V54 rat8 [V54,T05] ( 3, 6 ) int -> r3 "ReplaceWithLclVar is creating a new local variable" +; V55 rat9 [V55,T06] ( 3, 6 ) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V56 rat10 [V56,T07] ( 3, 6 ) int -> r1 "ReplaceWithLclVar is creating a new local variable" +; V57 rat11 [V57,T08] ( 3, 6 ) int -> r0 "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 36
-G_M21877_IG01: ; bbWeight=4.74, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M21877_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r4,r5,r6,r7,r8,r11,lr} sub sp, 36 add r11, sp, 56 mov r4, r0 ; gcrRegs +[r4]
- ;; size=12 bbWeight=4.74 PerfScore 18.95 -G_M21877_IG02: ; bbWeight=4.74, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ;; size=12 bbWeight=1 PerfScore 4.00 +G_M21877_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -113,14 +113,12 @@ G_M21877_IG02: ; bbWeight=4.74, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b vldr s9, [sp+0x10] vcmp s9, s8 vmrs APSR, FPSCR
- bge SHORT G_M21877_IG08
+ bge SHORT G_M21877_IG06
vldr s8, [sp+0x1C] vldr s9, [sp+0x14] vcmp s9, s8 vmrs APSR, FPSCR
- bge SHORT G_M21877_IG08 - ;; size=98 bbWeight=4.74 PerfScore 170.53 -G_M21877_IG03: ; bbWeight=2.89, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ bge SHORT G_M21877_IG06
str r7, [sp+0x08] str r8, [sp+0x0C] str r2, [sp] @@ -129,19 +127,27 @@ G_M21877_IG03: ; bbWeight=2.89, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b vldr s9, [sp] vcmp s9, s8 vmrs APSR, FPSCR
- bge SHORT G_M21877_IG09 - ;; size=28 bbWeight=2.89 PerfScore 26.05 -G_M21877_IG04: ; bbWeight=2.46, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ bge SHORT G_M21877_IG05 + ;; size=126 bbWeight=1 PerfScore 45.00 +G_M21877_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
vldr s8, [sp+0x0C] vldr s9, [sp+0x04] vcmp s9, s8 vmrs APSR, FPSCR
- bge SHORT G_M21877_IG09 - ;; size=18 bbWeight=2.46 PerfScore 12.32 -G_M21877_IG05: ; bbWeight=1.51, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ bge SHORT G_M21877_IG05
movs r1, 0
- ;; size=2 bbWeight=1.51 PerfScore 1.51 -G_M21877_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=20 bbWeight=0.50 PerfScore 3.00 +G_M21877_IG04: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + b SHORT G_M21877_IG07 + ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M21877_IG05: ; bbWeight=0.17, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + movs r1, 1 + b SHORT G_M21877_IG04 + ;; size=4 bbWeight=0.17 PerfScore 0.33 +G_M21877_IG06: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + movs r1, 1 + ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M21877_IG07: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
mov r0, r4 ; gcrRegs +[r0] movw r3, 0xd1ff @@ -150,38 +156,25 @@ G_M21877_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre blx r3 // <unknown method> ; gcrRegs -[r0 r4] ;; size=14 bbWeight=1 PerfScore 5.00
-G_M21877_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M21877_IG08: ; bbWeight=1, epilog, nogc, extend
add sp, 36 pop {r4,r5,r6,r7,r8,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M21877_IG08: ; bbWeight=0.48, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r4] - movs r1, 1 - b SHORT G_M21877_IG06 - ;; size=4 bbWeight=0.48 PerfScore 0.96 -G_M21877_IG09: ; bbWeight=0.25, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - movs r1, 1 - b SHORT G_M21877_IG06 - ;; size=4 bbWeight=0.25 PerfScore 0.49
-; Total bytes of code 186, prolog size 10, PerfScore 237.80, instruction count 66, allocated bytes for code 186 (MethodHash=3f44aa8a) for method JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:RunBasicScenario_UnsafeRead():this (FullOpts)
+; Total bytes of code 186, prolog size 10, PerfScore 60.33, instruction count 66, allocated bytes for code 186 (MethodHash=3f44aa8a) for method JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:RunBasicScenario_UnsafeRead():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 1
- Epilog Count : 1
+ Epilog Count : 0
F bit : 0
- E bit : 0
+ E bit : 1
X bit : 0 Vers : 0 Function Length : 93 (0x0005d) Actual length = 186 (0x0000ba)
- ---- 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)
+ --- One epilog, unwind codes at 0
---- Unwind codes ---- ---- Epilog start at index 0 ---- 09 add sp, sp, #36 ; opsize 16

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.linux.arm.checked.mch 0 0 0 0 -0 +0
benchmarks.run_tiered.linux.arm.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.linux.arm.checked.mch 1 0 0 1 -0 +0
libraries.crossgen2.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries_tests.run.linux.arm.Release.mch 0 0 0 0 -0 +0
librariestestsnotieredcompilation.run.linux.arm.Release.mch 0 0 0 0 -0 +0
realworld.run.linux.arm.checked.mch 0 0 0 0 -0 +0
1 0 0 1 -0 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 42,331 4,278 38,053 1,165 (2.68%) 1,165 (2.68%)
benchmarks.run_pgo.linux.arm.checked.mch 47,709 18,036 29,673 753 (1.55%) 753 (1.55%)
benchmarks.run_tiered.linux.arm.checked.mch 72,866 38,765 34,101 1,011 (1.37%) 1,011 (1.37%)
coreclr_tests.run.linux.arm.checked.mch 471,634 259,195 212,439 7,529 (1.57%) 7,529 (1.57%)
libraries.crossgen2.linux.arm.checked.mch 197,974 14 197,960 424 (0.21%) 424 (0.21%)
libraries.pmi.linux.arm.checked.mch 272,819 6 272,813 7,891 (2.81%) 7,891 (2.81%)
libraries_tests.run.linux.arm.Release.mch 33,537 3,662 29,875 1,186 (3.42%) 1,186 (3.42%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 274,024 21,625 252,399 34,271 (11.12%) 34,271 (11.12%)
realworld.run.linux.arm.checked.mch 36,436 153 36,283 1,426 (3.77%) 1,426 (3.77%)
1,449,330 345,734 1,103,596 55,656 (3.70%) 55,656 (3.70%)

jit-analyze output

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: 321240776 (overridden on cmd)
Total bytes of diff: 321240776 (overridden on cmd)
Total bytes of delta: 0 (0.00 % of base)

Detail diffs



0 total files with Code Size differences (0 improved, 0 regressed), 1 unchanged.

0 total methods with Code Size differences (0 improved, 0 regressed).



windows x86

Diffs are based on 1,618,717 contexts (327,626 MinOpts, 1,291,091 FullOpts).

MISSED contexts: base: 11,019 (0.68%), diff: 11,022 (0.68%)

Overall (+38 bytes)

Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x86.checked.mch 215,108,619 +38

FullOpts (+38 bytes)

Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x86.checked.mch 92,847,595 +38

Example diffs

coreclr_tests.run.windows.x86.checked.mch

-31 (-8.59%) : 240258.dasm - System.Collections.Generic.ComparerHelpers:CreateDefaultEqualityComparer(System.Type):System.Object (FullOpts)

@@ -10,26 +10,26 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T01] ( 6, 4.52) ref -> esi class-hnd single-def <System.Type> -; V01 loc0 [V01,T05] ( 5, 2.47) ref -> edi class-hnd <System.Object>
+; V00 arg0 [V00,T01] ( 6, 4.50) ref -> esi class-hnd single-def <System.Type> +; V01 loc0 [V01,T06] ( 5, 1.91) ref -> edi class-hnd <System.Object>
;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <System.RuntimeType> ;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <System.RuntimeType>
-; V04 tmp0 [V04,T06] ( 2, 1.04) int -> ecx -; V05 tmp1 [V05,T08] ( 3, 2.00) int -> ecx "fgMakeTemp is creating a new local variable" -; V06 tmp2 [V06,T00] ( 18, 18.07) ref -> ebx class-hnd single-def "spilling QMark2" <System.RuntimeType> -; V07 tmp3 [V07,T03] ( 3, 4.80) ref -> eax class-hnd exact single-def "dup spill" <<unknown class>>
+; V04 tmp0 [V04,T04] ( 2, 1 ) int -> ecx +; V05 tmp1 [V05,T05] ( 3, 2 ) int -> ecx "fgMakeTemp is creating a new local variable" +; V06 tmp2 [V06,T00] ( 18, 13.69) ref -> ebx class-hnd single-def "spilling QMark2" <System.RuntimeType> +; V07 tmp3 [V07,T03] ( 3, 3 ) ref -> eax class-hnd exact single-def "dup spill" <<unknown class>>
;* V08 tmp4 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
-; V09 tmp5 [V09,T04] ( 4, 3.04) ref -> eax -; V10 tmp6 [V10,T12] ( 3, 0.42) ref -> edx single-def "CASTCLASS eval op1" -; V11 tmp7 [V11,T13] ( 3, 0.21) int -> ecx "fgMakeTemp is creating a new local variable" -; V12 tmp8 [V12,T10] ( 4, 0.73) ref -> eax class-hnd single-def "spilling QMark2" <System.RuntimeType>
+; V09 tmp5 [V09,T07] ( 4, 1.75) ref -> eax +; V10 tmp6 [V10,T12] ( 3, 0.26) ref -> edx single-def "CASTCLASS eval op1" +; V11 tmp7 [V11,T13] ( 3, 0.13) int -> ecx "fgMakeTemp is creating a new local variable" +; V12 tmp8 [V12,T10] ( 4, 0.46) ref -> eax class-hnd single-def "spilling QMark2" <System.RuntimeType>
;* V13 tmp9 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <<unknown class>>
-;* V14 tmp10 [V14,T09] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType>
+;* V14 tmp10 [V14,T08] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType>
;* V15 tmp11 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V16 tmp12 [V16 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V17 tmp13 [V17,T07] ( 2, 1.60) ubyte -> eax "Inline return value spill temp" -; V18 tmp14 [V18,T02] ( 4, 6.40) ref -> eax class-hnd single-def "Inlining Arg" <System.Type> -; V19 tmp15 [V19,T11] ( 3, 0.62) ref -> eax single-def "arr expr"
+; V17 tmp13 [V17,T09] ( 2, 1 ) ubyte -> eax "Inline return value spill temp" +; V18 tmp14 [V18,T02] ( 4, 4 ) ref -> eax class-hnd single-def "Inlining Arg" <System.Type> +; V19 tmp15 [V19,T11] ( 3, 0.39) ref -> eax single-def "arr expr"
; ; Lcl frame size = 0 @@ -42,10 +42,10 @@ G_M53179_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov esi, ecx ; gcrRegs +[esi] ;; size=8 bbWeight=1 PerfScore 4.50
-G_M53179_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M53179_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- jne G_M53179_IG13 - ;; size=8 bbWeight=1 PerfScore 1.25
+ jne SHORT G_M53179_IG09 + ;; size=4 bbWeight=1 PerfScore 1.25
G_M53179_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] @@ -54,20 +54,52 @@ G_M53179_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 call [<unknown method>] ; gcrRegs -[ecx edx] ;; size=16 bbWeight=1 PerfScore 3.50
-G_M53179_IG04: ; bbWeight=1.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M53179_IG04: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
xor edi, edi ; gcrRegs +[edi] mov ebx, esi ; gcrRegs +[ebx] test ebx, ebx
- jne SHORT G_M53179_IG12 - ;; size=8 bbWeight=1.00 PerfScore 1.75 -G_M53179_IG05: ; bbWeight=1.00, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M53179_IG08 + ;; size=8 bbWeight=1 PerfScore 1.75 +G_M53179_IG05: ; bbWeight=1, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi] cmp ebx, 0xD1FFAB1E
- je SHORT G_M53179_IG08 - ;; size=8 bbWeight=1.00 PerfScore 1.25 -G_M53179_IG06: ; bbWeight=0.80, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M53179_IG11 + ;; size=8 bbWeight=1 PerfScore 1.25 +G_M53179_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ebx edi] + mov ecx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_NEWSFAST + ; gcrRegs +[eax] + ;; size=10 bbWeight=0.50 PerfScore 0.62 +G_M53179_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop ebx + pop esi + pop edi + pop ebp + ret + ;; size=5 bbWeight=0.50 PerfScore 1.50 +G_M53179_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax] +[ebx esi edi] + mov ecx, 0xD1FFAB1E ; System.RuntimeType + cmp dword ptr [ebx], ecx + jne G_M53179_IG24 + jmp SHORT G_M53179_IG05 + ;; size=15 bbWeight=0.50 PerfScore 3.12 +G_M53179_IG09: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[ebx edi] + cmp dword ptr [esi], 0xD1FFAB1E + jne SHORT G_M53179_IG03 + mov ecx, 1 + test cl, cl + jne SHORT G_M53179_IG04 + ;; size=17 bbWeight=0.50 PerfScore 2.75 +G_M53179_IG10: ; bbWeight=0.38, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + jmp SHORT G_M53179_IG03 + ;; size=2 bbWeight=0.38 PerfScore 0.75 +G_M53179_IG11: ; bbWeight=0.50, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[esi] +[ebx edi]
mov ecx, 0xD1FFAB1E ; <unknown class> mov edx, 1 call CORINFO_HELP_NEWARR_1_OBJ @@ -84,7 +116,7 @@ G_M53179_IG06: ; bbWeight=0.80, gcrefRegs=00000088 {ebx edi}, byrefRegs=0 ; gcrRegs -[ecx edx] cmp byte ptr [ebx], bl test eax, eax
- je G_M53179_IG20
+ je SHORT G_M53179_IG12
mov ecx, eax ; gcrRegs +[ecx] mov edx, ebx @@ -95,27 +127,19 @@ G_M53179_IG06: ; bbWeight=0.80, gcrefRegs=00000088 {ebx edi}, byrefRegs=0 call [eax+0x10]<unknown method> ; gcrRegs -[ecx edx] test eax, eax
- je G_M53179_IG20 - ;; size=66 bbWeight=0.80 PerfScore 15.60 -G_M53179_IG07: ; bbWeight=0.42, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[edi] - jmp SHORT G_M53179_IG19 - ;; size=2 bbWeight=0.42 PerfScore 0.83 -G_M53179_IG08: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx] - mov ecx, 0xD1FFAB1E ; <unknown class> - call CORINFO_HELP_NEWSFAST - ; gcrRegs +[eax] - ;; size=10 bbWeight=0.20 PerfScore 0.25 -G_M53179_IG09: ; bbWeight=0.20, epilog, nogc, extend - pop ebx - pop esi - pop edi - pop ebp - ret - ;; size=5 bbWeight=0.20 PerfScore 0.60 -G_M53179_IG10: ; bbWeight=0.28, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[eax] +[ebx edi]
+ jne SHORT G_M53179_IG17 + ;; size=58 bbWeight=0.50 PerfScore 9.75 +G_M53179_IG12: ; bbWeight=0.25, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz + mov ecx, ebx + ; gcrRegs +[ecx] + mov eax, dword ptr [ebx] + mov eax, dword ptr [eax+0x3C] + call [eax+0x04]<unknown method> + ; gcrRegs -[ecx] + test eax, eax + jne SHORT G_M53179_IG18 + ;; size=14 bbWeight=0.25 PerfScore 2.12 +G_M53179_IG13: ; bbWeight=0.18, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
mov ecx, ebx ; gcrRegs +[ecx] mov eax, dword ptr [ebx] @@ -123,65 +147,33 @@ G_M53179_IG10: ; bbWeight=0.28, gcVars=00000000 {}, gcrefRegs=00000088 {e call [eax+0x18]<unknown method> ; gcrRegs -[ecx] test eax, eax
- je SHORT G_M53179_IG16 - ;; size=14 bbWeight=0.28 PerfScore 2.38 -G_M53179_IG11: ; bbWeight=0.15, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[edi] - jmp SHORT G_M53179_IG15 - ;; size=2 bbWeight=0.15 PerfScore 0.29 -G_M53179_IG12: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[esi edi] - mov ecx, 0xD1FFAB1E ; System.RuntimeType - cmp dword ptr [ebx], ecx - jne G_M53179_IG26 - jmp SHORT G_M53179_IG05 - ;; size=15 bbWeight=0.50 PerfScore 3.13 -G_M53179_IG13: ; bbWeight=0.52, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx edi] - cmp dword ptr [esi], 0xD1FFAB1E - jne G_M53179_IG03 - mov ecx, 1 - test cl, cl - jne G_M53179_IG04 - ;; size=25 bbWeight=0.52 PerfScore 2.86 -G_M53179_IG14: ; bbWeight=0.39, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref - jmp G_M53179_IG03 - ;; size=5 bbWeight=0.39 PerfScore 0.78 -G_M53179_IG15: ; bbWeight=0.15, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[esi] +[ebx] - mov edx, ebx - ; gcrRegs +[edx] - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx] - call [System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object] - ; gcrRegs -[ecx edx] +[eax] - mov edi, eax - ; gcrRegs +[edi] - ;; size=15 bbWeight=0.15 PerfScore 0.55 -G_M53179_IG16: ; bbWeight=0.80, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax]
+ jne SHORT G_M53179_IG21 + ;; size=14 bbWeight=0.18 PerfScore 1.57 +G_M53179_IG14: ; bbWeight=0.50, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
mov eax, edi ; gcrRegs +[eax] test eax, eax
- jne SHORT G_M53179_IG18 - ;; size=6 bbWeight=0.80 PerfScore 1.20 -G_M53179_IG17: ; bbWeight=0.64, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax edi]
+ je SHORT G_M53179_IG16 + ;; size=6 bbWeight=0.50 PerfScore 0.75 +G_M53179_IG15: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[ebx edi] + pop ebx + pop esi + pop edi + pop ebp + ret + ;; size=5 bbWeight=0.50 PerfScore 1.50 +G_M53179_IG16: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax] +[ebx]
mov edx, ebx ; gcrRegs +[edx] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] call [System.RuntimeTypeHandle:CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType):System.Object] ; gcrRegs -[ecx edx ebx] +[eax]
- ;; size=13 bbWeight=0.64 PerfScore 2.24 -G_M53179_IG18: ; bbWeight=0.80, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc - pop ebx - pop esi - pop edi - pop ebp - ret - ;; size=5 bbWeight=0.80 PerfScore 2.40 -G_M53179_IG19: ; bbWeight=0.42, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+ jmp SHORT G_M53179_IG15 + ;; size=15 bbWeight=0.25 PerfScore 1.38 +G_M53179_IG17: ; bbWeight=0.25, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] +[ebx] mov edx, ebx ; gcrRegs +[edx] @@ -191,20 +183,10 @@ G_M53179_IG19: ; bbWeight=0.42, gcVars=00000000 {}, gcrefRegs=00000008 {e ...

-47 (-6.19%) : 240327.dasm - System.RuntimeType:GetConstructorImpl(int,System.Reflection.Binder,int,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.ConstructorInfo:this (FullOpts)

@@ -11,48 +11,49 @@ ; Final local variable assignments ; ; V00 this [V00,T01] ( 3, 3 ) ref -> ecx this class-hnd single-def <System.RuntimeType>
-; V01 arg1 [V01,T00] ( 5, 4.36) int -> esi single-def -; V02 arg2 [V02,T04] ( 4, 2.30) ref -> ebx class-hnd <System.Reflection.Binder>
+; V01 arg1 [V01,T00] ( 5, 3.79) int -> esi single-def +; V02 arg2 [V02,T04] ( 4, 1.23) ref -> ebx class-hnd <System.Reflection.Binder>
;* V03 arg3 [V03 ] ( 0, 0 ) int -> zero-ref single-def
-; V04 arg4 [V04,T02] ( 4, 2.56) ref -> edi class-hnd single-def <System.Type[]> -; V05 arg5 [V05,T13] ( 1, 0.61) ref -> [ebp+0x08] class-hnd single-def <System.Reflection.ParameterModifier[]> -; V06 loc0 [V06 ] ( 29, 6.56) struct (16) [ebp-0x1C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.RuntimeType+ListBuilder`1[System.Reflection.ConstructorInfo]>
+; V04 arg4 [V04,T02] ( 4, 1.94) ref -> edi class-hnd single-def <System.Type[]> +; V05 arg5 [V05,T10] ( 1, 0.35) ref -> [ebp+0x08] class-hnd single-def <System.Reflection.ParameterModifier[]> +; V06 loc0 [V06 ] ( 29, 4.03) struct (16) [ebp-0x1C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.RuntimeType+ListBuilder`1[System.Reflection.ConstructorInfo]>
;* V07 loc1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Reflection.ConstructorInfo>
-; V08 loc2 [V08 ] ( 2, 0.43) struct ( 8) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ReadOnlySpan`1[System.Reflection.ParameterInfo]>
+; V08 loc2 [V08 ] ( 2, 0.25) struct ( 8) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ReadOnlySpan`1[System.Reflection.ParameterInfo]>
;* V09 loc3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>>
-; V10 tmp0 [V10,T11] ( 5, 0.69) ref -> [ebp-0x30] class-hnd "Inline return value spill temp" <System.Reflection.ConstructorInfo>
+; V10 tmp0 [V10,T08] ( 5, 0.44) ref -> [ebp-0x34] class-hnd "Inline return value spill temp" <System.Reflection.ConstructorInfo>
;* V11 tmp1 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V12 tmp2 [V12,T19] ( 4, 0.30) ref -> esi class-hnd "Inline return value spill temp" <<unknown class>> -; V13 tmp3 [V13,T18] ( 3, 0.38) ref -> esi class-hnd exact single-def "dup spill" <<unknown class>> -; V14 tmp4 [V14,T14] ( 7, 0.57) int -> ebx "Inlining Arg" -; V15 tmp5 [V15,T22] ( 4, 0.20) ref -> esi class-hnd single-def "Inline stloc first use temp" <<unknown class>> -; V16 tmp6 [V16,T25] ( 3, 0.11) ref -> [ebp-0x34] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>> -; V17 tmp7 [V17,T26] ( 3, 0.11) byref -> ecx single-def "impAppendStmt" -; V18 tmp8 [V18,T27] ( 3, 0.11) byref -> edx single-def "impAppendStmt" -; V19 tmp9 [V19,T28] ( 2, 0.07) int -> ebx "Inline return value spill temp" -; V20 tmp10 [V20,T21] ( 3, 0.22) int -> esi "Inlining Arg" -; V21 tmp11 [V21,T23] ( 4, 0.18) int -> ebx "Inlining Arg"
+; V12 tmp2 [V12,T14] ( 4, 0.17) ref -> ecx class-hnd "Inline return value spill temp" <<unknown class>> +; V13 tmp3 [V13,T16] ( 3, 0.13) ref -> ebx class-hnd exact single-def "dup spill" <<unknown class>> +; V14 tmp4 [V14,T13] ( 7, 0.18) int -> esi "Inlining Arg" +; V15 tmp5 [V15,T22] ( 4, 0.06) ref -> ebx class-hnd single-def "Inline stloc first use temp" <<unknown class>> +; V16 tmp6 [V16,T26] ( 3, 0.03) ref -> [ebp-0x38] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>> +; V17 tmp7 [V17,T27] ( 3, 0.03) byref -> ecx single-def "impAppendStmt" +; V18 tmp8 [V18,T28] ( 3, 0.03) byref -> edx single-def "impAppendStmt" +; V19 tmp9 [V19,T29] ( 2, 0.02) int -> esi "Inline return value spill temp" +; V20 tmp10 [V20,T23] ( 3, 0.05) int -> ebx "Inlining Arg" +; V21 tmp11 [V21,T24] ( 4, 0.04) int -> esi "Inlining Arg"
;* V22 tmp12 [V22 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V23 tmp13 [V23,T07] ( 4, 1.21) ref -> eax class-hnd "Inline return value spill temp" <<unknown class>> -; V24 tmp14 [V24,T06] ( 3, 1.51) ref -> [ebp-0x38] class-hnd exact spill-single-def "dup spill" <<unknown class>> -; V25 tmp15 [V25,T05] ( 7, 2.29) int -> [ebp-0x28] spill-single-def "Inlining Arg" -; V26 tmp16 [V26,T08] ( 5, 0.95) ref -> [ebp-0x3C] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>> -; V27 tmp17 [V27,T15] ( 3, 0.45) ref -> [ebp-0x40] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>> -; V28 tmp18 [V28,T16] ( 3, 0.44) byref -> [ebp-0x44] spill-single-def "impAppendStmt" -; V29 tmp19 [V29,T17] ( 3, 0.44) byref -> [ebp-0x48] spill-single-def "impAppendStmt" -; V30 tmp20 [V30,T20] ( 2, 0.30) int -> ecx "Inline return value spill temp" -; V31 tmp21 [V31,T09] ( 3, 0.89) int -> edx "Inlining Arg" -; V32 tmp22 [V32,T10] ( 4, 0.74) int -> ecx "Inlining Arg"
+; V23 tmp13 [V23,T06] ( 4, 0.70) ref -> eax class-hnd "Inline return value spill temp" <<unknown class>> +; V24 tmp14 [V24,T07] ( 3, 0.53) ref -> [ebp-0x3C] class-hnd exact spill-single-def "dup spill" <<unknown class>> +; V25 tmp15 [V25,T05] ( 7, 0.73) int -> [ebp-0x28] spill-single-def "Inlining Arg" +; V26 tmp16 [V26,T11] ( 4, 0.25) ref -> [ebp-0x40] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>> +; V27 tmp17 [V27,T18] ( 3, 0.11) ref -> [ebp-0x44] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>> +; V28 tmp18 [V28,T19] ( 3, 0.11) byref -> ecx single-def "impAppendStmt" +; V29 tmp19 [V29,T20] ( 3, 0.11) byref -> [ebp-0x48] spill-single-def "impAppendStmt" +; V30 tmp20 [V30,T21] ( 2, 0.07) int -> edx "Inline return value spill temp" +; V31 tmp21 [V31,T12] ( 3, 0.21) int -> eax "Inlining Arg" +; V32 tmp22 [V32,T15] ( 4, 0.18) int -> edx "Inlining Arg"
;* V33 tmp23 [V33 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V34 tmp24 [V34 ] ( 14, 2.48) ref -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V06._items (fldOffset=0x0)" P-DEP -; V35 tmp25 [V35 ] ( 4, 1.43) ref -> [ebp-0x18] do-not-enreg[X] addr-exposed "field V06._item (fldOffset=0x4)" P-DEP -; V36 tmp26 [V36 ] ( 11, 4.36) int -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V06._count (fldOffset=0x8)" P-DEP -; V37 tmp27 [V37 ] ( 3, 1.29) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V06._capacity (fldOffset=0xc)" P-DEP -; V38 tmp28 [V38 ] ( 1, 0.22) byref -> [ebp-0x24] do-not-enreg[X] addr-exposed "field V08._reference (fldOffset=0x0)" P-DEP -; V39 tmp29 [V39 ] ( 2, 0.43) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V08._length (fldOffset=0x4)" P-DEP -; V40 tmp30 [V40,T03] ( 2, 2.42) ref -> edx single-def "argument with side effect" -; V41 tmp31 [V41,T12] ( 2, 0.61) ref -> edx single-def "argument with side effect" -; V42 cse0 [V42,T24] ( 3, 0.13) int -> [ebp-0x2C] spill-single-def "CSE - conservative"
+; V34 tmp24 [V34 ] ( 14, 1.62) ref -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V06._items (fldOffset=0x0)" P-DEP +; V35 tmp25 [V35 ] ( 4, 1.17) ref -> [ebp-0x18] do-not-enreg[X] addr-exposed "field V06._item (fldOffset=0x4)" P-DEP +; V36 tmp26 [V36 ] ( 11, 3.12) int -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V06._count (fldOffset=0x8)" P-DEP +; V37 tmp27 [V37 ] ( 3, 1.11) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V06._capacity (fldOffset=0xc)" P-DEP +; V38 tmp28 [V38 ] ( 1, 0.12) byref -> [ebp-0x24] do-not-enreg[X] addr-exposed "field V08._reference (fldOffset=0x0)" P-DEP +; V39 tmp29 [V39 ] ( 2, 0.25) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V08._length (fldOffset=0x4)" P-DEP +; V40 tmp30 [V40,T03] ( 2, 1.40) ref -> edx single-def "argument with side effect" +; V41 tmp31 [V41,T09] ( 2, 0.35) ref -> edx single-def "argument with side effect" +; V42 cse0 [V42,T17] ( 3, 0.12) int -> [ebp-0x2C] spill-single-def "CSE - conservative" +; V43 cse1 [V43,T25] ( 3, 0.03) int -> [ebp-0x30] spill-single-def "CSE - conservative"
; ; Lcl frame size = 60 @@ -74,7 +75,7 @@ G_M16721_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov edi, gword ptr [ebp+0x0C] ; gcrRegs +[edi] ;; size=32 bbWeight=1 PerfScore 11.33
-G_M16721_IG02: ; bbWeight=1, gcrefRegs=0000008A {ecx ebx edi}, byrefRegs=00000000 {}, byref
+G_M16721_IG02: ; bbWeight=1, gcrefRegs=0000008A {ecx ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[ecx] push 0 push esi @@ -85,29 +86,55 @@ G_M16721_IG02: ; bbWeight=1, gcrefRegs=0000008A {ecx ebx edi}, byrefRegs= call [System.RuntimeType:GetConstructorCandidates(System.String,int,int,System.Type[],ubyte):System.RuntimeType+ListBuilder`1[System.Reflection.ConstructorInfo]:this] ; gcrRegs -[ecx] cmp dword ptr [ebp-0x14], 0
- je G_M16721_IG32 - ;; size=27 bbWeight=1 PerfScore 11.50 -G_M16721_IG03: ; bbWeight=0.80, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M16721_IG05 + ;; size=23 bbWeight=1 PerfScore 11.50 +G_M16721_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ebx edi] + xor eax, eax + ; gcrRegs +[eax] + ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M16721_IG04: ; bbWeight=0.50, epilog, nogc, extend + lea esp, [ebp-0x0C] + pop ebx + pop esi + pop edi + pop ebp + ret 16 + ;; size=10 bbWeight=0.50 PerfScore 2.25 +G_M16721_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax] +[ebx edi]
cmp dword ptr [edi+0x04], 0
- jne SHORT G_M16721_IG08 - ;; size=6 bbWeight=0.80 PerfScore 3.20 -G_M16721_IG04: ; bbWeight=0.42, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M16721_IG13 + ;; size=6 bbWeight=0.50 PerfScore 2.00 +G_M16721_IG06: ; bbWeight=0.25, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [ebp-0x14], 1
- jne SHORT G_M16721_IG08 - ;; size=6 bbWeight=0.42 PerfScore 1.25 -G_M16721_IG05: ; bbWeight=0.22, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M16721_IG13 + ;; size=6 bbWeight=0.25 PerfScore 0.75 +G_M16721_IG07: ; bbWeight=0.12, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
cmp gword ptr [ebp-0x1C], 0
- jne G_M16721_IG43 - ;; size=10 bbWeight=0.22 PerfScore 0.65 -G_M16721_IG06: ; bbWeight=0.11, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M16721_IG09 + ;; size=6 bbWeight=0.12 PerfScore 0.38 +G_M16721_IG08: ; bbWeight=0.06, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
mov eax, gword ptr [ebp-0x18] ; gcrRegs +[eax]
- ;; size=3 bbWeight=0.11 PerfScore 0.11 -G_M16721_IG07: ; bbWeight=0.22, gcrefRegs=00000089 {eax ebx edi}, byrefRegs=00000000 {}, byref
+ jmp SHORT G_M16721_IG10 + ;; size=5 bbWeight=0.06 PerfScore 0.19 +G_M16721_IG09: ; bbWeight=0.06, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + mov eax, gword ptr [ebp-0x1C] + ; gcrRegs +[eax] + cmp dword ptr [eax+0x04], 0 + jbe G_M16721_IG48 + mov edx, gword ptr [ebp-0x1C] + ; gcrRegs +[edx] + mov eax, gword ptr [edx+0x08] + ;; size=19 bbWeight=0.06 PerfScore 0.50 +G_M16721_IG10: ; bbWeight=0.12, gcrefRegs=00000089 {eax ebx edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[edx]
lea edx, [ebp-0x24] mov ecx, eax ; gcrRegs +[ecx]
- mov gword ptr [ebp-0x30], eax
+ mov gword ptr [ebp-0x34], eax
; GC ptr vars +{V10} mov eax, dword ptr [eax] ; gcrRegs -[eax] @@ -115,51 +142,51 @@ G_M16721_IG07: ; bbWeight=0.22, gcrefRegs=00000089 {eax ebx edi}, byrefRe call [eax+0x08]<unknown method> ; gcrRegs -[ecx] cmp dword ptr [ebp-0x20], 0
- je G_M16721_IG25 - ;; size=26 bbWeight=0.22 PerfScore 2.54 -G_M16721_IG08: ; bbWeight=0.76, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref
+ jne SHORT G_M16721_IG13 + ;; size=22 bbWeight=0.12 PerfScore 1.47 +G_M16721_IG11: ; bbWeight=0.06, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ebx edi] + mov eax, gword ptr [ebp-0x34] + ; gcrRegs +[eax] + ;; size=3 bbWeight=0.06 PerfScore 0.06 +G_M16721_IG12: ; bbWeight=0.06, epilog, nogc, extend + lea esp, [ebp-0x0C] + pop ebx + pop esi + pop edi + pop ebp + ret 16 + ;; size=10 bbWeight=0.06 PerfScore 0.28 +G_M16721_IG13: ; bbWeight=0.44, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[eax] +[ebx edi]
; GC ptr vars -{V10} test esi, 0x10000
- jne G_M16721_IG23 - ;; size=12 bbWeight=0.76 PerfScore 0.95 -G_M16721_IG09: ; bbWeight=0.61, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M16721_IG22 + ;; size=8 bbWeight=0.44 PerfScore 0.55 +G_M16721_IG14: ; bbWeight=0.35, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
test ebx, ebx
- jne SHORT G_M16721_IG11 - ;; size=4 bbWeight=0.61 PerfScore 0.76 -G_M16721_IG10: ; bbWeight=0.48, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M16721_IG16 + ;; size=4 bbWeight=0.35 PerfScore 0.44 +G_M16721_IG15: ; bbWeight=0.17, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[ebx] call [System.Type:get_DefaultBinder():System.Reflection.Binder] ; gcrRegs +[eax] mov ebx, eax ; gcrRegs +[ebx]
- ;; size=8 bbWeight=0.48 PerfScore 1.57 -G_M16721_IG11: ; bbWeight=0.61, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
+ ;; size=8 bbWeight=0.17 PerfScore 0.57 +G_M16721_IG16: ; bbWeight=0.35, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] cmp dword ptr [ebp-0x14], 0
- je G_M16721_IG21 - ;; size=10 bbWeight=0.61 PerfScore 1.82 -G_M16721_IG12: ; bbWeight=0.48, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz - cmp dword ptr [ebp-0x14], 1 - jne SHORT G_M16721_IG16 - ;; size=6 bbWeight=0.48 PerfScore 1.45 -G_M16721_IG13: ; bbWeight=0.25, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref - mov ecx, 0xD1FFAB1E ; <unknown class> - mov edx, 1 - call CORINFO_HELP_NEWARR_1_OBJ
+ jne SHORT G_M16721_IG20 + ;; size=6 bbWeight=0.35 PerfScore 1.05 +G_M16721_IG17: ; bbWeight=0.17, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref + mov ecx, 0xD1FFAB1E + mov edx, 7 + call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS + mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
- mov gword ptr [ebp-0x38], eax - ; GC ptr vars +{V24} - push gword ptr [ebp-0x18] - mov ecx, eax - ; gcrRegs +[ecx] - xor edx, edx - call [CORINFO_HELP_ARRADDR_ST] - ; gcrRegs -[eax ecx] - mov eax, gword ptr [ebp-0x38] - ; gcrRegs +[eax] - ;; size=34 bbWeight=0.25 PerfScore 2.01 -G_M16721_IG14: ; bbWeight=0.61, gcVars=00000000 {}, gcrefRegs=00000089 {eax ebx edi}, byrefRegs=00000000 {}, gcvars, byref - ; GC ptr vars -{V24}
+ ;; size=20 bbWeight=0.17 PerfScore 0.61 +G_M16721_IG18: ; bbWeight=0.35, gcrefRegs=00000089 {eax ebx edi}, byrefRegs=00000000 {}, byref
push eax ...

-23 (-5.82%) : 240277.dasm - System.AppContext:TryGetSwitch(System.String,byref):ubyte (FullOpts)

@@ -10,34 +10,34 @@ ; 0 inlinees with PGO data; 19 single block inlinees; 22 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 7, 4.77) ref -> [ebp-0x24] class-hnd EH-live single-def <System.String> -; V01 arg1 [V01,T01] ( 8, 4.16) byref -> [ebp-0x28] EH-live single-def -; V02 loc0 [V02,T02] ( 5, 2.99) ref -> eax class-hnd exact <System.String> -; V03 loc1 [V03,T21] ( 4, 0.92) ref -> [ebp-0x2C] class-hnd EH-live spill-single-def <<unknown class>> -; V04 loc2 [V04 ] ( 6, 2.60) ubyte -> [ebp-0x20] do-not-enreg[X] addr-exposed ld-addr-op -;* V05 loc3 [V05,T23] ( 0, 0 ) ubyte -> zero-ref -; V06 tmp0 [V06,T04] ( 2, 2.92) ref -> eax single-def "CASTCLASS eval op1"
+; V00 arg0 [V00,T00] ( 7, 4.75) ref -> esi class-hnd single-def <System.String> +; V01 arg1 [V01,T01] ( 8, 3.96) byref -> edi single-def +; V02 loc0 [V02,T04] ( 5, 2.62) ref -> eax class-hnd exact <System.String> +; V03 loc1 [V03,T13] ( 4, 0.88) ref -> [ebp-0x2C] class-hnd EH-live spill-single-def <<unknown class>> +; V04 loc2 [V04 ] ( 6, 2.50) ubyte -> [ebp-0x24] do-not-enreg[X] addr-exposed ld-addr-op +; V05 loc3 [V05,T21] ( 2, 0.50) ubyte -> [ebp-0x28] do-not-enreg[Z] EH-live +; V06 tmp0 [V06,T03] ( 2, 3 ) ref -> eax single-def "CASTCLASS eval op1"
;* V07 tmp1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String>
-;* V08 tmp2 [V08,T18] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V09 tmp3 [V09,T09] ( 2, 2.08) ubyte -> ecx "Inlining Arg" -;* V10 tmp4 [V10,T22] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V11 tmp5 [V11,T03] ( 3, 3.12) ref -> ecx class-hnd single-def "Inlining Arg" <<unknown class>> -; V12 tmp6 [V12,T10] ( 3, 1.31) byref -> eax single-def "Inline stloc first use temp"
+;* V08 tmp2 [V08,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V09 tmp3 [V09,T05] ( 2, 2 ) ubyte -> ecx "Inlining Arg" +;* V10 tmp4 [V10,T18] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V11 tmp5 [V11,T02] ( 3, 3 ) ref -> ecx class-hnd single-def "Inlining Arg" <<unknown class>> +; V12 tmp6 [V12,T10] ( 3, 1.25) byref -> eax single-def "Inline stloc first use temp"
;* V13 tmp7 [V13 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]> ;* V14 tmp8 [V14 ] ( 0, 0 ) struct ( 8) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]> ;* V15 tmp9 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]> ;* V16 tmp10 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-; V17 tmp11 [V17,T06] ( 2, 2.33) int -> edi "Inlining Arg" -; V18 tmp12 [V18,T05] ( 2, 2.33) byref -> esi single-def "Inlining Arg"
+; V17 tmp11 [V17,T07] ( 2, 1.50) int -> ebx "Inlining Arg" +; V18 tmp12 [V18,T06] ( 2, 1.50) byref -> esi single-def "Inlining Arg"
;* V19 tmp13 [V19 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V20 tmp14 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V21 tmp15 [V21,T11] ( 2, 1.17) ubyte -> eax "Inline return value spill temp"
+; V21 tmp15 [V21,T12] ( 2, 0.75) ubyte -> eax "Inline return value spill temp"
;* V22 tmp16 [V22 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]> ;* V23 tmp17 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]> ;* V24 tmp18 [V24 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]> ;* V25 tmp19 [V25 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V26 tmp20 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V27 tmp21 [V27,T12] ( 2, 1.17) ubyte -> eax "Inline return value spill temp"
+; V27 tmp21 [V27,T14] ( 2, 0.75) ubyte -> eax "Inline return value spill temp"
;* V28 tmp22 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]> ;* V29 tmp23 [V29 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]> ;* V30 tmp24 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt" @@ -51,7 +51,7 @@ ;* V38 tmp32 [V38 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]> ;* V39 tmp33 [V39 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V40 tmp34 [V40 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V41 tmp35 [V41,T19] ( 2, 0.93) ubyte -> eax "Inline return value spill temp"
+; V41 tmp35 [V41,T22] ( 2, 0.38) ubyte -> eax "Inline return value spill temp"
;* V42 tmp36 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]> ;* V43 tmp37 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]> ;* V44 tmp38 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt" @@ -60,19 +60,19 @@ ;* V47 tmp41 [V47 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V48 tmp42 [V48 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V49 tmp43 [V49 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V50 tmp44 [V50,T07] ( 4, 2.22) byref -> esi single-def "field V13._reference (fldOffset=0x0)" P-INDEP -; V51 tmp45 [V51,T08] ( 4, 2.22) int -> edi "field V13._length (fldOffset=0x4)" P-INDEP -; V52 tmp46 [V52,T13] ( 2, 1.17) byref -> esi single-def "field V14._reference (fldOffset=0x0)" P-INDEP -; V53 tmp47 [V53,T16] ( 2, 1.17) int -> edi "field V14._length (fldOffset=0x4)" P-INDEP -; V54 tmp48 [V54,T14] ( 2, 1.17) byref -> esi single-def "field V15._reference (fldOffset=0x0)" P-INDEP -; V55 tmp49 [V55,T17] ( 2, 1.17) int -> edi "field V15._length (fldOffset=0x4)" P-INDEP
+; V50 tmp44 [V50,T08] ( 4, 1.31) byref -> esi single-def "field V13._reference (fldOffset=0x0)" P-INDEP +; V51 tmp45 [V51,T09] ( 4, 1.31) int -> ebx "field V13._length (fldOffset=0x4)" P-INDEP +; V52 tmp46 [V52,T15] ( 2, 0.75) byref -> esi single-def "field V14._reference (fldOffset=0x0)" P-INDEP +; V53 tmp47 [V53,T19] ( 2, 0.75) int -> ebx "field V14._length (fldOffset=0x4)" P-INDEP +; V54 tmp48 [V54,T16] ( 2, 0.75) byref -> esi single-def "field V15._reference (fldOffset=0x0)" P-INDEP +; V55 tmp49 [V55,T20] ( 2, 0.75) int -> ebx "field V15._length (fldOffset=0x4)" P-INDEP
;* V56 tmp50 [V56 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP ;* V57 tmp51 [V57 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x4)" P-INDEP ;* V58 tmp52 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP ;* V59 tmp53 [V59 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x4)" P-INDEP ;* V60 tmp54 [V60 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP ;* V61 tmp55 [V61 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
-; V62 tmp56 [V62,T15] ( 2, 1.17) byref -> edx single-def "field V24._reference (fldOffset=0x0)" P-INDEP
+; V62 tmp56 [V62,T17] ( 2, 0.75) byref -> edx single-def "field V24._reference (fldOffset=0x0)" P-INDEP
;* V63 tmp57 [V63 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x4)" P-INDEP ;* V64 tmp58 [V64 ] ( 0, 0 ) byref -> zero-ref single-def "field V28._reference (fldOffset=0x0)" P-INDEP ;* V65 tmp59 [V65 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x4)" P-INDEP @@ -86,7 +86,7 @@ ;* V73 tmp67 [V73 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x4)" P-INDEP ;* V74 tmp68 [V74 ] ( 0, 0 ) byref -> zero-ref "field V37._reference (fldOffset=0x0)" P-INDEP ;* V75 tmp69 [V75 ] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x4)" P-INDEP
-; V76 tmp70 [V76,T20] ( 2, 0.93) byref -> edx single-def "field V38._reference (fldOffset=0x0)" P-INDEP
+; V76 tmp70 [V76,T23] ( 2, 0.38) byref -> edx single-def "field V38._reference (fldOffset=0x0)" P-INDEP
;* V77 tmp71 [V77 ] ( 0, 0 ) int -> zero-ref "field V38._length (fldOffset=0x4)" P-INDEP ;* V78 tmp72 [V78 ] ( 0, 0 ) byref -> zero-ref single-def "field V42._reference (fldOffset=0x0)" P-INDEP ;* V79 tmp73 [V79 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x4)" P-INDEP @@ -97,153 +97,150 @@ ;* V84 tmp78 [V84 ] ( 0, 0 ) byref -> zero-ref single-def "field V46._reference (fldOffset=0x0)" P-INDEP ;* V85 tmp79 [V85 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x4)" P-INDEP ; V86 tmp80 [V86,T24] ( 2, 0 ) ref -> edx single-def "argument with side effect"
-; V87 EHSlots [V87 ] ( 1, 1 ) struct (16) [ebp-0x1C] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
+; V87 EHSlots [V87 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
;
-; Lcl frame size = 36
+; Lcl frame size = 32
G_M56786_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp mov ebp, esp push edi push esi
- sub esp, 36
+ push ebx + sub esp, 32
xor eax, eax
- mov dword ptr [ebp-0x14], eax - mov gword ptr [ebp-0x24], ecx - ; GC ptr vars +{V00} - mov bword ptr [ebp-0x28], edx - ; GC ptr vars +{V01} - ;; size=19 bbWeight=1 PerfScore 6.75 -G_M56786_IG02: ; bbWeight=1, gcVars=00000003 {V00 V01}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs +[ecx] - test ecx, ecx
+ mov dword ptr [ebp-0x18], eax + mov esi, ecx + ; gcrRegs +[esi] + mov edi, edx + ; byrRegs +[edi] + ;; size=18 bbWeight=1 PerfScore 6.25 +G_M56786_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref + test esi, esi
je G_M56786_IG31 ;; size=8 bbWeight=1 PerfScore 1.25
-G_M56786_IG03: ; bbWeight=0.52, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref - cmp dword ptr [ecx+0x04], 0
+G_M56786_IG03: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref + cmp dword ptr [esi+0x04], 0
je G_M56786_IG31
- ;; size=10 bbWeight=0.52 PerfScore 2.08 -G_M56786_IG04: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
+ ;; size=10 bbWeight=0.50 PerfScore 2.00 +G_M56786_IG04: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
cmp gword ptr [D1FFAB1EH], 0 ; data for <unknown class>:<unknown field>
- je G_M56786_IG17
+ je G_M56786_IG16
;; size=13 bbWeight=1 PerfScore 4.00
-G_M56786_IG05: ; bbWeight=0.52, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref - mov edx, gword ptr [D1FFAB1EH] ; static handle - ; gcrRegs +[edx] - mov gword ptr [ebp-0x2C], edx
+G_M56786_IG05: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref + mov ecx, gword ptr [D1FFAB1EH] ; static handle + ; gcrRegs +[ecx] + mov gword ptr [ebp-0x2C], ecx
; GC ptr vars +{V03}
- xor esi, esi - mov dword ptr [ebp-0x20], esi - ;; size=14 bbWeight=0.52 PerfScore 2.21 -G_M56786_IG06: ; bbWeight=0.52, gcVars=00200003 {V00 V01 V03}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[edx] - cmp byte ptr [ebp-0x20], 0 - jne SHORT G_M56786_IG11 - lea edx, [ebp-0x20] - mov ecx, gword ptr [ebp-0x2C]
+ xor edx, edx + mov dword ptr [ebp-0x24], edx + ;; size=14 bbWeight=0.50 PerfScore 2.12 +G_M56786_IG06: ; bbWeight=0.50, gcVars=00002000 {V03}, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000080 {edi}, gcvars, byref, isz + cmp byte ptr [ebp-0x24], 0 + jne SHORT G_M56786_IG09 + lea edx, [ebp-0x24]
call <unknown method> ; gcrRegs -[ecx]
- movzx ecx, byte ptr [ebp-0x20]
+ movzx ecx, byte ptr [ebp-0x24]
test ecx, ecx jne SHORT G_M56786_IG08
- ;; size=25 bbWeight=0.52 PerfScore 4.03 -G_M56786_IG07: ; bbWeight=0.42, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=22 bbWeight=0.50 PerfScore 3.38 +G_M56786_IG07: ; bbWeight=0.25, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] mov edx, 0xD1FFAB1E ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx]
- ;; size=16 bbWeight=0.42 PerfScore 1.46 -G_M56786_IG08: ; bbWeight=0.52, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=16 bbWeight=0.25 PerfScore 0.88 +G_M56786_IG08: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz
mov ecx, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[ecx] cmp byte ptr [ecx], cl
- mov edx, gword ptr [ebp-0x24]
+ mov edx, esi
; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx] ; byrRegs +[eax] test eax, eax
- jne SHORT G_M56786_IG09 - mov eax, bword ptr [ebp-0x28] - mov byte ptr [eax], 0 - jmp SHORT G_M56786_IG10 - ;; size=29 bbWeight=0.52 PerfScore 7.41 -G_M56786_IG09: ; bbWeight=0.27, gcrefRegs=00000000 {}, byrefRegs=00000001 {eax}, byref, isz - movzx ecx, byte ptr [eax] - mov eax, bword ptr [ebp-0x28] - mov byte ptr [eax], cl - jmp SHORT G_M56786_IG12 - ;; size=10 bbWeight=0.27 PerfScore 1.62 -G_M56786_IG10: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000001 {eax}, byref, isz - mov dword ptr [ebp-0x18], 0 - mov dword ptr [ebp-0x14], 252 - push G_M56786_IG13 - jmp SHORT G_M56786_IG14 - ;; size=21 bbWeight=0.25 PerfScore 1.25 -G_M56786_IG11: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; byrRegs -[eax]
+ jne SHORT G_M56786_IG10 + mov byte ptr [edi], 0 + jmp SHORT G_M56786_IG11 + ;; size=25 bbWeight=0.50 PerfScore 6.25 +G_M56786_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[esi] + ; byrRegs -[eax edi]
call [System.Threading.Monitor:ThrowLockTakenException()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-G_M56786_IG12: ; bbWeight=0.27, gcVars=00200000 {V03}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref - ; GC ptr vars -{V00 V01} - cmp byte ptr [ebp-0x20], 0 - je G_M56786_IG28
+G_M56786_IG10: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000081 {eax edi}, byref, isz + ; byrRegs +[eax edi] + movzx ecx, byte ptr [eax] + mov byte ptr [edi], cl + mov dword ptr [ebp-0x28], 1 + mov dword ptr [ebp-0x1C], 0 + mov dword ptr [ebp-0x18], 252 + push G_M56786_IG12 + jmp SHORT G_M56786_IG13 + ;; size=33 bbWeight=0.25 PerfScore 2.25 +G_M56786_IG11: ; bbWeight=0.25, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz + ; gcrRegs +[esi] + ; byrRegs -[eax] + cmp byte ptr [ebp-0x24], 0 + je SHORT G_M56786_IG16
...

+18 (+5.45%) : 240298.dasm - System.Text.Ascii:NarrowUtf16ToAscii(uint,uint,uint):uint (FullOpts)

@@ -10,33 +10,33 @@ ; 0 inlinees with PGO data; 18 single block inlinees; 7 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T06] ( 6, 40.81) int -> esi single-def -; V01 arg1 [V01,T07] ( 7, 36.96) int -> [ebp-0x10] single-def -; V02 arg2 [V02,T12] ( 1, 1 ) int -> [ebp+0x08] single-def -; V03 loc0 [V03,T03] ( 17, 92.16) int -> ebx -; V04 loc1 [V04,T02] ( 18, 93.60) int -> [ebp-0x14] -; V05 loc2 [V05,T04] ( 6, 89.74) int -> [ebp-0x18] spill-single-def
+; V00 arg0 [V00,T06] ( 6, 11.90) int -> esi single-def +; V01 arg1 [V01,T07] ( 7, 7.23) int -> [ebp-0x10] single-def +; V02 arg2 [V02,T11] ( 1, 1 ) int -> [ebp+0x08] single-def +; V03 loc0 [V03,T01] ( 17, 17.99) int -> ebx +; V04 loc1 [V04,T00] ( 18, 20.10) int -> [ebp-0x14] +; V05 loc2 [V05,T02] ( 6, 16.64) int -> [ebp-0x18] spill-single-def
;* V06 loc3 [V06 ] ( 0, 0 ) long -> zero-ref
-; V07 loc4 [V07,T09] ( 5, 3.56) int -> [ebp-0x1C] spill-single-def -; V08 loc5 [V08,T08] ( 2, 17.60) int -> [ebp-0x20] spill-single-def
+; V07 loc4 [V07,T08] ( 5, 3.47) int -> [ebp-0x1C] spill-single-def +; V08 loc5 [V08,T09] ( 2, 2.79) int -> [ebp-0x20] spill-single-def
;* V09 tmp0 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp1 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V12 tmp3 [V12,T00] ( 3,102.89) byref -> [ebp-0x24] spill-single-def "Inlining Arg"
+; V12 tmp3 [V12,T04] ( 3, 14.08) byref -> [ebp-0x24] spill-single-def "Inlining Arg"
;* V13 tmp4 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp6 [V15,T01] ( 3,102.89) byref -> [ebp-0x28] spill-single-def "Inlining Arg"
+; V15 tmp6 [V15,T05] ( 3, 14.08) byref -> [ebp-0x28] spill-single-def "Inlining Arg"
;* V16 tmp7 [V16 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V17 tmp8 [V17 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V18 tmp9 [V18,T11] ( 3, 1.03) byref -> ecx single-def "Inlining Arg"
+; V18 tmp9 [V18,T12] ( 3, 0.88) byref -> ecx single-def "Inlining Arg"
;* V19 tmp10 [V19 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V20 tmp11 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V21 tmp12 [V21,T10] ( 3, 1.15) byref -> ecx "Inlining Arg"
+; V21 tmp12 [V21,T10] ( 3, 1.29) byref -> ecx "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,T13] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V26 cse0 [V26,T05] ( 5, 74.50) int -> ecx "CSE - moderate"
+; V26 cse0 [V26,T03] ( 5, 16.64) int -> ecx "CSE - aggressive"
; ; Lcl frame size = 28 @@ -55,113 +55,96 @@ G_M19311_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov eax, dword ptr [ebp+0x08] mov dword ptr [ebp-0x1C], eax cmp eax, 4
- jb G_M19311_IG20
+ jb G_M19311_IG18
;; size=17 bbWeight=1 PerfScore 3.50
-G_M19311_IG03: ; bbWeight=0.45, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M19311_IG03: ; bbWeight=0.44, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
lea edx, [eax-0x04] mov dword ptr [ebp-0x20], edx
- ;; size=6 bbWeight=0.45 PerfScore 0.68 -G_M19311_IG04: ; bbWeight=19.05, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=6 bbWeight=0.44 PerfScore 0.66 +G_M19311_IG04: ; bbWeight=4.69, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, ebx
- mov eax, dword ptr [esi+2*ecx] - mov edx, dword ptr [esi+2*ecx+0x04] - mov dword ptr [ebp-0x18], edx - mov edi, edx - or edi, eax
+ mov edx, dword ptr [esi+2*ecx] + mov eax, dword ptr [esi+2*ecx+0x04] + mov dword ptr [ebp-0x18], eax + mov edi, eax + or edi, edx
test edi, 0xD1FFAB1E jne G_M19311_IG21
- ;; size=28 bbWeight=19.05 PerfScore 133.37 -G_M19311_IG05: ; bbWeight=17.15, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=28 bbWeight=4.69 PerfScore 32.85 +G_M19311_IG05: ; bbWeight=2.35, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edi, dword ptr [ebp-0x10] add ecx, edi mov bword ptr [ebp-0x24], ecx ; GC ptr vars +{V12}
- mov dword ptr [ebp-0x14], eax - test eax, 0xD1FFAB1E - je SHORT G_M19311_IG07 - ;; size=18 bbWeight=17.15 PerfScore 77.16 -G_M19311_IG06: ; bbWeight=6.86, gcVars=00000001 {V12}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx] - mov edx, 0xD1FFAB1E - ; gcrRegs +[edx] - call [<unknown method>] - ; gcrRegs -[ecx edx] - ;; size=16 bbWeight=6.86 PerfScore 24.01 -G_M19311_IG07: ; bbWeight=17.15, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov dword ptr [ebp-0x14], edx + test edx, 0xD1FFAB1E + jne G_M19311_IG20 + ;; size=23 bbWeight=2.35 PerfScore 10.56 +G_M19311_IG06: ; bbWeight=2.35, gcVars=00000010 {V12}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
mov ecx, bword ptr [ebp-0x24] ; byrRegs +[ecx]
- mov eax, dword ptr [ebp-0x14] - mov byte ptr [ecx], al - shr eax, 16 - mov byte ptr [ecx+0x01], al - lea eax, [ebx+edi+0x02] - mov bword ptr [ebp-0x28], eax
+ mov edx, dword ptr [ebp-0x14] + mov byte ptr [ecx], dl + shr edx, 16 + mov byte ptr [ecx+0x01], dl + lea edx, [ebx+edi+0x02] + mov bword ptr [ebp-0x28], edx
; GC ptr vars +{V15} test dword ptr [ebp-0x18], 0xD1FFAB1E
- je SHORT G_M19311_IG09 - ;; size=30 bbWeight=17.15 PerfScore 162.90 -G_M19311_IG08: ; bbWeight=6.86, gcVars=00000002 {V15}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+ jne SHORT G_M19311_IG19 + ;; size=30 bbWeight=2.35 PerfScore 22.29 +G_M19311_IG07: ; bbWeight=2.35, gcVars=00000020 {V15}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; byrRegs -[ecx] ; GC ptr vars -{V12}
- mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx] - mov edx, 0xD1FFAB1E - ; gcrRegs +[edx] - call [<unknown method>] - ; gcrRegs -[ecx edx] - ;; size=16 bbWeight=6.86 PerfScore 24.01 -G_M19311_IG09: ; bbWeight=17.15, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, bword ptr [ebp-0x28] - ; byrRegs +[eax] - mov edx, dword ptr [ebp-0x18] - mov byte ptr [eax], dl - shr edx, 16 - mov byte ptr [eax+0x01], dl
+ mov edx, bword ptr [ebp-0x28] + ; byrRegs +[edx] + mov eax, dword ptr [ebp-0x18] + mov byte ptr [edx], al + shr eax, 16 + mov byte ptr [edx+0x01], al
add ebx, 4 mov eax, dword ptr [ebp-0x20]
- ; byrRegs -[eax]
cmp eax, ebx
- jae SHORT G_M19311_IG19 - ;; size=24 bbWeight=17.15 PerfScore 120.03 -G_M19311_IG10: ; bbWeight=0.63, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ jae SHORT G_M19311_IG17 + ;; size=24 bbWeight=2.35 PerfScore 16.43 +G_M19311_IG08: ; bbWeight=0.59, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz + ; byrRegs -[edx]
; GC ptr vars -{V15} mov eax, dword ptr [ebp-0x1C] test al, 2
- je SHORT G_M19311_IG13 - ;; size=7 bbWeight=0.63 PerfScore 1.42 -G_M19311_IG11: ; bbWeight=0.33, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+2*ebx] - mov edx, ecx
+ je SHORT G_M19311_IG11 + ;; size=7 bbWeight=0.59 PerfScore 1.32 +G_M19311_IG09: ; bbWeight=0.29, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz + mov edx, dword ptr [esi+2*ebx]
test edx, 0xD1FFAB1E
- jne SHORT G_M19311_IG18 - ;; size=13 bbWeight=0.33 PerfScore 1.15 -G_M19311_IG12: ; bbWeight=0.17, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M19311_IG16 + ;; size=11 bbWeight=0.29 PerfScore 0.95 +G_M19311_IG10: ; bbWeight=0.15, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
lea ecx, [ebx+edi] mov byte ptr [ecx], dl shr edx, 16 mov byte ptr [ecx+0x01], dl add ebx, 2
- ;; size=14 bbWeight=0.17 PerfScore 0.56 -G_M19311_IG13: ; bbWeight=0.47, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=14 bbWeight=0.15 PerfScore 0.48 +G_M19311_IG11: ; bbWeight=0.44, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
test al, 1
- je SHORT G_M19311_IG16 - ;; size=4 bbWeight=0.47 PerfScore 0.59 -G_M19311_IG14: ; bbWeight=0.38, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M19311_IG14 + ;; size=4 bbWeight=0.44 PerfScore 0.55 +G_M19311_IG12: ; bbWeight=0.22, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
movzx edx, word ptr [esi+2*ebx] mov esi, edx cmp esi, 127
- ja SHORT G_M19311_IG16 - ;; size=11 bbWeight=0.38 PerfScore 1.33 -G_M19311_IG15: ; bbWeight=0.30, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ja SHORT G_M19311_IG14 + ;; size=11 bbWeight=0.22 PerfScore 0.77 +G_M19311_IG13: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, esi mov byte ptr [ebx+edi], dl inc ebx
- ;; size=6 bbWeight=0.30 PerfScore 0.46 -G_M19311_IG16: ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=6 bbWeight=0.18 PerfScore 0.26 +G_M19311_IG14: ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, ebx ;; size=2 bbWeight=1.00 PerfScore 0.25
-G_M19311_IG17: ; bbWeight=1.00, epilog, nogc, extend
+G_M19311_IG15: ; bbWeight=1.00, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -169,58 +152,78 @@ G_M19311_IG17: ; bbWeight=1.00, epilog, nogc, extend pop ebp ret 4 ;; size=10 bbWeight=1.00 PerfScore 4.50
-G_M19311_IG18: ; bbWeight=0.16, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M19311_IG16: ; bbWeight=0.15, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
mov dword ptr [ebp-0x10], edi
- mov eax, edx
jmp SHORT G_M19311_IG23
- ;; size=7 bbWeight=0.16 PerfScore 0.53 -G_M19311_IG19: ; bbWeight=8.57, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=5 bbWeight=0.15 PerfScore 0.44 +G_M19311_IG17: ; bbWeight=1.17, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov dword ptr [ebp-0x10], edi jmp G_M19311_IG04
- ;; size=8 bbWeight=8.57 PerfScore 25.72 -G_M19311_IG20: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=8 bbWeight=1.17 PerfScore 3.52 +G_M19311_IG18: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov edi, dword ptr [ebp-0x10]
- jmp SHORT G_M19311_IG10
+ jmp SHORT G_M19311_IG08
;; size=5 bbWeight=0.50 PerfScore 1.50
-G_M19311_IG21: ; bbWeight=0.37, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - test eax, 0xD1FFAB1E - jne SHORT G_M19311_IG23 - ;; size=7 bbWeight=0.37 PerfScore 0.46 -G_M19311_IG22: ; bbWeight=0.19, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - mov edi, dword ptr [ebp-0x10] - add ecx, edi - mov byte ptr [ecx], al - shr eax, 16 - mov byte ptr [ecx+0x01], al - mov edx, dword ptr [ebp-0x18] - mov eax, edx - add ebx, 2
...

+29 (+7.06%) : 240352.dasm - System.StartupHookProvider:ProcessStartupHooks(System.String) (FullOpts)

@@ -10,31 +10,31 @@ ; 0 inlinees with PGO data; 8 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T07] ( 7, 4.48) ref -> esi class-hnd single-def <System.String> -; V01 loc0 [V01,T09] ( 6, 3.29) ref -> edi class-hnd exact <System.String> -; V02 loc1 [V02,T06] ( 7,157.01) ref -> ebx class-hnd exact single-def <<unknown class>> -; V03 loc2 [V03,T02] ( 6,207.87) ref -> esi class-hnd exact single-def <<unknown class>> -; V04 loc3 [V04,T00] ( 9,413.59) int -> [ebp-0x10] -; V05 loc4 [V05,T03] ( 5,207.16) int -> ebx -; V06 tmp0 [V06,T10] ( 2, 3.20) ref -> edi single-def "CASTCLASS eval op1"
+; V00 arg0 [V00,T07] ( 7, 3.37) ref -> esi class-hnd single-def <System.String> +; V01 loc0 [V01,T10] ( 6, 1.94) ref -> edi class-hnd exact <System.String> +; V02 loc1 [V02,T06] ( 7, 10.00) ref -> ebx class-hnd exact single-def <<unknown class>> +; V03 loc2 [V03,T02] ( 6, 12.58) ref -> esi class-hnd exact single-def <<unknown class>> +; V04 loc3 [V04,T00] ( 9, 24.05) int -> [ebp-0x10] +; V05 loc4 [V05,T03] ( 5, 12.21) int -> ebx +; V06 tmp0 [V06,T09] ( 2, 2 ) ref -> edi single-def "CASTCLASS eval op1"
;* V07 tmp1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String>
-; V08 tmp2 [V08,T08] ( 3, 4.30) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V09 tmp3 [V09,T04] ( 2,206.44) byref -> ecx "impAppendStmt"
+; V08 tmp2 [V08,T08] ( 3, 2.22) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V09 tmp3 [V09,T04] ( 2, 11.84) byref -> ecx "impAppendStmt"
;* V10 tmp4 [V10,T17] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V11 tmp5 [V11,T16] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V12 tmp6 [V12 ] ( 2, 1.49) ushort -> [ebp-0x14] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
+; V12 tmp6 [V12 ] ( 2, 0.74) ushort -> [ebp-0x14] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
;* V13 tmp7 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-; V14 tmp8 [V14 ] ( 2, 1.49) ushort -> [ebp-0x18] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
+; V14 tmp8 [V14 ] ( 2, 0.77) ushort -> [ebp-0x18] do-not-enreg[X] addr-exposed ld-addr-op "Inlining Arg"
;* V15 tmp9 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-; V16 tmp10 [V16,T14] ( 2, 0.75) byref -> ecx single-def "field V13._reference (fldOffset=0x0)" P-INDEP -;* V17 tmp11 [V17,T18] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP -; V18 tmp12 [V18,T15] ( 2, 0.75) byref -> ecx single-def "field V15._reference (fldOffset=0x0)" P-INDEP -;* V19 tmp13 [V19,T19] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP -; V20 tmp14 [V20,T12] ( 2, 1.49) ref -> edx single-def "argument with side effect" -; V21 tmp15 [V21,T13] ( 2, 1.49) ref -> edx single-def "argument with side effect" -; V22 tmp16 [V22,T01] ( 3,309.66) ref -> edx "arr expr" -; V23 tmp17 [V23,T05] ( 2,206.44) ref -> edx "argument with side effect" -; V24 cse0 [V24,T11] ( 3, 2.15) int -> edi "CSE - moderate"
+; V16 tmp10 [V16,T15] ( 2, 0.37) byref -> ecx single-def "field V13._reference (fldOffset=0x0)" P-INDEP +;* V17 tmp11 [V17,T19] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP +; V18 tmp12 [V18,T14] ( 2, 0.38) byref -> ecx single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V19 tmp13 [V19,T18] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP +; V20 tmp14 [V20,T13] ( 2, 0.74) ref -> edx single-def "argument with side effect" +; V21 tmp15 [V21,T12] ( 2, 0.77) ref -> edx single-def "argument with side effect" +; V22 tmp16 [V22,T01] ( 3, 17.76) ref -> edx "arr expr" +; V23 tmp17 [V23,T05] ( 2, 11.84) ref -> edx "argument with side effect" +; V24 cse0 [V24,T11] ( 3, 1.11) int -> edi "CSE - moderate"
; ; Lcl frame size = 12 @@ -51,79 +51,19 @@ G_M12781_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} G_M12781_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref call [System.StartupHookProvider:get_IsSupported():ubyte] test eax, eax
- je G_M12781_IG15
+ jne G_M12781_IG10
;; size=14 bbWeight=1 PerfScore 4.25
-G_M12781_IG03: ; bbWeight=0.80, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref - mov ecx, 0xD1FFAB1E - ; gcrRegs +[ecx] - call [<unknown method>] - ; gcrRegs -[ecx] +[eax] - mov edi, eax - ; gcrRegs +[edi] - test edi, edi - je G_M12781_IG17 - ;; size=21 bbWeight=0.80 PerfScore 3.80 -G_M12781_IG04: ; bbWeight=0.40, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - cmp dword ptr [edi], 0xD1FFAB1E - jne G_M12781_IG16 - ;; size=12 bbWeight=0.40 PerfScore 1.60 -G_M12781_IG05: ; bbWeight=0.72, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, 0xD1FFAB1E ; <unknown class> - call CORINFO_HELP_NEWSFAST - ; gcrRegs +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - mov ecx, 0xD1FFAB1E - mov edx, 10 - call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS - ; gcrRegs -[eax] - mov ecx, gword ptr [D1FFAB1EH] ; static handle - ; gcrRegs +[ecx] - lea edx, bword ptr [ebx+0x04] - ; byrRegs +[edx] - call CORINFO_HELP_ASSIGN_REF_ECX - ; gcrRegs -[ecx] - ; byrRegs -[edx] - test esi, esi - je SHORT G_M12781_IG08 - ;; size=45 bbWeight=0.72 PerfScore 5.56 -G_M12781_IG06: ; bbWeight=0.37, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - cmp dword ptr [esi+0x04], 0 - je SHORT G_M12781_IG08 - test byte ptr [D1FFAB1EH], 1 ; global ptr - je G_M12781_IG20 - ;; size=19 bbWeight=0.37 PerfScore 2.98 -G_M12781_IG07: ; bbWeight=0.37, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref - movzx ecx, word ptr [D1FFAB1EH] ; static handle - mov word ptr [ebp-0x14], cx - lea ecx, bword ptr [ebp-0x14] - ; byrRegs +[ecx] - push 1 - push ecx - push 0 - mov ecx, esi - ; gcrRegs +[ecx] - ; byrRegs -[ecx] - mov edx, 0xD1FFAB1E - call [<unknown method>] - ; gcrRegs -[ecx esi] +[eax] - mov edx, eax - ; gcrRegs +[edx] - mov ecx, ebx - ; gcrRegs +[ecx] - call [<unknown method>] - ; gcrRegs -[eax ecx edx] - ;; size=42 bbWeight=0.37 PerfScore 5.03 -G_M12781_IG08: ; bbWeight=0.72, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz - test edi, edi - je SHORT G_M12781_IG11 - ;; size=4 bbWeight=0.72 PerfScore 0.90 -G_M12781_IG09: ; bbWeight=0.37, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref - test byte ptr [D1FFAB1EH], 1 ; global ptr - je G_M12781_IG21 - ;; size=13 bbWeight=0.37 PerfScore 1.49 -G_M12781_IG10: ; bbWeight=0.37, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
+G_M12781_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc + ; gcrRegs -[esi] + lea esp, [ebp-0x0C] + pop ebx + pop esi + pop edi + pop ebp + ret + ;; size=8 bbWeight=0.50 PerfScore 1.75 +G_M12781_IG04: ; bbWeight=0.19, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs +[ebx edi]
movzx ecx, word ptr [D1FFAB1EH] ; static handle mov word ptr [ebp-0x18], cx lea ecx, bword ptr [ebp-0x18] @@ -143,8 +83,8 @@ G_M12781_IG10: ; bbWeight=0.37, gcrefRegs=00000088 {ebx edi}, byrefRegs=0 ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[eax ecx edx]
- ;; size=42 bbWeight=0.37 PerfScore 5.03 -G_M12781_IG11: ; bbWeight=0.72, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+ ;; size=42 bbWeight=0.19 PerfScore 2.60 +G_M12781_IG05: ; bbWeight=0.37, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
mov edi, dword ptr [ebx+0x08] mov edx, edi mov ecx, 0xD1FFAB1E ; <unknown class> @@ -155,19 +95,19 @@ G_M12781_IG11: ; bbWeight=0.72, gcrefRegs=00000008 {ebx}, byrefRegs=00000 xor eax, eax ; gcrRegs -[eax] test edi, edi
- jle SHORT G_M12781_IG13 - ;; size=23 bbWeight=0.72 PerfScore 3.76 -G_M12781_IG12: ; bbWeight=51.61, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+ jle SHORT G_M12781_IG07 + ;; size=23 bbWeight=0.37 PerfScore 1.94 +G_M12781_IG06: ; bbWeight=2.96, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
cmp eax, dword ptr [esi+0x04]
- jae SHORT G_M12781_IG19
+ jae G_M12781_IG21
lea ecx, bword ptr [esi+8*eax+0x08] ; byrRegs +[ecx] cmp dword ptr [ebx+0x08], eax
- jbe G_M12781_IG22
+ jbe G_M12781_IG24
mov edx, gword ptr [ebx+0x04] ; gcrRegs +[edx] cmp eax, dword ptr [edx+0x04]
- jae SHORT G_M12781_IG19
+ jae G_M12781_IG21
mov dword ptr [ebp-0x10], eax mov edx, gword ptr [edx+4*eax+0x08] call [<unknown method>] @@ -177,15 +117,15 @@ G_M12781_IG12: ; bbWeight=51.61, gcrefRegs=00000048 {ebx esi}, byrefRegs= inc edi cmp dword ptr [ebx+0x08], edi mov eax, edi
- jg SHORT G_M12781_IG12 - ;; size=50 bbWeight=51.61 PerfScore 1367.65 -G_M12781_IG13: ; bbWeight=0.72, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jg SHORT G_M12781_IG06 + ;; size=58 bbWeight=2.96 PerfScore 78.44 +G_M12781_IG07: ; bbWeight=0.37, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[ebx] xor ebx, ebx cmp dword ptr [esi+0x04], 0
- jle SHORT G_M12781_IG15 - ;; size=8 bbWeight=0.72 PerfScore 3.05 -G_M12781_IG14: ; bbWeight=51.61, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jle G_M12781_IG03 + ;; size=12 bbWeight=0.37 PerfScore 1.57 +G_M12781_IG08: ; bbWeight=2.96, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
lea eax, [8*ebx] add eax, 8 add eax, esi @@ -196,55 +136,129 @@ G_M12781_IG14: ; bbWeight=51.61, gcrefRegs=00000040 {esi}, byrefRegs=0000 ; byrRegs -[eax] inc ebx cmp ebx, dword ptr [esi+0x04]
- jl SHORT G_M12781_IG14 - ;; size=29 bbWeight=51.61 PerfScore 632.22 -G_M12781_IG15: ; bbWeight=0.72, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ jl SHORT G_M12781_IG08 + ;; size=29 bbWeight=2.96 PerfScore 36.26 +G_M12781_IG09: ; bbWeight=0.37, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi]
- lea esp, [ebp-0x0C] - pop ebx - pop esi - pop edi - pop ebp - ret - ;; size=8 bbWeight=0.72 PerfScore 2.51 -G_M12781_IG16: ; bbWeight=0.20, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+ jmp G_M12781_IG03 + ;; size=5 bbWeight=0.37 PerfScore 0.74 +G_M12781_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
+ mov ecx, 0xD1FFAB1E + ; gcrRegs +[ecx] + call [<unknown method>] + ; gcrRegs -[ecx] +[eax] + mov edi, eax + ; gcrRegs +[edi] + test edi, edi + jne G_M12781_IG19 + ;; size=21 bbWeight=0.50 PerfScore 2.38 +G_M12781_IG11: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + test esi, esi + je G_M12781_IG03 + ;; size=8 bbWeight=0.50 PerfScore 0.62 +G_M12781_IG12: ; bbWeight=0.13, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + cmp dword ptr [esi+0x04], 0 + je G_M12781_IG03 + ;; size=10 bbWeight=0.13 PerfScore 0.52 +G_M12781_IG13: ; bbWeight=0.37, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz + jmp SHORT G_M12781_IG16 + ;; size=2 bbWeight=0.37 PerfScore 0.74 +G_M12781_IG14: ; bbWeight=0.37, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[esi] +[ebx] + test edi, edi
...

+30 (+10.95%) : 240294.dasm - System.Text.Unicode.Utf16Utility:GetPointerToFirstInvalidChar(uint,int,byref,byref):uint (FullOpts)

@@ -10,14 +10,14 @@ ; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 18,194.33) int -> esi -; V01 arg1 [V01,T05] ( 10, 8.84) int -> edi
+; V00 arg0 [V00,T00] ( 18, 53.59) int -> esi +; V01 arg1 [V01,T03] ( 10, 8.82) int -> edi
; V02 arg2 [V02,T12] ( 2, 1.00) byref -> [ebp+0x0C] single-def ; V03 arg3 [V03,T13] ( 2, 1.00) byref -> [ebp+0x08] single-def
-; V04 loc0 [V04,T08] ( 5, 4.52) int -> ebx
+; V04 loc0 [V04,T07] ( 5, 4.52) int -> [ebp-0x10] spill-single-def
;* V05 loc1 [V05 ] ( 0, 0 ) long -> zero-ref
-; V06 loc2 [V06,T06] ( 4, 10.06) int -> [ebp-0x10] -; V07 loc3 [V07,T02] ( 4, 49.73) int -> edi
+; V06 loc2 [V06,T08] ( 4, 2.82) int -> [ebp-0x14] +; V07 loc3 [V07,T02] ( 4, 14.45) int -> edi
;* V08 loc4 [V08 ] ( 0, 0 ) simd16 -> zero-ref <System.Runtime.Intrinsics.Vector128`1[ushort]> ;* V09 loc5 [V09 ] ( 0, 0 ) simd16 -> zero-ref <System.Runtime.Intrinsics.Vector128`1[ushort]> ;* V10 loc6 [V10 ] ( 0, 0 ) simd16 -> zero-ref <System.Runtime.Intrinsics.Vector128`1[ushort]> @@ -50,9 +50,9 @@ ;* V37 loc33 [V37 ] ( 0, 0 ) ushort -> zero-ref ;* V38 loc34 [V38 ] ( 0, 0 ) int -> zero-ref ;* V39 loc35 [V39 ] ( 0, 0 ) int -> zero-ref
-; V40 loc36 [V40,T01] ( 4, 97.32) int -> eax -; V41 tmp0 [V41,T09] ( 2, 1.04) int -> ecx -; V42 tmp1 [V42,T10] ( 2, 1.04) int -> ecx
+; V40 loc36 [V40,T01] ( 4, 15.12) int -> ebx +; V41 tmp0 [V41,T10] ( 2, 1 ) int -> ecx +; V42 tmp1 [V42,T09] ( 2, 1.04) int -> ecx
;* V43 tmp2 [V43 ] ( 0, 0 ) int -> zero-ref ;* V44 tmp3 [V44 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V45 tmp4 [V45 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" @@ -61,12 +61,12 @@ ;* V48 tmp7 [V48 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" ;* V49 tmp8 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V50 tmp9 [V50 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V51 rat0 [V51,T03] ( 8, 40.58) int -> edx "field V05.lo (fldOffset=0x0)" P-INDEP -; V52 rat1 [V52,T04] ( 8, 40.58) int -> ecx "field V05.hi (fldOffset=0x4)" P-INDEP -; V53 rat2 [V53,T11] ( 3, 1.20) byref -> edi "ReplaceWithLclVar is creating a new local variable" -; V54 rat3 [V54,T07] ( 3, 4.80) byref -> eax "ReplaceWithLclVar is creating a new local variable"
+; V51 rat0 [V51,T04] ( 8, 7.36) int -> edx "field V05.lo (fldOffset=0x0)" P-INDEP +; V52 rat1 [V52,T05] ( 8, 7.36) int -> ecx "field V05.hi (fldOffset=0x4)" P-INDEP +; V53 rat2 [V53,T11] ( 3, 1.20) byref -> ebx "ReplaceWithLclVar is creating a new local variable" +; V54 rat3 [V54,T06] ( 3, 4.80) byref -> edi "ReplaceWithLclVar is creating a new local variable"
;
-; Lcl frame size = 4
+; Lcl frame size = 8
G_M64904_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -74,50 +74,55 @@ G_M64904_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- push eax
+ sub esp, 8
mov esi, ecx mov edi, edx
- ;; size=11 bbWeight=1 PerfScore 5.75 -G_M64904_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ebx, bword ptr [ebp+0x0C] + ; byrRegs +[ebx] + ;; size=16 bbWeight=1 PerfScore 6.00 +G_M64904_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
test edi, edi jge SHORT G_M64904_IG04 ;; size=4 bbWeight=1 PerfScore 1.25
-G_M64904_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M64904_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] mov edx, 0xD1FFAB1E ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx]
- ;; size=16 bbWeight=0.80 PerfScore 2.80 -G_M64904_IG04: ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 1.75 +G_M64904_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
test esi, esi jne SHORT G_M64904_IG06
- ;; size=4 bbWeight=1.00 PerfScore 1.25 -G_M64904_IG05: ; bbWeight=0.52, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=4 bbWeight=1 PerfScore 1.25 +G_M64904_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
xor ecx, ecx test edi, edi sete cl test cl, cl
- je SHORT G_M64904_IG08 - ;; size=11 bbWeight=0.52 PerfScore 1.43 -G_M64904_IG06: ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M64904_IG09 + ;; size=11 bbWeight=0.50 PerfScore 1.38 +G_M64904_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
mov ecx, esi mov edx, edi call [<unknown method>]
- mov ebx, eax - test ebx, ebx - jl SHORT G_M64904_IG10 - ;; size=16 bbWeight=1.00 PerfScore 5.00 -G_M64904_IG07: ; bbWeight=0.52, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov dword ptr [ebp-0x10], eax + test eax, eax + jl SHORT G_M64904_IG08 + ;; size=17 bbWeight=1 PerfScore 5.75 +G_M64904_IG07: ; bbWeight=0.52, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
xor ecx, ecx
- cmp edi, ebx
+ cmp edi, eax
setge cl test cl, cl
- jne SHORT G_M64904_IG11 - jmp SHORT G_M64904_IG10
+ jne SHORT G_M64904_IG12 + jmp SHORT G_M64904_IG11
;; size=13 bbWeight=0.52 PerfScore 2.47
-G_M64904_IG08: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M64904_IG08: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz + jmp SHORT G_M64904_IG11 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M64904_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] mov edx, 0xD1FFAB1E @@ -125,17 +130,18 @@ G_M64904_IG08: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 call [<unknown method>] ; gcrRegs -[ecx edx] jmp SHORT G_M64904_IG06
- ;; size=18 bbWeight=0.80 PerfScore 4.40 -G_M64904_IG09: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=18 bbWeight=0.50 PerfScore 2.75 +G_M64904_IG10: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
xor edx, edx xor ecx, ecx
- xor ebx, ebx
+ xor eax, eax
lea edi, [esi+2*edi] cmp esi, edi
- jae SHORT G_M64904_IG18 - jmp SHORT G_M64904_IG16 - ;; size=15 bbWeight=0.80 PerfScore 3.60 -G_M64904_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ jae SHORT G_M64904_IG20 + mov bword ptr [ebp+0x0C], ebx + jmp SHORT G_M64904_IG17 + ;; size=18 bbWeight=0.80 PerfScore 4.40 +G_M64904_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] mov edx, 0xD1FFAB1E @@ -143,104 +149,114 @@ G_M64904_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} call [<unknown method>] ; gcrRegs -[ecx edx] ;; size=16 bbWeight=1 PerfScore 3.50
-G_M64904_IG11: ; bbWeight=1.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - lea esi, [esi+2*ebx] - sub edi, ebx - jne SHORT G_M64904_IG09 - ;; size=7 bbWeight=1.00 PerfScore 1.75 -G_M64904_IG12: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - mov edi, bword ptr [ebp+0x0C] - ; byrRegs +[edi]
+G_M64904_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz + mov eax, dword ptr [ebp-0x10] + lea esi, [esi+2*eax] + sub edi, eax + jne SHORT G_M64904_IG10 + ;; size=10 bbWeight=1 PerfScore 2.75 +G_M64904_IG13: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
xor eax, eax
- mov dword ptr [edi], eax - ;; size=7 bbWeight=0.20 PerfScore 0.45 -G_M64904_IG13: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref - mov dword ptr [edi+0x04], eax
+ mov dword ptr [ebx], eax + ;; size=4 bbWeight=0.20 PerfScore 0.25 +G_M64904_IG14: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref + mov dword ptr [ebx+0x04], eax
;; size=3 bbWeight=0.20 PerfScore 0.20
-G_M64904_IG14: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; byrRegs -[edi] - mov edi, bword ptr [ebp+0x08] - ; byrRegs +[edi] - mov dword ptr [edi], eax
+G_M64904_IG15: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; byrRegs -[ebx] + mov ebx, bword ptr [ebp+0x08] + ; byrRegs +[ebx] + mov dword ptr [ebx], eax
mov eax, esi ;; size=7 bbWeight=0.20 PerfScore 0.45
-G_M64904_IG15: ; bbWeight=0.20, epilog, nogc, extend - pop ecx
+G_M64904_IG16: ; bbWeight=0.20, epilog, nogc, extend + lea esp, [ebp-0x0C]
pop ebx pop esi pop edi pop ebp ret 8
- ;; size=8 bbWeight=0.20 PerfScore 0.90 -G_M64904_IG16: ; bbWeight=38.62, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - ; byrRegs -[edi] - movzx eax, word ptr [esi] - cmp eax, 127 - ja SHORT G_M64904_IG20 - ;; size=8 bbWeight=38.62 PerfScore 125.52 -G_M64904_IG17: ; bbWeight=42.91, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ;; size=10 bbWeight=0.20 PerfScore 0.90 +G_M64904_IG17: ; bbWeight=6.05, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz + ; byrRegs -[ebx] + movzx ebx, word ptr [esi] + cmp ebx, 127 + ja SHORT G_M64904_IG22 + ;; size=8 bbWeight=6.05 PerfScore 19.65 +G_M64904_IG18: ; bbWeight=12.09, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
add esi, 2 cmp esi, edi
- jb SHORT G_M64904_IG16 - ;; size=7 bbWeight=42.91 PerfScore 64.37 -G_M64904_IG18: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - mov edi, bword ptr [ebp+0x0C]
+ jb SHORT G_M64904_IG17 + ;; size=7 bbWeight=12.09 PerfScore 18.14 +G_M64904_IG19: ; bbWeight=6.05, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + mov ebx, bword ptr [ebp+0x0C] + ; byrRegs +[ebx] + ;; size=3 bbWeight=6.05 PerfScore 6.05 +G_M64904_IG20: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref + mov edi, ebx
; byrRegs +[edi]
- mov eax, edi - ; byrRegs +[eax] - mov dword ptr [eax], edx - mov dword ptr [eax+0x04], ecx - mov edi, bword ptr [ebp+0x08] - mov dword ptr [edi], ebx
+ mov dword ptr [edi], edx + mov dword ptr [edi+0x04], ecx + mov ebx, bword ptr [ebp+0x08] + mov dword ptr [ebx], eax
mov eax, esi
- ; byrRegs -[eax] - ;; size=17 bbWeight=0.80 PerfScore 4.40 -G_M64904_IG19: ; bbWeight=0.80, epilog, nogc, extend - pop ecx
+ ;; size=14 bbWeight=0.80 PerfScore 3.60
...

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.x86.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.windows.x86.checked.mch 0 0 0 0 -0 +0
benchmarks.run_tiered.windows.x86.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.windows.x86.checked.mch 52 15 20 17 -195 +233
libraries.crossgen2.windows.x86.checked.mch 0 0 0 0 -0 +0
libraries.pmi.windows.x86.checked.mch 0 0 0 0 -0 +0
libraries_tests.run.windows.x86.Release.mch 0 0 0 0 -0 +0
librariestestsnotieredcompilation.run.windows.x86.Release.mch 0 0 0 0 -0 +0
realworld.run.windows.x86.checked.mch 0 0 0 0 -0 +0
52 15 20 17 -195 +233

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x86.checked.mch 38,546 6 38,540 349 (0.90%) 349 (0.90%)
benchmarks.run_pgo.windows.x86.checked.mch 82,773 41,585 41,188 2,660 (3.11%) 2,660 (3.11%)
benchmarks.run_tiered.windows.x86.checked.mch 73,355 45,417 27,938 274 (0.37%) 274 (0.37%)
coreclr_tests.run.windows.x86.checked.mch 406,129 186,921 219,208 490 (0.12%) 493 (0.12%)
libraries.crossgen2.windows.x86.checked.mch 272,501 15 272,486 524 (0.19%) 524 (0.19%)
libraries.pmi.windows.x86.checked.mch 318,826 6 318,820 1,755 (0.55%) 1,755 (0.55%)
libraries_tests.run.windows.x86.Release.mch 49,143 31,248 17,895 483 (0.97%) 483 (0.97%)
librariestestsnotieredcompilation.run.windows.x86.Release.mch 340,001 22,425 317,576 4,067 (1.18%) 4,067 (1.18%)
realworld.run.windows.x86.checked.mch 37,443 3 37,440 417 (1.10%) 417 (1.10%)
1,618,717 327,626 1,291,091 11,019 (0.68%) 11,022 (0.68%)

jit-analyze output

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: 215108619 (overridden on cmd)
Total bytes of diff: 215108657 (overridden on cmd)
Total bytes of delta: 38 (0.00 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          51 : 240342.dasm (10.74 % of base)
          30 : 240294.dasm (10.95 % of base)
          29 : 240267.dasm (4.89 % of base)
          29 : 240352.dasm (7.06 % of base)
          18 : 240298.dasm (5.45 % of base)
          12 : 240333.dasm (3.73 % of base)
          11 : 240301.dasm (3.69 % of base)
           9 : 240368.dasm (2.90 % of base)
           9 : 240307.dasm (1.28 % of base)
           6 : 240376.dasm (3.26 % of base)
           6 : 240300.dasm (1.80 % of base)
           5 : 240328.dasm (1.01 % of base)
           4 : 240357.dasm (0.78 % of base)
           3 : 240318.dasm (1.35 % of base)
           2 : 240309.dasm (0.27 % of base)
           2 : 240339.dasm (0.31 % of base)
           2 : 240306.dasm (0.83 % of base)
           2 : 240383.dasm (3.03 % of base)
           2 : 240253.dasm (1.11 % of base)
           1 : 240349.dasm (1.00 % of base)

Top file improvements (bytes):
         -47 : 240327.dasm (-6.19 % of base)
         -31 : 240258.dasm (-8.59 % of base)
         -25 : 240297.dasm (-1.38 % of base)
         -23 : 240277.dasm (-5.82 % of base)
         -14 : 240330.dasm (-3.33 % of base)
         -12 : 240341.dasm (-4.38 % of base)
         -10 : 240369.dasm (-1.88 % of base)
          -7 : 240264.dasm (-3.59 % of base)
          -7 : 240284.dasm (-0.74 % of base)
          -6 : 240308.dasm (-0.82 % of base)
          -5 : 240340.dasm (-2.96 % of base)
          -3 : 240278.dasm (-1.60 % of base)
          -2 : 240299.dasm (-1.19 % of base)
          -2 : 240260.dasm (-1.04 % of base)
          -1 : 240373.dasm (-0.58 % of base)

35 total files with Code Size differences (15 improved, 20 regressed), 17 unchanged.

Top method regressions (bytes):
          51 (10.74 % of base) : 240342.dasm - System.RuntimeType:FilterApplyMethodBase(System.Reflection.MethodBase,int,int,int,System.Type[]):ubyte (FullOpts)
          30 (10.95 % of base) : 240294.dasm - System.Text.Unicode.Utf16Utility:GetPointerToFirstInvalidChar(uint,int,byref,byref):uint (FullOpts)
          29 (4.89 % of base) : 240267.dasm - System.Buffer:Memmove(byref,byref,uint) (FullOpts)
          29 (7.06 % of base) : 240352.dasm - System.StartupHookProvider:ProcessStartupHooks(System.String) (FullOpts)
          18 (5.45 % of base) : 240298.dasm - System.Text.Ascii:NarrowUtf16ToAscii(uint,uint,uint):uint (FullOpts)
          12 (3.73 % of base) : 240333.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:Populate(System.String,int,int):System.__Canon[]:this (FullOpts)
          11 (3.69 % of base) : 240301.dasm - System.Diagnostics.Tracing.EtwEventProvider:Register(System.Diagnostics.Tracing.EventSource):this (FullOpts)
           9 (1.28 % of base) : 240307.dasm - System.Diagnostics.Tracing.EventListener:AddEventSource(System.Diagnostics.Tracing.EventSource) (FullOpts)
           9 (2.90 % of base) : 240368.dasm - System.Runtime.Loader.AssemblyLoadContext:OnProcessExit() (FullOpts)
           6 (1.80 % of base) : 240300.dasm - System.Diagnostics.Tracing.EventProvider:.ctor(int):this (FullOpts)
           6 (3.26 % of base) : 240376.dasm - System.Diagnostics.Tracing.EventSource:Dispose(ubyte):this (FullOpts)
           5 (1.01 % of base) : 240328.dasm - System.RuntimeType:GetConstructorCandidates(System.String,int,int,System.Type[],ubyte):System.RuntimeType+ListBuilder`1[System.Reflection.ConstructorInfo]:this (FullOpts)
           4 (0.78 % of base) : 240357.dasm - JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle+DataTable:.ctor(float[],float[],int):this (FullOpts)
           3 (1.35 % of base) : 240318.dasm - System.RuntimeType:IsAssignableFrom(System.Type):ubyte:this (FullOpts)
           2 (3.03 % of base) : 240383.dasm - System.AppDomain:OnProcessExit() (FullOpts)
           2 (1.11 % of base) : 240253.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:.ctor(int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
           2 (0.83 % of base) : 240306.dasm - System.Diagnostics.Tracing.EventPipeEventProvider:Register(System.Diagnostics.Tracing.EventSource):this (FullOpts)
           2 (0.27 % of base) : 240309.dasm - System.RuntimeType:MakeGenericType(System.Type[]):System.Type:this (FullOpts)
           2 (0.31 % of base) : 240339.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:Insert(byref,System.String,int):this (FullOpts)
           1 (1.00 % of base) : 240349.dasm - System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[System.__Canon,ubyte]:MoveNext():ubyte:this (FullOpts)

Top method improvements (bytes):
         -47 (-6.19 % of base) : 240327.dasm - System.RuntimeType:GetConstructorImpl(int,System.Reflection.Binder,int,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.ConstructorInfo:this (FullOpts)
         -31 (-8.59 % of base) : 240258.dasm - System.Collections.Generic.ComparerHelpers:CreateDefaultEqualityComparer(System.Type):System.Object (FullOpts)
         -25 (-1.38 % of base) : 240297.dasm - System.Text.Unicode.Utf8Utility:TranscodeToUtf8(uint,int,uint,int,byref,byref):int (FullOpts)
         -23 (-5.82 % of base) : 240277.dasm - System.AppContext:TryGetSwitch(System.String,byref):ubyte (FullOpts)
         -14 (-3.33 % of base) : 240330.dasm - System.RuntimeType:InitializeCache():System.RuntimeType+RuntimeTypeCache:this (FullOpts)
         -12 (-4.38 % of base) : 240341.dasm - System.Array:Resize[System.__Canon](byref,int) (FullOpts)
         -10 (-1.88 % of base) : 240369.dasm - System.Diagnostics.Tracing.EventListener:DisposeOnShutdown() (FullOpts)
          -7 (-0.74 % of base) : 240284.dasm - System.Diagnostics.Tracing.EventSource:InitializeProviderMetadata():this (FullOpts)
          -7 (-3.59 % of base) : 240264.dasm - System.Runtime.CompilerServices.CastHelpers:ChkCastAny(uint,System.Object):System.Object (FullOpts)
          -6 (-0.82 % of base) : 240308.dasm - System.Diagnostics.Tracing.EventListener:Validate() (FullOpts)
          -5 (-2.96 % of base) : 240340.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:MergeWithGlobalListInOrder(System.__Canon[]):this (FullOpts)
          -3 (-1.60 % of base) : 240278.dasm - System.AppContext:GetData(System.String):System.Object (FullOpts)
          -2 (-1.04 % of base) : 240260.dasm - System.Collections.Generic.NonRandomizedStringEqualityComparer:GetStringComparer(System.Object):System.Collections.Generic.IEqualityComparer`1[System.String] (FullOpts)
          -2 (-1.19 % of base) : 240299.dasm - System.SpanHelpers:SequenceEqual(byref,byref,uint):ubyte (FullOpts)
          -1 (-0.58 % of base) : 240373.dasm - System.Runtime.CompilerServices.CastHelpers:StelemRef_Helper(byref,uint,System.Object) (FullOpts)

Top method regressions (percentages):
          30 (10.95 % of base) : 240294.dasm - System.Text.Unicode.Utf16Utility:GetPointerToFirstInvalidChar(uint,int,byref,byref):uint (FullOpts)
          51 (10.74 % of base) : 240342.dasm - System.RuntimeType:FilterApplyMethodBase(System.Reflection.MethodBase,int,int,int,System.Type[]):ubyte (FullOpts)
          29 (7.06 % of base) : 240352.dasm - System.StartupHookProvider:ProcessStartupHooks(System.String) (FullOpts)
          18 (5.45 % of base) : 240298.dasm - System.Text.Ascii:NarrowUtf16ToAscii(uint,uint,uint):uint (FullOpts)
          29 (4.89 % of base) : 240267.dasm - System.Buffer:Memmove(byref,byref,uint) (FullOpts)
          12 (3.73 % of base) : 240333.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:Populate(System.String,int,int):System.__Canon[]:this (FullOpts)
          11 (3.69 % of base) : 240301.dasm - System.Diagnostics.Tracing.EtwEventProvider:Register(System.Diagnostics.Tracing.EventSource):this (FullOpts)
           6 (3.26 % of base) : 240376.dasm - System.Diagnostics.Tracing.EventSource:Dispose(ubyte):this (FullOpts)
           2 (3.03 % of base) : 240383.dasm - System.AppDomain:OnProcessExit() (FullOpts)
           9 (2.90 % of base) : 240368.dasm - System.Runtime.Loader.AssemblyLoadContext:OnProcessExit() (FullOpts)
           6 (1.80 % of base) : 240300.dasm - System.Diagnostics.Tracing.EventProvider:.ctor(int):this (FullOpts)
           3 (1.35 % of base) : 240318.dasm - System.RuntimeType:IsAssignableFrom(System.Type):ubyte:this (FullOpts)
           9 (1.28 % of base) : 240307.dasm - System.Diagnostics.Tracing.EventListener:AddEventSource(System.Diagnostics.Tracing.EventSource) (FullOpts)
           2 (1.11 % of base) : 240253.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:.ctor(int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
           5 (1.01 % of base) : 240328.dasm - System.RuntimeType:GetConstructorCandidates(System.String,int,int,System.Type[],ubyte):System.RuntimeType+ListBuilder`1[System.Reflection.ConstructorInfo]:this (FullOpts)
           1 (1.00 % of base) : 240349.dasm - System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[System.__Canon,ubyte]:MoveNext():ubyte:this (FullOpts)
           2 (0.83 % of base) : 240306.dasm - System.Diagnostics.Tracing.EventPipeEventProvider:Register(System.Diagnostics.Tracing.EventSource):this (FullOpts)
           4 (0.78 % of base) : 240357.dasm - JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle+DataTable:.ctor(float[],float[],int):this (FullOpts)
           2 (0.31 % of base) : 240339.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:Insert(byref,System.String,int):this (FullOpts)
           2 (0.27 % of base) : 240309.dasm - System.RuntimeType:MakeGenericType(System.Type[]):System.Type:this (FullOpts)

Top method improvements (percentages):
         -31 (-8.59 % of base) : 240258.dasm - System.Collections.Generic.ComparerHelpers:CreateDefaultEqualityComparer(System.Type):System.Object (FullOpts)
         -47 (-6.19 % of base) : 240327.dasm - System.RuntimeType:GetConstructorImpl(int,System.Reflection.Binder,int,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.ConstructorInfo:this (FullOpts)
         -23 (-5.82 % of base) : 240277.dasm - System.AppContext:TryGetSwitch(System.String,byref):ubyte (FullOpts)
         -12 (-4.38 % of base) : 240341.dasm - System.Array:Resize[System.__Canon](byref,int) (FullOpts)
          -7 (-3.59 % of base) : 240264.dasm - System.Runtime.CompilerServices.CastHelpers:ChkCastAny(uint,System.Object):System.Object (FullOpts)
         -14 (-3.33 % of base) : 240330.dasm - System.RuntimeType:InitializeCache():System.RuntimeType+RuntimeTypeCache:this (FullOpts)
          -5 (-2.96 % of base) : 240340.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:MergeWithGlobalListInOrder(System.__Canon[]):this (FullOpts)
         -10 (-1.88 % of base) : 240369.dasm - System.Diagnostics.Tracing.EventListener:DisposeOnShutdown() (FullOpts)
          -3 (-1.60 % of base) : 240278.dasm - System.AppContext:GetData(System.String):System.Object (FullOpts)
         -25 (-1.38 % of base) : 240297.dasm - System.Text.Unicode.Utf8Utility:TranscodeToUtf8(uint,int,uint,int,byref,byref):int (FullOpts)
          -2 (-1.19 % of base) : 240299.dasm - System.SpanHelpers:SequenceEqual(byref,byref,uint):ubyte (FullOpts)
          -2 (-1.04 % of base) : 240260.dasm - System.Collections.Generic.NonRandomizedStringEqualityComparer:GetStringComparer(System.Object):System.Collections.Generic.IEqualityComparer`1[System.String] (FullOpts)
          -6 (-0.82 % of base) : 240308.dasm - System.Diagnostics.Tracing.EventListener:Validate() (FullOpts)
          -7 (-0.74 % of base) : 240284.dasm - System.Diagnostics.Tracing.EventSource:InitializeProviderMetadata():this (FullOpts)
          -1 (-0.58 % of base) : 240373.dasm - System.Runtime.CompilerServices.CastHelpers:StelemRef_Helper(byref,uint,System.Object) (FullOpts)

35 total methods with Code Size differences (15 improved, 20 regressed).