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).